From c95abd0f0c4d1a4deb8554e8cc781d4d79821caf Mon Sep 17 00:00:00 2001 From: heisenberg <110591045+heisenberg-2077@users.noreply.github.com> Date: Thu, 23 Jan 2025 11:11:24 +0800 Subject: [PATCH] fix: bitbox02 does not work in Firefox (#2735) * fix: bitbox02 does not work in Firefox * Update bridge.ts --- src/background/controller/wallet.ts | 16 +++++++++------- src/background/service/keyring/bridge.ts | 16 ++++++++-------- src/background/service/keyring/index.ts | 10 +++++----- 3 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/background/controller/wallet.ts b/src/background/controller/wallet.ts index 5b2cc7e8560..721d7178df5 100644 --- a/src/background/controller/wallet.ts +++ b/src/background/controller/wallet.ts @@ -3474,9 +3474,9 @@ export class WalletController extends BaseController { } catch { const Keyring = keyringService.getKeyringClassForType(type); keyring = new Keyring( - hasBridge(type) + (await hasBridge(type)) ? { - bridge: getKeyringBridge(type), + bridge: await getKeyringBridge(type), } : undefined ); @@ -3542,7 +3542,7 @@ export class WalletController extends BaseController { keyringType ); keyring = new keystoneKeyring({ - bridge: getKeyringBridge(keyringType), + bridge: await getKeyringBridge(keyringType), }); stashKeyringId = Object.values(stashKeyrings).length + 1; stashKeyrings[stashKeyringId] = keyring; @@ -3571,7 +3571,7 @@ export class WalletController extends BaseController { keyringType ); keyring = new keystoneKeyring({ - bridge: getKeyringBridge(keyringType), + bridge: await getKeyringBridge(keyringType), }); stashKeyringId = Object.values(stashKeyrings).length + 1; stashKeyrings[stashKeyringId] = keyring; @@ -3717,7 +3717,7 @@ export class WalletController extends BaseController { return keyring.getEncryptionPublicKey(address, options); }; - requestKeyring = ( + requestKeyring = async ( type: string, methodName: string, keyringId: number | null, @@ -3732,7 +3732,9 @@ export class WalletController extends BaseController { } catch { const Keyring = keyringService.getKeyringClassForType(type); keyring = new Keyring( - hasBridge(type) ? { bridge: getKeyringBridge(type) } : undefined + (await hasBridge(type)) + ? { bridge: await getKeyringBridge(type) } + : undefined ); } } @@ -4379,7 +4381,7 @@ export class WalletController extends BaseController { keyringType ); keyring = new keystoneKeyring({ - bridge: getKeyringBridge(keyringType), + bridge: await getKeyringBridge(keyringType), }); stashKeyringId = this.addKeyringToStash(keyring); } diff --git a/src/background/service/keyring/bridge.ts b/src/background/service/keyring/bridge.ts index 09b9222d07c..42734b0748e 100644 --- a/src/background/service/keyring/bridge.ts +++ b/src/background/service/keyring/bridge.ts @@ -17,26 +17,26 @@ const BitBox02Bridge = isManifestV3 ? require('./eth-bitbox02-keyring/bitbox02-offscreen-bridge') : require('./eth-bitbox02-keyring/bitbox02-bridge'); -export function getKeyringBridge(type: string) { +export const getKeyringBridge = async (type: string) => { if (type === KEYRING_CLASS.HARDWARE.IMKEY) { - return new ImKeyBridge.default(); + return new (await ImKeyBridge).default(); } if (type === KEYRING_CLASS.HARDWARE.ONEKEY) { - return new OneKeyBridge.default(); + return new (await OneKeyBridge).default(); } if (type === KEYRING_CLASS.HARDWARE.TREZOR) { - return new TrezorBridge.default(); + return new (await TrezorBridge).default(); } if (type === KEYRING_CLASS.HARDWARE.BITBOX02) { - return new BitBox02Bridge.default(); + return new (await BitBox02Bridge).default(); } return; -} +}; -export const hasBridge = (type: string) => { - return !!getKeyringBridge(type); +export const hasBridge = async (type: string) => { + return !!(await getKeyringBridge(type)); }; diff --git a/src/background/service/keyring/index.ts b/src/background/service/keyring/index.ts index 5093edf3d68..b99446e68e8 100644 --- a/src/background/service/keyring/index.ts +++ b/src/background/service/keyring/index.ts @@ -412,12 +412,12 @@ export class KeyringService extends EventEmitter { * @param {Object} opts - The constructor options for the keyring. * @returns {Promise} The new keyring. */ - addNewKeyring(type: string, opts?: any): Promise { + async addNewKeyring(type: string, opts?: any): Promise { const Keyring = this.getKeyringClassForType(type); const keyring = new Keyring( - hasBridge(type) + (await hasBridge(type)) ? { - bridge: getKeyringBridge(type), + bridge: await getKeyringBridge(type), ...(opts ?? {}), } : opts @@ -920,9 +920,9 @@ export class KeyringService extends EventEmitter { Keyring?.type === KEYRING_CLASS.WALLETCONNECT ? new Keyring(GET_WALLETCONNECT_CONFIG()) : new Keyring( - hasBridge(type) + (await hasBridge(type)) ? { - bridge: getKeyringBridge(type), + bridge: await getKeyringBridge(type), } : undefined );