diff options
author | Sebastian <sebasjm@gmail.com> | 2021-12-06 15:27:20 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2021-12-06 15:27:25 -0300 |
commit | caa9a22d6970df331eebed032b9a9673d4217fc6 (patch) | |
tree | ec28516bb7330b3c843c595d9b3580ec76f7f0a0 /packages/taler-wallet-webextension/src/utils | |
parent | ce3ffbcd81b67c4a8e869b3392e6fdce44888300 (diff) | |
download | wallet-core-caa9a22d6970df331eebed032b9a9673d4217fc6.tar.xz |
check timeout when doing a query to /keys to add an exchange
Diffstat (limited to 'packages/taler-wallet-webextension/src/utils')
-rw-r--r-- | packages/taler-wallet-webextension/src/utils/index.ts | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/packages/taler-wallet-webextension/src/utils/index.ts b/packages/taler-wallet-webextension/src/utils/index.ts index 8eb89d58f..88f9bc4b3 100644 --- a/packages/taler-wallet-webextension/src/utils/index.ts +++ b/packages/taler-wallet-webextension/src/utils/index.ts @@ -43,14 +43,37 @@ export async function queryToSlashConfig<T>( .then(getJsonIfOk); } +function timeout<T>(ms: number, promise: Promise<T>): Promise<T> { + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + reject(new Error(`Timeout: the query took longer than ${Math.floor(ms / 1000)} secs`)) + }, ms) + + promise + .then(value => { + clearTimeout(timer) + resolve(value) + }) + .catch(reason => { + clearTimeout(timer) + reject(reason) + }) + }) +} + export async function queryToSlashKeys<T>( url: string, ): Promise<T> { - return fetch(new URL("keys", url).href) + const endpoint = new URL("keys", url) + endpoint.searchParams.set("cacheBreaker", new Date().getTime() + ""); + + const query = fetch(endpoint.href) .catch(() => { throw new Error(`Network error`); }) .then(getJsonIfOk); + + return timeout(3000, query) } export function buildTermsOfServiceState(tos: GetExchangeTosResult): TermsState { |