@tezos-x/octez.connect-dapp 4.8.4 → 4.8.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/cjs/dapp-client/DAppClient.d.ts +113 -4
- package/dist/cjs/dapp-client/DAppClient.js +962 -373
- package/dist/cjs/dapp-client/DAppClient.js.map +1 -1
- package/dist/cjs/dapp-client/DAppClientOptions.d.ts +17 -0
- package/dist/cjs/dapp-client/DAppClientOptions.js.map +1 -1
- package/dist/cjs/events.d.ts +27 -2
- package/dist/cjs/events.js +9 -5
- package/dist/cjs/events.js.map +1 -1
- package/dist/cjs/index.d.ts +4 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/utils/get-instance.js +3 -0
- package/dist/cjs/utils/get-instance.js.map +1 -1
- package/dist/esm/dapp-client/DAppClient.d.ts +113 -4
- package/dist/esm/dapp-client/DAppClient.js +968 -368
- package/dist/esm/dapp-client/DAppClient.js.map +1 -1
- package/dist/esm/dapp-client/DAppClientOptions.d.ts +17 -0
- package/dist/esm/dapp-client/DAppClientOptions.js.map +1 -1
- package/dist/esm/events.d.ts +27 -2
- package/dist/esm/events.js +6 -3
- package/dist/esm/events.js.map +1 -1
- package/dist/esm/index.d.ts +4 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils/get-instance.js +3 -0
- package/dist/esm/utils/get-instance.js.map +1 -1
- package/dist/octez.connect.dapp.min.js +1 -1
- package/package.json +9 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DAppClient.js","sourceRoot":"","sources":["../../../src/dapp-client/DAppClient.ts"],"names":[],"mappings":"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","sourcesContent":["import bs58check from 'bs58check'\nimport {\n ConnectionContext,\n AccountInfo,\n TransportType,\n StorageKey,\n BeaconMessageType,\n PermissionScope,\n PermissionResponse,\n NetworkType,\n SignPayloadResponse,\n SignPayloadRequest,\n OperationResponse,\n OperationRequest,\n BroadcastResponse,\n BroadcastRequest,\n ErrorResponse,\n BeaconMessage,\n RequestPermissionInput,\n RequestSignPayloadInput,\n RequestOperationInput,\n RequestBroadcastInput,\n PermissionRequest,\n PermissionResponseOutput,\n PermissionRequestInput,\n SignPayloadResponseOutput,\n SignPayloadRequestInput,\n OperationResponseOutput,\n OperationRequestInput,\n BroadcastResponseOutput,\n BroadcastRequestInput,\n BeaconRequestInputMessage,\n Network,\n Origin,\n PeerInfo,\n BeaconErrorType,\n AppMetadata,\n ExtendedP2PPairingResponse,\n ExtendedPostMessagePairingResponse,\n SigningType,\n ExtendedPeerInfo,\n Optional,\n ColorMode,\n IgnoredRequestInputProperties,\n WalletInfo,\n BeaconMessageWrapper,\n Blockchain,\n BlockchainMessage,\n BlockchainRequestV3,\n BlockchainResponseV3,\n PermissionRequestV3,\n PermissionResponseV3,\n BeaconBaseMessage,\n AcknowledgeResponse,\n ExtendedWalletConnectPairingResponse,\n ProofOfEventChallengeRequest,\n ProofOfEventChallengeResponse,\n ProofOfEventChallengeRequestInput,\n RequestProofOfEventChallengeInput,\n ChangeAccountRequest,\n PeerInfoType,\n App,\n AppBase,\n DesktopApp,\n ExtensionApp,\n WebApp,\n SimulatedProofOfEventChallengeRequestInput,\n SimulatedProofOfEventChallengeRequest,\n SimulatedProofOfEventChallengeResponse,\n RequestSimulatedProofOfEventChallengeInput,\n TransportStatus\n // PermissionRequestV3\n // RequestEncryptPayloadInput,\n // EncryptPayloadResponseOutput,\n // EncryptPayloadResponse,\n // EncryptPayloadRequest\n} from '@tezos-x/octez.connect-types'\nimport {\n Client,\n Transport,\n AppMetadataManager,\n Serializer,\n LocalStorage,\n getAccountIdentifier,\n getSenderId,\n Logger,\n ClientEvents,\n StorageValidator,\n SDK_VERSION,\n IndexedDBStorage,\n MultiTabChannel,\n BACKEND_URL,\n getError\n} from '@tezos-x/octez.connect-core'\nimport {\n getAddressFromPublicKey,\n ExposedPromise,\n generateGUID,\n toHex,\n signMessage,\n CONTRACT_PREFIX,\n prefixPublicKey,\n isValidAddress,\n getKeypairFromSeed\n} from '@tezos-x/octez.connect-utils'\nimport { messageEvents } from '../beacon-message-events'\nimport { BeaconEvent, BeaconEventHandlerFunction, BeaconEventType, BeaconEventHandler } from '../events'\nimport { BlockExplorer } from '../utils/block-explorer'\nimport { TzktBlockExplorer } from '../utils/tzkt-blockexplorer'\n\nimport { DAppClientOptions } from './DAppClientOptions'\nimport { DappPostMessageTransport } from '../transports/DappPostMessageTransport'\nimport { DappP2PTransport } from '../transports/DappP2PTransport'\nimport { DappWalletConnectTransport } from '../transports/DappWalletConnectTransport'\nimport { PostMessageTransport } from '@tezos-x/octez.connect-transport-postmessage'\nimport {\n AlertButton,\n closeToast,\n getColorMode,\n setColorMode,\n setDesktopList,\n setExtensionList,\n setWebList,\n setiOSList,\n getiOSList,\n getDesktopList,\n getExtensionList,\n getWebList,\n isBrowser,\n isDesktop,\n isMobileOS,\n isIOS,\n currentOS\n} from '@tezos-x/octez.connect-ui'\nimport { WalletConnectTransport } from '@tezos-x/octez.connect-transport-walletconnect'\n\nconst logger = new Logger('DAppClient')\n\n/**\n * @publicapi\n *\n * The DAppClient has to be used in decentralized applications. It handles all the logic related to connecting to beacon-compatible\n * wallets and sending requests.\n *\n * @category DApp\n */\nexport class DAppClient extends Client {\n /**\n * The description of the app\n */\n public readonly description?: string\n\n /**\n * The block explorer used by the SDK\n */\n public readonly blockExplorer: BlockExplorer\n\n /**\n * Automatically switch between apps on Mobile Devices (Enabled by Default)\n */\n private enableAppSwitching: boolean\n\n /**\n * Enable metrics tracking (Disabled by Default)\n */\n private enableMetrics?: boolean\n\n private userId?: string\n\n public network: Network\n\n protected readonly events: BeaconEventHandler = new BeaconEventHandler()\n\n protected postMessageTransport: DappPostMessageTransport | undefined\n protected p2pTransport: DappP2PTransport | undefined\n protected walletConnectTransport: DappWalletConnectTransport | undefined\n\n protected wcProjectId?: string\n protected wcRelayUrl?: string\n\n private isGetActiveAccountHandled: boolean = false\n\n private readonly openRequestsOtherTabs = new Set<string>()\n /**\n * A map of requests that are currently \"open\", meaning we have sent them to a wallet and are still awaiting a response.\n */\n private readonly openRequests = new Map<\n string,\n ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >\n >()\n\n /**\n * The currently active account. For all requests that are associated to a specific request (operation request, signing request),\n * the active account is used to determine the network and destination wallet\n */\n private _activeAccount: ExposedPromise<AccountInfo | undefined> = new ExposedPromise()\n\n /**\n * The currently active peer. This is used to address a peer in case the active account is not set. (Eg. for permission requests)\n */\n private _activePeer: ExposedPromise<PeerInfoType | undefined> = new ExposedPromise()\n\n private _initPromise: Promise<TransportType> | undefined\n\n private isInitPending: boolean = false\n\n private readonly activeAccountLoaded: Promise<AccountInfo | undefined>\n\n private readonly appMetadataManager: AppMetadataManager\n\n private readonly disclaimerText?: string\n\n private readonly errorMessages: Record<string, Record<string | number, string>>\n\n private readonly featuredWallets: string[] | undefined\n\n private readonly storageValidator: StorageValidator\n\n private readonly beaconIDB = new IndexedDBStorage('beacon', ['bug_report', 'metrics'])\n\n private debounceSetActiveAccount: boolean = false\n\n private multiTabChannel = new MultiTabChannel(\n 'octez.connect-sdk-channel',\n this.onBCMessageHandler.bind(this),\n this.onElectedLeaderhandler.bind(this)\n )\n\n constructor(config: DAppClientOptions) {\n super({\n storage: config && config.storage ? config.storage : new LocalStorage(),\n ...config\n })\n this.description = config.description\n this.wcProjectId = config.walletConnectOptions?.projectId || '24469fd0a06df227b6e5f7dc7de0ff4f'\n this.wcRelayUrl = config.walletConnectOptions?.relayUrl\n\n this.featuredWallets = config.featuredWallets\n\n this.events = new BeaconEventHandler(config.eventHandlers, config.disableDefaultEvents ?? false)\n this.blockExplorer = config.blockExplorer ?? new TzktBlockExplorer()\n this.network = config.network ?? { type: config.preferredNetwork ?? NetworkType.MAINNET }\n setColorMode(config.colorMode ?? ColorMode.LIGHT)\n\n this.disclaimerText = config.disclaimerText\n\n this.errorMessages = config.errorMessages ?? {}\n\n this.appMetadataManager = new AppMetadataManager(this.storage)\n this.storageValidator = new StorageValidator(this.storage)\n\n this.enableAppSwitching =\n config.enableAppSwitching === undefined ? true : !!config.enableAppSwitching\n\n this.enableMetrics = config.enableMetrics ? true : false\n\n // Subscribe to storage changes and update the active account if it changes on other tabs\n this.storage.subscribeToStorageChanged(async (event) => {\n if (event.eventType === 'storageCleared') {\n this.setActiveAccount(undefined)\n return\n }\n if (event.eventType === 'entryModified') {\n if (event.key === this.storage.getPrefixedKey(StorageKey.ACTIVE_ACCOUNT)) {\n const accountIdentifier = event.newValue\n if (!accountIdentifier || accountIdentifier === 'undefined') {\n this.setActiveAccount(undefined)\n } else {\n const account = await this.getAccount(accountIdentifier)\n this.setActiveAccount(account)\n }\n return\n }\n if (event.key === this.storage.getPrefixedKey(StorageKey.ENABLE_METRICS)) {\n this.enableMetrics = !!(await this.storage.get(StorageKey.ENABLE_METRICS))\n return\n }\n if (event.key === this.storage.getPrefixedKey(StorageKey.BEACON_SDK_SECRET_SEED)) {\n this._keyPair = new ExposedPromise()\n this._beaconId = new ExposedPromise()\n await this.initSDK()\n return\n }\n }\n })\n\n this.activeAccountLoaded = this.storage\n .get(StorageKey.ACTIVE_ACCOUNT)\n .then(async (activeAccountIdentifier) => {\n if (activeAccountIdentifier) {\n const account = await this.accountManager.getAccount(activeAccountIdentifier)\n await this.setActiveAccount(account)\n return account\n } else {\n await this.setActiveAccount(undefined)\n return undefined\n }\n })\n .catch(async (storageError) => {\n logger.error(storageError)\n await this.resetInvalidState(false)\n this.events.emit(BeaconEvent.INVALID_ACCOUNT_DEACTIVATED)\n return undefined\n })\n\n this.handleResponse = async (\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n connectionInfo: ConnectionContext\n ): Promise<void> => {\n const typedMessage =\n message.version === '3'\n ? (message as BeaconMessageWrapper<BeaconBaseMessage>).message\n : (message as BeaconMessage)\n\n let appMetadata: AppMetadata | undefined =\n message.version === '3'\n ? (typedMessage as unknown as PermissionResponseV3<string>).blockchainData?.appMetadata\n : (typedMessage as PermissionResponse).appMetadata\n\n if (!appMetadata && message.version === '3') {\n const storedMetadata = await Promise.all([\n this.storage.get(StorageKey.TRANSPORT_P2P_PEERS_DAPP),\n this.storage.get(StorageKey.TRANSPORT_WALLETCONNECT_PEERS_DAPP),\n this.storage.get(StorageKey.TRANSPORT_POSTMESSAGE_PEERS_DAPP)\n ])\n\n for (const peers of storedMetadata) {\n const peer: any = peers.find((peer: any) => peer.senderId === message.senderId)\n if (!peer) {\n continue\n }\n\n const wallet = await this.getWalletInfo()\n\n appMetadata = {\n name: peer.name,\n senderId: peer.senderId,\n icon: wallet.icon\n }\n\n break\n }\n }\n\n if (this.openRequestsOtherTabs.has(message.id)) {\n this.multiTabChannel.postMessage({\n type: 'RESPONSE',\n data: {\n message,\n connectionInfo\n },\n id: message.id\n })\n\n if (typedMessage.type !== BeaconMessageType.Acknowledge) {\n this.openRequestsOtherTabs.delete(message.id)\n }\n\n return\n }\n\n const openRequest = this.openRequests.get(message.id)\n\n logger.log('### openRequest ###', openRequest)\n logger.log('handleResponse', 'Received message', message, connectionInfo)\n logger.log('### message ###', JSON.stringify(message))\n logger.log('### connectionInfo ###', connectionInfo)\n\n const handleDisconnect = async (): Promise<void> => {\n this.analytics.track('event', 'DAppClient', 'Disconnect received from Wallet')\n\n const relevantTransport =\n connectionInfo.origin === Origin.P2P\n ? this.p2pTransport\n : connectionInfo.origin === Origin.WALLETCONNECT\n ? this.walletConnectTransport\n : (this.postMessageTransport ?? (await this.transport))\n\n if (relevantTransport) {\n const peers: ExtendedPeerInfo[] = await relevantTransport.getPeers()\n const peer: ExtendedPeerInfo | undefined = peers.find(\n (peerEl) => peerEl.senderId === message.senderId\n )\n\n if (peer) {\n await relevantTransport.removePeer(peer)\n }\n }\n\n await this.removeAccountsForPeerIds([message.senderId])\n await this.events.emit(BeaconEvent.CHANNEL_CLOSED)\n }\n\n if (openRequest && typedMessage.type === BeaconMessageType.Acknowledge) {\n this.analytics.track('event', 'DAppClient', 'Acknowledge received from Wallet')\n logger.log('handleResponse', `acknowledge message received for ${message.id}`)\n\n this.events\n .emit(BeaconEvent.ACKNOWLEDGE_RECEIVED, {\n message: typedMessage as AcknowledgeResponse,\n extraInfo: {},\n walletInfo: await this.getWalletInfo()\n })\n .catch(console.error)\n } else if (openRequest) {\n if (typedMessage.type === BeaconMessageType.PermissionResponse && appMetadata) {\n await this.appMetadataManager.addAppMetadata(appMetadata)\n }\n\n if (typedMessage.type === BeaconMessageType.Error) {\n openRequest.reject(typedMessage as ErrorResponse)\n } else {\n openRequest.resolve({ message, connectionInfo })\n }\n this.openRequests.delete(typedMessage.id)\n } else {\n if (typedMessage.type === BeaconMessageType.Disconnect) {\n await handleDisconnect()\n } else if (typedMessage.type === BeaconMessageType.ChangeAccountRequest) {\n await this.onNewAccount(typedMessage as ChangeAccountRequest, connectionInfo)\n }\n }\n\n if (this._transport.isResolved()) {\n const transport = await this.transport\n\n if (\n transport instanceof WalletConnectTransport &&\n !this.openRequests.has('session_update')\n ) {\n this.openRequests.set('session_update', new ExposedPromise())\n }\n }\n }\n\n this.storageValidator\n .validate()\n .then(async (isValid) => {\n const account = await this.activeAccountLoaded\n\n if (!isValid) {\n const info = await this.getWalletInfo(undefined, account, false)\n info.type =\n info.type === 'extension' && account?.origin.type === Origin.P2P ? 'mobile' : info.type\n await this.storage.set(StorageKey.LAST_SELECTED_WALLET, {\n icon: info.icon ?? '',\n key: info.name,\n type: info.type ?? 'web',\n name: info.name,\n url: info.deeplink\n })\n\n const nowValid = await this.storageValidator.validate()\n\n if (!nowValid) {\n this.resetInvalidState(false)\n }\n }\n\n if (account && account.origin.type !== 'p2p') {\n this.init()\n }\n })\n .catch((err) => logger.error(err.message))\n\n this.sendMetrics(\n 'enable-metrics?' + this.addQueryParam('version', SDK_VERSION),\n undefined,\n (res) => {\n if (!res.ok) {\n res.status === 426\n ? console.error('Metrics are no longer supported for this version, please upgrade.')\n : console.warn(\n 'Network error encountered. Metrics sharing have been automatically disabled.'\n )\n }\n this.enableMetrics = res.ok\n this.storage.set(StorageKey.ENABLE_METRICS, res.ok)\n },\n () => {\n this.enableMetrics = false\n this.storage.set(StorageKey.ENABLE_METRICS, false)\n }\n )\n\n this.initUserID().catch((err) => logger.error(err.message))\n }\n\n private async checkIfBCLeaderExists() {\n // broadcast channel does not work on mobile\n if (isMobileOS(window)) {\n return true\n }\n\n const hasLeader = await this.multiTabChannel.hasLeader()\n\n if (hasLeader) {\n return this.multiTabChannel.isLeader()\n }\n\n await this.multiTabChannel.getLeadership()\n\n return this.multiTabChannel.isLeader()\n }\n\n private async onElectedLeaderhandler() {\n if (!this._transport.isResolved()) {\n return\n }\n\n const tranport = await this.transport\n\n if (tranport.type !== TransportType.WALLETCONNECT) {\n return\n }\n\n if (tranport.connectionStatus === TransportStatus.CONNECTED) {\n return\n }\n\n await tranport.connect()\n }\n\n private async onBCMessageHandler(message: any) {\n switch (message.type) {\n case BeaconMessageType.PermissionRequest:\n case BeaconMessageType.OperationRequest:\n case BeaconMessageType.SignPayloadRequest:\n case BeaconMessageType.BroadcastRequest:\n case BeaconMessageType.ProofOfEventChallengeRequest:\n case BeaconMessageType.SimulatedProofOfEventChallengeRequest:\n this.prepareRequest(message)\n break\n case BeaconMessageType.BlockchainRequest:\n this.prepareRequest(message, true)\n break\n case 'RESPONSE':\n this.handleResponse(message.data.message, message.data.connectionInfo)\n break\n case 'DISCONNECT':\n this._transport.isResolved() && this.disconnect()\n break\n default:\n logger.error('onBCMessageHandler', 'message type not recognized', message)\n }\n }\n\n private async prepareRequest(message: any, isV3 = false) {\n if (!this.multiTabChannel.isLeader()) {\n return\n }\n\n // block until the transport is ready\n const transport = (await this._transport.promise) as DappWalletConnectTransport\n await transport.waitForResolution()\n\n this.openRequestsOtherTabs.add(message.id)\n isV3\n ? this.makeRequestV3(message.data, message.id)\n : this.makeRequest(message.data, false, message.id)\n }\n\n private async createStateSnapshot() {\n if (!localStorage || !this.enableMetrics) {\n return\n }\n const keys = Object.values(StorageKey).filter(\n (key) => !key.includes('wc@2') && !key.includes('secret') && !key.includes('account')\n ) as unknown as StorageKey[]\n\n try {\n for (const key of keys) {\n await this.beaconIDB.set(key, this.storage.getPrefixedKey(key))\n }\n } catch (err: any) {\n logger.error('createStateSnapshot', err.message)\n }\n }\n\n private async initUserID() {\n const id = await this.storage.get(StorageKey.USER_ID)\n\n if (id) {\n this.userId = id\n return\n }\n\n this.userId = await generateGUID()\n\n this.storage.set(StorageKey.USER_ID, this.userId)\n }\n\n public async initInternalTransports(): Promise<void> {\n const seed = await this.storage.get(StorageKey.BEACON_SDK_SECRET_SEED)\n if (!seed) {\n throw new Error('Secret seed not found')\n }\n const keyPair = await getKeypairFromSeed(seed)\n\n if (this.postMessageTransport || this.p2pTransport || this.walletConnectTransport) {\n return\n }\n\n this.postMessageTransport = new DappPostMessageTransport(this.name, keyPair, this.storage)\n await this.addListener(this.postMessageTransport)\n\n this.p2pTransport = new DappP2PTransport(\n this.name,\n keyPair,\n this.storage,\n this.matrixNodes,\n this.iconUrl,\n this.appUrl\n )\n\n await this.addListener(this.p2pTransport)\n\n const wcOptions = {\n projectId: this.wcProjectId,\n relayUrl: this.wcRelayUrl,\n metadata: {\n name: this.name,\n description: this.description ?? '',\n url: this.appUrl ?? '',\n icons: this.iconUrl ? [this.iconUrl] : []\n }\n }\n\n this.walletConnectTransport = new DappWalletConnectTransport(\n this.name,\n keyPair,\n this.storage,\n {\n network: this.network.type,\n opts: wcOptions\n },\n this.checkIfBCLeaderExists.bind(this)\n )\n\n this.initEvents()\n\n await this.addListener(this.walletConnectTransport)\n }\n\n private initEvents() {\n if (!this.walletConnectTransport) {\n return\n }\n\n this.walletConnectTransport.setEventHandler(\n ClientEvents.CLOSE_ALERT,\n this.hideUI.bind(this, ['alert', 'toast'])\n )\n this.walletConnectTransport.setEventHandler(\n ClientEvents.RESET_STATE,\n this.channelClosedHandler.bind(this)\n )\n this.walletConnectTransport.setEventHandler(\n ClientEvents.WC_ACK_NOTIFICATION,\n this.wcToastHandler.bind(this)\n )\n this.walletConnectTransport.setEventHandler(\n ClientEvents.ON_RELAYER_ERROR,\n this.onRelayerError.bind(this)\n )\n }\n\n private async onRelayerError() {\n await this.resetInvalidState(false)\n\n this.events.emit(BeaconEvent.RELAYER_ERROR)\n }\n\n private async wcToastHandler(status: string) {\n const walletInfo = await (async (): Promise<WalletInfo> => {\n try {\n return await this.getWalletInfo()\n } catch {\n return { name: 'wallet' }\n }\n })()\n\n await this.events.emit(BeaconEvent.HIDE_UI, ['alert'])\n if (status === 'pending') {\n this.events.emit(BeaconEvent.ACKNOWLEDGE_RECEIVED, {\n message: {} as any,\n extraInfo: {} as any,\n walletInfo\n })\n } else {\n this.events.emit(BeaconEvent.PERMISSION_REQUEST_ERROR, {\n errorResponse: { errorType: BeaconErrorType.ABORTED_ERROR } as any,\n walletInfo\n })\n }\n }\n private async channelClosedHandler(type: TransportType) {\n const transport = await this.transport\n\n if (transport.type !== type) {\n return\n }\n\n await this.events.emit(BeaconEvent.CHANNEL_CLOSED)\n this.setActiveAccount(undefined)\n await this.disconnect()\n }\n\n /**\n * Destroy the instance.\n *\n * WARNING: Call `destroy` whenever you no longer need dAppClient\n * as it frees internal subscriptions to the transport and therefore the instance may no longer work properly.\n * If you wish to disconnect your dApp, use `disconnect` instead.\n */\n async destroy(): Promise<void> {\n await this.createStateSnapshot()\n await super.destroy()\n }\n\n public async init(\n transport?: Transport<any>,\n substratePairing?: boolean\n ): Promise<TransportType> {\n if (this._initPromise) {\n return this._initPromise\n }\n\n try {\n await this.activeAccountLoaded\n } catch {\n //\n }\n\n this._initPromise = new Promise(async (resolve) => {\n if (transport) {\n await this.addListener(transport)\n\n resolve(await super.init(transport))\n } else if (this._transport.isSettled()) {\n await (await this.transport).connect()\n\n resolve(await super.init(await this.transport))\n } else {\n const activeAccount = await this.getActiveAccount()\n const stopListening = () => {\n if (this.postMessageTransport) {\n this.postMessageTransport.stopListeningForNewPeers().catch(console.error)\n }\n if (this.p2pTransport) {\n this.p2pTransport.stopListeningForNewPeers().catch(console.error)\n }\n if (this.walletConnectTransport) {\n this.walletConnectTransport.stopListeningForNewPeers().catch(console.error)\n }\n }\n\n await this.initInternalTransports()\n\n if (!this.postMessageTransport || !this.p2pTransport || !this.walletConnectTransport) {\n return\n }\n\n this.postMessageTransport.connect().then().catch(console.error)\n\n if (activeAccount && activeAccount.origin) {\n const origin = activeAccount.origin.type\n // Select the transport that matches the active account\n if (origin === Origin.EXTENSION) {\n resolve(await super.init(this.postMessageTransport))\n } else if (origin === Origin.P2P) {\n resolve(await super.init(this.p2pTransport))\n } else if (origin === Origin.WALLETCONNECT) {\n resolve(await super.init(this.walletConnectTransport))\n }\n } else {\n const p2pTransport = this.p2pTransport\n const postMessageTransport = this.postMessageTransport\n const walletConnectTransport = this.walletConnectTransport\n\n postMessageTransport\n .listenForNewPeer((peer) => {\n logger.log('init', 'postmessage transport peer connected', peer)\n this.analytics.track('event', 'DAppClient', 'Extension connected', {\n peerName: peer.name\n })\n this.events\n .emit(BeaconEvent.PAIR_SUCCESS, peer)\n .catch((emitError) => console.warn(emitError))\n\n this.setActivePeer(peer).catch(console.error)\n this.setTransport(this.postMessageTransport).catch(console.error)\n stopListening()\n resolve(TransportType.POST_MESSAGE)\n })\n .catch(console.error)\n\n p2pTransport\n .listenForNewPeer((peer) => {\n logger.log('init', 'p2p transport peer connected', peer)\n this.analytics.track('event', 'DAppClient', 'octez.connect Wallet connected', {\n peerName: peer.name\n })\n this.events\n .emit(BeaconEvent.PAIR_SUCCESS, peer)\n .catch((emitError) => console.warn(emitError))\n\n this.setActivePeer(peer).catch(console.error)\n this.setTransport(this.p2pTransport).catch(console.error)\n stopListening()\n resolve(TransportType.P2P)\n })\n .catch(console.error)\n\n walletConnectTransport\n .listenForNewPeer((peer) => {\n logger.log('init', 'walletconnect transport peer connected', peer)\n this.analytics.track('event', 'DAppClient', 'WalletConnect Wallet connected', {\n peerName: peer.name\n })\n this.events\n .emit(BeaconEvent.PAIR_SUCCESS, peer)\n .catch((emitError) => console.warn(emitError))\n\n this.setActivePeer(peer).catch(console.error)\n this.setTransport(this.walletConnectTransport).catch(console.error)\n stopListening()\n resolve(TransportType.WALLETCONNECT)\n })\n .catch(console.error)\n\n PostMessageTransport.getAvailableExtensions()\n .then(async (extensions) => {\n this.analytics.track('event', 'DAppClient', 'Extensions detected', { extensions })\n })\n .catch((error) => {\n this._initPromise = undefined\n console.error(error)\n })\n\n const abortHandler = async () => {\n logger.log('init', 'ABORTED')\n this.sendMetrics(\n 'performance-metrics/save',\n await this.buildPayload('connect', 'abort')\n )\n await Promise.all([\n postMessageTransport.disconnect(),\n // p2pTransport.disconnect(), do not abort connection manually\n walletConnectTransport.disconnect()\n ])\n this.postMessageTransport = this.walletConnectTransport = this.p2pTransport = undefined\n this._activeAccount.isResolved() && this.clearActiveAccount()\n this._initPromise = undefined\n }\n\n const serializer = new Serializer()\n const p2pPeerInfo = new Promise<string>(async (resolve) => {\n try {\n await p2pTransport.connect()\n } catch (err: any) {\n logger.error(err)\n await this.hideUI(['alert']) // hide pairing alert\n setTimeout(() => this.events.emit(BeaconEvent.GENERIC_ERROR, err.message), 1000)\n abortHandler()\n resolve('')\n return\n }\n resolve(await serializer.serialize(await p2pTransport.getPairingRequestInfo()))\n })\n\n const walletConnectPeerInfo = new Promise<string>(async (resolve) => {\n resolve((await walletConnectTransport.getPairingRequestInfo()).uri)\n })\n\n const postmessagePeerInfo = new Promise<string>(async (resolve) => {\n resolve(await serializer.serialize(await postMessageTransport.getPairingRequestInfo()))\n })\n\n this.events\n .emit(BeaconEvent.PAIR_INIT, {\n p2pPeerInfo,\n postmessagePeerInfo,\n walletConnectPeerInfo,\n networkType: this.network.type,\n abortedHandler: abortHandler.bind(this),\n disclaimerText: this.disclaimerText,\n analytics: this.analytics,\n featuredWallets: this.featuredWallets,\n substratePairing\n })\n .catch((emitError) => console.warn(emitError))\n }\n }\n })\n\n return this._initPromise\n }\n\n /**\n * Returns the active account\n */\n public async getActiveAccount(): Promise<AccountInfo | undefined> {\n return this._activeAccount.promise\n }\n\n private async isInvalidState(account: AccountInfo) {\n const activeAccount = await this._activeAccount.promise\n return !activeAccount\n ? false\n : activeAccount?.address !== account?.address && !this.isGetActiveAccountHandled\n }\n\n private async resetInvalidState(emit: boolean = true) {\n this.accountManager.removeAllAccounts()\n this._activeAccount = ExposedPromise.resolve<AccountInfo | undefined>(undefined)\n this.storage.set(StorageKey.ACTIVE_ACCOUNT, undefined)\n emit && this.events.emit(BeaconEvent.INVALID_ACTIVE_ACCOUNT_STATE)\n !emit && this.hideUI(['alert'])\n await Promise.all([\n this.postMessageTransport?.disconnect(),\n this.walletConnectTransport?.disconnect()\n ])\n this.postMessageTransport = this.p2pTransport = this.walletConnectTransport = undefined\n await this.setActivePeer(undefined)\n await this.setTransport(undefined)\n this._initPromise = undefined\n }\n\n /**\n * Sets the active account\n *\n * @param account The account that will be set as the active account\n */\n public async setActiveAccount(account?: AccountInfo): Promise<void> {\n if (!this.isGetActiveAccountHandled) {\n console.warn(\n `An active account has been received, but no active subscription was found for BeaconEvent.ACTIVE_ACCOUNT_SET.`\n )\n }\n\n if (account && this._activeAccount.isSettled() && (await this.isInvalidState(account))) {\n const tranport = await this.transport\n\n if (tranport instanceof WalletConnectTransport && tranport.wasDisconnectedByWallet()) {\n await this.resetInvalidState()\n return\n }\n }\n\n // when I'm resetting the activeAccount\n if (!account && this._activeAccount.isResolved() && (await this.getActiveAccount())) {\n const transport = await this.transport\n const activeAccount = await this.getActiveAccount()\n\n if (!transport || !activeAccount) {\n return\n }\n\n if (!this.debounceSetActiveAccount && transport instanceof WalletConnectTransport) {\n this.debounceSetActiveAccount = true\n this._initPromise = undefined\n this.postMessageTransport = this.p2pTransport = this.walletConnectTransport = undefined\n if (this.multiTabChannel.isLeader() || isMobileOS(window)) {\n await transport.disconnect()\n this.openRequestsOtherTabs.clear()\n } else {\n this.multiTabChannel.postMessage({\n type: 'DISCONNECT'\n })\n }\n Array.from(this.openRequests.entries())\n .filter(([id, _promise]) => id !== 'session_update')\n .forEach(([id, promise]) => {\n promise.reject({\n type: BeaconMessageType.Error,\n errorType: BeaconErrorType.ABORTED_ERROR,\n id,\n senderId: '',\n version: '2'\n })\n })\n this.openRequests.clear()\n this.debounceSetActiveAccount = false\n }\n }\n\n if (this._activeAccount.isSettled()) {\n // If the promise has already been resolved we need to create a new one.\n this._activeAccount = ExposedPromise.resolve<AccountInfo | undefined>(account)\n } else {\n this._activeAccount.resolve(account)\n }\n\n if (!this.isGetActiveAccountHandled && this._transport.isResolved()) {\n const transport = await this.transport\n\n if (transport instanceof WalletConnectTransport && transport.wasDisconnectedByWallet()) {\n await this.resetInvalidState()\n return\n }\n }\n\n if (account) {\n const origin = account.origin.type\n await this.initInternalTransports()\n\n // Select the transport that matches the active account\n if (origin === Origin.EXTENSION) {\n await this.setTransport(this.postMessageTransport)\n } else if (origin === Origin.P2P) {\n await this.setTransport(this.p2pTransport)\n } else if (origin === Origin.WALLETCONNECT) {\n await this.setTransport(this.walletConnectTransport)\n this.walletConnectTransport?.forceUpdate('INIT')\n }\n if (this._transport.isResolved()) {\n const transport = await this.transport\n\n if (transport.connectionStatus === TransportStatus.NOT_CONNECTED) {\n await transport.connect()\n }\n }\n const peer = await this.getPeer(account)\n await this.setActivePeer(peer)\n } else {\n await this.setActivePeer(undefined)\n await this.setTransport(undefined)\n }\n\n await this.storage.set(\n StorageKey.ACTIVE_ACCOUNT,\n account ? account.accountIdentifier : undefined\n )\n\n await this.events.emit(BeaconEvent.ACTIVE_ACCOUNT_SET, account)\n\n return\n }\n\n /**\n * Clear the active account\n */\n public clearActiveAccount(): Promise<void> {\n return this.setActiveAccount()\n }\n\n public async setColorMode(colorMode: ColorMode): Promise<void> {\n return setColorMode(colorMode)\n }\n\n public async getColorMode(): Promise<ColorMode> {\n return getColorMode()\n }\n\n /**\n * @deprecated\n *\n * Use getOwnAppMetadata instead\n */\n public async getAppMetadata(): Promise<AppMetadata> {\n return this.getOwnAppMetadata()\n }\n\n public async showPrepare(): Promise<void> {\n const walletInfo = await (async () => {\n try {\n return await this.getWalletInfo()\n } catch {\n return undefined\n }\n })()\n await this.events.emit(BeaconEvent.SHOW_PREPARE, { walletInfo })\n }\n\n public async hideUI(elements: ('alert' | 'toast')[]): Promise<void> {\n await this.events.emit(BeaconEvent.HIDE_UI, elements)\n }\n\n private async tryToAppSwitch() {\n if (!isMobileOS(window) || !this.enableAppSwitching) {\n return\n }\n\n const wallet = await this.getWalletInfo()\n\n if (wallet.type !== 'mobile' || !wallet.deeplink) {\n return\n }\n\n const link = isIOS(window) ? wallet.deeplink : (`${wallet.deeplink}wc?uri=` as any)\n\n if (!link?.length) {\n return\n }\n\n window.location = link\n }\n\n private addQueryParam(paramName: string, paramValue: string): string {\n return paramName + '=' + paramValue\n }\n\n private async buildPayload(\n action: 'connect' | 'message' | 'disconnect',\n status: 'start' | 'abort' | 'success' | 'error'\n ): Promise<RequestInit> {\n const wallet = await this.storage.get(StorageKey.LAST_SELECTED_WALLET)\n const transport = this._activeAccount.isResolved()\n ? ((await this.getActiveAccount())?.origin.type ?? 'UNKNOWN')\n : 'UNKNOWN'\n\n return {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n userId: this.userId,\n os: currentOS(),\n walletName: wallet?.name ?? 'init',\n walletType: wallet?.type ?? 'init',\n sdkVersion: SDK_VERSION,\n transport,\n time: new Date(),\n action,\n status\n })\n }\n }\n\n private async updateMetricsStorage(payload: string) {\n const queue = await this.beaconIDB.getAllKeys('metrics')\n\n if (queue.length >= 1000) {\n const key = queue.shift()!\n this.beaconIDB.delete(key.toString(), 'metrics')\n }\n\n this.beaconIDB.set(String(Date.now()), payload, 'metrics')\n }\n\n private sendMetrics(\n uri: string,\n options?: RequestInit,\n thenHandler?: (res: Response) => void,\n catchHandler?: (err: Error) => void\n ) {\n if (!this.enableMetrics && uri === 'performance-metrics/save') {\n options && this.updateMetricsStorage(options.body as string)\n }\n if (!this.enableMetrics) {\n return\n }\n\n fetch(`${BACKEND_URL}/${uri}`, options)\n .then((res) => thenHandler && thenHandler(res))\n .catch((err: Error) => {\n console.warn('Network error encountered. Metrics sharing have been automatically disabled.')\n logger.error(err.message)\n this.enableMetrics = false // in the event of a network error, stop sending metrics\n catchHandler && catchHandler(err)\n })\n }\n\n private async checkMakeRequest() {\n const isResolved = this._transport.isResolved()\n const isWCInstance = isResolved && (await this.transport) instanceof WalletConnectTransport\n await this.multiTabChannel.init()\n const isLeader = this.multiTabChannel.isLeader()\n\n return !isResolved || !isWCInstance || isLeader || isMobileOS(window)\n }\n\n /**\n * Will remove the account from the local storage and set a new active account if necessary.\n *\n * @param accountIdentifier ID of the account\n */\n public async removeAccount(accountIdentifier: string): Promise<void> {\n const removeAccountResult = super.removeAccount(accountIdentifier)\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (activeAccount && activeAccount.accountIdentifier === accountIdentifier) {\n await this.setActiveAccount(undefined)\n }\n\n return removeAccountResult\n }\n\n /**\n * Remove all accounts and set active account to undefined\n */\n public async removeAllAccounts(): Promise<void> {\n await super.removeAllAccounts()\n await this.setActiveAccount(undefined)\n }\n\n /**\n * Removes a peer and all the accounts that have been connected through that peer\n *\n * @param peer Peer to be removed\n */\n public async removePeer(\n peer: ExtendedPeerInfo,\n sendDisconnectToPeer: boolean = false\n ): Promise<void> {\n const transport = await this.transport\n\n const removePeerResult = transport.removePeer(peer)\n\n await this.removeAccountsForPeers([peer])\n\n if (sendDisconnectToPeer) {\n await this.sendDisconnectToPeer(peer, transport)\n }\n\n return removePeerResult\n }\n\n /**\n * Remove all peers and all accounts that have been connected through those peers\n */\n public async removeAllPeers(sendDisconnectToPeers: boolean = false): Promise<void> {\n const transport = await this.transport\n\n const peers: ExtendedPeerInfo[] = await transport.getPeers()\n const removePeerResult = transport.removeAllPeers()\n\n await this.removeAccountsForPeers(peers)\n\n if (sendDisconnectToPeers) {\n const disconnectPromises = peers.map((peer) => this.sendDisconnectToPeer(peer, transport))\n\n await Promise.all(disconnectPromises)\n }\n\n return removePeerResult\n }\n\n /**\n * Allows the user to subscribe to specific events that are fired in the SDK\n *\n * @param internalEvent The event to subscribe to\n * @param eventCallback The callback that will be called when the event occurs\n */\n public async subscribeToEvent<K extends BeaconEvent>(\n internalEvent: K,\n eventCallback: BeaconEventHandlerFunction<BeaconEventType[K]>\n ): Promise<void> {\n if (internalEvent === BeaconEvent.ACTIVE_ACCOUNT_SET) {\n this.isGetActiveAccountHandled = true\n }\n\n await this.events.on(internalEvent, eventCallback)\n }\n\n /**\n * Check if we have permissions to send the specific message type to the active account.\n * If no active account is set, only permission requests are allowed.\n *\n * @param type The type of the message\n */\n public async checkPermissions(type: BeaconMessageType): Promise<boolean> {\n if (\n [\n BeaconMessageType.PermissionRequest,\n BeaconMessageType.ProofOfEventChallengeRequest,\n BeaconMessageType.SimulatedProofOfEventChallengeRequest\n ].includes(type)\n ) {\n return true\n }\n\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (!activeAccount) {\n throw await this.sendInternalError('No active account set!')\n }\n\n const permissions = activeAccount.scopes\n\n switch (type) {\n case BeaconMessageType.OperationRequest:\n return permissions.includes(PermissionScope.OPERATION_REQUEST)\n case BeaconMessageType.SignPayloadRequest:\n return permissions.includes(PermissionScope.SIGN)\n // TODO: ENCRYPTION\n // case BeaconMessageType.EncryptPayloadRequest:\n // return permissions.includes(PermissionScope.ENCRYPT)\n case BeaconMessageType.BroadcastRequest:\n return true\n default:\n return false\n }\n }\n\n public async sendNotification(\n title: string,\n message: string,\n payload: string,\n protocolIdentifier: string\n ): Promise<string> {\n const activeAccount = await this.getActiveAccount()\n\n if (\n !activeAccount ||\n (activeAccount &&\n !activeAccount.scopes.includes(PermissionScope.NOTIFICATION) &&\n !activeAccount.notification)\n ) {\n throw new Error('notification permissions not given')\n }\n\n if (!activeAccount.notification?.token) {\n throw new Error('No AccessToken')\n }\n\n const url = activeAccount.notification?.apiUrl\n\n if (!url) {\n throw new Error('No Push URL set')\n }\n\n return this.sendNotificationWithAccessToken({\n url,\n recipient: activeAccount.address,\n title,\n body: message,\n payload,\n protocolIdentifier,\n accessToken: activeAccount.notification?.token\n })\n }\n\n private blockchains: Map<string, Blockchain> = new Map()\n\n addBlockchain(chain: Blockchain) {\n this.blockchains.set(chain.identifier, chain)\n chain.getWalletLists().then((walletLists) => {\n setDesktopList(walletLists.desktopList)\n setExtensionList(walletLists.extensionList)\n setWebList(walletLists.webList)\n setiOSList(walletLists.iOSList)\n })\n }\n\n removeBlockchain(chainIdentifier: string) {\n this.blockchains.delete(chainIdentifier)\n }\n\n public async permissionRequest(\n input: PermissionRequestV3<string>\n ): Promise<PermissionResponseV3<string>> {\n logger.log('permissionRequest', input)\n const blockchain = this.blockchains.get(input.blockchainIdentifier)\n if (!blockchain) {\n throw new Error(`Blockchain \"${input.blockchainIdentifier}\" not supported by dAppClient`)\n }\n\n const request: PermissionRequestV3<string> = {\n ...input,\n type: BeaconMessageType.PermissionRequest,\n blockchainData: {\n ...input.blockchainData,\n appMetadata: await this.getOwnAppMetadata()\n }\n }\n\n logger.log('REQUESTION PERMIMISSION V3', 'xxx', request)\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'start'))\n\n const logId = `makeRequestV3 ${Date.now()}`\n logger.time(true, logId)\n const { message: response, connectionInfo } = await this.makeRequestV3<\n PermissionRequestV3<string>,\n BeaconMessageWrapper<PermissionResponseV3<string>>\n >(request).catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request as any, requestError)\n })\n logger.time(false, logId)\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'start'))\n\n logger.log('RESPONSE V3', response, connectionInfo)\n\n const partialAccountInfos = await blockchain.getAccountInfosFromPermissionResponse(\n response.message\n )\n\n const accountInfo: any = {\n accountIdentifier: partialAccountInfos[0].accountId,\n senderId: response.senderId,\n origin: {\n type: connectionInfo.origin,\n id: connectionInfo.id\n },\n address: partialAccountInfos[0].address, // Store all addresses\n publicKey: partialAccountInfos[0].publicKey,\n scopes: response.message.blockchainData.scopes as any,\n connectedAt: new Date().getTime(),\n chainData: response.message.blockchainData\n }\n\n await this.accountManager.addAccount(accountInfo)\n await this.setActiveAccount(accountInfo)\n\n await blockchain.handleResponse({\n request,\n account: accountInfo,\n output: response,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n await this.notifySuccess(request as any, {\n account: accountInfo,\n output: {\n address: partialAccountInfos[0].address,\n network: { type: 'substrate' },\n scopes: []\n } as any,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n // return output\n return response.message\n }\n\n public async request(input: BlockchainRequestV3<string>): Promise<BlockchainResponseV3<string>> {\n logger.log('request', input)\n const blockchain = this.blockchains.get(input.blockchainIdentifier)\n if (!blockchain) {\n throw new Error(`Blockchain \"${blockchain}\" not supported by dAppClient`)\n }\n\n await blockchain.validateRequest(input)\n\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n if (!activeAccount) {\n throw await this.sendInternalError('No active account!')\n }\n\n const request: BlockchainRequestV3<string> = {\n ...input,\n type: BeaconMessageType.BlockchainRequest,\n accountId: activeAccount.accountIdentifier\n }\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n\n const logId = `makeRequestV3 ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequestV3<\n BlockchainRequestV3<string>,\n BeaconMessageWrapper<BlockchainResponseV3<string>>\n >(request)\n : this.makeRequestBC<any, any>(request)\n\n res.catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request as any, requestError)\n })\n\n const { message: response, connectionInfo } = (await res)!\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await blockchain.handleResponse({\n request,\n account: activeAccount,\n output: response,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n await this.notifySuccess(\n request as any,\n {\n walletInfo: await this.getWalletInfo()\n } as any\n )\n\n return response.message\n }\n\n /**\n * Send a permission request to the DApp. This should be done as the first step. The wallet will respond\n * with an publicKey and permissions that were given. The account returned will be set as the \"activeAccount\"\n * and will be used for the following requests.\n *\n * @param input The message details we need to prepare the PermissionRequest message.\n */\n public async requestPermissions(\n input?: RequestPermissionInput\n ): Promise<PermissionResponseOutput> {\n if ((input as any)?.network) {\n throw new Error(\n '[BEACON] the \"network\" property is no longer accepted in input. Please provide it when instantiating DAppClient.'\n )\n }\n\n const request: PermissionRequestInput = {\n appMetadata: await this.getOwnAppMetadata(),\n type: BeaconMessageType.PermissionRequest,\n network: this.network,\n scopes:\n input && input.scopes\n ? input.scopes\n : [PermissionScope.OPERATION_REQUEST, PermissionScope.SIGN]\n }\n\n this.analytics.track('event', 'DAppClient', 'Permission requested')\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'start'))\n\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n\n const res =\n (await this.checkMakeRequest()) || !(await this.getActiveAccount())\n ? this.makeRequest<PermissionRequest, PermissionResponse>(request, undefined, undefined)\n : this.makeRequestBC<PermissionRequest, PermissionResponse>(request)\n\n res.catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request, requestError)\n })\n\n const { message, connectionInfo } = (await res)!\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'success'))\n\n logger.log('requestPermissions', '######## MESSAGE #######')\n logger.log('requestPermissions', message)\n\n const accountInfo = await this.onNewAccount(message, connectionInfo)\n\n logger.log('requestPermissions', '######## ACCOUNT INFO #######')\n logger.log('requestPermissions', JSON.stringify(accountInfo))\n\n await this.accountManager.addAccount(accountInfo)\n\n const output: PermissionResponseOutput = {\n ...message,\n walletKey: accountInfo.walletKey,\n address: accountInfo.address,\n accountInfo\n }\n\n await this.notifySuccess(request, {\n account: accountInfo,\n output,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Permission received', {\n address: accountInfo.address\n })\n\n return output\n }\n\n /**\n * Send a proof of event request to the wallet. The wallet will either accept or decline the challenge.\n * If it is accepted, the challenge will be stored, meaning that even if the user refresh the page, the DAppClient will keep checking if the challenge has been fulfilled.\n * Once the challenge is stored, a challenge stored message will be sent to the wallet.\n * It's **highly recommended** to run a proof of event challenge to check the identity of an abstracted account\n *\n * @param input The message details we need to prepare the ProofOfEventChallenge message.\n */\n public async requestProofOfEventChallenge(input: RequestProofOfEventChallengeInput) {\n const activeAccount = await this.getActiveAccount()\n\n if (!activeAccount)\n throw new Error('Please request permissions before doing a proof of event challenge')\n if (\n activeAccount.walletType !== 'abstracted_account' &&\n activeAccount.verificationType !== 'proof_of_event'\n )\n throw new Error(\n 'This wallet is not an abstracted account and thus cannot perform proof of event'\n )\n\n const request: ProofOfEventChallengeRequestInput = {\n type: BeaconMessageType.ProofOfEventChallengeRequest,\n contractAddress: activeAccount.address,\n payload: input.payload\n }\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<ProofOfEventChallengeRequest, ProofOfEventChallengeResponse>(request)\n : this.makeRequestBC<ProofOfEventChallengeRequest, ProofOfEventChallengeResponse>(request)\n\n res.catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request, requestError)\n })\n\n const { message, connectionInfo } = (await res)!\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n this.analytics.track(\n 'event',\n 'DAppClient',\n `Proof of event challenge ${message.isAccepted ? 'accepted' : 'refused'}`,\n { address: activeAccount.address }\n )\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n return message\n }\n\n /**\n * Send a simulated proof of event request to the wallet. The wallet will either accept or decline the challenge.\n * It's the same than `requestProofOfEventChallenge` but rather than executing operations on the blockchain to prove the identity,\n * The wallet will return a list of operations that you'll be able to run on your side to verify the identity of the abstracted account\n * It's **highly recommended** to run a proof of event challenge to check the identity of an abstracted account\n *\n * @param input The message details we need to prepare the SimulatedProofOfEventChallenge message.\n */\n public async requestSimulatedProofOfEventChallenge(\n input: RequestSimulatedProofOfEventChallengeInput\n ) {\n const activeAccount = await this.getActiveAccount()\n\n if (!activeAccount)\n throw new Error('Please request permissions before doing a proof of event challenge')\n if (\n activeAccount.walletType !== 'abstracted_account' &&\n activeAccount.verificationType !== 'proof_of_event'\n ) {\n throw new Error(\n 'This wallet is not an abstracted account and thus cannot perform a simulated proof of event'\n )\n }\n\n const request: SimulatedProofOfEventChallengeRequestInput = {\n type: BeaconMessageType.SimulatedProofOfEventChallengeRequest,\n contractAddress: activeAccount.address,\n ...input\n }\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<\n SimulatedProofOfEventChallengeRequest,\n SimulatedProofOfEventChallengeResponse\n >(request)\n : this.makeRequestBC<\n SimulatedProofOfEventChallengeRequest,\n SimulatedProofOfEventChallengeResponse\n >(request)\n\n res.catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request, requestError)\n })\n\n const { message, connectionInfo } = (await res)!\n\n logger.time(false, logId)\n this.analytics.track(\n 'event',\n 'DAppClient',\n `Simulated proof of event challenge ${!message.errorMessage ? 'accepted' : 'refused'}`,\n { address: activeAccount.address }\n )\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n return message\n }\n\n /**\n * This method will send a \"SignPayloadRequest\" to the wallet. This method is meant to be used to sign\n * arbitrary data (eg. a string). It will return the signature in the format of \"edsig...\"\n *\n * @param input The message details we need to prepare the SignPayloadRequest message.\n */\n public async requestSignPayload(\n input: RequestSignPayloadInput\n ): Promise<SignPayloadResponseOutput> {\n if (!input.payload) {\n throw await this.sendInternalError('Payload must be provided')\n }\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n if (!activeAccount) {\n throw await this.sendInternalError('No active account!')\n }\n\n const payload = input.payload\n\n if (typeof payload !== 'string') {\n throw new Error('Payload must be a string')\n }\n\n const signingType = ((): SigningType => {\n switch (input.signingType) {\n case SigningType.OPERATION:\n if (!payload.startsWith('03')) {\n throw new Error(\n 'When using signing type \"OPERATION\", the payload must start with prefix \"03\"'\n )\n }\n\n return SigningType.OPERATION\n\n case SigningType.MICHELINE:\n if (!payload.startsWith('05')) {\n throw new Error(\n 'When using signing type \"MICHELINE\", the payload must start with prefix \"05\"'\n )\n }\n\n return SigningType.MICHELINE\n\n case SigningType.RAW:\n default:\n return SigningType.RAW\n }\n })()\n\n this.analytics.track('event', 'DAppClient', 'Signature requested')\n\n const request: SignPayloadRequestInput = {\n type: BeaconMessageType.SignPayloadRequest,\n signingType,\n payload,\n sourceAddress: input.sourceAddress || activeAccount.address\n }\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<SignPayloadRequest, SignPayloadResponse>(request)\n : this.makeRequestBC<SignPayloadRequest, SignPayloadResponse>(request)\n\n res.catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request, requestError)\n })\n\n const { message, connectionInfo } = (await res)!\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Signature response')\n\n return message\n }\n\n /**\n * This method will send an \"EncryptPayloadRequest\" to the wallet. This method is meant to be used to encrypt or decrypt\n * arbitrary data (eg. a string). It will return the encrypted or decrypted payload\n *\n * @param input The message details we need to prepare the EncryptPayloadRequest message.\n */\n // TODO: ENCRYPTION\n // public async requestEncryptPayload(\n // input: RequestEncryptPayloadInput\n // ): Promise<EncryptPayloadResponseOutput> {\n // if (!input.payload) {\n // throw await this.sendInternalError('Payload must be provided')\n // }\n // const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n // if (!activeAccount) {\n // throw await this.sendInternalError('No active account!')\n // }\n\n // const payload = input.payload\n\n // if (typeof payload !== 'string') {\n // throw new Error('Payload must be a string')\n // }\n\n // if (typeof input.encryptionCryptoOperation === 'undefined') {\n // throw new Error('encryptionCryptoOperation must be defined')\n // }\n\n // if (typeof input.encryptionType === 'undefined') {\n // throw new Error('encryptionType must be defined')\n // }\n\n // const request: EncryptPayloadRequestInput = {\n // type: BeaconMessageType.EncryptPayloadRequest,\n // cryptoOperation: input.encryptionCryptoOperation,\n // encryptionType: input.encryptionType,\n // payload,\n // sourceAddress: input.sourceAddress || activeAccount.address\n // }\n\n // const { message, connectionInfo } = await this.makeRequest<\n // EncryptPayloadRequest,\n // EncryptPayloadResponse\n // >(request).catch(async (requestError: ErrorResponse) => {\n // throw await this.handleRequestError(request, requestError)\n // })\n\n // await this.notifySuccess(request, {\n // account: activeAccount,\n // output: message,\n // connectionContext: connectionInfo,\n // walletInfo: await this.getWalletInfo()\n // })\n\n // return message\n // }\n\n /**\n * This method sends an OperationRequest to the wallet. This method should be used for all kinds of operations,\n * eg. transaction or delegation. Not all properties have to be provided. Data like \"counter\" and fees will be\n * fetched and calculated by the wallet (but they can still be provided if required).\n *\n * @param input The message details we need to prepare the OperationRequest message.\n */\n public async requestOperation(input: RequestOperationInput): Promise<OperationResponseOutput> {\n if (!input.operationDetails) {\n throw await this.sendInternalError('Operation details must be provided')\n }\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (!activeAccount) {\n throw await this.sendInternalError('No active account!')\n }\n\n const request: OperationRequestInput = {\n type: BeaconMessageType.OperationRequest,\n network: activeAccount.network || this.network,\n operationDetails: input.operationDetails,\n sourceAddress: activeAccount.address || ''\n }\n\n this.analytics.track('event', 'DAppClient', 'Operation requested')\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<OperationRequest, OperationResponse>(request)\n : this.makeRequestBC<OperationRequest, OperationResponse>(request)\n\n res.catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request, requestError)\n })\n\n const { message, connectionInfo } = (await res)!\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Operation response')\n\n return message\n }\n\n /**\n * Sends a \"BroadcastRequest\" to the wallet. This method can be used to inject an already signed transaction\n * to the network.\n *\n * @param input The message details we need to prepare the BroadcastRequest message.\n */\n public async requestBroadcast(input: RequestBroadcastInput): Promise<BroadcastResponseOutput> {\n if (!input.signedTransaction) {\n throw await this.sendInternalError('Signed transaction must be provided')\n }\n\n // Add error message for deprecation of network\n // TODO: Remove when we remove deprecated preferredNetwork\n if (input.network !== undefined && this.network.type !== input.network?.type) {\n console.error(\n '[BEACON] The network specified in the DAppClient constructor does not match the network set in the broadcast request. Please set the network in the constructor. Setting it during the Broadcast Request is deprecated.'\n )\n }\n\n const request: BroadcastRequestInput = {\n type: BeaconMessageType.BroadcastRequest,\n network: this.network,\n signedTransaction: input.signedTransaction\n }\n\n this.analytics.track('event', 'DAppClient', 'Broadcast requested')\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<BroadcastRequest, BroadcastResponse>(request)\n : this.makeRequestBC<BroadcastRequest, BroadcastResponse>(request)\n\n res.catch(async (requestError: ErrorResponse) => {\n requestError.errorType === BeaconErrorType.ABORTED_ERROR\n ? this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n : this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n logger.time(false, logId)\n throw await this.handleRequestError(request, requestError)\n })\n\n const { message, connectionInfo } = (await res)!\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await this.notifySuccess(request, {\n network: this.network,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Broadcast response')\n\n return message\n }\n\n protected async setActivePeer(peer?: PeerInfoType): Promise<void> {\n if (this._activePeer.isSettled()) {\n // If the promise has already been resolved we need to create a new one.\n this._activePeer = ExposedPromise.resolve(peer)\n } else {\n this._activePeer.resolve(peer)\n }\n\n if (!peer) {\n return\n }\n\n await this.initInternalTransports()\n\n if (peer.type === 'postmessage-pairing-response') {\n await this.setTransport(this.postMessageTransport)\n } else if (peer.type === 'p2p-pairing-response') {\n await this.setTransport(this.p2pTransport)\n }\n }\n\n /**\n * A \"setter\" for when the transport needs to be changed.\n */\n protected async setTransport(transport?: Transport<any>): Promise<void> {\n if (!transport) {\n this._initPromise = undefined\n }\n\n const result = super.setTransport(transport)\n\n const event = transport ? { ...(transport as any) } : undefined\n\n // remove keyPair, to prevent dApps from accidentaly leaking the privateKey\n if (event) {\n event.client = {\n ...event.client,\n keyPair: undefined\n }\n }\n\n await this.events.emit(BeaconEvent.ACTIVE_TRANSPORT_SET, event)\n\n return result\n }\n\n /**\n * This method will emit an internal error message.\n *\n * @param errorMessage The error message to send.\n */\n private async sendInternalError(errorMessage: string): Promise<void> {\n await this.events.emit(BeaconEvent.INTERNAL_ERROR, { text: errorMessage })\n throw new Error(errorMessage)\n }\n\n /**\n * This method will remove all accounts associated with a specific peer.\n *\n * @param peersToRemove An array of peers for which accounts should be removed\n */\n private async removeAccountsForPeers(peersToRemove: ExtendedPeerInfo[]): Promise<void> {\n const peerIdsToRemove = peersToRemove.map((peer) => peer.senderId)\n\n return this.removeAccountsForPeerIds(peerIdsToRemove)\n }\n\n private async removeAccountsForPeerIds(peerIds: string[]): Promise<void> {\n const accounts = await this.accountManager.getAccounts()\n\n // Remove all accounts with origin of the specified peer\n const accountsToRemove = accounts.filter((account) => peerIds.includes(account.senderId))\n const accountIdentifiersToRemove = accountsToRemove.map(\n (accountInfo) => accountInfo.accountIdentifier\n )\n await this.accountManager.removeAccounts(accountIdentifiersToRemove)\n\n // Check if one of the accounts that was removed was the active account and if yes, set it to undefined\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (activeAccount) {\n if (accountIdentifiersToRemove.includes(activeAccount.accountIdentifier)) {\n await this.setActiveAccount(undefined)\n }\n }\n }\n\n /**\n * This message handles errors that we receive from the wallet.\n *\n * @param request The request we sent\n * @param beaconError The error we received\n */\n private async handleRequestError(\n request: BeaconRequestInputMessage,\n beaconError: ErrorResponse\n ): Promise<void> {\n logger.error('handleRequestError', 'error response', beaconError)\n if (beaconError.errorType) {\n const buttons: AlertButton[] = []\n if (beaconError.errorType === BeaconErrorType.NO_PRIVATE_KEY_FOUND_ERROR) {\n const actionCallback = async (): Promise<void> => {\n const operationRequest: OperationRequestInput = request as OperationRequestInput\n // if the account we requested is not available, we remove it locally\n let accountInfo: AccountInfo | undefined\n if (operationRequest.sourceAddress && operationRequest.network) {\n const accountIdentifier = await getAccountIdentifier(\n operationRequest.sourceAddress,\n operationRequest.network\n )\n accountInfo = await this.getAccount(accountIdentifier)\n\n if (accountInfo) {\n await this.removeAccount(accountInfo.accountIdentifier)\n }\n }\n }\n\n buttons.push({ text: 'Remove account', actionCallback })\n }\n\n const peer = await this.getPeer()\n const activeAccount = await this.getActiveAccount()\n\n // If we sent a permission request, received an error and there is no active account, we need to reset the DAppClient.\n // This most likely means that the user rejected the first permission request after pairing a wallet, so we \"forget\" the paired wallet to allow the user to pair again.\n if (\n request.type === BeaconMessageType.PermissionRequest &&\n (await this.getActiveAccount()) === undefined\n ) {\n this._initPromise = undefined\n this.postMessageTransport = undefined\n this.p2pTransport = undefined\n this.walletConnectTransport = undefined\n await this.setTransport()\n await this.setActivePeer()\n }\n\n this.events\n .emit(\n messageEvents[request.type].error,\n {\n errorResponse: beaconError,\n walletInfo: await this.getWalletInfo(peer, activeAccount),\n errorMessages: this.errorMessages\n },\n buttons\n )\n .catch((emitError) => logger.error('handleRequestError', emitError))\n\n throw getError(beaconError.errorType, beaconError.errorData)\n }\n\n throw beaconError\n }\n\n /**\n * This message will send an event when we receive a successful response to one of the requests we sent.\n *\n * @param request The request we sent\n * @param response The response we received\n */\n private async notifySuccess(\n request: BeaconRequestInputMessage,\n response:\n | {\n account: AccountInfo\n output: PermissionResponseOutput\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n account: AccountInfo\n output: ProofOfEventChallengeResponse\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n account: AccountInfo\n output: SimulatedProofOfEventChallengeResponse\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n account: AccountInfo\n output: OperationResponseOutput\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n output: SignPayloadResponseOutput\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n // | {\n // output: EncryptPayloadResponseOutput\n // connectionContext: ConnectionContext\n // walletInfo: WalletInfo\n // }\n | {\n network: Network\n output: BroadcastResponseOutput\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n ): Promise<void> {\n this.events\n .emit(messageEvents[request.type].success, response)\n .catch((emitError) => console.warn(emitError))\n }\n\n private async getWalletInfoFromStorage() {\n return await this.storage.get(StorageKey.LAST_SELECTED_WALLET)\n }\n\n private async updateStorageWallet(walletInfo: WalletInfo) {\n const wallet = await this.storage.get(StorageKey.LAST_SELECTED_WALLET)\n\n if (!wallet) {\n return\n }\n\n wallet.name = walletInfo.name\n wallet.icon = walletInfo.icon ?? wallet.icon\n this.storage.set(StorageKey.LAST_SELECTED_WALLET, wallet)\n }\n\n private async getWalletInfo(\n peer?: PeerInfo,\n account?: AccountInfo,\n readFromStorage: boolean = true\n ): Promise<WalletInfo> {\n const selectedAccount = account ? account : await this.getActiveAccount()\n\n const selectedPeer = peer ? peer : await this.getPeer(selectedAccount)\n\n let walletInfo: WalletInfo | undefined\n if (selectedAccount) {\n walletInfo = await this.appMetadataManager.getAppMetadata(selectedAccount.senderId)\n }\n\n let storageWallet\n\n if (readFromStorage) {\n storageWallet = await this.getWalletInfoFromStorage()\n }\n\n if (!walletInfo) {\n walletInfo = {\n name: selectedPeer?.name ?? storageWallet?.key ?? '',\n icon: selectedPeer?.icon ?? storageWallet?.icon,\n type: storageWallet?.type\n }\n\n this.updateStorageWallet(walletInfo)\n }\n\n const lowerCaseCompare = (str1?: string, str2?: string): boolean => {\n if (str1 && str2) {\n return str1.toLowerCase() === str2.toLowerCase()\n }\n\n return false\n }\n\n const getOrgName = (name: string) => name.split(/[_\\s]+/)[0]\n\n const apps: AppBase[] = [\n ...getiOSList(),\n ...getWebList(),\n ...getDesktopList(),\n ...getExtensionList()\n ].filter((app: AppBase) =>\n lowerCaseCompare(getOrgName(app.key), getOrgName(walletInfo?.name ?? 'wallet'))\n )\n\n // TODO: Remove once all wallets send the icon?\n const mobile = (apps as App[]).find(\n (app) => app.universalLink || app.key.includes('ios') || app.key.includes('mobile')\n )\n const browser = (apps as WebApp[]).find((app) => app.links)\n const desktop = (apps as DesktopApp[]).find((app) => app.downloadLink)\n const extension = (apps as ExtensionApp[]).find((app) => app.id)\n\n const appTypeMap = {\n extension: { app: extension, type: 'extension' },\n desktop: { app: desktop, type: 'desktop' },\n mobile: { app: mobile, type: 'mobile' },\n web: { app: browser, type: 'web' }\n }\n\n const defaultType = (): {\n app: AppBase | undefined\n type: 'extension' | 'mobile' | 'web' | 'desktop' | undefined\n } => {\n if (isBrowser(window) && browser) return { app: browser, type: 'web' }\n if (isDesktop(window) && desktop) return { app: desktop, type: 'desktop' }\n if (isBrowser(window) && extension) return { app: extension, type: 'extension' }\n if (mobile) return { app: mobile, type: 'mobile' }\n return { app: undefined, type: undefined }\n }\n\n const { app, type } = storageWallet ? appTypeMap[storageWallet.type] : defaultType()\n\n if (app) {\n let deeplink: string | undefined\n if (app.hasOwnProperty('links')) {\n deeplink = (app as WebApp).links[selectedAccount?.network.type ?? this.network.type]\n } else if (app.hasOwnProperty('deepLink')) {\n deeplink = (app as App).deepLink\n }\n\n return {\n name: app?.name ?? walletInfo.name,\n icon: app?.logo ?? walletInfo.icon,\n deeplink,\n type: type as any\n }\n }\n\n return walletInfo\n }\n\n private async getPeer(account?: AccountInfo): Promise<PeerInfo | undefined> {\n let peer: PeerInfo | undefined\n\n if (account) {\n logger.log('getPeer', 'We have an account', account)\n const postMessagePeers: ExtendedPostMessagePairingResponse[] =\n (await this.postMessageTransport?.getPeers()) ?? []\n const p2pPeers: ExtendedP2PPairingResponse[] = (await this.p2pTransport?.getPeers()) ?? []\n const walletConnectPeers: ExtendedWalletConnectPairingResponse[] =\n (await this.walletConnectTransport?.getPeers()) ?? []\n const peers = [...postMessagePeers, ...p2pPeers, ...walletConnectPeers]\n\n logger.log('getPeer', 'Found peers', peers, account)\n\n peer = peers.find((peerEl) => peerEl.senderId === account.senderId)\n if (!peer) {\n // We could not find an exact match for a sender, so we most likely received it over a relay\n peer = peers.find((peerEl) => (peerEl as any).id === account.origin.id)\n }\n } else {\n peer = await this._activePeer.promise\n logger.log('getPeer', 'Active peer', peer)\n }\n\n return peer\n }\n\n /**\n * This method handles sending of requests to the DApp. It makes sure that the DAppClient is initialized and connected\n * to the transport. After that rate limits and permissions will be checked, an ID is attached and the request is sent\n * to the DApp over the transport.\n *\n * @param requestInput The BeaconMessage to be sent to the wallet\n * @param account The account that the message will be sent to\n * @param skipResponse If true, the function return as soon as the message is sent\n */\n\n private makeRequest<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n requestInput: Optional<T, IgnoredRequestInputProperties>,\n skipResponse?: undefined | false,\n otherTabMessageId?: string\n ): Promise<{\n message: U\n connectionInfo: ConnectionContext\n }>\n private makeRequest<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n requestInput: Optional<T, IgnoredRequestInputProperties>,\n skipResponse: true,\n otherTabMessageId?: string\n ): Promise<undefined>\n private async makeRequest<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n requestInput: Optional<T, IgnoredRequestInputProperties>,\n skipResponse?: boolean,\n otherTabMessageId?: string\n ) {\n const messageId = otherTabMessageId ?? (await generateGUID())\n\n if (this._initPromise && this.isInitPending) {\n await Promise.all([\n this.postMessageTransport?.disconnect(),\n this.walletConnectTransport?.disconnect()\n ])\n this._initPromise = undefined\n this.hideUI(['toast'])\n }\n\n logger.log('makeRequest', 'starting')\n this.isInitPending = true\n await this.init()\n this.isInitPending = false\n logger.log('makeRequest', 'after init')\n\n if (await this.addRequestAndCheckIfRateLimited()) {\n this.events\n .emit(BeaconEvent.LOCAL_RATE_LIMIT_REACHED)\n .catch((emitError) => console.warn(emitError))\n\n throw new Error('rate limit reached')\n }\n\n if (!(await this.checkPermissions(requestInput.type))) {\n this.events.emit(BeaconEvent.NO_PERMISSIONS).catch((emitError) => console.warn(emitError))\n\n throw new Error('No permissions to send this request to wallet!')\n }\n\n if (!this.beaconId) {\n throw await this.sendInternalError('octez.connect ID not defined')\n }\n\n const request: Optional<T, IgnoredRequestInputProperties> &\n Pick<U, IgnoredRequestInputProperties> = {\n id: messageId,\n version: '2', // This is the old version\n senderId: await getSenderId(await this.beaconId),\n ...requestInput\n }\n\n let exposed\n\n if (!skipResponse) {\n exposed = new ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >()\n\n this.addOpenRequest(request.id, exposed)\n }\n\n const payload = await new Serializer().serialize(request)\n\n const account = await this.getActiveAccount()\n\n const peer = await this.getPeer(account)\n\n const walletInfo = await this.getWalletInfo(peer, account)\n\n logger.log('makeRequest', 'sending message', request)\n try {\n ;(await this.transport).send(payload, peer)\n if (\n request.type !== BeaconMessageType.PermissionRequest ||\n (this._activeAccount.isResolved() && (await this._activeAccount.promise))\n ) {\n this.tryToAppSwitch()\n }\n } catch (sendError) {\n this.events.emit(BeaconEvent.INTERNAL_ERROR, {\n text: 'Unable to send message. If this problem persists, please reset the connection and pair your wallet again.',\n buttons: [\n {\n text: 'Reset Connection',\n actionCallback: async () => {\n closeToast()\n this.disconnect()\n }\n }\n ]\n })\n throw sendError\n }\n\n if (!otherTabMessageId) {\n this.events\n .emit(messageEvents[requestInput.type].sent, {\n walletInfo: {\n ...walletInfo,\n name: walletInfo.name ?? 'Wallet'\n },\n extraInfo: {\n resetCallback: async () => {\n this.disconnect()\n }\n }\n })\n .catch((emitError) => console.warn(emitError))\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return exposed?.promise as any // TODO: fix type\n }\n\n /**\n * This method handles sending of requests to the DApp. It makes sure that the DAppClient is initialized and connected\n * to the transport. After that rate limits and permissions will be checked, an ID is attached and the request is sent\n * to the DApp over the transport.\n *\n * @param requestInput The BeaconMessage to be sent to the wallet\n * @param account The account that the message will be sent to\n */\n private async makeRequestV3<\n T extends BlockchainMessage<string>,\n U extends BeaconMessageWrapper<BlockchainMessage<string>>\n >(\n requestInput: T,\n otherTabMessageId?: string\n ): Promise<{\n message: U\n connectionInfo: ConnectionContext\n }> {\n if (this._initPromise && this.isInitPending) {\n await Promise.all([\n this.postMessageTransport?.disconnect(),\n this.walletConnectTransport?.disconnect()\n ])\n this._initPromise = undefined\n this.hideUI(['toast'])\n }\n\n const messageId = otherTabMessageId ?? (await generateGUID())\n logger.log('makeRequest', 'starting')\n this.isInitPending = true\n await this.init(undefined, true)\n this.isInitPending = false\n logger.log('makeRequest', 'after init')\n\n if (await this.addRequestAndCheckIfRateLimited()) {\n this.events\n .emit(BeaconEvent.LOCAL_RATE_LIMIT_REACHED)\n .catch((emitError) => console.warn(emitError))\n\n throw new Error('rate limit reached')\n }\n\n if (!this.beaconId) {\n throw await this.sendInternalError('octez.connect ID not defined')\n }\n\n const request: BeaconMessageWrapper<BlockchainMessage> = {\n id: messageId,\n version: '3',\n senderId: await getSenderId(await this.beaconId),\n message: requestInput\n }\n\n const exposed = new ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >()\n\n this.addOpenRequest(request.id, exposed)\n\n const payload = await new Serializer().serialize(request)\n\n const account = await this.getActiveAccount()\n\n const peer = await this.getPeer(account)\n\n const walletInfo = await this.getWalletInfo(peer, account)\n\n logger.log('makeRequest', 'sending message', request)\n try {\n ;(await this.transport).send(payload, peer)\n if (\n request.message.type !== BeaconMessageType.PermissionRequest ||\n (this._activeAccount.isResolved() && (await this._activeAccount.promise))\n ) {\n this.tryToAppSwitch()\n }\n } catch (sendError) {\n this.events.emit(BeaconEvent.INTERNAL_ERROR, {\n text: 'Unable to send message. If this problem persists, please reset the connection and pair your wallet again.',\n buttons: [\n {\n text: 'Reset Connection',\n actionCallback: async () => {\n closeToast()\n this.disconnect()\n }\n }\n ]\n })\n throw sendError\n }\n\n const index = requestInput.type as any as BeaconMessageType\n\n this.events\n .emit(messageEvents[index].sent, {\n walletInfo: {\n ...walletInfo,\n name: walletInfo.name ?? 'Wallet'\n },\n extraInfo: {\n resetCallback: async () => {\n this.disconnect()\n }\n }\n })\n .catch((emitError) => console.warn(emitError))\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return exposed.promise as any // TODO: fix type\n }\n\n private async makeRequestBC<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n request: Optional<T, IgnoredRequestInputProperties>\n ): Promise<\n | {\n message: U\n connectionInfo: ConnectionContext\n }\n | undefined\n > {\n if (!this._transport.isResolved()) {\n return\n }\n\n const transport = await this.transport\n\n if (transport.type !== TransportType.WALLETCONNECT) {\n return\n }\n\n if (await this.addRequestAndCheckIfRateLimited()) {\n this.events\n .emit(BeaconEvent.LOCAL_RATE_LIMIT_REACHED)\n .catch((emitError) => console.warn(emitError))\n\n throw new Error('rate limit reached')\n }\n\n const id = await generateGUID()\n\n this.multiTabChannel.postMessage({\n type: request.type,\n data: request,\n id\n })\n\n if (\n request.type !== BeaconMessageType.PermissionRequest ||\n (this._activeAccount.isResolved() && (await this._activeAccount.promise))\n ) {\n this.tryToAppSwitch()\n }\n\n this.events\n .emit(messageEvents[BeaconMessageType.PermissionRequest].sent, {\n walletInfo: await this.getWalletInfo(),\n extraInfo: {\n resetCallback: () => this.disconnect()\n }\n })\n .catch((emitError) => console.warn(emitError))\n\n const exposed = new ExposedPromise<\n {\n message: U\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >()\n\n this.addOpenRequest(id, exposed as any)\n\n return exposed.promise\n }\n\n public async disconnect() {\n if (!this._transport.isResolved()) {\n throw new Error('No transport available.')\n }\n\n const transport = await this.transport\n\n if (transport.connectionStatus === TransportStatus.NOT_CONNECTED) {\n throw new Error('Not connected.')\n }\n\n await this.createStateSnapshot()\n this.sendMetrics('performance-metrics/save', await this.buildPayload('disconnect', 'start'))\n await this.clearActiveAccount()\n if (!(transport instanceof WalletConnectTransport)) {\n await transport.disconnect()\n }\n this.postMessageTransport = undefined\n this.p2pTransport = undefined\n this.walletConnectTransport = undefined\n this.sendMetrics('performance-metrics/save', await this.buildPayload('disconnect', 'success'))\n }\n\n /**\n * Adds a requests to the \"openRequests\" set so we know what messages have already been answered/handled.\n *\n * @param id The ID of the message\n * @param promise A promise that resolves once the response for that specific message is received\n */\n private addOpenRequest(\n id: string,\n promise: ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >\n ): void {\n logger.log('addOpenRequest', this.name, `adding request ${id} and waiting for answer`)\n this.openRequests.set(id, promise)\n }\n\n private async sendNotificationWithAccessToken(notification: {\n url: string\n recipient: string\n title: string\n body: string\n payload: string\n protocolIdentifier: string\n accessToken: string\n }): Promise<string> {\n const { url, recipient, title, body, payload, protocolIdentifier, accessToken } = notification\n const timestamp = new Date().toISOString()\n\n const keypair = await this.keyPair\n\n const rawPublicKey = keypair.publicKey\n\n const prefix = Buffer.from(new Uint8Array([13, 15, 37, 217]))\n\n const publicKey = bs58check.encode(Buffer.concat([prefix, Buffer.from(rawPublicKey)]))\n\n const constructedString = [\n 'Tezos Signed Message: ',\n recipient,\n title,\n body,\n timestamp,\n payload\n ].join(' ')\n\n const bytes = toHex(constructedString)\n const payloadBytes = '05' + '01' + bytes.length.toString(16).padStart(8, '0') + bytes\n\n const signature = await signMessage(payloadBytes, {\n secretKey: Buffer.from(keypair.secretKey)\n })\n\n const notificationResponse = await fetch(`${url}/send`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n recipient,\n title,\n body,\n timestamp,\n payload,\n accessToken,\n protocolIdentifier,\n sender: {\n name: this.name,\n publicKey,\n signature\n }\n })\n })\n\n if (!notificationResponse.ok) {\n throw new Error(\n `sendNotification failed: ${notificationResponse.status} ${notificationResponse.statusText}`\n )\n }\n\n return notificationResponse.json()\n }\n\n private async onNewAccount(\n message: PermissionResponse | ChangeAccountRequest,\n connectionInfo: ConnectionContext\n ): Promise<AccountInfo> {\n // TODO: Migration code. Remove sometime after 1.0.0 release.\n const tempPK: string | undefined =\n message.publicKey || (message as any).pubkey || (message as any).pubKey\n\n const publicKey = tempPK ? prefixPublicKey(tempPK) : undefined\n\n if (!publicKey && !message.address) {\n throw new Error('PublicKey or Address must be defined')\n }\n\n const address = message.address ?? (await getAddressFromPublicKey(publicKey!))\n\n if (!isValidAddress(address)) {\n throw new Error(`Invalid address: \"${address}\"`)\n }\n\n if (\n message.walletType === 'abstracted_account' &&\n address.substring(0, 3) !== CONTRACT_PREFIX\n ) {\n throw new Error(\n `Invalid abstracted account address \"${address}\", it should be a ${CONTRACT_PREFIX} address`\n )\n }\n\n logger.log('######## MESSAGE #######')\n logger.log('onNewAccount', message)\n\n const walletKey = (await this.storage.get(StorageKey.LAST_SELECTED_WALLET))?.key\n\n const accountInfo: AccountInfo = {\n accountIdentifier: await getAccountIdentifier(address, message.network),\n senderId: message.senderId,\n origin: {\n type: connectionInfo.origin,\n id: connectionInfo.id\n },\n walletKey,\n address,\n publicKey,\n network: message.network,\n scopes: message.scopes,\n threshold: message.threshold,\n notification: message.notification,\n connectedAt: new Date().getTime(),\n walletType: message.walletType ?? 'implicit',\n verificationType: message.verificationType,\n ...(message.verificationType === 'proof_of_event' ? { hasVerifiedChallenge: false } : {})\n }\n\n logger.log('accountInfo', '######## ACCOUNT INFO #######')\n\n logger.log('accountInfo', accountInfo)\n\n await this.accountManager.addAccount(accountInfo)\n await this.setActiveAccount(accountInfo)\n\n return accountInfo\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DAppClient.js","sourceRoot":"","sources":["../../../src/dapp-client/DAppClient.ts"],"names":[],"mappings":"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","sourcesContent":["import bs58check from 'bs58check'\nimport {\n ConnectionContext,\n AccountInfo,\n TransportType,\n StorageKey,\n BeaconMessageType,\n PermissionScope,\n PermissionResponse,\n NetworkType,\n SignPayloadResponse,\n SignPayloadRequest,\n OperationResponse,\n OperationRequest,\n BroadcastResponse,\n BroadcastRequest,\n ErrorResponse,\n BeaconMessage,\n RequestPermissionInput,\n RequestSignPayloadInput,\n RequestOperationInput,\n RequestBroadcastInput,\n PermissionRequest,\n PermissionResponseOutput,\n PermissionRequestInput,\n SignPayloadResponseOutput,\n SignPayloadRequestInput,\n OperationResponseOutput,\n OperationRequestInput,\n BroadcastResponseOutput,\n BroadcastRequestInput,\n BeaconRequestInputMessage,\n Network,\n Origin,\n PeerInfo,\n BeaconErrorType,\n AppMetadata,\n ExtendedP2PPairingResponse,\n ExtendedPostMessagePairingResponse,\n SigningType,\n ExtendedPeerInfo,\n Optional,\n ColorMode,\n IgnoredRequestInputProperties,\n WalletInfo,\n BeaconMessageWrapper,\n Blockchain,\n BlockchainMessage,\n BlockchainRequestV3,\n BlockchainResponseV3,\n PermissionRequestV3,\n PermissionResponseV3,\n BeaconBaseMessage,\n AcknowledgeResponse,\n ExtendedWalletConnectPairingResponse,\n ProofOfEventChallengeRequest,\n ProofOfEventChallengeResponse,\n ProofOfEventChallengeRequestInput,\n RequestProofOfEventChallengeInput,\n ChangeAccountRequest,\n PeerInfoType,\n App,\n AppBase,\n DesktopApp,\n ExtensionApp,\n WebApp,\n SimulatedProofOfEventChallengeRequestInput,\n SimulatedProofOfEventChallengeRequest,\n SimulatedProofOfEventChallengeResponse,\n RequestSimulatedProofOfEventChallengeInput,\n TransportStatus\n // PermissionRequestV3\n // RequestEncryptPayloadInput,\n // EncryptPayloadResponseOutput,\n // EncryptPayloadResponse,\n // EncryptPayloadRequest\n} from '@tezos-x/octez.connect-types'\nimport {\n Client,\n Transport,\n AppMetadataManager,\n Serializer,\n LocalStorage,\n getAccountIdentifier,\n getSenderId,\n Logger,\n ClientEvents,\n StorageValidator,\n SDK_VERSION,\n IndexedDBStorage,\n MultiTabChannel,\n getError\n} from '@tezos-x/octez.connect-core'\nimport {\n getAddressFromPublicKey,\n ExposedPromise,\n generateGUID,\n toHex,\n signMessage,\n CONTRACT_PREFIX,\n prefixPublicKey,\n isValidAddress,\n getKeypairFromSeed\n} from '@tezos-x/octez.connect-utils'\nimport { messageEvents } from '../beacon-message-events'\nimport {\n BeaconEvent,\n BeaconEventHandlerFunction,\n BeaconEventType,\n BeaconEventHandler,\n InvalidAccountDeactivatedReason\n} from '../events'\nimport { BlockExplorer } from '../utils/block-explorer'\nimport { TzktBlockExplorer } from '../utils/tzkt-blockexplorer'\n\nimport { DAppClientOptions } from './DAppClientOptions'\nimport { DappPostMessageTransport } from '../transports/DappPostMessageTransport'\nimport { DappP2PTransport } from '../transports/DappP2PTransport'\nimport { DappWalletConnectTransport } from '../transports/DappWalletConnectTransport'\nimport { PostMessageTransport } from '@tezos-x/octez.connect-transport-postmessage'\nimport {\n AlertButton,\n closeToast,\n getColorMode,\n setColorMode,\n setDesktopList,\n setExtensionList,\n setWebList,\n setiOSList,\n getiOSList,\n getDesktopList,\n getExtensionList,\n getWebList,\n isBrowser,\n isDesktop,\n isMobileOS,\n isIOS,\n currentOS\n} from '@tezos-x/octez.connect-ui'\nimport { WalletConnectTransport } from '@tezos-x/octez.connect-transport-walletconnect'\n\nconst logger = new Logger('DAppClient')\nconst DEFAULT_REQUEST_TIMEOUT_MS = 60_000\nconst SESSION_UPDATE_REQUEST_ID = 'session_update'\n\nconst createLazyPromise = <T>(factory: () => Promise<T>): PromiseLike<T> => {\n let promise: Promise<T> | undefined\n\n const getPromise = (): Promise<T> => {\n if (!promise) {\n promise = factory()\n }\n\n return promise\n }\n\n const lazyPromise: PromiseLike<T> & Pick<Promise<T>, 'catch' | 'finally'> = {\n then: <TResult1 = T, TResult2 = never>(\n onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | null,\n onrejected?: ((reason: unknown) => TResult2 | PromiseLike<TResult2>) | null\n ): Promise<TResult1 | TResult2> => getPromise().then(onfulfilled, onrejected),\n catch: <TResult = never>(\n onrejected?: ((reason: unknown) => TResult | PromiseLike<TResult>) | null\n ): Promise<T | TResult> => getPromise().catch(onrejected),\n finally: (onfinally?: (() => void) | null): Promise<T> =>\n getPromise().finally(onfinally ?? undefined)\n }\n\n return lazyPromise\n}\n\nexport interface DAppClientDisconnectOptions {\n /**\n * Send Beacon disconnect messages to stored wallet peers before tearing down the transport.\n *\n * Defaults to true because DAppClient.disconnect is the user-facing wallet logout path.\n */\n notifyPeers?: boolean\n}\n\nexport interface DAppClientRemoveAllPeersOptions {\n /**\n * Continue removing local peer/account state even if notifying one peer fails.\n */\n ignoreDisconnectErrors?: boolean\n}\n\ntype DAppInternalTransport =\n | DappPostMessageTransport\n | DappP2PTransport\n | DappWalletConnectTransport\n\ninterface TransportWithClientCleanup {\n doClientCleanup: () => Promise<void>\n}\n\ninterface PeersForTransport {\n transport: DAppInternalTransport\n peers: ExtendedPeerInfo[]\n}\n\ninterface PeerNotification {\n transport: DAppInternalTransport\n peer: ExtendedPeerInfo\n}\n\n/**\n * @publicapi\n *\n * The DAppClient has to be used in decentralized applications. It handles all the logic related to connecting to beacon-compatible\n * wallets and sending requests.\n *\n * @category DApp\n */\nexport class DAppClient extends Client {\n /**\n * The description of the app\n */\n public readonly description?: string\n\n /**\n * The block explorer used by the SDK\n */\n public readonly blockExplorer: BlockExplorer\n\n /**\n * Automatically switch between apps on Mobile Devices (Enabled by Default)\n */\n private enableAppSwitching: boolean\n\n /**\n * Enable metrics tracking (Disabled by Default)\n */\n private enableMetrics?: boolean\n\n private userId?: string\n\n public network: Network\n\n protected readonly events: BeaconEventHandler = new BeaconEventHandler()\n\n protected postMessageTransport: DappPostMessageTransport | undefined\n protected p2pTransport: DappP2PTransport | undefined\n protected walletConnectTransport: DappWalletConnectTransport | undefined\n\n protected wcProjectId?: string\n protected wcRelayUrl?: string\n\n /**\n * When true, the WalletConnect transport is not built or listened to. See\n * DAppClientOptions.disableWalletConnect.\n */\n protected disableWalletConnect: boolean\n\n private isGetActiveAccountHandled: boolean = false\n\n private readonly openRequestsOtherTabs = new Set<string>()\n /**\n * A map of requests that are currently \"open\", meaning we have sent them to a wallet and are still awaiting a response.\n */\n private readonly openRequests = new Map<\n string,\n ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >\n >()\n\n private readonly acknowledgedRequests = new Set<string>()\n private readonly openRequestTimeouts = new Map<string, ReturnType<typeof setTimeout>>()\n private readonly requestTimeoutMs: number\n\n /**\n * The currently active account. For all requests that are associated to a specific request (operation request, signing request),\n * the active account is used to determine the network and destination wallet\n */\n private _activeAccount: ExposedPromise<AccountInfo | undefined> = new ExposedPromise()\n\n /**\n * The currently active peer. This is used to address a peer in case the active account is not set. (Eg. for permission requests)\n */\n private _activePeer: ExposedPromise<PeerInfoType | undefined> = new ExposedPromise()\n\n private _initPromise: Promise<TransportType> | undefined\n\n /**\n * Rejector for the in-flight {@link _initPromise}. Populated while init is\n * awaiting a peer pairing; cleared automatically when {@link _initPromise}\n * settles. Abort paths (modal close, WC session-proposal rejection,\n * transport-level connection failure) call this to unwedge any\n * `await this.init()` caller, surfacing the error to handleRequestError\n * instead of hanging.\n */\n private _initReject: ((reason: ErrorResponse) => void) | undefined\n\n private _initSubstratePairing: boolean | undefined\n\n private _requestPermissionsPromise: Promise<PermissionResponseOutput> | undefined\n\n private _requestPermissionsKey: string | undefined\n\n private _sdkSecretSeedPromise: Promise<string> | undefined\n\n private destroyed = false\n\n private readonly activeAccountLoaded: Promise<AccountInfo | undefined>\n\n private readonly storageValidated: Promise<void>\n\n private readonly appMetadataManager: AppMetadataManager\n\n private readonly disclaimerText?: string\n\n private readonly errorMessages: Record<string, Record<string | number, string>>\n\n private readonly featuredWallets: string[] | undefined\n\n private readonly storageValidator: StorageValidator\n\n private readonly beaconIDB = new IndexedDBStorage('beacon', ['bug_report', 'metrics'])\n\n private debounceSetActiveAccount: boolean = false\n\n // Constructor-time invalid storage recovery can race through multiple async paths.\n // Keep this guard scoped to those startup paths.\n private hasEmittedInvalidAccountDeactivated: boolean = false\n\n private _disconnectPromise?: Promise<void>\n private _disconnectNotifyPeers: boolean = false\n\n private multiTabChannel = new MultiTabChannel(\n 'octez.connect-sdk-channel',\n this.onBCMessageHandler.bind(this),\n this.onElectedLeaderhandler.bind(this)\n )\n\n constructor(config: DAppClientOptions) {\n super({\n storage: config && config.storage ? config.storage : new LocalStorage(),\n ...config\n })\n this.description = config.description\n this.disableWalletConnect = config.disableWalletConnect ?? false\n if (!this.disableWalletConnect) {\n this.wcProjectId = config.walletConnectOptions?.projectId || '24469fd0a06df227b6e5f7dc7de0ff4f'\n this.wcRelayUrl = config.walletConnectOptions?.relayUrl\n }\n\n this.featuredWallets = config.featuredWallets\n\n this.events = new BeaconEventHandler(config.eventHandlers, config.disableDefaultEvents ?? false)\n this.blockExplorer = config.blockExplorer ?? new TzktBlockExplorer()\n this.network = config.network ?? { type: config.preferredNetwork ?? NetworkType.MAINNET }\n setColorMode(config.colorMode ?? ColorMode.LIGHT)\n\n this.disclaimerText = config.disclaimerText\n\n this.errorMessages = config.errorMessages ?? {}\n\n this.appMetadataManager = new AppMetadataManager(this.storage)\n this.storageValidator = new StorageValidator(this.storage)\n\n this.enableAppSwitching =\n config.enableAppSwitching === undefined ? true : !!config.enableAppSwitching\n\n this.enableMetrics = config.enableMetrics ? true : false\n this.requestTimeoutMs = config.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS\n\n // Subscribe to storage changes and update the active account if it changes on other tabs\n this.storage.subscribeToStorageChanged(async (event) => {\n if (event.oldValue === event.newValue) {\n return\n }\n\n if (event.eventType === 'storageCleared') {\n await this.setActiveAccount(undefined)\n return\n }\n if (event.eventType === 'entryModified') {\n if (event.key === this.storage.getPrefixedKey(StorageKey.ACTIVE_ACCOUNT)) {\n const accountIdentifier = event.newValue\n if (!accountIdentifier || accountIdentifier === 'undefined') {\n await this.setActiveAccount(undefined)\n } else {\n const account = await this.getAccount(accountIdentifier)\n await this.setActiveAccount(account)\n }\n return\n }\n if (event.key === this.storage.getPrefixedKey(StorageKey.ACCOUNTS)) {\n await this.recoverActiveAccountFromAccountsChange()\n\n return\n }\n if (event.key === this.storage.getPrefixedKey(StorageKey.ENABLE_METRICS)) {\n this.enableMetrics = !!(await this.storage.get(StorageKey.ENABLE_METRICS))\n return\n }\n if (event.key === this.storage.getPrefixedKey(StorageKey.BEACON_SDK_SECRET_SEED)) {\n this._keyPair = new ExposedPromise()\n this._beaconId = new ExposedPromise()\n await this.initSDK()\n return\n }\n }\n })\n\n this.activeAccountLoaded = this.storage\n .get(StorageKey.ACTIVE_ACCOUNT)\n .then(async (activeAccountIdentifier) => {\n const accounts = await this.accountManager.getAccounts()\n\n if (activeAccountIdentifier === 'undefined') {\n // Non-normalizing storage backends can still surface legacy sentinel strings directly.\n await this.deactivateInvalidAccountState('missing_active_account')\n\n return undefined\n }\n\n if (activeAccountIdentifier) {\n const account = accounts.find(\n (storedAccount) => storedAccount.accountIdentifier === activeAccountIdentifier\n )\n\n if (!account) {\n await this.deactivateInvalidAccountState('missing_active_account')\n\n return undefined\n }\n\n await this.setActiveAccount(account)\n return account\n }\n\n if (accounts.length > 0 && this.hasStoredActiveAccountPointer()) {\n await this.deactivateInvalidAccountState('missing_active_account')\n\n return undefined\n }\n\n await this.setActiveAccount(undefined)\n\n return undefined\n })\n .catch(async (storageError) => {\n logger.error(storageError)\n await this.deactivateInvalidAccountState('invalid_active_account_storage')\n return undefined\n })\n\n this.handleResponse = async (\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n connectionInfo: ConnectionContext\n ): Promise<void> => {\n const isV3WrappedMessage = message.version === '3' && 'message' in message\n\n const typedMessage = isV3WrappedMessage\n ? message.message\n : (message as BeaconMessage)\n\n let appMetadata: AppMetadata | undefined =\n isV3WrappedMessage\n ? (typedMessage as unknown as PermissionResponseV3<string>).blockchainData?.appMetadata\n : (typedMessage as PermissionResponse).appMetadata\n\n if (!appMetadata && isV3WrappedMessage) {\n const storedMetadata = await Promise.all([\n this.storage.get(StorageKey.TRANSPORT_P2P_PEERS_DAPP),\n this.storage.get(StorageKey.TRANSPORT_WALLETCONNECT_PEERS_DAPP),\n this.storage.get(StorageKey.TRANSPORT_POSTMESSAGE_PEERS_DAPP)\n ])\n\n for (const peers of storedMetadata) {\n const peer: any = peers.find((peer: any) => peer.senderId === message.senderId)\n if (!peer) {\n continue\n }\n\n const wallet = await this.getWalletInfo()\n\n appMetadata = {\n name: peer.name,\n senderId: peer.senderId,\n icon: wallet.icon\n }\n\n break\n }\n }\n\n if (this.openRequestsOtherTabs.has(message.id)) {\n this.multiTabChannel.postMessage({\n type: 'RESPONSE',\n data: {\n message,\n connectionInfo\n },\n id: message.id\n })\n\n if (typedMessage.type === BeaconMessageType.Acknowledge) {\n this.clearOpenRequestTimeout(message.id)\n } else {\n this.clearOpenRequest(message.id)\n }\n\n return\n }\n\n const openRequest = this.openRequests.get(message.id)\n\n logger.log('### openRequest ###', openRequest)\n logger.log('handleResponse', 'Received message', message, connectionInfo)\n logger.log('### message ###', JSON.stringify(message))\n logger.log('### connectionInfo ###', connectionInfo)\n\n const handleDisconnect = async (): Promise<void> => {\n this.analytics.track('event', 'DAppClient', 'Disconnect received from Wallet')\n\n const relevantTransport =\n connectionInfo.origin === Origin.P2P\n ? this.p2pTransport\n : connectionInfo.origin === Origin.WALLETCONNECT\n ? this.walletConnectTransport\n : (this.postMessageTransport ?? (await this.transport))\n\n if (relevantTransport) {\n const peers: ExtendedPeerInfo[] = await relevantTransport.getPeers()\n const peer: ExtendedPeerInfo | undefined = peers.find(\n (peerEl) => peerEl.senderId === message.senderId\n )\n\n if (peer) {\n await relevantTransport.removePeer(peer)\n }\n }\n\n await this.removeAccountsForPeerIds([message.senderId])\n await this.events.emit(BeaconEvent.CHANNEL_CLOSED)\n }\n\n if (openRequest && typedMessage.type === BeaconMessageType.Acknowledge) {\n if (!this.acknowledgedRequests.has(message.id)) {\n this.acknowledgedRequests.add(message.id)\n this.clearOpenRequestTimeout(message.id)\n this.analytics.track('event', 'DAppClient', 'Acknowledge received from Wallet')\n logger.log('handleResponse', `acknowledge message received for ${message.id}`)\n\n this.events\n .emit(BeaconEvent.ACKNOWLEDGE_RECEIVED, {\n message: typedMessage as AcknowledgeResponse,\n extraInfo: {},\n walletInfo: await this.getWalletInfo()\n })\n .catch((emitError) => logger.error('handleResponse', emitError))\n }\n } else if (openRequest) {\n if (typedMessage.type === BeaconMessageType.PermissionResponse && appMetadata) {\n await this.appMetadataManager.addAppMetadata(appMetadata)\n }\n\n if (typedMessage.type === BeaconMessageType.Error) {\n openRequest.reject(typedMessage as ErrorResponse)\n } else {\n openRequest.resolve({ message, connectionInfo })\n }\n this.clearOpenRequest(message.id)\n this.acknowledgedRequests.delete(message.id)\n } else {\n if (typedMessage.type === BeaconMessageType.Disconnect) {\n await handleDisconnect()\n } else if (typedMessage.type === BeaconMessageType.ChangeAccountRequest) {\n await this.onNewAccount(typedMessage as ChangeAccountRequest, connectionInfo)\n } else {\n logger.warn('handleResponse', 'received response for unknown or closed request', {\n id: message.id,\n type: typedMessage.type,\n connectionInfo\n })\n }\n }\n\n if (this._transport.isResolved()) {\n const transport = await this.transport\n\n if (\n transport instanceof WalletConnectTransport &&\n !this.openRequests.has(SESSION_UPDATE_REQUEST_ID)\n ) {\n this.openRequests.set(SESSION_UPDATE_REQUEST_ID, new ExposedPromise())\n }\n }\n }\n\n this.storageValidated = this.storageValidator\n .validate()\n .then(async (isValid) => {\n const account = await this.activeAccountLoaded\n\n if (!isValid) {\n const info = await this.getWalletInfo(undefined, account, false)\n info.type =\n info.type === 'extension' && account?.origin.type === Origin.P2P ? 'mobile' : info.type\n await this.storage.set(StorageKey.LAST_SELECTED_WALLET, {\n icon: info.icon ?? '',\n key: info.name,\n type: info.type ?? 'web',\n name: info.name,\n url: info.deeplink\n })\n\n const nowValid = await this.storageValidator.validate()\n\n if (!nowValid && account) {\n await this.deactivateInvalidAccountState('storage_validation_failed')\n } else if (!nowValid) {\n await this.resetInvalidState(false)\n }\n }\n\n if (account && account.origin.type !== 'p2p') {\n // Fire-and-forget eager init for stored sessions. init() can now\n // reject (e.g. when an abort path settles _initPromise), so swallow\n // here; downstream callers of init() handle rejection on their own.\n this.init().catch((initError) =>\n logger.error('eager init failed', (initError as Error)?.message ?? initError)\n )\n }\n })\n .catch((err) => logger.error(err.message))\n this.retainStorageValidationPromise()\n\n this.sendMetrics(\n 'enable-metrics?' + this.addQueryParam('version', SDK_VERSION),\n undefined,\n (res) => {\n if (!res.ok) {\n res.status === 426\n ? console.error('Metrics are no longer supported for this version, please upgrade.')\n : console.warn(\n 'Network error encountered. Metrics sharing have been automatically disabled.'\n )\n }\n this.enableMetrics = res.ok\n this.storage.set(StorageKey.ENABLE_METRICS, res.ok)\n },\n () => {\n this.enableMetrics = false\n this.storage.set(StorageKey.ENABLE_METRICS, false)\n }\n )\n\n this.initUserID().catch((err) => logger.error(err.message))\n }\n\n private async checkIfBCLeaderExists() {\n // broadcast channel does not work on mobile\n if (isMobileOS(window)) {\n return true\n }\n\n const hasLeader = await this.multiTabChannel.hasLeader()\n\n if (hasLeader) {\n return this.multiTabChannel.isLeader()\n }\n\n await this.multiTabChannel.getLeadership()\n\n return this.multiTabChannel.isLeader()\n }\n\n private async onElectedLeaderhandler() {\n if (!this._transport.isResolved()) {\n return\n }\n\n const tranport = await this.transport\n\n if (tranport.type !== TransportType.WALLETCONNECT) {\n return\n }\n\n if (tranport.connectionStatus === TransportStatus.CONNECTED) {\n return\n }\n\n await tranport.connect()\n }\n\n private async onBCMessageHandler(message: any) {\n switch (message.type) {\n case BeaconMessageType.PermissionRequest:\n case BeaconMessageType.OperationRequest:\n case BeaconMessageType.SignPayloadRequest:\n case BeaconMessageType.BroadcastRequest:\n case BeaconMessageType.ProofOfEventChallengeRequest:\n case BeaconMessageType.SimulatedProofOfEventChallengeRequest:\n this.prepareRequest(message)\n break\n case BeaconMessageType.BlockchainRequest:\n this.prepareRequest(message, true)\n break\n case 'RESPONSE':\n this.handleResponse(message.data.message, message.data.connectionInfo)\n break\n case 'DISCONNECT':\n this._transport.isResolved() && this.disconnect()\n break\n default:\n logger.error('onBCMessageHandler', 'message type not recognized', message)\n }\n }\n\n private async prepareRequest(message: any, isV3 = false) {\n if (!this.multiTabChannel.isLeader()) {\n return\n }\n\n // block until the transport is ready\n const transport = (await this._transport.promise) as DappWalletConnectTransport\n await transport.waitForResolution()\n\n this.openRequestsOtherTabs.add(message.id)\n const requestPromise = isV3\n ? this.makeRequestV3(message.data, message.id)\n : this.makeRequest(message.data, false, message.id)\n\n requestPromise.catch((requestError) => {\n const errorResponse = this.buildDelegatedRequestError(message.id, requestError)\n\n this.multiTabChannel.postMessage({\n type: 'RESPONSE',\n data: {\n message: errorResponse,\n connectionInfo: {\n origin: Origin.WALLETCONNECT,\n id: ''\n }\n },\n id: message.id\n })\n this.clearOpenRequest(message.id)\n })\n }\n\n private buildDelegatedRequestError(id: string, error: unknown): ErrorResponse {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'type' in error &&\n 'errorType' in error &&\n error.type === BeaconMessageType.Error\n ) {\n return {\n ...(error as ErrorResponse),\n id\n }\n }\n\n return {\n id,\n type: BeaconMessageType.Error,\n errorType: BeaconErrorType.UNKNOWN_ERROR,\n senderId: '',\n version: '2'\n }\n }\n\n private async createStateSnapshot() {\n if (!localStorage || !this.enableMetrics) {\n return\n }\n const keys = Object.values(StorageKey).filter(\n (key) => !key.includes('wc@2') && !key.includes('secret') && !key.includes('account')\n ) as unknown as StorageKey[]\n\n try {\n for (const key of keys) {\n await this.beaconIDB.set(key, this.storage.getPrefixedKey(key))\n }\n } catch (err: any) {\n logger.error('createStateSnapshot', err.message)\n }\n }\n\n private async initUserID() {\n const id = await this.storage.get(StorageKey.USER_ID)\n\n if (id) {\n this.userId = id\n return\n }\n\n this.userId = await generateGUID()\n\n this.storage.set(StorageKey.USER_ID, this.userId)\n }\n\n public async initInternalTransports(): Promise<void> {\n const seed = await this.getOrCreateSDKSecretSeed()\n const keyPair = await getKeypairFromSeed(seed)\n\n if (this.postMessageTransport || this.p2pTransport || this.walletConnectTransport) {\n return\n }\n\n this.postMessageTransport = new DappPostMessageTransport(this.name, keyPair, this.storage)\n await this.addListener(this.postMessageTransport)\n\n this.p2pTransport = new DappP2PTransport(\n this.name,\n keyPair,\n this.storage,\n this.matrixNodes,\n this.iconUrl,\n this.appUrl\n )\n\n await this.addListener(this.p2pTransport)\n\n // Skip WalletConnect entirely when disabled (e.g. inside a Firefox MV3 content-script\n // compartment where the WC provider cannot run). postMessage + P2P are unaffected.\n if (this.disableWalletConnect) {\n return\n }\n\n const wcOptions = {\n projectId: this.wcProjectId,\n relayUrl: this.wcRelayUrl,\n metadata: {\n name: this.name,\n description: this.description ?? '',\n url: this.appUrl ?? '',\n icons: this.iconUrl ? [this.iconUrl] : []\n }\n }\n\n this.walletConnectTransport = new DappWalletConnectTransport(\n this.name,\n keyPair,\n this.storage,\n {\n network: this.network.type,\n opts: wcOptions\n },\n this.checkIfBCLeaderExists.bind(this)\n )\n\n this.initEvents()\n\n await this.addListener(this.walletConnectTransport)\n }\n\n private async getOrCreateSDKSecretSeed(): Promise<string> {\n if (this._sdkSecretSeedPromise) {\n return this._sdkSecretSeedPromise\n }\n\n this._sdkSecretSeedPromise = this.loadOrCreateSDKSecretSeed()\n .finally(() => {\n this._sdkSecretSeedPromise = undefined\n })\n .catch((error) => {\n throw error\n })\n\n return this._sdkSecretSeedPromise\n }\n\n private async loadOrCreateSDKSecretSeed(): Promise<string> {\n const existingSeed = await this.storage.get(StorageKey.BEACON_SDK_SECRET_SEED)\n if (this.isValidSDKSecretSeed(existingSeed)) {\n return existingSeed\n }\n\n await this.storage.delete(StorageKey.BEACON_SDK_SECRET_SEED)\n this._keyPair = new ExposedPromise()\n this._beaconId = new ExposedPromise()\n await this.initSDK()\n\n const restoredSeed = await this.storage.get(StorageKey.BEACON_SDK_SECRET_SEED)\n if (this.isValidSDKSecretSeed(restoredSeed)) {\n return restoredSeed\n }\n\n throw new Error('Secret seed not found')\n }\n\n private isValidSDKSecretSeed(seed: unknown): seed is string {\n return typeof seed === 'string' && seed !== '' && seed !== 'undefined' && seed !== 'null'\n }\n\n private initEvents() {\n if (!this.walletConnectTransport) {\n return\n }\n\n this.walletConnectTransport.setEventHandler(\n ClientEvents.CLOSE_ALERT,\n this.hideUI.bind(this, ['alert', 'toast'])\n )\n this.walletConnectTransport.setEventHandler(\n ClientEvents.RESET_STATE,\n this.channelClosedHandler.bind(this)\n )\n this.walletConnectTransport.setEventHandler(\n ClientEvents.WC_ACK_NOTIFICATION,\n this.wcToastHandler.bind(this)\n )\n this.walletConnectTransport.setEventHandler(\n ClientEvents.ON_RELAYER_ERROR,\n this.onRelayerError.bind(this)\n )\n }\n\n private async onRelayerError() {\n await this.resetInvalidState(false)\n\n this.events.emit(BeaconEvent.RELAYER_ERROR)\n }\n\n private async wcToastHandler(status: string) {\n const walletInfo = await (async (): Promise<WalletInfo> => {\n try {\n return await this.getWalletInfo()\n } catch {\n return { name: 'wallet' }\n }\n })()\n\n await this.events.emit(BeaconEvent.HIDE_UI, ['alert'])\n if (status === 'pending') {\n this.events.emit(BeaconEvent.ACKNOWLEDGE_RECEIVED, {\n message: {} as any,\n extraInfo: {} as any,\n walletInfo\n })\n } else {\n // The WC transport reports session-proposal rejection through this event\n // when there are no active listeners yet (no peer paired). Reject the\n // in-flight init promise so `await dapp.requestPermissions()` unwinds\n // through requestPermissions' catch -> handleRequestError, which both\n // emits PERMISSION_REQUEST_ERROR and resets transport state. Without\n // this, the dapp wedges with a pending `_initPromise`.\n this._initReject?.(this.createAbortedError())\n }\n }\n private async channelClosedHandler(type: TransportType) {\n if (!this._transport.isResolved()) {\n await this.events.emit(BeaconEvent.CHANNEL_CLOSED)\n\n return\n }\n\n const transport = await this.transport\n\n if (transport.type !== type) {\n return\n }\n\n await this.events.emit(BeaconEvent.CHANNEL_CLOSED)\n await this.disconnect({ notifyPeers: false })\n }\n\n /**\n * Destroy the instance.\n *\n * WARNING: Call `destroy` whenever you no longer need dAppClient\n * as it frees internal subscriptions to the transport and therefore the instance may no longer work properly.\n * If you wish to disconnect your dApp, use `disconnect` instead.\n */\n public async destroy(): Promise<void> {\n this.destroyed = true\n\n await this.createStateSnapshot()\n await this.destroyInternalTransports()\n await super.destroy()\n }\n\n private async destroyInternalTransports(): Promise<void> {\n this.abortPendingInit()\n\n const transports: (DappPostMessageTransport | DappP2PTransport | DappWalletConnectTransport)[] =\n []\n if (this.postMessageTransport) {\n transports.push(this.postMessageTransport)\n }\n if (this.p2pTransport) {\n transports.push(this.p2pTransport)\n }\n if (this.walletConnectTransport) {\n transports.push(this.walletConnectTransport)\n }\n\n if (transports.length > 0) {\n await this.cleanup(transports)\n\n await Promise.all(\n transports.map(async (transport) => {\n await transport.disconnect()\n\n if ('doClientCleanup' in transport) {\n await transport.doClientCleanup()\n }\n })\n )\n\n this.postMessageTransport = this.p2pTransport = this.walletConnectTransport = undefined\n await this.setTransport(undefined)\n }\n await this.multiTabChannel.close()\n }\n\n private abortPendingInit(): void {\n this._initReject?.(this.createAbortedError())\n this._initPromise = undefined\n this._initReject = undefined\n this._initSubstratePairing = undefined\n this._requestPermissionsPromise = undefined\n this._requestPermissionsKey = undefined\n }\n\n private createAbortedError(id: string = ''): ErrorResponse {\n return {\n type: BeaconMessageType.Error,\n id,\n senderId: '',\n version: '2',\n errorType: BeaconErrorType.ABORTED_ERROR\n }\n }\n\n /**\n * @internal\n */\n public isDestroyed(): boolean {\n return this.destroyed\n }\n\n private assertNotDestroyed(): void {\n if (this.destroyed) {\n throw new Error('DAppClient has been destroyed and cannot be used again.')\n }\n }\n\n public async init(\n transport?: Transport<any>,\n substratePairing?: boolean\n ): Promise<TransportType> {\n this.assertNotDestroyed()\n\n const requestedSubstratePairing = substratePairing === true\n\n if (this._initPromise) {\n if (\n !transport &&\n this._initReject &&\n this._initSubstratePairing !== requestedSubstratePairing\n ) {\n throw new Error(\n 'Cannot start a permission request with different pairing options while another pairing is pending'\n )\n }\n\n return this._initPromise\n }\n\n try {\n await this.activeAccountLoaded\n } catch {\n //\n }\n\n this._initPromise = new Promise(async (resolve, reject) => {\n this._initSubstratePairing = requestedSubstratePairing\n // Capture reject so abort paths (modal close, transport-level rejection)\n // can unwedge a pending `await this.init()`. _initReject is cleared by\n // the .finally below whether the promise resolves or rejects, so the\n // field accurately means \"currently rejectable\" rather than \"most recent\n // rejector\".\n this._initReject = (reason) => {\n this._initPromise = undefined\n reject(reason)\n }\n // The body uses `new Promise(async ...)` (an anti-pattern: unhandled\n // throws are swallowed). Wrap it so any unexpected throw rejects the\n // promise instead of stranding `await this.init()` callers forever.\n // A proper structural fix would replace the async-executor entirely\n // with chained promises; left as follow-up to keep this PR focused.\n try {\n if (transport) {\n await this.addListener(transport)\n\n resolve(await super.init(transport))\n } else if (this._transport.isSettled()) {\n await (await this.transport).connect()\n\n resolve(await super.init(await this.transport))\n } else {\n const activeAccount = await this.getActiveAccount()\n const stopListening = () => {\n const onError = (err: unknown) => logger.error('stopListeningForNewPeers', err)\n if (this.postMessageTransport) {\n this.postMessageTransport.stopListeningForNewPeers().catch(onError)\n }\n if (this.p2pTransport) {\n this.p2pTransport.stopListeningForNewPeers().catch(onError)\n }\n if (this.walletConnectTransport) {\n this.walletConnectTransport.stopListeningForNewPeers().catch(onError)\n }\n }\n\n await this.initInternalTransports()\n\n if (\n !this.postMessageTransport ||\n !this.p2pTransport ||\n (!this.disableWalletConnect && !this.walletConnectTransport)\n ) {\n // Bare return here used to strand the promise forever -- no UI is\n // emitted, no peer ever pairs, no abort path fires. Reject explicitly\n // so callers see a deterministic error. (WalletConnect is exempt when\n // disableWalletConnect is set -- its transport is intentionally absent.)\n const noTransportError: ErrorResponse = {\n type: BeaconMessageType.Error,\n id: '',\n senderId: '',\n version: '2',\n errorType: BeaconErrorType.UNKNOWN_ERROR\n }\n reject(noTransportError)\n\n return\n }\n\n this.postMessageTransport.connect().then().catch(console.error)\n\n if (activeAccount && activeAccount.origin) {\n const origin = activeAccount.origin.type\n // Select the transport that matches the active account\n if (origin === Origin.EXTENSION) {\n resolve(await super.init(this.postMessageTransport))\n } else if (origin === Origin.P2P) {\n resolve(await super.init(this.p2pTransport))\n } else if (origin === Origin.WALLETCONNECT && this.walletConnectTransport) {\n resolve(await super.init(this.walletConnectTransport))\n }\n } else {\n const p2pTransport = this.p2pTransport\n const postMessageTransport = this.postMessageTransport\n const walletConnectTransport = this.walletConnectTransport\n\n postMessageTransport\n .listenForNewPeer((peer) => {\n logger.log('init', 'postmessage transport peer connected', peer)\n this.analytics.track('event', 'DAppClient', 'Extension connected', {\n peerName: peer.name\n })\n this.events\n .emit(BeaconEvent.PAIR_SUCCESS, peer)\n .catch((emitError) => console.warn(emitError))\n\n this.setActivePeer(peer).catch(console.error)\n this.setTransport(this.postMessageTransport).catch(console.error)\n stopListening()\n resolve(TransportType.POST_MESSAGE)\n })\n .catch(console.error)\n\n p2pTransport\n .listenForNewPeer((peer) => {\n logger.log('init', 'p2p transport peer connected', peer)\n this.analytics.track('event', 'DAppClient', 'octez.connect Wallet connected', {\n peerName: peer.name\n })\n this.events\n .emit(BeaconEvent.PAIR_SUCCESS, peer)\n .catch((emitError) => console.warn(emitError))\n\n this.setActivePeer(peer).catch(console.error)\n this.setTransport(this.p2pTransport).catch(console.error)\n stopListening()\n resolve(TransportType.P2P)\n })\n .catch(console.error)\n\n walletConnectTransport\n ?.listenForNewPeer((peer) => {\n logger.log('init', 'walletconnect transport peer connected', peer)\n this.analytics.track('event', 'DAppClient', 'WalletConnect Wallet connected', {\n peerName: peer.name\n })\n this.events\n .emit(BeaconEvent.PAIR_SUCCESS, peer)\n .catch((emitError) => console.warn(emitError))\n\n this.setActivePeer(peer).catch(console.error)\n this.setTransport(this.walletConnectTransport).catch(console.error)\n stopListening()\n resolve(TransportType.WALLETCONNECT)\n })\n .catch(console.error)\n\n PostMessageTransport.getAvailableExtensions()\n .then(async (extensions) => {\n this.analytics.track('event', 'DAppClient', 'Extensions detected', { extensions })\n })\n .catch((error) => {\n this._initPromise = undefined\n console.error(error)\n })\n\n const abortHandler = async () => {\n logger.log('init', 'ABORTED')\n this.sendMetrics(\n 'performance-metrics/save',\n await this.buildPayload('connect', 'abort')\n )\n await Promise.all([\n postMessageTransport.disconnect(),\n // p2pTransport.disconnect(), do not abort connection manually\n walletConnectTransport?.disconnect()\n ])\n this.postMessageTransport = this.walletConnectTransport = this.p2pTransport = undefined\n this._activeAccount.isResolved() && this.clearActiveAccount()\n // Reject _initPromise so any awaiter (makeRequest -> requestPermissions)\n // unwinds via handleRequestError instead of hanging. _initReject\n // also clears _initPromise as a side effect.\n this._initReject?.(this.createAbortedError())\n }\n\n const serializer = new Serializer()\n const p2pPeerInfo = new Promise<string>(async (resolve) => {\n try {\n await p2pTransport.connect()\n } catch (err: any) {\n logger.error(err)\n await this.hideUI(['alert']) // hide pairing alert\n setTimeout(() => this.events.emit(BeaconEvent.GENERIC_ERROR, err.message), 1000)\n abortHandler().catch((abortErr) => logger.warn('init', 'abortHandler', abortErr))\n resolve('')\n return\n }\n resolve(await serializer.serialize(await p2pTransport.getPairingRequestInfo()))\n })\n\n const walletConnectPeerInfo = walletConnectTransport\n ? createLazyPromise(() =>\n walletConnectTransport\n .getPairingRequestInfo()\n .then((pairingRequestInfo) => pairingRequestInfo.uri)\n .catch((error) => {\n logger.warn('init', 'walletconnect pairing request failed', error)\n\n return ''\n })\n )\n : undefined\n\n const postmessagePeerInfo = new Promise<string>(async (resolve) => {\n resolve(await serializer.serialize(await postMessageTransport.getPairingRequestInfo()))\n })\n\n this.events\n .emit(BeaconEvent.PAIR_INIT, {\n p2pPeerInfo,\n postmessagePeerInfo,\n // Omitted entirely when WalletConnect is disabled, so the pairing UI\n // never tries to read a peer-info promise for a transport that isn't there.\n ...(walletConnectPeerInfo ? { walletConnectPeerInfo } : {}),\n networkType: this.network.type,\n abortedHandler: abortHandler.bind(this),\n disclaimerText: this.disclaimerText,\n analytics: this.analytics,\n featuredWallets: this.featuredWallets,\n substratePairing\n })\n .catch((emitError) => console.warn(emitError))\n }\n }\n } catch (err) {\n // An async-executor throw would otherwise be silently swallowed,\n // leaving _initPromise pending and every awaiter stranded.\n reject(err)\n }\n })\n\n // Drop the _initReject reference whether init resolved or rejected, so the\n // field is never stale. Using an explicit helper keeps the dangling\n // observer chain out of statement position (which the lint rules forbid).\n this.clearInitRejectOnSettle(this._initPromise)\n\n return this._initPromise\n }\n\n /**\n * Attach a settle observer to {@link _initPromise} that drops\n * {@link _initReject} once the promise settles (resolved or rejected).\n * Errors on the observer chain are swallowed; only the original\n * {@link _initPromise} surfaces them to its awaiters.\n */\n private clearInitRejectOnSettle(initPromise: Promise<TransportType>): void {\n initPromise\n .finally(() => {\n this._initReject = undefined\n this._initSubstratePairing = undefined\n })\n .catch(() => {\n // observer-only; original promise's rejection is delivered to awaiters\n })\n }\n\n /**\n * Returns the active account\n */\n public async getActiveAccount(): Promise<AccountInfo | undefined> {\n this.assertNotDestroyed()\n\n return this._activeAccount.promise\n }\n\n private retainStorageValidationPromise(): void {\n // Constructor validation is intentionally fire-and-forget, but retaining\n // the promise gives tests a deterministic hook without changing public API.\n this.storageValidated.catch((err) => logger.error(err.message))\n }\n\n private async deactivateInvalidAccountState(\n reason: InvalidAccountDeactivatedReason\n ): Promise<void> {\n if (this.hasEmittedInvalidAccountDeactivated) {\n return\n }\n\n this.hasEmittedInvalidAccountDeactivated = true\n logger.log('deactivateInvalidAccountState', reason)\n if (reason === 'missing_active_account') {\n await this.repairMissingActiveAccount()\n } else {\n await this.resetInvalidState(false)\n }\n await this.events.emit(BeaconEvent.INVALID_ACCOUNT_DEACTIVATED, { reason })\n }\n\n private async repairMissingActiveAccount(): Promise<void> {\n this._activeAccount = ExposedPromise.resolve<AccountInfo | undefined>(undefined)\n await this.storage.delete(StorageKey.ACTIVE_ACCOUNT)\n await this.setActivePeer(undefined)\n }\n\n private hasStoredActiveAccountPointer(): boolean {\n // LocalStorage-specific repair: that backend is where literal sentinel strings were produced.\n if (typeof localStorage === 'undefined') {\n return false\n }\n\n try {\n return localStorage.getItem(this.storage.getPrefixedKey(StorageKey.ACTIVE_ACCOUNT)) !== null\n } catch {\n return false\n }\n }\n\n private async isInvalidState(account: AccountInfo) {\n const activeAccount = await this._activeAccount.promise\n return !activeAccount\n ? false\n : activeAccount?.address !== account?.address && !this.isGetActiveAccountHandled\n }\n\n private async resetInvalidState(emit: boolean = true) {\n await this.accountManager.removeAllAccounts()\n this._activeAccount = ExposedPromise.resolve<AccountInfo | undefined>(undefined)\n await this.storage.delete(StorageKey.ACTIVE_ACCOUNT)\n if (emit) {\n await this.events.emit(BeaconEvent.INVALID_ACTIVE_ACCOUNT_STATE)\n } else {\n await this.hideUI(['alert'])\n }\n await Promise.all([\n this.postMessageTransport?.disconnect(),\n this.walletConnectTransport?.disconnect()\n ])\n this.postMessageTransport = this.p2pTransport = this.walletConnectTransport = undefined\n await this.setActivePeer(undefined)\n await this.setTransport(undefined)\n this._initPromise = undefined\n }\n\n /**\n * Sets the active account\n *\n * @param account The account that will be set as the active account\n */\n public async setActiveAccount(account?: AccountInfo): Promise<void> {\n const activeAccountAlreadyCleared = !account && (await this.isActiveAccountAlreadyCleared())\n\n if (!activeAccountAlreadyCleared && !this.isGetActiveAccountHandled) {\n console.warn(\n `An active account has been received, but no active subscription was found for BeaconEvent.ACTIVE_ACCOUNT_SET.`\n )\n }\n\n if (account && this._activeAccount.isSettled() && (await this.isInvalidState(account))) {\n const tranport = await this.transport\n\n if (tranport instanceof WalletConnectTransport && tranport.wasDisconnectedByWallet()) {\n await this.resetInvalidState()\n return\n }\n }\n\n // when I'm resetting the activeAccount\n if (!account && this._activeAccount.isResolved() && (await this.getActiveAccount())) {\n const transport = this._transport.isResolved() ? await this.transport : undefined\n const activeAccount = await this.getActiveAccount()\n\n if (!activeAccount) {\n return\n }\n\n if (!this.debounceSetActiveAccount && transport instanceof WalletConnectTransport) {\n this.debounceSetActiveAccount = true\n this._initPromise = undefined\n this.postMessageTransport = this.p2pTransport = this.walletConnectTransport = undefined\n if (this.multiTabChannel.isLeader() || isMobileOS(window)) {\n await transport.disconnect()\n this.openRequestsOtherTabs.clear()\n } else {\n this.multiTabChannel.postMessage({\n type: 'DISCONNECT'\n })\n }\n this.abortOpenRequests()\n this.debounceSetActiveAccount = false\n }\n }\n\n if (activeAccountAlreadyCleared) {\n // Keep peer and transport cleanup below idempotent, but do not write storage or emit\n // another ACTIVE_ACCOUNT_SET(undefined) for an already-empty account.\n } else if (this._activeAccount.isSettled()) {\n // If the promise has already been resolved we need to create a new one.\n this._activeAccount = ExposedPromise.resolve<AccountInfo | undefined>(account)\n } else {\n this._activeAccount.resolve(account)\n }\n\n if (!this.isGetActiveAccountHandled && this._transport.isResolved()) {\n const transport = await this.transport\n\n if (transport instanceof WalletConnectTransport && transport.wasDisconnectedByWallet()) {\n await this.resetInvalidState()\n return\n }\n }\n\n if (account) {\n const origin = account.origin.type\n await this.initInternalTransports()\n\n // Select the transport that matches the active account\n if (origin === Origin.EXTENSION) {\n await this.setTransport(this.postMessageTransport)\n } else if (origin === Origin.P2P) {\n await this.setTransport(this.p2pTransport)\n } else if (origin === Origin.WALLETCONNECT) {\n await this.setTransport(this.walletConnectTransport)\n this.walletConnectTransport?.forceUpdate('INIT')\n }\n if (this._transport.isResolved()) {\n const transport = await this.transport\n\n if (transport.connectionStatus === TransportStatus.NOT_CONNECTED) {\n await transport.connect()\n }\n }\n const peer = await this.getPeer(account)\n await this.setActivePeer(peer)\n } else {\n await this.setActivePeer(undefined)\n await this.setTransport(undefined)\n }\n\n if (account) {\n await this.storage.set(StorageKey.ACTIVE_ACCOUNT, account.accountIdentifier)\n } else if (!activeAccountAlreadyCleared) {\n await this.storage.delete(StorageKey.ACTIVE_ACCOUNT)\n }\n\n if (!activeAccountAlreadyCleared) {\n await this.events.emit(BeaconEvent.ACTIVE_ACCOUNT_SET, account)\n }\n\n return\n }\n\n private async isActiveAccountAlreadyCleared(): Promise<boolean> {\n return this._activeAccount.isResolved() && !(await this.getActiveAccount())\n }\n\n private async recoverActiveAccountFromAccountsChange(): Promise<void> {\n const activeAccountIdentifier = await this.storage.get(StorageKey.ACTIVE_ACCOUNT)\n if (!activeAccountIdentifier || activeAccountIdentifier === 'undefined') {\n return\n }\n\n if (this._activeAccount.isResolved()) {\n const activeAccount = await this.getActiveAccount()\n if (activeAccount?.accountIdentifier === activeAccountIdentifier) {\n return\n }\n }\n\n const account = await this.getAccount(activeAccountIdentifier)\n if (!account) {\n return\n }\n\n await this.setActiveAccount(account)\n }\n\n /**\n * Clear the active account\n */\n public clearActiveAccount(): Promise<void> {\n return this.setActiveAccount()\n }\n\n public async setColorMode(colorMode: ColorMode): Promise<void> {\n return setColorMode(colorMode)\n }\n\n public async getColorMode(): Promise<ColorMode> {\n return getColorMode()\n }\n\n /**\n * @deprecated\n *\n * Use getOwnAppMetadata instead\n */\n public async getAppMetadata(): Promise<AppMetadata> {\n return this.getOwnAppMetadata()\n }\n\n public async showPrepare(): Promise<void> {\n const walletInfo = await (async () => {\n try {\n return await this.getWalletInfo()\n } catch {\n return undefined\n }\n })()\n await this.events.emit(BeaconEvent.SHOW_PREPARE, { walletInfo })\n }\n\n public async hideUI(elements: ('alert' | 'toast')[]): Promise<void> {\n await this.events.emit(BeaconEvent.HIDE_UI, elements)\n }\n\n private async tryToAppSwitch() {\n if (!isMobileOS(window) || !this.enableAppSwitching) {\n return\n }\n\n const wallet = await this.getWalletInfo()\n\n if (wallet.type !== 'mobile' || !wallet.deeplink) {\n return\n }\n\n const link = isIOS(window) ? wallet.deeplink : (`${wallet.deeplink}wc?uri=` as any)\n\n if (!link?.length) {\n return\n }\n\n window.location = link\n }\n\n private addQueryParam(paramName: string, paramValue: string): string {\n return paramName + '=' + paramValue\n }\n\n private async buildPayload(\n action: 'connect' | 'message' | 'disconnect',\n status: 'start' | 'abort' | 'success' | 'error'\n ): Promise<RequestInit> {\n const wallet = await this.storage.get(StorageKey.LAST_SELECTED_WALLET)\n const transport = this._activeAccount.isResolved()\n ? ((await this.getActiveAccount())?.origin.type ?? 'UNKNOWN')\n : 'UNKNOWN'\n\n return {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n userId: this.userId,\n os: currentOS(),\n walletName: wallet?.name ?? 'init',\n walletType: wallet?.type ?? 'init',\n sdkVersion: SDK_VERSION,\n transport,\n time: new Date(),\n action,\n status\n })\n }\n }\n\n // Metrics phone home to a Papers-controlled endpoint that the ECAD fork\n // does not control or ingest. The disabled path also queued payloads into\n // IndexedDB before the DB was ready, surfacing as unhandledRejection.\n // Hard-disabled here; full removal (option, storage key, IDB store,\n // BACKEND_URL constant, all call sites) tracked as a follow-up.\n /* eslint-disable @typescript-eslint/no-unused-vars -- hard-disabled stub keeps its signature for call-site type-safety; params are intentionally unused pending full removal. */\n private sendMetrics(\n _uri: string,\n _options?: RequestInit,\n _thenHandler?: (res: Response) => void,\n _catchHandler?: (err: Error) => void\n ): void {\n return\n }\n /* eslint-enable @typescript-eslint/no-unused-vars */\n\n private async checkMakeRequest() {\n const isResolved = this._transport.isResolved()\n const isWCInstance = isResolved && (await this.transport) instanceof WalletConnectTransport\n await this.multiTabChannel.init()\n const isLeader = this.multiTabChannel.isLeader()\n\n return !isResolved || !isWCInstance || isLeader || isMobileOS(window)\n }\n\n /**\n * Will remove the account from the local storage and set a new active account if necessary.\n *\n * @param accountIdentifier ID of the account\n */\n public async removeAccount(accountIdentifier: string): Promise<void> {\n const removeAccountResult = super.removeAccount(accountIdentifier)\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (activeAccount && activeAccount.accountIdentifier === accountIdentifier) {\n await this.setActiveAccount(undefined)\n }\n\n return removeAccountResult\n }\n\n /**\n * Remove all accounts and set active account to undefined\n */\n public async removeAllAccounts(): Promise<void> {\n await super.removeAllAccounts()\n await this.setActiveAccount(undefined)\n }\n\n /**\n * Removes a peer and all the accounts that have been connected through that peer\n *\n * @param peer Peer to be removed\n */\n public async removePeer(\n peer: ExtendedPeerInfo,\n sendDisconnectToPeer: boolean = false\n ): Promise<void> {\n const transport = await this.transport\n\n const removePeerResult = transport.removePeer(peer)\n\n await this.removeAccountsForPeers([peer])\n\n if (sendDisconnectToPeer) {\n await this.sendDisconnectToPeer(peer, transport)\n }\n\n return removePeerResult\n }\n\n /**\n * Remove all peers and all accounts that have been connected through those peers\n */\n public async removeAllPeers(\n sendDisconnectToPeers: boolean = false,\n options: DAppClientRemoveAllPeersOptions = {}\n ): Promise<void> {\n const transport = (await this.transport) as DAppInternalTransport\n\n const peers: ExtendedPeerInfo[] = await transport.getPeers()\n const removePeerResult = await transport.removeAllPeers()\n\n await this.removeAccountsForPeers(peers)\n\n if (sendDisconnectToPeers) {\n const disconnectPromises = peers.map((peer) => this.sendDisconnectToPeer(peer, transport))\n\n if (options.ignoreDisconnectErrors) {\n await Promise.allSettled(disconnectPromises)\n } else {\n await Promise.all(disconnectPromises)\n }\n }\n\n return removePeerResult\n }\n\n /**\n * Allows the user to subscribe to specific events that are fired in the SDK\n *\n * @param internalEvent The event to subscribe to\n * @param eventCallback The callback that will be called when the event occurs\n */\n public async subscribeToEvent<K extends BeaconEvent>(\n internalEvent: K,\n eventCallback: BeaconEventHandlerFunction<BeaconEventType[K]>\n ): Promise<void> {\n if (internalEvent === BeaconEvent.ACTIVE_ACCOUNT_SET) {\n this.isGetActiveAccountHandled = true\n }\n\n await this.events.on(internalEvent, eventCallback)\n }\n\n /**\n * Check if we have permissions to send the specific message type to the active account.\n * If no active account is set, only permission requests are allowed.\n *\n * @param type The type of the message\n */\n public async checkPermissions(type: BeaconMessageType): Promise<boolean> {\n if (\n [\n BeaconMessageType.PermissionRequest,\n BeaconMessageType.ProofOfEventChallengeRequest,\n BeaconMessageType.SimulatedProofOfEventChallengeRequest\n ].includes(type)\n ) {\n return true\n }\n\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (!activeAccount) {\n throw await this.sendInternalError('No active account set!')\n }\n\n const permissions = activeAccount.scopes\n\n switch (type) {\n case BeaconMessageType.OperationRequest:\n return permissions.includes(PermissionScope.OPERATION_REQUEST)\n case BeaconMessageType.SignPayloadRequest:\n return permissions.includes(PermissionScope.SIGN)\n // TODO: ENCRYPTION\n // case BeaconMessageType.EncryptPayloadRequest:\n // return permissions.includes(PermissionScope.ENCRYPT)\n case BeaconMessageType.BroadcastRequest:\n return true\n default:\n return false\n }\n }\n\n public async sendNotification(\n title: string,\n message: string,\n payload: string,\n protocolIdentifier: string\n ): Promise<string> {\n const activeAccount = await this.getActiveAccount()\n\n if (\n !activeAccount ||\n (activeAccount &&\n !activeAccount.scopes.includes(PermissionScope.NOTIFICATION) &&\n !activeAccount.notification)\n ) {\n throw new Error('notification permissions not given')\n }\n\n if (!activeAccount.notification?.token) {\n throw new Error('No AccessToken')\n }\n\n const url = activeAccount.notification?.apiUrl\n\n if (!url) {\n throw new Error('No Push URL set')\n }\n\n return this.sendNotificationWithAccessToken({\n url,\n recipient: activeAccount.address,\n title,\n body: message,\n payload,\n protocolIdentifier,\n accessToken: activeAccount.notification?.token\n })\n }\n\n private blockchains: Map<string, Blockchain> = new Map()\n\n addBlockchain(chain: Blockchain) {\n this.blockchains.set(chain.identifier, chain)\n chain.getWalletLists().then((walletLists) => {\n setDesktopList(walletLists.desktopList)\n setExtensionList(walletLists.extensionList)\n setWebList(walletLists.webList)\n setiOSList(walletLists.iOSList)\n })\n }\n\n removeBlockchain(chainIdentifier: string) {\n this.blockchains.delete(chainIdentifier)\n }\n\n public async permissionRequest(\n input: PermissionRequestV3<string>\n ): Promise<PermissionResponseV3<string>> {\n logger.log('permissionRequest', input)\n const blockchain = this.blockchains.get(input.blockchainIdentifier)\n if (!blockchain) {\n throw new Error(`Blockchain \"${input.blockchainIdentifier}\" not supported by dAppClient`)\n }\n\n const request: PermissionRequestV3<string> = {\n ...input,\n type: BeaconMessageType.PermissionRequest,\n blockchainData: {\n ...input.blockchainData,\n appMetadata: await this.getOwnAppMetadata()\n }\n }\n\n logger.log('REQUESTION PERMIMISSION V3', 'xxx', request)\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'start'))\n\n const logId = `makeRequestV3 ${Date.now()}`\n logger.time(true, logId)\n let resolved: {\n message: BeaconMessageWrapper<PermissionResponseV3>\n connectionInfo: ConnectionContext\n }\n try {\n resolved = await this.makeRequestV3<\n PermissionRequestV3,\n BeaconMessageWrapper<PermissionResponseV3>\n >(request)\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n const { message: response, connectionInfo } = resolved\n logger.time(false, logId)\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'start'))\n\n logger.log('RESPONSE V3', response, connectionInfo)\n\n const partialAccountInfos = await blockchain.getAccountInfosFromPermissionResponse(\n response.message\n )\n\n const accountInfo: any = {\n accountIdentifier: partialAccountInfos[0].accountId,\n senderId: response.senderId,\n origin: {\n type: connectionInfo.origin,\n id: connectionInfo.id\n },\n address: partialAccountInfos[0].address, // Store all addresses\n publicKey: partialAccountInfos[0].publicKey,\n scopes: response.message.blockchainData.scopes as any,\n connectedAt: new Date().getTime(),\n chainData: response.message.blockchainData\n }\n\n await this.accountManager.addAccount(accountInfo)\n await this.setActiveAccount(accountInfo)\n\n await blockchain.handleResponse({\n request,\n account: accountInfo,\n output: response,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n await this.notifySuccess(request as any, {\n account: accountInfo,\n output: {\n address: partialAccountInfos[0].address,\n network: { type: 'substrate' },\n scopes: []\n } as any,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n // return output\n return response.message\n }\n\n public async request(input: BlockchainRequestV3<string>): Promise<BlockchainResponseV3<string>> {\n logger.log('request', input)\n const blockchain = this.blockchains.get(input.blockchainIdentifier)\n if (!blockchain) {\n throw new Error(`Blockchain \"${blockchain}\" not supported by dAppClient`)\n }\n\n await blockchain.validateRequest(input)\n\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n if (!activeAccount) {\n throw await this.sendInternalError('No active account!')\n }\n\n const request: BlockchainRequestV3<string> = {\n ...input,\n type: BeaconMessageType.BlockchainRequest,\n accountId: activeAccount.accountIdentifier\n }\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n\n const logId = `makeRequestV3 ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequestV3<\n BlockchainRequestV3<string>,\n BeaconMessageWrapper<BlockchainResponseV3<string>>\n >(request)\n : this.makeRequestBC<any, any>(request)\n\n let resolved\n try {\n resolved = await res\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n if (!resolved) {\n throw new Error('Internal error: makeRequest returned no result')\n }\n const { message: response, connectionInfo } = resolved\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await blockchain.handleResponse({\n request,\n account: activeAccount,\n output: response,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n await this.notifySuccess(\n request as any,\n {\n walletInfo: await this.getWalletInfo()\n } as any\n )\n\n return response.message\n }\n\n /**\n * Send a permission request to the DApp. This should be done as the first step. The wallet will respond\n * with an publicKey and permissions that were given. The account returned will be set as the \"activeAccount\"\n * and will be used for the following requests.\n *\n * @param input The message details we need to prepare the PermissionRequest message.\n */\n public async requestPermissions(\n input?: RequestPermissionInput\n ): Promise<PermissionResponseOutput> {\n this.assertNotDestroyed()\n\n const scopes = this.getPermissionRequestScopes(input)\n const requestPermissionsKey = this.getPermissionRequestKey(scopes)\n\n if (this._requestPermissionsPromise) {\n if (this._requestPermissionsKey !== requestPermissionsKey) {\n throw new Error(\n 'Cannot start a permission request with different scopes while another permission request is pending'\n )\n }\n\n return this._requestPermissionsPromise\n }\n\n const requestPermissionsPromise = this.requestPermissionsInternal(scopes)\n this._requestPermissionsPromise = requestPermissionsPromise\n this._requestPermissionsKey = requestPermissionsKey\n\n try {\n return await requestPermissionsPromise\n } finally {\n if (this._requestPermissionsPromise === requestPermissionsPromise) {\n this._requestPermissionsPromise = undefined\n this._requestPermissionsKey = undefined\n }\n }\n }\n\n private async requestPermissionsInternal(\n scopes: PermissionScope[]\n ): Promise<PermissionResponseOutput> {\n const request: PermissionRequestInput = {\n appMetadata: await this.getOwnAppMetadata(),\n type: BeaconMessageType.PermissionRequest,\n network: this.network,\n scopes\n }\n\n this.analytics.track('event', 'DAppClient', 'Permission requested')\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'start'))\n\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n\n const res =\n (await this.checkMakeRequest()) || !(await this.getActiveAccount())\n ? this.makeRequest<PermissionRequest, PermissionResponse>(request, undefined, undefined)\n : this.makeRequestBC<PermissionRequest, PermissionResponse>(request)\n\n let resolved\n try {\n resolved = await res\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n if (!resolved) {\n throw new Error('Internal error: makeRequest returned no result')\n }\n const { message, connectionInfo } = resolved\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('connect', 'success'))\n\n logger.log('requestPermissions', '######## MESSAGE #######')\n logger.log('requestPermissions', message)\n\n const accountInfo = await this.onNewAccount(message, connectionInfo)\n\n logger.log('requestPermissions', '######## ACCOUNT INFO #######')\n logger.log('requestPermissions', JSON.stringify(accountInfo))\n\n await this.accountManager.addAccount(accountInfo)\n\n const output: PermissionResponseOutput = {\n ...message,\n walletKey: accountInfo.walletKey,\n address: accountInfo.address,\n accountInfo\n }\n\n await this.notifySuccess(request, {\n account: accountInfo,\n output,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Permission received', {\n address: accountInfo.address\n })\n\n return output\n }\n\n private getPermissionRequestScopes(input?: RequestPermissionInput): PermissionScope[] {\n if (input && 'network' in input) {\n throw new Error(\n '[BEACON] the \"network\" property is no longer accepted in input. Please provide it when instantiating DAppClient.'\n )\n }\n\n return input && input.scopes\n ? input.scopes\n : [PermissionScope.OPERATION_REQUEST, PermissionScope.SIGN]\n }\n\n private getPermissionRequestKey(scopes: PermissionScope[]): string {\n return [...scopes].sort().join('|')\n }\n\n /**\n * Send a proof of event request to the wallet. The wallet will either accept or decline the challenge.\n * If it is accepted, the challenge will be stored, meaning that even if the user refresh the page, the DAppClient will keep checking if the challenge has been fulfilled.\n * Once the challenge is stored, a challenge stored message will be sent to the wallet.\n * It's **highly recommended** to run a proof of event challenge to check the identity of an abstracted account\n *\n * @param input The message details we need to prepare the ProofOfEventChallenge message.\n */\n public async requestProofOfEventChallenge(input: RequestProofOfEventChallengeInput) {\n const activeAccount = await this.getActiveAccount()\n\n if (!activeAccount)\n throw new Error('Please request permissions before doing a proof of event challenge')\n if (\n activeAccount.walletType !== 'abstracted_account' &&\n activeAccount.verificationType !== 'proof_of_event'\n )\n throw new Error(\n 'This wallet is not an abstracted account and thus cannot perform proof of event'\n )\n\n const request: ProofOfEventChallengeRequestInput = {\n type: BeaconMessageType.ProofOfEventChallengeRequest,\n contractAddress: activeAccount.address,\n payload: input.payload\n }\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<ProofOfEventChallengeRequest, ProofOfEventChallengeResponse>(request)\n : this.makeRequestBC<ProofOfEventChallengeRequest, ProofOfEventChallengeResponse>(request)\n\n let resolved\n try {\n resolved = await res\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n if (!resolved) {\n throw new Error('Internal error: makeRequest returned no result')\n }\n const { message, connectionInfo } = resolved\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n this.analytics.track(\n 'event',\n 'DAppClient',\n `Proof of event challenge ${message.isAccepted ? 'accepted' : 'refused'}`,\n { address: activeAccount.address }\n )\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n return message\n }\n\n /**\n * Send a simulated proof of event request to the wallet. The wallet will either accept or decline the challenge.\n * It's the same than `requestProofOfEventChallenge` but rather than executing operations on the blockchain to prove the identity,\n * The wallet will return a list of operations that you'll be able to run on your side to verify the identity of the abstracted account\n * It's **highly recommended** to run a proof of event challenge to check the identity of an abstracted account\n *\n * @param input The message details we need to prepare the SimulatedProofOfEventChallenge message.\n */\n public async requestSimulatedProofOfEventChallenge(\n input: RequestSimulatedProofOfEventChallengeInput\n ) {\n const activeAccount = await this.getActiveAccount()\n\n if (!activeAccount)\n throw new Error('Please request permissions before doing a proof of event challenge')\n if (\n activeAccount.walletType !== 'abstracted_account' &&\n activeAccount.verificationType !== 'proof_of_event'\n ) {\n throw new Error(\n 'This wallet is not an abstracted account and thus cannot perform a simulated proof of event'\n )\n }\n\n const request: SimulatedProofOfEventChallengeRequestInput = {\n type: BeaconMessageType.SimulatedProofOfEventChallengeRequest,\n contractAddress: activeAccount.address,\n ...input\n }\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<\n SimulatedProofOfEventChallengeRequest,\n SimulatedProofOfEventChallengeResponse\n >(request)\n : this.makeRequestBC<\n SimulatedProofOfEventChallengeRequest,\n SimulatedProofOfEventChallengeResponse\n >(request)\n\n let resolved\n try {\n resolved = await res\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n if (!resolved) {\n throw new Error('Internal error: makeRequest returned no result')\n }\n const { message, connectionInfo } = resolved\n\n logger.time(false, logId)\n this.analytics.track(\n 'event',\n 'DAppClient',\n `Simulated proof of event challenge ${!message.errorMessage ? 'accepted' : 'refused'}`,\n { address: activeAccount.address }\n )\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n return message\n }\n\n /**\n * This method will send a \"SignPayloadRequest\" to the wallet. This method is meant to be used to sign\n * arbitrary data (eg. a string). It will return the signature in the format of \"edsig...\"\n *\n * @param input The message details we need to prepare the SignPayloadRequest message.\n */\n public async requestSignPayload(\n input: RequestSignPayloadInput\n ): Promise<SignPayloadResponseOutput> {\n if (!input.payload) {\n throw await this.sendInternalError('Payload must be provided')\n }\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n if (!activeAccount) {\n throw await this.sendInternalError('No active account!')\n }\n\n const payload = input.payload\n\n if (typeof payload !== 'string') {\n throw new Error('Payload must be a string')\n }\n\n const signingType = ((): SigningType => {\n switch (input.signingType) {\n case SigningType.OPERATION:\n if (!payload.startsWith('03')) {\n throw new Error(\n 'When using signing type \"OPERATION\", the payload must start with prefix \"03\"'\n )\n }\n\n return SigningType.OPERATION\n\n case SigningType.MICHELINE:\n if (!payload.startsWith('05')) {\n throw new Error(\n 'When using signing type \"MICHELINE\", the payload must start with prefix \"05\"'\n )\n }\n\n return SigningType.MICHELINE\n\n case SigningType.RAW:\n default:\n return SigningType.RAW\n }\n })()\n\n this.analytics.track('event', 'DAppClient', 'Signature requested')\n\n const request: SignPayloadRequestInput = {\n type: BeaconMessageType.SignPayloadRequest,\n signingType,\n payload,\n sourceAddress: input.sourceAddress || activeAccount.address\n }\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<SignPayloadRequest, SignPayloadResponse>(request)\n : this.makeRequestBC<SignPayloadRequest, SignPayloadResponse>(request)\n\n let resolved\n try {\n resolved = await res\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n if (!resolved) {\n throw new Error('Internal error: makeRequest returned no result')\n }\n const { message, connectionInfo } = resolved\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Signature response')\n\n return message\n }\n\n /**\n * This method will send an \"EncryptPayloadRequest\" to the wallet. This method is meant to be used to encrypt or decrypt\n * arbitrary data (eg. a string). It will return the encrypted or decrypted payload\n *\n * @param input The message details we need to prepare the EncryptPayloadRequest message.\n */\n // TODO: ENCRYPTION\n // public async requestEncryptPayload(\n // input: RequestEncryptPayloadInput\n // ): Promise<EncryptPayloadResponseOutput> {\n // if (!input.payload) {\n // throw await this.sendInternalError('Payload must be provided')\n // }\n // const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n // if (!activeAccount) {\n // throw await this.sendInternalError('No active account!')\n // }\n\n // const payload = input.payload\n\n // if (typeof payload !== 'string') {\n // throw new Error('Payload must be a string')\n // }\n\n // if (typeof input.encryptionCryptoOperation === 'undefined') {\n // throw new Error('encryptionCryptoOperation must be defined')\n // }\n\n // if (typeof input.encryptionType === 'undefined') {\n // throw new Error('encryptionType must be defined')\n // }\n\n // const request: EncryptPayloadRequestInput = {\n // type: BeaconMessageType.EncryptPayloadRequest,\n // cryptoOperation: input.encryptionCryptoOperation,\n // encryptionType: input.encryptionType,\n // payload,\n // sourceAddress: input.sourceAddress || activeAccount.address\n // }\n\n // const { message, connectionInfo } = await this.makeRequest<\n // EncryptPayloadRequest,\n // EncryptPayloadResponse\n // >(request).catch(async (requestError: ErrorResponse) => {\n // throw await this.handleRequestError(request, requestError)\n // })\n\n // await this.notifySuccess(request, {\n // account: activeAccount,\n // output: message,\n // connectionContext: connectionInfo,\n // walletInfo: await this.getWalletInfo()\n // })\n\n // return message\n // }\n\n /**\n * This method sends an OperationRequest to the wallet. This method should be used for all kinds of operations,\n * eg. transaction or delegation. Not all properties have to be provided. Data like \"counter\" and fees will be\n * fetched and calculated by the wallet (but they can still be provided if required).\n *\n * @param input The message details we need to prepare the OperationRequest message.\n */\n public async requestOperation(input: RequestOperationInput): Promise<OperationResponseOutput> {\n if (!input.operationDetails) {\n throw await this.sendInternalError('Operation details must be provided')\n }\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (!activeAccount) {\n throw await this.sendInternalError('No active account!')\n }\n\n const request: OperationRequestInput = {\n type: BeaconMessageType.OperationRequest,\n network: activeAccount.network || this.network,\n operationDetails: input.operationDetails,\n sourceAddress: activeAccount.address || ''\n }\n\n this.analytics.track('event', 'DAppClient', 'Operation requested')\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<OperationRequest, OperationResponse>(request)\n : this.makeRequestBC<OperationRequest, OperationResponse>(request)\n\n let resolved\n try {\n resolved = await res\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n if (!resolved) {\n throw new Error('Internal error: makeRequest returned no result')\n }\n const { message, connectionInfo } = resolved\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await this.notifySuccess(request, {\n account: activeAccount,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Operation response')\n\n return message\n }\n\n /**\n * Sends a \"BroadcastRequest\" to the wallet. This method can be used to inject an already signed transaction\n * to the network.\n *\n * @param input The message details we need to prepare the BroadcastRequest message.\n */\n public async requestBroadcast(input: RequestBroadcastInput): Promise<BroadcastResponseOutput> {\n if (!input.signedTransaction) {\n throw await this.sendInternalError('Signed transaction must be provided')\n }\n\n // Add error message for deprecation of network\n // TODO: Remove when we remove deprecated preferredNetwork\n if (input.network !== undefined && this.network.type !== input.network?.type) {\n console.error(\n '[BEACON] The network specified in the DAppClient constructor does not match the network set in the broadcast request. Please set the network in the constructor. Setting it during the Broadcast Request is deprecated.'\n )\n }\n\n const request: BroadcastRequestInput = {\n type: BeaconMessageType.BroadcastRequest,\n network: this.network,\n signedTransaction: input.signedTransaction\n }\n\n this.analytics.track('event', 'DAppClient', 'Broadcast requested')\n\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'start'))\n const logId = `makeRequest ${Date.now()}`\n logger.time(true, logId)\n const res = (await this.checkMakeRequest())\n ? this.makeRequest<BroadcastRequest, BroadcastResponse>(request)\n : this.makeRequestBC<BroadcastRequest, BroadcastResponse>(request)\n\n let resolved\n try {\n resolved = await res\n } catch (requestError) {\n await this.runRequestErrorSideEffects(request, requestError, logId)\n throw requestError\n }\n if (!resolved) {\n throw new Error('Internal error: makeRequest returned no result')\n }\n const { message, connectionInfo } = resolved\n\n logger.time(false, logId)\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'success'))\n\n await this.notifySuccess(request, {\n network: this.network,\n output: message,\n blockExplorer: this.blockExplorer,\n connectionContext: connectionInfo,\n walletInfo: await this.getWalletInfo()\n })\n\n this.analytics.track('event', 'DAppClient', 'Broadcast response')\n\n return message\n }\n\n protected async setActivePeer(peer?: PeerInfoType): Promise<void> {\n if (this._activePeer.isSettled()) {\n // If the promise has already been resolved we need to create a new one.\n this._activePeer = ExposedPromise.resolve(peer)\n } else {\n this._activePeer.resolve(peer)\n }\n\n if (!peer) {\n return\n }\n\n await this.initInternalTransports()\n\n if (peer.type === 'postmessage-pairing-response') {\n await this.setTransport(this.postMessageTransport)\n } else if (peer.type === 'p2p-pairing-response') {\n await this.setTransport(this.p2pTransport)\n }\n }\n\n /**\n * A \"setter\" for when the transport needs to be changed.\n */\n protected async setTransport(transport?: Transport<any>): Promise<void> {\n if (!transport) {\n this._initPromise = undefined\n }\n\n const result = super.setTransport(transport)\n\n const event = transport ? { ...(transport as any) } : undefined\n\n // remove keyPair, to prevent dApps from accidentaly leaking the privateKey\n if (event) {\n event.client = {\n ...event.client,\n keyPair: undefined\n }\n }\n\n await this.events.emit(BeaconEvent.ACTIVE_TRANSPORT_SET, event)\n\n return result\n }\n\n /**\n * This method will emit an internal error message.\n *\n * @param errorMessage The error message to send.\n */\n private async sendInternalError(errorMessage: string): Promise<void> {\n await this.events.emit(BeaconEvent.INTERNAL_ERROR, { text: errorMessage })\n throw new Error(errorMessage)\n }\n\n /**\n * This method will remove all accounts associated with a specific peer.\n *\n * @param peersToRemove An array of peers for which accounts should be removed\n */\n private async removeAccountsForPeers(peersToRemove: ExtendedPeerInfo[]): Promise<void> {\n if (peersToRemove.length === 0) {\n return\n }\n\n const peerIdsToRemove = peersToRemove.map((peer) => peer.senderId)\n\n return this.removeAccountsForPeerIds(peerIdsToRemove)\n }\n\n private async removeAccountsForPeerIds(peerIds: string[]): Promise<void> {\n const accounts = (await this.accountManager.getAccounts()) ?? []\n\n // Remove all accounts with origin of the specified peer\n const accountsToRemove = accounts.filter((account) => peerIds.includes(account.senderId))\n const accountIdentifiersToRemove = accountsToRemove.map(\n (accountInfo) => accountInfo.accountIdentifier\n )\n await this.accountManager.removeAccounts(accountIdentifiersToRemove)\n\n // Check if one of the accounts that was removed was the active account and if yes, set it to undefined\n const activeAccount: AccountInfo | undefined = await this.getActiveAccount()\n\n if (activeAccount) {\n if (accountIdentifiersToRemove.includes(activeAccount.accountIdentifier)) {\n await this.setActiveAccount(undefined)\n }\n }\n }\n\n /**\n * Run the standard request-error side effects (abort/error metric,\n * timer stop, {@link handleRequestError}) on a single awaited control\n * flow so callers can re-throw the original {@link ErrorResponse} without\n * leaking an UnhandledPromiseRejection.\n *\n * Why this exists: every request method historically used a fire-and-\n * forget `res.catch(handler)` whose handler did `throw await\n * this.handleRequestError(...)`. The catch returned a detached promise\n * nobody awaited; `handleRequestError`'s thrown wrapped error became an\n * unhandled rejection. The bug rarely surfaced before the dapp-init\n * promise was made rejectable, because pre-pairing rejection paths used\n * to hang instead of routing through these handlers. Once init started\n * rejecting reliably, the unhandled rejection started firing on every\n * WC session-proposal rejection. We swallow the wrapped throw here so\n * callers can re-throw the original `ErrorResponse`, matching the\n * post-pairing rejection contract at the openRequest path.\n *\n * @param request The request we sent\n * @param requestError The error we received\n * @param logId The {@link logger.time} label opened for this request\n */\n private async runRequestErrorSideEffects(\n request: unknown,\n rawError: unknown,\n logId: string\n ): Promise<void> {\n // V3 request shapes (PermissionRequestV3, BlockchainRequestV3) flow through\n // here too. They aren't part of BeaconRequestInputMessage, but\n // handleRequestError only inspects `.type` plus optional fields it already\n // guards on. Catch params are `unknown` under strict TS, same story.\n const typedRequest = request as BeaconRequestInputMessage\n const requestError = rawError as ErrorResponse\n if (requestError.errorType === BeaconErrorType.ABORTED_ERROR) {\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'abort'))\n } else {\n this.sendMetrics('performance-metrics/save', await this.buildPayload('message', 'error'))\n }\n logger.time(false, logId)\n await this.handleRequestError(typedRequest, requestError).catch(() => undefined)\n }\n\n /**\n * This message handles errors that we receive from the wallet.\n *\n * @param request The request we sent\n * @param beaconError The error we received\n */\n private async handleRequestError(\n request: BeaconRequestInputMessage,\n beaconError: ErrorResponse\n ): Promise<void> {\n logger.error('handleRequestError', 'error response', beaconError)\n if (beaconError.errorType) {\n const buttons: AlertButton[] = []\n if (beaconError.errorType === BeaconErrorType.NO_PRIVATE_KEY_FOUND_ERROR) {\n const actionCallback = async (): Promise<void> => {\n const operationRequest: OperationRequestInput = request as OperationRequestInput\n // if the account we requested is not available, we remove it locally\n let accountInfo: AccountInfo | undefined\n if (operationRequest.sourceAddress && operationRequest.network) {\n const accountIdentifier = await getAccountIdentifier(\n operationRequest.sourceAddress,\n operationRequest.network\n )\n accountInfo = await this.getAccount(accountIdentifier)\n\n if (accountInfo) {\n await this.removeAccount(accountInfo.accountIdentifier)\n }\n }\n }\n\n buttons.push({ text: 'Remove account', actionCallback })\n }\n\n const peer = await this.getPeer()\n const activeAccount = await this.getActiveAccount()\n\n // If we sent a permission request, received an error and there is no active account, we need to reset the DAppClient.\n // This most likely means that the user rejected the first permission request after pairing a wallet, so we \"forget\" the paired wallet to allow the user to pair again.\n if (\n request.type === BeaconMessageType.PermissionRequest &&\n (await this.getActiveAccount()) === undefined\n ) {\n this._initPromise = undefined\n this.postMessageTransport = undefined\n this.p2pTransport = undefined\n this.walletConnectTransport = undefined\n await this.setTransport()\n await this.setActivePeer()\n }\n\n this.events\n .emit(\n messageEvents[request.type].error,\n {\n errorResponse: beaconError,\n walletInfo: await this.getWalletInfo(peer, activeAccount),\n errorMessages: this.errorMessages\n },\n buttons\n )\n .catch((emitError) => logger.error('handleRequestError', emitError))\n\n throw getError(beaconError.errorType, beaconError.errorData)\n }\n\n throw beaconError\n }\n\n /**\n * This message will send an event when we receive a successful response to one of the requests we sent.\n *\n * @param request The request we sent\n * @param response The response we received\n */\n private async notifySuccess(\n request: BeaconRequestInputMessage,\n response:\n | {\n account: AccountInfo\n output: PermissionResponseOutput\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n account: AccountInfo\n output: ProofOfEventChallengeResponse\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n account: AccountInfo\n output: SimulatedProofOfEventChallengeResponse\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n account: AccountInfo\n output: OperationResponseOutput\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n | {\n output: SignPayloadResponseOutput\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n // | {\n // output: EncryptPayloadResponseOutput\n // connectionContext: ConnectionContext\n // walletInfo: WalletInfo\n // }\n | {\n network: Network\n output: BroadcastResponseOutput\n blockExplorer: BlockExplorer\n connectionContext: ConnectionContext\n walletInfo: WalletInfo\n }\n ): Promise<void> {\n this.events\n .emit(messageEvents[request.type].success, response)\n .catch((emitError) => console.warn(emitError))\n }\n\n private async getWalletInfoFromStorage() {\n return await this.storage.get(StorageKey.LAST_SELECTED_WALLET)\n }\n\n private async updateStorageWallet(walletInfo: WalletInfo) {\n const wallet = await this.storage.get(StorageKey.LAST_SELECTED_WALLET)\n\n if (!wallet) {\n return\n }\n\n wallet.name = walletInfo.name\n wallet.icon = walletInfo.icon ?? wallet.icon\n this.storage.set(StorageKey.LAST_SELECTED_WALLET, wallet)\n }\n\n private async getWalletInfo(\n peer?: PeerInfo,\n account?: AccountInfo,\n readFromStorage: boolean = true\n ): Promise<WalletInfo> {\n const selectedAccount = account ? account : await this.getActiveAccount()\n\n const selectedPeer = peer ? peer : await this.getPeer(selectedAccount)\n\n let walletInfo: WalletInfo | undefined\n if (selectedAccount) {\n walletInfo = await this.appMetadataManager.getAppMetadata(selectedAccount.senderId)\n }\n\n let storageWallet\n\n if (readFromStorage) {\n storageWallet = await this.getWalletInfoFromStorage()\n }\n\n if (!walletInfo) {\n walletInfo = {\n name: selectedPeer?.name ?? storageWallet?.key ?? '',\n icon: selectedPeer?.icon ?? storageWallet?.icon,\n type: storageWallet?.type\n }\n\n this.updateStorageWallet(walletInfo)\n }\n\n const lowerCaseCompare = (str1?: string, str2?: string): boolean => {\n if (str1 && str2) {\n return str1.toLowerCase() === str2.toLowerCase()\n }\n\n return false\n }\n\n const getOrgName = (name: string) => name.split(/[_\\s]+/)[0]\n\n const apps: AppBase[] = [\n ...getiOSList(),\n ...getWebList(),\n ...getDesktopList(),\n ...getExtensionList()\n ].filter((app: AppBase) =>\n lowerCaseCompare(getOrgName(app.key), getOrgName(walletInfo?.name ?? 'wallet'))\n )\n\n // TODO: Remove once all wallets send the icon?\n const mobile = (apps as App[]).find(\n (app) => app.universalLink || app.key.includes('ios') || app.key.includes('mobile')\n )\n const browser = (apps as WebApp[]).find((app) => app.links)\n const desktop = (apps as DesktopApp[]).find((app) => app.downloadLink)\n const extension = (apps as ExtensionApp[]).find((app) => app.id)\n\n const appTypeMap = {\n extension: { app: extension, type: 'extension' },\n desktop: { app: desktop, type: 'desktop' },\n mobile: { app: mobile, type: 'mobile' },\n web: { app: browser, type: 'web' }\n }\n\n const defaultType = (): {\n app: AppBase | undefined\n type: 'extension' | 'mobile' | 'web' | 'desktop' | undefined\n } => {\n if (isBrowser(window) && browser) return { app: browser, type: 'web' }\n if (isDesktop(window) && desktop) return { app: desktop, type: 'desktop' }\n if (isBrowser(window) && extension) return { app: extension, type: 'extension' }\n if (mobile) return { app: mobile, type: 'mobile' }\n return { app: undefined, type: undefined }\n }\n\n const { app, type } = storageWallet ? appTypeMap[storageWallet.type] : defaultType()\n\n if (app) {\n let deeplink: string | undefined\n if (app.hasOwnProperty('links')) {\n deeplink = (app as WebApp).links[selectedAccount?.network.type ?? this.network.type]\n } else if (app.hasOwnProperty('deepLink')) {\n deeplink = (app as App).deepLink\n }\n\n return {\n name: app?.name ?? walletInfo.name,\n icon: app?.logo ?? walletInfo.icon,\n deeplink,\n type: type as any\n }\n }\n\n return walletInfo\n }\n\n private async getPeer(account?: AccountInfo): Promise<PeerInfo | undefined> {\n let peer: PeerInfo | undefined\n\n if (account) {\n logger.log('getPeer', 'We have an account', account)\n const postMessagePeers: ExtendedPostMessagePairingResponse[] =\n (await this.postMessageTransport?.getPeers()) ?? []\n const p2pPeers: ExtendedP2PPairingResponse[] = (await this.p2pTransport?.getPeers()) ?? []\n const walletConnectPeers: ExtendedWalletConnectPairingResponse[] =\n (await this.walletConnectTransport?.getPeers()) ?? []\n const peers = [...postMessagePeers, ...p2pPeers, ...walletConnectPeers]\n\n logger.log('getPeer', 'Found peers', peers, account)\n\n peer = peers.find((peerEl) => peerEl.senderId === account.senderId)\n if (!peer) {\n // We could not find an exact match for a sender, so we most likely received it over a relay\n peer = peers.find((peerEl) => (peerEl as any).id === account.origin.id)\n }\n } else {\n peer = await this._activePeer.promise\n logger.log('getPeer', 'Active peer', peer)\n }\n\n return peer\n }\n\n /**\n * This method handles sending of requests to the DApp. It makes sure that the DAppClient is initialized and connected\n * to the transport. After that rate limits and permissions will be checked, an ID is attached and the request is sent\n * to the DApp over the transport.\n *\n * @param requestInput The BeaconMessage to be sent to the wallet\n * @param account The account that the message will be sent to\n * @param skipResponse If true, the function return as soon as the message is sent\n */\n\n private makeRequest<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n requestInput: Optional<T, IgnoredRequestInputProperties>,\n skipResponse?: undefined | false,\n otherTabMessageId?: string\n ): Promise<{\n message: U\n connectionInfo: ConnectionContext\n }>\n private makeRequest<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n requestInput: Optional<T, IgnoredRequestInputProperties>,\n skipResponse: true,\n otherTabMessageId?: string\n ): Promise<undefined>\n private async makeRequest<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n requestInput: Optional<T, IgnoredRequestInputProperties>,\n skipResponse?: boolean,\n otherTabMessageId?: string\n ) {\n const messageId = otherTabMessageId ?? (await generateGUID())\n\n logger.log('makeRequest', 'starting')\n await this.init()\n logger.log('makeRequest', 'after init')\n\n if (await this.addRequestAndCheckIfRateLimited()) {\n this.events\n .emit(BeaconEvent.LOCAL_RATE_LIMIT_REACHED)\n .catch((emitError) => console.warn(emitError))\n\n throw new Error('rate limit reached')\n }\n\n if (!(await this.checkPermissions(requestInput.type))) {\n this.events.emit(BeaconEvent.NO_PERMISSIONS).catch((emitError) => console.warn(emitError))\n\n throw new Error('No permissions to send this request to wallet!')\n }\n\n if (!this.beaconId) {\n throw await this.sendInternalError('octez.connect ID not defined')\n }\n\n const request: Optional<T, IgnoredRequestInputProperties> &\n Pick<U, IgnoredRequestInputProperties> = {\n id: messageId,\n version: '2', // This is the old version\n senderId: await getSenderId(await this.beaconId),\n ...requestInput\n }\n\n let exposed\n\n if (!skipResponse) {\n exposed = new ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >()\n\n this.addOpenRequest(request.id, exposed)\n }\n\n try {\n const payload = await new Serializer().serialize(request)\n\n const account = await this.getActiveAccount()\n\n const peer = await this.getPeer(account)\n\n const walletInfo = await this.getWalletInfo(peer, account)\n\n logger.log('makeRequest', 'sending message', request)\n await (await this.transport).send(payload, peer)\n if (\n request.type !== BeaconMessageType.PermissionRequest ||\n (this._activeAccount.isResolved() && (await this._activeAccount.promise))\n ) {\n this.tryToAppSwitch()\n }\n\n if (!otherTabMessageId) {\n this.events\n .emit(messageEvents[requestInput.type].sent, {\n walletInfo: {\n ...walletInfo,\n name: walletInfo.name ?? 'Wallet'\n },\n extraInfo: {\n resetCallback: async () => {\n await this.disconnect()\n }\n }\n })\n .catch((emitError) => logger.warn('makeRequest', emitError))\n }\n } catch (sendError) {\n if (!skipResponse) {\n this.clearOpenRequest(request.id)\n }\n\n this.events.emit(BeaconEvent.INTERNAL_ERROR, {\n text: 'Unable to send message. If this problem persists, please reset the connection and pair your wallet again.',\n buttons: [\n {\n text: 'Reset Connection',\n actionCallback: async () => {\n closeToast()\n this.disconnect()\n }\n }\n ]\n })\n throw sendError\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return exposed?.promise as any // TODO: fix type\n }\n\n /**\n * This method handles sending of requests to the DApp. It makes sure that the DAppClient is initialized and connected\n * to the transport. After that rate limits and permissions will be checked, an ID is attached and the request is sent\n * to the DApp over the transport.\n *\n * @param requestInput The BeaconMessage to be sent to the wallet\n * @param account The account that the message will be sent to\n */\n private async makeRequestV3<\n T extends BlockchainMessage<string>,\n U extends BeaconMessageWrapper<BlockchainMessage<string>>\n >(\n requestInput: T,\n otherTabMessageId?: string\n ): Promise<{\n message: U\n connectionInfo: ConnectionContext\n }> {\n const messageId = otherTabMessageId ?? (await generateGUID())\n logger.log('makeRequest', 'starting')\n await this.init(undefined, true)\n logger.log('makeRequest', 'after init')\n\n if (await this.addRequestAndCheckIfRateLimited()) {\n this.events\n .emit(BeaconEvent.LOCAL_RATE_LIMIT_REACHED)\n .catch((emitError) => console.warn(emitError))\n\n throw new Error('rate limit reached')\n }\n\n if (!this.beaconId) {\n throw await this.sendInternalError('octez.connect ID not defined')\n }\n\n const request: BeaconMessageWrapper<BlockchainMessage> = {\n id: messageId,\n version: '3',\n senderId: await getSenderId(await this.beaconId),\n message: requestInput\n }\n\n const exposed = new ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >()\n\n this.addOpenRequest(request.id, exposed)\n\n try {\n const payload = await new Serializer().serialize(request)\n\n const account = await this.getActiveAccount()\n\n const peer = await this.getPeer(account)\n\n const walletInfo = await this.getWalletInfo(peer, account)\n\n logger.log('makeRequest', 'sending message', request)\n await (await this.transport).send(payload, peer)\n if (\n request.message.type !== BeaconMessageType.PermissionRequest ||\n (this._activeAccount.isResolved() && (await this._activeAccount.promise))\n ) {\n this.tryToAppSwitch()\n }\n\n const index = requestInput.type as BeaconMessageType\n\n this.events\n .emit(messageEvents[index].sent, {\n walletInfo: {\n ...walletInfo,\n name: walletInfo.name ?? 'Wallet'\n },\n extraInfo: {\n resetCallback: async () => {\n await this.disconnect()\n }\n }\n })\n .catch((emitError) => logger.warn('makeRequestV3', emitError))\n } catch (sendError) {\n this.clearOpenRequest(request.id)\n this.events.emit(BeaconEvent.INTERNAL_ERROR, {\n text: 'Unable to send message. If this problem persists, please reset the connection and pair your wallet again.',\n buttons: [\n {\n text: 'Reset Connection',\n actionCallback: async () => {\n closeToast()\n this.disconnect()\n }\n }\n ]\n })\n throw sendError\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return exposed.promise as any // TODO: fix type\n }\n\n private async makeRequestBC<T extends BeaconRequestInputMessage, U extends BeaconMessage>(\n request: Optional<T, IgnoredRequestInputProperties>\n ): Promise<\n | {\n message: U\n connectionInfo: ConnectionContext\n }\n | undefined\n > {\n if (!this._transport.isResolved()) {\n return\n }\n\n const transport = await this.transport\n\n if (transport.type !== TransportType.WALLETCONNECT) {\n return\n }\n\n if (await this.addRequestAndCheckIfRateLimited()) {\n this.events\n .emit(BeaconEvent.LOCAL_RATE_LIMIT_REACHED)\n .catch((emitError) => console.warn(emitError))\n\n throw new Error('rate limit reached')\n }\n\n const id = await generateGUID()\n\n this.multiTabChannel.postMessage({\n type: request.type,\n data: request,\n id\n })\n\n if (\n request.type !== BeaconMessageType.PermissionRequest ||\n (this._activeAccount.isResolved() && (await this._activeAccount.promise))\n ) {\n this.tryToAppSwitch()\n }\n\n this.events\n .emit(messageEvents[BeaconMessageType.PermissionRequest].sent, {\n walletInfo: await this.getWalletInfo(),\n extraInfo: {\n resetCallback: () => this.disconnect()\n }\n })\n .catch((emitError) => console.warn(emitError))\n\n const exposed = new ExposedPromise<\n {\n message: U\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >()\n\n this.addOpenRequest(id, exposed as any)\n\n return exposed.promise\n }\n\n /**\n * Disconnects all resolved transports (postMessage, P2P, WalletConnect), removes their peers,\n * and clears active account state. After calling, the DAppClient remains usable for a new\n * requestPermissions().\n */\n public async disconnect(options: DAppClientDisconnectOptions = {}) {\n const { notifyPeers = true } = options\n\n if (!this._disconnectPromise) {\n this._disconnectNotifyPeers = false\n }\n\n this._disconnectNotifyPeers = this._disconnectNotifyPeers || notifyPeers\n if (this._disconnectPromise) {\n return this._disconnectPromise\n }\n\n this._disconnectPromise = (async () => this.disconnectInternal())().finally(() => {\n this._disconnectPromise = undefined\n this._disconnectNotifyPeers = false\n })\n\n return this._disconnectPromise\n }\n\n private async disconnectInternal(): Promise<void> {\n this.abortPendingInit()\n\n if (!this._transport.isResolved()) {\n const initializedTransports = this.getInitializedTransports()\n this.abortOpenRequests()\n await this.removeAllPeersFromTransports(initializedTransports)\n await this.clearActiveAccount()\n await this.disconnectResolvedTransports(initializedTransports)\n this.clearInternalTransportReferences()\n\n return\n }\n\n const transport = (await this.transport) as DAppInternalTransport\n\n if (transport.connectionStatus === TransportStatus.NOT_CONNECTED) {\n await this.clearActiveAccount()\n this.abortOpenRequests()\n\n return\n }\n\n await this.createStateSnapshot()\n this.sendMetrics('performance-metrics/save', await this.buildPayload('disconnect', 'start'))\n this.abortOpenRequests()\n const transports = this.getResolvedTransports(transport)\n await this.removeAllPeersFromTransports(transports)\n await this.clearActiveAccount()\n await this.disconnectResolvedTransports(transports)\n this.clearInternalTransportReferences()\n this.sendMetrics('performance-metrics/save', await this.buildPayload('disconnect', 'success'))\n }\n\n private getInitializedTransports(): DAppInternalTransport[] {\n const transports: DAppInternalTransport[] = []\n\n const addTransport = (transport?: DAppInternalTransport): void => {\n if (transport && !transports.includes(transport)) {\n transports.push(transport)\n }\n }\n\n addTransport(this.postMessageTransport)\n addTransport(this.p2pTransport)\n addTransport(this.walletConnectTransport)\n\n return transports\n }\n\n private getResolvedTransports(selectedTransport: DAppInternalTransport): DAppInternalTransport[] {\n const transports = this.getInitializedTransports()\n\n const addTransport = (transport?: DAppInternalTransport): void => {\n if (transport && !transports.includes(transport)) {\n transports.push(transport)\n }\n }\n\n addTransport(this.postMessageTransport)\n addTransport(this.p2pTransport)\n addTransport(this.walletConnectTransport)\n addTransport(selectedTransport)\n\n return transports\n }\n\n private clearInternalTransportReferences(): void {\n this.postMessageTransport = undefined\n this.p2pTransport = undefined\n this.walletConnectTransport = undefined\n }\n\n private async removeAllPeersFromTransports(transports: DAppInternalTransport[]): Promise<void> {\n const peersByTransport: PeersForTransport[] = await Promise.all(\n transports.map(async (transport): Promise<PeersForTransport> => {\n const transportPeers: ExtendedPeerInfo[] = await transport.getPeers()\n\n return {\n transport,\n peers: transportPeers\n }\n })\n )\n\n await Promise.all(peersByTransport.map(({ transport }) => transport.removeAllPeers()))\n\n const peersToRemove = peersByTransport.flatMap(({ peers: transportPeers }) => transportPeers)\n await this.removeAccountsForPeers(peersToRemove)\n\n // If cleanup already removed peers, a late notify upgrade has nothing left to notify.\n const sendDisconnectToPeers = this._disconnectNotifyPeers\n\n if (!sendDisconnectToPeers) {\n return\n }\n\n await Promise.allSettled(\n this.getUniquePeerNotifications(peersByTransport).map(({ transport, peer }) =>\n this.sendDisconnectToPeer(peer, transport)\n )\n )\n }\n\n private getUniquePeerNotifications(peersByTransport: PeersForTransport[]): PeerNotification[] {\n const notifications: PeerNotification[] = []\n const seen = new Set<string>()\n\n peersByTransport.forEach(({ transport, peers: transportPeers }) => {\n transportPeers.forEach((peer) => {\n const key = this.getPeerNotificationKey(transport, peer)\n if (seen.has(key)) {\n return\n }\n\n seen.add(key)\n notifications.push({ transport, peer })\n })\n })\n\n return notifications\n }\n\n private getPeerNotificationKey(transport: DAppInternalTransport, peer: ExtendedPeerInfo): string {\n return [transport.type, peer.publicKey, peer.senderId, peer.id].filter(Boolean).join(':')\n }\n\n private async disconnectResolvedTransports(transports: DAppInternalTransport[]): Promise<void> {\n const results = await Promise.allSettled(\n transports.map(async (transport) => {\n if (this.isTransportConnected(transport)) {\n await transport.disconnect()\n }\n\n if (this.hasClientCleanup(transport)) {\n await transport.doClientCleanup()\n }\n })\n )\n\n results.forEach((result) => {\n if (result.status === 'rejected') {\n logger.warn('disconnectResolvedTransports', result.reason)\n }\n })\n }\n\n private hasClientCleanup(\n transport: DAppInternalTransport\n ): transport is DAppInternalTransport & TransportWithClientCleanup {\n const transportWithClientCleanup = transport as Partial<TransportWithClientCleanup>\n\n return typeof transportWithClientCleanup.doClientCleanup === 'function'\n }\n\n private isTransportConnected(transport: DAppInternalTransport): boolean {\n return transport.connectionStatus !== TransportStatus.NOT_CONNECTED\n }\n\n /**\n * Adds a requests to the \"openRequests\" set so we know what messages have already been answered/handled.\n *\n * @param id The ID of the message\n * @param promise A promise that resolves once the response for that specific message is received\n */\n private addOpenRequest(\n id: string,\n promise: ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >\n ): void {\n logger.log('addOpenRequest', this.name, `adding request ${id} and waiting for answer`)\n this.clearOpenRequestTimeout(id)\n this.openRequests.delete(id)\n this.openRequests.set(id, promise)\n this.addOpenRequestTimeout(id, promise)\n }\n\n private addOpenRequestTimeout(\n id: string,\n promise: ExposedPromise<\n {\n message: BeaconMessage | BeaconMessageWrapper<BeaconBaseMessage>\n connectionInfo: ConnectionContext\n },\n ErrorResponse\n >\n ): void {\n if (id === SESSION_UPDATE_REQUEST_ID) {\n return\n }\n\n if (!Number.isFinite(this.requestTimeoutMs) || this.requestTimeoutMs <= 0) {\n return\n }\n\n const timeout = setTimeout(() => {\n if (this.openRequests.get(id) !== promise) {\n return\n }\n\n const errorResponse: ErrorResponse = {\n id,\n type: BeaconMessageType.Error,\n errorType: BeaconErrorType.PEER_UNREACHABLE,\n senderId: '',\n version: '2'\n }\n\n promise.reject(errorResponse)\n this.clearOpenRequest(id)\n this.events.emit(BeaconEvent.CHANNEL_CLOSED).catch((emitError) => {\n logger.error('addOpenRequestTimeout', emitError)\n })\n }, this.requestTimeoutMs)\n\n this.openRequestTimeouts.set(id, timeout)\n }\n\n private clearOpenRequest(id: string): void {\n this.clearOpenRequestTimeout(id)\n this.openRequests.delete(id)\n this.openRequestsOtherTabs.delete(id)\n }\n\n private clearOpenRequestTimeout(id: string): void {\n const timeout = this.openRequestTimeouts.get(id)\n if (timeout) {\n clearTimeout(timeout)\n this.openRequestTimeouts.delete(id)\n }\n }\n\n private clearAllOpenRequestTimeouts(): void {\n this.openRequestTimeouts.forEach((timeout) => clearTimeout(timeout))\n this.openRequestTimeouts.clear()\n }\n\n private abortOpenRequests(): void {\n Array.from(this.openRequests.entries())\n .filter(([id]) => id !== SESSION_UPDATE_REQUEST_ID)\n .forEach(([id, promise]) => {\n promise.reject(this.createAbortedError(id))\n this.clearOpenRequest(id)\n })\n this.openRequests.clear()\n this.openRequestsOtherTabs.clear()\n this.acknowledgedRequests.clear()\n this.clearAllOpenRequestTimeouts()\n }\n\n private async sendNotificationWithAccessToken(notification: {\n url: string\n recipient: string\n title: string\n body: string\n payload: string\n protocolIdentifier: string\n accessToken: string\n }): Promise<string> {\n const { url, recipient, title, body, payload, protocolIdentifier, accessToken } = notification\n const timestamp = new Date().toISOString()\n\n const keypair = await this.keyPair\n\n const rawPublicKey = keypair.publicKey\n\n const prefix = Buffer.from(new Uint8Array([13, 15, 37, 217]))\n\n const publicKey = bs58check.encode(Buffer.concat([prefix, Buffer.from(rawPublicKey)]))\n\n const constructedString = [\n 'Tezos Signed Message: ',\n recipient,\n title,\n body,\n timestamp,\n payload\n ].join(' ')\n\n const bytes = toHex(constructedString)\n const payloadBytes = '05' + '01' + bytes.length.toString(16).padStart(8, '0') + bytes\n\n const signature = await signMessage(payloadBytes, {\n secretKey: Buffer.from(keypair.secretKey)\n })\n\n const notificationResponse = await fetch(`${url}/send`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n recipient,\n title,\n body,\n timestamp,\n payload,\n accessToken,\n protocolIdentifier,\n sender: {\n name: this.name,\n publicKey,\n signature\n }\n })\n })\n\n if (!notificationResponse.ok) {\n throw new Error(\n `sendNotification failed: ${notificationResponse.status} ${notificationResponse.statusText}`\n )\n }\n\n return notificationResponse.json()\n }\n\n private async onNewAccount(\n message: PermissionResponse | ChangeAccountRequest,\n connectionInfo: ConnectionContext\n ): Promise<AccountInfo> {\n // TODO: Migration code. Remove sometime after 1.0.0 release.\n const tempPK: string | undefined =\n message.publicKey || (message as any).pubkey || (message as any).pubKey\n\n const publicKey = tempPK ? prefixPublicKey(tempPK) : undefined\n\n if (!publicKey && !message.address) {\n throw new Error('PublicKey or Address must be defined')\n }\n\n const address = message.address ?? (await getAddressFromPublicKey(publicKey!))\n\n if (!isValidAddress(address)) {\n throw new Error(`Invalid address: \"${address}\"`)\n }\n\n if (\n message.walletType === 'abstracted_account' &&\n address.substring(0, 3) !== CONTRACT_PREFIX\n ) {\n throw new Error(\n `Invalid abstracted account address \"${address}\", it should be a ${CONTRACT_PREFIX} address`\n )\n }\n\n logger.log('######## MESSAGE #######')\n logger.log('onNewAccount', message)\n\n const walletKey = (await this.storage.get(StorageKey.LAST_SELECTED_WALLET))?.key\n\n const accountInfo: AccountInfo = {\n accountIdentifier: await getAccountIdentifier(address, message.network),\n senderId: message.senderId,\n origin: {\n type: connectionInfo.origin,\n id: connectionInfo.id\n },\n walletKey,\n address,\n publicKey,\n network: message.network,\n scopes: message.scopes,\n threshold: message.threshold,\n notification: message.notification,\n connectedAt: new Date().getTime(),\n walletType: message.walletType ?? 'implicit',\n verificationType: message.verificationType,\n ...(message.verificationType === 'proof_of_event' ? { hasVerifiedChallenge: false } : {})\n }\n\n logger.log('accountInfo', '######## ACCOUNT INFO #######')\n\n logger.log('accountInfo', accountInfo)\n\n await this.accountManager.addAccount(accountInfo)\n await this.setActiveAccount(accountInfo)\n\n return accountInfo\n }\n}\n"]}
|