diff options
Diffstat (limited to 'packages/taler-wallet-webextension/src/platform/api.ts')
-rw-r--r-- | packages/taler-wallet-webextension/src/platform/api.ts | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/packages/taler-wallet-webextension/src/platform/api.ts b/packages/taler-wallet-webextension/src/platform/api.ts index 37546d2df..7df190303 100644 --- a/packages/taler-wallet-webextension/src/platform/api.ts +++ b/packages/taler-wallet-webextension/src/platform/api.ts @@ -15,6 +15,8 @@ */ import { CoreApiResponse, NotificationType } from "@gnu-taler/taler-util"; +import { WalletOperations } from "@gnu-taler/taler-wallet-core"; +import { BackgroundOperations } from "../wxApi.js"; export interface Permissions { /** @@ -50,6 +52,30 @@ export type MessageFromBackend = { type: NotificationType; }; +export type MessageFromFrontend< + Op extends BackgroundOperations | WalletOperations, +> = Op extends BackgroundOperations + ? MessageFromFrontendBackground<keyof BackgroundOperations> + : Op extends WalletOperations + ? MessageFromFrontendWallet<keyof WalletOperations> + : never; + +export type MessageFromFrontendBackground< + Op extends keyof BackgroundOperations, +> = { + channel: "background"; + operation: Op; + payload: BackgroundOperations[Op]["request"]; +}; + +export type MessageFromFrontendWallet<Op extends keyof WalletOperations> = { + channel: "wallet"; + operation: Op; + payload: WalletOperations[Op]["request"]; +}; + +export type MessageResponse = CoreApiResponse; + export interface WalletWebExVersion { version_name?: string | undefined; version: string; @@ -183,10 +209,9 @@ export interface PlatformAPI { * * @return response from the backend */ - sendMessageToWalletBackground( - operation: string, - payload: any, - ): Promise<CoreApiResponse>; + sendMessageToBackground<Op extends WalletOperations | BackgroundOperations>( + message: MessageFromFrontend<Op>, + ): Promise<MessageResponse>; /** * Used from the frontend to receive notifications about new information @@ -204,11 +229,9 @@ export interface PlatformAPI { * @param onNewMessage */ listenToAllChannels( - onNewMessage: ( - message: any, - sender: any, - sendResponse: (r: CoreApiResponse) => void, - ) => void, + notifyNewMessage: <Op extends WalletOperations | BackgroundOperations>( + message: MessageFromFrontend<Op> & { id: string }, + ) => Promise<MessageResponse>, ): void; /** |