aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/utils
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-12-06 15:27:20 -0300
committerSebastian <sebasjm@gmail.com>2021-12-06 15:27:25 -0300
commitcaa9a22d6970df331eebed032b9a9673d4217fc6 (patch)
treeec28516bb7330b3c843c595d9b3580ec76f7f0a0 /packages/taler-wallet-webextension/src/utils
parentce3ffbcd81b67c4a8e869b3392e6fdce44888300 (diff)
downloadwallet-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.ts25
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 {