diff options
author | Sebastian <sebasjm@gmail.com> | 2024-04-05 10:42:41 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2024-04-05 10:42:41 -0300 |
commit | 89dde053665d39be8367c25691efc008fc2a5cc7 (patch) | |
tree | 8f4175094b82d33bcda1948c0a760c0bc8962284 /packages/web-util/src/context/bank-api.ts | |
parent | 70151490bd79d38f8064b720fc124d1774a18235 (diff) | |
download | wallet-core-89dde053665d39be8367c25691efc008fc2a5cc7.tar.xz |
fix #7924
Diffstat (limited to 'packages/web-util/src/context/bank-api.ts')
-rw-r--r-- | packages/web-util/src/context/bank-api.ts | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/packages/web-util/src/context/bank-api.ts b/packages/web-util/src/context/bank-api.ts index d2938f150..3f6a32f4b 100644 --- a/packages/web-util/src/context/bank-api.ts +++ b/packages/web-util/src/context/bank-api.ts @@ -74,6 +74,8 @@ type ConfigResult<T> = | { type: "incompatible"; result: T; supported: string } | { type: "error"; error: TalerError }; +const CONFIG_FAIL_TRY_AGAIN_MS = 5000; + export const BankApiProvider = ({ baseUrl, children, @@ -93,8 +95,10 @@ export const BankApiProvider = ({ buildBankApiClient(baseUrl, evictors); useEffect(() => { - getRemoteConfig() - .then((config) => { + let keepRetrying = true; + async function testConfig(): Promise<void> { + try { + const config = await getRemoteConfig(); if (LibtoolVersion.compare(VERSION, config.version)) { setChecked({ type: "ok", config, hints: [] }); } else { @@ -104,12 +108,24 @@ export const BankApiProvider = ({ supported: VERSION, }); } - }) - .catch((error: unknown) => { + } catch (error) { if (error instanceof TalerError) { + if (keepRetrying) { + setTimeout(() => { + testConfig(); + }, CONFIG_FAIL_TRY_AGAIN_MS); + } setChecked({ type: "error", error }); + } else { + setChecked({ type: "error", error: TalerError.fromException(error) }); } - }); + } + } + testConfig(); + return () => { + // on unload, stop retry + keepRetrying = false; + }; }, []); if (checked === undefined) { |