From 4a781bd0dd8828ce152f6ab2c3f1bbd6b5e826f7 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Mon, 9 Jan 2023 20:20:09 -0300 Subject: fix #7153: more error handling if handler do not trap error then fail at compile time, all safe handlers push alert on error errors are typed so they render good information --- .../taler-wallet-webextension/src/mui/handlers.ts | 40 ++++++++++++++++++---- 1 file changed, 34 insertions(+), 6 deletions(-) (limited to 'packages/taler-wallet-webextension/src/mui') diff --git a/packages/taler-wallet-webextension/src/mui/handlers.ts b/packages/taler-wallet-webextension/src/mui/handlers.ts index 655fceef9..61786742f 100644 --- a/packages/taler-wallet-webextension/src/mui/handlers.ts +++ b/packages/taler-wallet-webextension/src/mui/handlers.ts @@ -14,23 +14,51 @@ GNU Taler; see the file COPYING. If not, see */ import { AmountJson } from "@gnu-taler/taler-util"; -import { TalerError } from "@gnu-taler/taler-wallet-core"; export interface TextFieldHandler { - onInput?: (value: string) => Promise; + onInput?: SafeHandler; value: string; error?: string; } export interface AmountFieldHandler { - onInput?: (value: AmountJson) => Promise; + onInput?: SafeHandler; value: AmountJson; error?: string; } +declare const __safe_handler: unique symbol; +export type SafeHandler = { + (req: Req): Promise; + (): Promise; + [__safe_handler]: true; +}; + +export function withSafe( + handler: (p: T) => Promise, + onError: (e: Error) => void, +): SafeHandler { + const sh = async function (p: T): Promise { + try { + await handler(p); + } catch (e) { + if (e instanceof Error) { + onError(e); + } else { + onError(new Error(String(e))); + } + } + }; + return sh as SafeHandler; +} + +export const nullFunction = async function (): Promise { + //do nothing +} as SafeHandler; + export interface ButtonHandler { - onClick?: () => Promise; - error?: TalerError; + onClick?: SafeHandler; + // error?: TalerError; } export interface ToggleHandler { @@ -39,7 +67,7 @@ export interface ToggleHandler { } export interface SelectFieldHandler { - onChange?: (value: string) => Promise; + onChange?: SafeHandler; error?: string; value: string; isDirty?: boolean; -- cgit v1.2.3