diff --git a/packages/mask/src/plugin-infra/host.ts b/packages/mask/src/plugin-infra/host.ts index a6d4e04f0423..6fc34dd2ba7d 100644 --- a/packages/mask/src/plugin-infra/host.ts +++ b/packages/mask/src/plugin-infra/host.ts @@ -17,78 +17,83 @@ import { currentMaskWalletAccountSettings, currentMaskWalletChainIdSettings } fr import { WalletMessages, WalletRPC } from '../plugins/Wallet/messages' import type { WalletConnectQRCodeDialogEvent } from '@masknet/plugin-wallet' +const SharedContext: Omit = { + currentPersona: createSubscriptionFromAsync( + Services.Settings.getCurrentPersonaIdentifier, + undefined, + MaskMessages.events.currentPersonaIdentifier.on, + ), + + nativeType: nativeAPI?.type, + hasNativeAPI, + + send: WalletRPC.sendPayload, + + fetch: Services.Helper.r2d2Fetch, + + openPopupWindow: Services.Helper.openPopupWindow, + closePopupWindow: Services.Helper.removePopupWindow, + + openWalletConnectDialog: (uri: string, callback) => { + const onClose = (ev: WalletConnectQRCodeDialogEvent) => { + if (ev.open) return + callback() + WalletMessages.events.walletConnectQRCodeDialogUpdated.off(onClose) + } + + WalletMessages.events.walletConnectQRCodeDialogUpdated.on(onClose) + WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ + open: true, + uri, + }) + }, + closeWalletConnectDialog: () => { + WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ + open: false, + }) + }, + + account: createSubscriptionFromValueRef(currentMaskWalletAccountSettings), + chainId: createSubscriptionFromValueRef(currentMaskWalletChainIdSettings), + + wallets: createSubscriptionFromAsync( + () => { + console.log('DEBUG: wallet rpc get wallets') + return WalletRPC.getWallets() + }, + EMPTY_LIST, + WalletMessages.events.walletsUpdated.on, + ), + walletPrimary: createSubscriptionFromAsync( + () => WalletRPC.getWalletPrimary(), + null, + WalletMessages.events.walletsUpdated.on, + ), + + personaSignMessage: Services.Identity.signWithPersona, + + updateAccount: WalletRPC.updateMaskAccount, + resetAccount: WalletRPC.resetMaskAccount, + selectAccount: WalletRPC.selectMaskAccount, + + signTransaction: WalletRPC.signTransaction, + signTypedData: WalletRPC.signTypedData, + signPersonalMessage: WalletRPC.signPersonalMessage, + + getWallets: WalletRPC.getWallets, + getWalletPrimary: WalletRPC.getWalletPrimary, + addWallet: WalletRPC.updateWallet, + updateWallet: WalletRPC.updateWallet, + removeWallet: WalletRPC.removeWallet, +} + export function createSharedContext(pluginID: string, signal: AbortSignal): Plugin.Shared.SharedContext { return { createKVStorage(type: 'memory' | 'persistent', defaultValues: T) { - if (type === 'memory') return InMemoryStorages.Plugin.createSubScope(pluginID, defaultValues, signal) - else return PersistentStorages.Plugin.createSubScope(pluginID, defaultValues, signal) - }, - - nativeType: nativeAPI?.type, - hasNativeAPI, - - send: WalletRPC.sendPayload, - - fetch: Services.Helper.r2d2Fetch, - - openPopupWindow: Services.Helper.openPopupWindow, - closePopupWindow: Services.Helper.removePopupWindow, - - openWalletConnectDialog: (uri: string, callback) => { - const onClose = (ev: WalletConnectQRCodeDialogEvent) => { - if (ev.open) return - callback() - WalletMessages.events.walletConnectQRCodeDialogUpdated.off(onClose) - } - - WalletMessages.events.walletConnectQRCodeDialogUpdated.on(onClose) - WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ - open: true, - uri, - }) - }, - closeWalletConnectDialog: () => { - WalletMessages.events.walletConnectQRCodeDialogUpdated.sendToLocal({ - open: false, - }) + if (type === 'memory') return InMemoryStorages.Plugin.createSubScope(pluginID, defaultValues) + else return PersistentStorages.Plugin.createSubScope(pluginID, defaultValues) }, - - account: createSubscriptionFromValueRef(currentMaskWalletAccountSettings), - chainId: createSubscriptionFromValueRef(currentMaskWalletChainIdSettings), - - currentPersona: createSubscriptionFromAsync( - Services.Settings.getCurrentPersonaIdentifier, - undefined, - MaskMessages.events.currentPersonaIdentifier.on, - signal, - ), - - wallets: createSubscriptionFromAsync( - () => WalletRPC.getWallets(), - EMPTY_LIST, - WalletMessages.events.walletsUpdated.on, - ), - walletPrimary: createSubscriptionFromAsync( - () => WalletRPC.getWalletPrimary(), - null, - WalletMessages.events.walletsUpdated.on, - ), - - personaSignMessage: Services.Identity.signWithPersona, - - updateAccount: WalletRPC.updateMaskAccount, - resetAccount: WalletRPC.resetMaskAccount, - selectAccount: WalletRPC.selectMaskAccount, - - signTransaction: WalletRPC.signTransaction, - signTypedData: WalletRPC.signTypedData, - signPersonalMessage: WalletRPC.signPersonalMessage, - - getWallets: WalletRPC.getWallets, - getWalletPrimary: WalletRPC.getWalletPrimary, - addWallet: WalletRPC.updateWallet, - updateWallet: WalletRPC.updateWallet, - removeWallet: WalletRPC.removeWallet, + ... SharedContext, } }