From e85915f61acb3c7847579b4410b8b69bc5383f36 Mon Sep 17 00:00:00 2001 From: Angel Castillo Date: Thu, 3 Oct 2024 06:55:17 +0800 Subject: [PATCH] fix(extension): debounce on CIP-30 endpoint calls now starts after first event --- .../src/lib/scripts/background/cip30.ts | 82 +++++++++++-------- .../lib/scripts/background/requestAccess.ts | 2 +- 2 files changed, 48 insertions(+), 36 deletions(-) diff --git a/apps/browser-extension-wallet/src/lib/scripts/background/cip30.ts b/apps/browser-extension-wallet/src/lib/scripts/background/cip30.ts index f8795e9b0..374981be5 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/background/cip30.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/background/cip30.ts @@ -43,42 +43,54 @@ export const confirmationCallback: walletCip30.CallbackConfirmation = { // Also transactions can be submitted by the dApps externally // once they've got the witnesss keys if they construct their own transactions Promise.resolve(true), - signTx: pDebounce(async () => { - try { - const tab = await ensureUiIsOpenAndLoaded({ walletManager, walletRepository }, '#/dapp/sign-tx'); - const ready = await userPromptService.readyToSignTx(); - if (!ready) return false; - return cancelOnTabClose(tab); - } catch (error) { - console.error(error); - return Promise.reject(new ApiError(APIErrorCode.InternalError, 'Unable to sign transaction')); - } - }, DEBOUNCE_THROTTLE), - signData: pDebounce(async () => { - try { - const tab = await ensureUiIsOpenAndLoaded({ walletManager, walletRepository }, '#/dapp/sign-data'); - const ready = await userPromptService.readyToSignData(); - if (!ready) return false; - return cancelOnTabClose(tab); - } catch (error) { - console.error(error); - // eslint-disable-next-line unicorn/no-useless-undefined - return Promise.reject(new ApiError(APIErrorCode.InternalError, 'Unable to sign data')); - } - }, DEBOUNCE_THROTTLE), - getCollateral: pDebounce(async (args) => { - try { - const dappInfo = await senderToDappInfo(args.sender); - dappSetCollateral$.next({ dappInfo, collateralRequest: args.data }); - await ensureUiIsOpenAndLoaded({ walletManager, walletRepository }, '#/dapp/set-collateral'); + signTx: pDebounce( + async () => { + try { + const tab = await ensureUiIsOpenAndLoaded({ walletManager, walletRepository }, '#/dapp/sign-tx'); + const ready = await userPromptService.readyToSignTx(); + if (!ready) return false; + return cancelOnTabClose(tab); + } catch (error) { + console.error(error); + return Promise.reject(new ApiError(APIErrorCode.InternalError, 'Unable to sign transaction')); + } + }, + DEBOUNCE_THROTTLE, + { before: true } + ), + signData: pDebounce( + async () => { + try { + const tab = await ensureUiIsOpenAndLoaded({ walletManager, walletRepository }, '#/dapp/sign-data'); + const ready = await userPromptService.readyToSignData(); + if (!ready) return false; + return cancelOnTabClose(tab); + } catch (error) { + console.error(error); + // eslint-disable-next-line unicorn/no-useless-undefined + return Promise.reject(new ApiError(APIErrorCode.InternalError, 'Unable to sign data')); + } + }, + DEBOUNCE_THROTTLE, + { before: true } + ), + getCollateral: pDebounce( + async (args) => { + try { + const dappInfo = await senderToDappInfo(args.sender); + dappSetCollateral$.next({ dappInfo, collateralRequest: args.data }); + await ensureUiIsOpenAndLoaded({ walletManager, walletRepository }, '#/dapp/set-collateral'); - return userPromptService.getCollateralRequest(); - } catch (error) { - // eslint-disable-next-line unicorn/no-useless-undefined - dappSetCollateral$.next(undefined); - throw new Error(error); - } - }, DEBOUNCE_THROTTLE) + return userPromptService.getCollateralRequest(); + } catch (error) { + // eslint-disable-next-line unicorn/no-useless-undefined + dappSetCollateral$.next(undefined); + throw new Error(error); + } + }, + DEBOUNCE_THROTTLE, + { before: true } + ) }; const walletApi = walletCip30.createWalletApi( diff --git a/apps/browser-extension-wallet/src/lib/scripts/background/requestAccess.ts b/apps/browser-extension-wallet/src/lib/scripts/background/requestAccess.ts index 761774a57..b567732a7 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/background/requestAccess.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/background/requestAccess.ts @@ -42,4 +42,4 @@ export const requestAccess: RequestAccess = async (sender: Runtime.MessageSender return Promise.resolve(true); }; -export const requestAccessDebounced = pDebounce(requestAccess, DEBOUNCE_THROTTLE); +export const requestAccessDebounced = pDebounce(requestAccess, DEBOUNCE_THROTTLE, { before: true });