summaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/wxApi.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/taler-wallet-webextension/src/wxApi.ts')
-rw-r--r--packages/taler-wallet-webextension/src/wxApi.ts135
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,
},