diff options
Diffstat (limited to 'packages/taler-wallet-webextension/src/wxApi.ts')
-rw-r--r-- | packages/taler-wallet-webextension/src/wxApi.ts | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts index 5c2a577b3..a41372e37 100644 --- a/packages/taler-wallet-webextension/src/wxApi.ts +++ b/packages/taler-wallet-webextension/src/wxApi.ts @@ -25,6 +25,8 @@ import { CoreApiResponse, Logger, NotificationType, + TalerErrorCode, + TalerErrorDetail, WalletDiagnostics, } from "@gnu-taler/taler-util"; import { @@ -33,11 +35,14 @@ import { WalletCoreOpKeys, WalletCoreRequestType, WalletCoreResponseType, + WalletOperations, } from "@gnu-taler/taler-wallet-core"; -import { MessageFromBackend, MessageFromFrontendBackground, MessageFromFrontendWallet } from "./platform/api.js"; import { - platform, -} from "./platform/foreground.js"; + MessageFromBackend, + MessageFromFrontendBackground, + MessageFromFrontendWallet, +} from "./platform/api.js"; +import { platform } from "./platform/foreground.js"; /** * @@ -88,6 +93,25 @@ export interface BackgroundApiClient { ): Promise<BackgroundOperations[Op]["response"]>; } +export class WalletError extends Error { + public errorDetail: TalerError; + + constructor(op: string, e: TalerError) { + super(`Wallet operation "${op}" failed: ${e.message}`); + this.errorDetail = e; + // Object.setPrototypeOf(this, WalletError.prototype); + } +} +export class BackgroundError extends Error { + public errorDetail: TalerErrorDetail; + + constructor(op: string, e: TalerErrorDetail) { + super(`Background operation "${op}" failed: ${e.message}`); + this.errorDetail = e; + // Object.setPrototypeOf(this, BackgroundError.prototype); + } +} + /** * BackgroundApiClient integration with browser platform */ @@ -106,13 +130,18 @@ class BackgroundApiClientImpl implements BackgroundApiClient { try { response = await platform.sendMessageToBackground(message); - } catch (e) { + } catch (error) { console.log("Error calling backend"); - throw new Error(`Error contacting backend: ${e}`); + if (error instanceof Error) { + throw new BackgroundError(operation, { + code: TalerErrorCode.GENERIC_UNEXPECTED_REQUEST_ERROR, + }); + } + throw error; } logger.info("got response", response); if (response.type === "error") { - throw TalerError.fromUncheckedDetail(response.error); + throw new BackgroundError(operation, response.error); } return response.result as any; } @@ -140,7 +169,8 @@ class WalletApiClientImpl implements WalletCoreApiClient { } logger.info("got response", response); if (response.type === "error") { - throw TalerError.fromUncheckedDetail(response.error); + const error = TalerError.fromUncheckedDetail(response.error); + throw new WalletError(operation, error); } return response.result as any; } |