diff options
author | Fabio Berger <me@fabioberger.com> | 2018-07-17 18:06:35 +0800 |
---|---|---|
committer | Fabio Berger <me@fabioberger.com> | 2018-07-17 18:06:35 +0800 |
commit | 03a6a088c5f1a086c1f3f02a0a70edaea3603860 (patch) | |
tree | bbe67afd2ad3d902444da65964c7401c9d38d63d /packages/utils | |
parent | 1e787a764615bd3df839f2cb117b711be297b9d5 (diff) | |
parent | a9038f2afc974cecf567a9aef50267d29a995e02 (diff) | |
download | dexon-sol-tools-03a6a088c5f1a086c1f3f02a0a70edaea3603860.tar dexon-sol-tools-03a6a088c5f1a086c1f3f02a0a70edaea3603860.tar.gz dexon-sol-tools-03a6a088c5f1a086c1f3f02a0a70edaea3603860.tar.bz2 dexon-sol-tools-03a6a088c5f1a086c1f3f02a0a70edaea3603860.tar.lz dexon-sol-tools-03a6a088c5f1a086c1f3f02a0a70edaea3603860.tar.xz dexon-sol-tools-03a6a088c5f1a086c1f3f02a0a70edaea3603860.tar.zst dexon-sol-tools-03a6a088c5f1a086c1f3f02a0a70edaea3603860.zip |
Merge branch 'v2-prototype' into fix-order-watcher
* v2-prototype: (39 commits)
Add chris to website
Fix ocean link
Move update onboarding step tracking to onboarding flow code
Bump npm-run-all from 4.1.2 to 4.1.3
Move format to helper function
Fix linter
Add assertion to make sure caller to fetchAsync isn't trying to set timeout in a context-specific way
Fix linter issues
Remove unused import
Switch conditional
Update yarn.lock and artifact
Fix abi-gen tests to not rely on sleep, since it causes intermittent failures
Add missing assertion
Move type defs to typescript-typingsd
Fix linter
Make createFinalPayload protected
Replace process.browser with detect-node library
Export Web3ProviderEngine and RPCSubprovider from 0x.js
Export Web3ProviderEngine from subproviders package
Update deps
...
Diffstat (limited to 'packages/utils')
-rw-r--r-- | packages/utils/package.json | 5 | ||||
-rw-r--r-- | packages/utils/src/fetchAsync.ts | 37 | ||||
-rw-r--r-- | packages/utils/src/index.ts | 1 |
3 files changed, 41 insertions, 2 deletions
diff --git a/packages/utils/package.json b/packages/utils/package.json index 9168a3538..a454b35ee 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -35,14 +35,15 @@ "typescript": "2.7.1" }, "dependencies": { - "ethereum-types": "^0.0.2", + "@0xproject/types": "^1.0.0", "@0xproject/typescript-typings": "^0.4.2", "@types/node": "^8.0.53", - "ethereumjs-util": "^5.1.1", "bignumber.js": "~4.1.0", + "detect-node": "2.0.3", "ethereum-types": "^0.0.2", "ethereumjs-util": "^5.1.1", "ethers": "3.0.22", + "isomorphic-fetch": "^2.2.1", "js-sha3": "^0.7.0", "lodash": "^4.17.4" }, 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'; |