blob: c02e5babaa38b1d74364edd230e14873ca626a79 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import isNode = require('detect-node');
import 'isomorphic-fetch';
export const fetchAsync = async (
endpoint: string,
options: RequestInit = {},
timeoutMs: number = 20000,
): Promise<Response> => {
if (options.signal || (options as any).timeout) {
throw new Error(
'Cannot call fetchAsync with options.signal or options.timeout. To set a timeout, please use the supplied "timeoutMs" parameter.',
);
}
let optionsWithAbortParam;
if (!isNode) {
const controller = new AbortController();
const signal = controller.signal;
setTimeout(() => {
controller.abort();
}, timeoutMs);
optionsWithAbortParam = {
signal,
...options,
};
} else {
// HACK: the `timeout` param only exists in `node-fetch`, and not on the `isomorphic-fetch`
// `RequestInit` type. Since `isomorphic-fetch` conditionally wraps `node-fetch` when the
// execution environment is `Node.js`, we need to cast it to `any` in that scenario.
optionsWithAbortParam = {
timeout: timeoutMs,
...options,
} as any;
}
const response = await fetch(endpoint, optionsWithAbortParam);
return response;
};
|