diff options
author | fragosti <francesco.agosti93@gmail.com> | 2018-07-14 02:15:50 +0800 |
---|---|---|
committer | fragosti <francesco.agosti93@gmail.com> | 2018-07-14 02:15:50 +0800 |
commit | b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462 (patch) | |
tree | d011565b1c95d4682381f8f573afadf98911e396 /packages/utils/src | |
parent | c5fcdd06579b67b5b129749474acd9a4d1d4db65 (diff) | |
parent | 26363931ed8ba35a55073d00c4fe128c7e616acc (diff) | |
download | dexon-sol-tools-b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462.tar dexon-sol-tools-b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462.tar.gz dexon-sol-tools-b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462.tar.bz2 dexon-sol-tools-b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462.tar.lz dexon-sol-tools-b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462.tar.xz dexon-sol-tools-b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462.tar.zst dexon-sol-tools-b70f5d1a1efcb3b07673aa3b4bc7bc2318f55462.zip |
Merge branch 'v2-prototype' of https://github.com/0xProject/0x-monorepo into bug/website/txhash-error
Diffstat (limited to 'packages/utils/src')
-rw-r--r-- | packages/utils/src/fetchAsync.ts | 37 | ||||
-rw-r--r-- | packages/utils/src/index.ts | 1 |
2 files changed, 38 insertions, 0 deletions
diff --git a/packages/utils/src/fetchAsync.ts b/packages/utils/src/fetchAsync.ts new file mode 100644 index 000000000..c02e5baba --- /dev/null +++ b/packages/utils/src/fetchAsync.ts @@ -0,0 +1,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; +}; diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index fd102cecb..b8e0b1775 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -8,3 +8,4 @@ export { logUtils } from './log_utils'; export { abiUtils } from './abi_utils'; export { NULL_BYTES } from './constants'; export { errorUtils } from './error_utils'; +export { fetchAsync } from './fetchAsync'; |