diff options
author | Sebastian <sebasjm@gmail.com> | 2022-12-21 16:21:25 -0300 |
---|---|---|
committer | Sebastian <sebasjm@gmail.com> | 2022-12-21 16:24:18 -0300 |
commit | 7873571d225347aa2174b6d8943d9df820f8817c (patch) | |
tree | 44bea29c1e2d0b270d745e8eaf0247d477d50b8c /packages/taler-wallet-webextension/src/wxApi.ts | |
parent | 8a98a5f880b9559312779232b6086016c008969b (diff) | |
download | wallet-core-7873571d225347aa2174b6d8943d9df820f8817c.tar.xz |
add typecheck to background operations
Diffstat (limited to 'packages/taler-wallet-webextension/src/wxApi.ts')
-rw-r--r-- | packages/taler-wallet-webextension/src/wxApi.ts | 135 |
1 files changed, 71 insertions, 64 deletions
diff --git a/packages/taler-wallet-webextension/src/wxApi.ts b/packages/taler-wallet-webextension/src/wxApi.ts index 991cbb5fe..ea087fc5d 100644 --- a/packages/taler-wallet-webextension/src/wxApi.ts +++ b/packages/taler-wallet-webextension/src/wxApi.ts @@ -34,70 +34,100 @@ import { WalletCoreRequestType, WalletCoreResponseType, } from "@gnu-taler/taler-wallet-core"; -import { MessageFromBackend, platform } from "./platform/api.js"; -import { nullFunction } from "./test-utils.js"; +import { + MessageFromBackend, + MessageFromFrontendBackground, + MessageFromFrontendWallet, + platform, +} from "./platform/api.js"; /** * - * @author Florian Dold * @author sebasjm */ +const logger = new Logger("wxApi"); + export interface ExtendedPermissionsResponse { newValue: boolean; } -const logger = new Logger("wxApi"); -/** - * Response with information about available version upgrades. - */ -export interface UpgradeResponse { - /** - * Is a reset required because of a new DB version - * that can't be automatically upgraded? - */ - dbResetRequired: boolean; - - /** - * Current database version. - */ - currentDbVersion: string; - - /** - * Old db version (if applicable). - */ - oldDbVersion: string; +export interface BackgroundOperations { + resetDb: { + request: void; + response: void; + }; + containsHeaderListener: { + request: void; + response: ExtendedPermissionsResponse; + }; + getDiagnostics: { + request: void; + response: WalletDiagnostics; + }; + toggleHeaderListener: { + request: boolean; + response: ExtendedPermissionsResponse; + }; + runGarbageCollector: { + request: void; + response: void; + }; +} + +export interface BackgroundApiClient { + call<Op extends keyof BackgroundOperations>( + operation: Op, + payload: BackgroundOperations[Op]["request"], + ): Promise<BackgroundOperations[Op]["response"]>; } /** - * @deprecated Use {@link WxWalletCoreApiClient} instead. + * BackgroundApiClient integration with browser platform */ -async function callBackend(operation: string, payload: any): Promise<any> { - let response: CoreApiResponse; - try { - response = await platform.sendMessageToWalletBackground(operation, payload); - } catch (e) { - console.log("Error calling backend"); - throw new Error(`Error contacting backend: ${e}`); - } - logger.info("got response", response); - if (response.type === "error") { - throw TalerError.fromUncheckedDetail(response.error); +class BackgroundApiClientImpl implements BackgroundApiClient { + async call<Op extends keyof BackgroundOperations>( + operation: Op, + payload: BackgroundOperations[Op]["request"], + ): Promise<BackgroundOperations[Op]["response"]> { + let response: CoreApiResponse; + + const message: MessageFromFrontendBackground<Op> = { + channel: "background", + operation, + payload, + }; + + try { + response = await platform.sendMessageToBackground(message); + } catch (e) { + console.log("Error calling backend"); + throw new Error(`Error contacting backend: ${e}`); + } + logger.info("got response", response); + if (response.type === "error") { + throw TalerError.fromUncheckedDetail(response.error); + } + return response.result as any; } - return response.result; } -export class WxWalletCoreApiClient implements WalletCoreApiClient { +/** + * WalletCoreApiClient integration with browser platform + */ +class WalletApiClientImpl implements WalletCoreApiClient { async call<Op extends WalletCoreOpKeys>( operation: Op, payload: WalletCoreRequestType<Op>, ): Promise<WalletCoreResponseType<Op>> { let response: CoreApiResponse; try { - response = await platform.sendMessageToWalletBackground( + const message: MessageFromFrontendWallet<Op> = { + channel: "wallet", operation, payload, - ); + }; + response = await platform.sendMessageToBackground(message); } catch (e) { console.log("Error calling backend"); throw new Error(`Error contacting backend: ${e}`); @@ -110,29 +140,6 @@ export class WxWalletCoreApiClient implements WalletCoreApiClient { } } -export class BackgroundApiClient { - public resetDb(): Promise<void> { - return callBackend("reset-db", {}); - } - - public containsHeaderListener(): Promise<ExtendedPermissionsResponse> { - return callBackend("containsHeaderListener", {}); - } - - public getDiagnostics(): Promise<WalletDiagnostics> { - return callBackend("wxGetDiagnostics", {}); - } - - public toggleHeaderListener( - value: boolean, - ): Promise<ExtendedPermissionsResponse> { - return callBackend("toggleHeaderListener", { value }); - } - - public runGarbageCollector(): Promise<void> { - return callBackend("run-gc", {}); - } -} function onUpdateNotification( messageTypes: Array<NotificationType>, doCallback: undefined | (() => void), @@ -160,8 +167,8 @@ export type WxApiType = { }; export const wxApi = { - wallet: new WxWalletCoreApiClient(), - background: new BackgroundApiClient(), + wallet: new WalletApiClientImpl(), + background: new BackgroundApiClientImpl(), listener: { onUpdateNotification, }, |