@tezos-x/octez.connect-wallet 5.0.4 → 5.0.5

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.
@@ -212,7 +212,7 @@ class WalletClient extends octez_connect_core_1.Client {
212
212
  transport
213
213
  .addListener((message, connectionInfo) => __awaiter(this, void 0, void 0, function* () {
214
214
  if (typeof message === 'string') {
215
- const peer = yield this.findPeer(connectionInfo.id);
215
+ const peer = yield this.findPeer(connectionInfo.id, transport);
216
216
  const protocolVersion = this.getPeerProtocolVersion(peer);
217
217
  const deserializedMessage = (yield new octez_connect_core_1.Serializer(protocolVersion).deserialize(message));
218
218
  this.handleResponse(deserializedMessage, connectionInfo);
@@ -384,17 +384,18 @@ class WalletClient extends octez_connect_core_1.Client {
384
384
  */
385
385
  respondToMessage(response, connectionContext) {
386
386
  return __awaiter(this, void 0, void 0, function* () {
387
+ const transport = yield this.transport;
387
388
  let peer;
388
389
  if (connectionContext) {
389
- peer = yield this.findPeer(connectionContext.id);
390
+ peer = yield this.findPeer(connectionContext.id, transport);
390
391
  }
391
392
  const protocolVersion = this.getPeerProtocolVersion(peer);
392
393
  const serializedMessage = yield new octez_connect_core_1.Serializer(protocolVersion).serialize(response);
393
394
  if (connectionContext) {
394
- yield (yield this.transport).send(serializedMessage, peer);
395
+ yield transport.send(serializedMessage, peer);
395
396
  }
396
397
  else {
397
- yield (yield this.transport).send(serializedMessage);
398
+ yield transport.send(serializedMessage);
398
399
  }
399
400
  });
400
401
  }
@@ -1 +1 @@
1
- {"version":3,"file":"WalletClient.js","sourceRoot":"","sources":["../../../src/client/WalletClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Serializer,\n Client,\n LocalStorage,\n PermissionManager,\n AppMetadataManager,\n getSenderId,\n Logger,\n NOTIFICATION_ORACLE_URL,\n usesWrappedMessages\n} from '@tezos-x/octez.connect-core'\n\nimport { ExposedPromise, toHex } from '@tezos-x/octez.connect-utils'\n\nimport {\n ConnectionContext,\n BeaconRequestMessage,\n BeaconMessageType,\n AcknowledgeResponseInput,\n ExtendedP2PPairingResponse,\n ExtendedPeerInfo,\n PeerInfo,\n DisconnectMessage,\n TransportType,\n BeaconRequestOutputMessage,\n BeaconResponseInputMessage,\n AppMetadata,\n PermissionInfo,\n TransportStatus,\n BeaconMessage,\n BeaconMessageWrapper,\n BeaconBaseMessage,\n StorageKey,\n PushToken,\n PostMessagePairingRequest,\n ExtendedPostMessagePairingRequest,\n P2PPairingRequest,\n ExtendedP2PPairingRequest,\n WalletConnectPairingRequest,\n ExtendedWalletConnectPairingRequest\n} from '@tezos-x/octez.connect-types'\nimport { TezosBlockchain } from '@tezos-x/octez.connect-blockchain-tezos'\nimport { WalletP2PTransport } from '../transports/WalletP2PTransport'\nimport { IncomingRequestInterceptor } from '../interceptors/IncomingRequestInterceptor'\nimport { OutgoingResponseInterceptor } from '../interceptors/OutgoingResponseInterceptor'\nimport { WalletClientOptions } from './WalletClientOptions'\n\nconst logger = new Logger('WalletClient')\n\n/**\n * @publicapi\n *\n * The WalletClient has to be used in the wallet. It handles all the logic related to connecting to beacon-compatible\n * dapps and handling/responding to requests.\n *\n * @warning For browser extensions: The WalletClient maintains a persistent connection that polls relay servers\n * every 30 seconds. Call `destroy()` when the client is no longer needed to stop polling and free resources.\n * For extensions, consider conditional initialization - only connect when there are existing peers or when\n * a new pairing request arrives. See the README for lifecycle management best practices.\n *\n * @category Wallet\n */\nexport class WalletClient extends Client {\n /**\n * Returns whether or not the transport is connected\n */\n protected readonly _isConnected: ExposedPromise<boolean> = new ExposedPromise()\n public get isConnected(): Promise<boolean> {\n return this._isConnected.promise\n }\n\n private readonly permissionManager: PermissionManager\n private readonly appMetadataManager: AppMetadataManager\n\n /**\n * This array stores pending requests, meaning requests we received and have not yet handled / sent a response.\n */\n private pendingRequests: [\n BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n ConnectionContext\n ][] = []\n\n constructor(config: WalletClientOptions) {\n super({\n storage: config && config.storage ? config.storage : new LocalStorage(),\n ...config\n })\n this.permissionManager = new PermissionManager(this.storage)\n this.appMetadataManager = new AppMetadataManager(this.storage)\n // Tezos is the default chain: the wrapped-only pipeline needs the\n // registry handler for every request/response, so registration is no\n // longer a consumer obligation. addBlockchain stays public — a later\n // registration under 'tezos' overrides this default.\n this.addBlockchain(new TezosBlockchain())\n }\n\n public async init(): Promise<TransportType> {\n const keyPair = await this.keyPair // We wait for keypair here so the P2P Transport creation is not delayed and causing issues\n const p2pTransport = new WalletP2PTransport(\n this.name,\n keyPair,\n this.storage,\n this.matrixNodes,\n this.iconUrl,\n this.appUrl\n )\n\n return super.init(p2pTransport)\n }\n\n /**\n * This method initiates a connection to the P2P network and registers a callback that will be called\n * whenever a message is received.\n *\n * @param newMessageCallback The callback that will be invoked for every message the transport receives.\n */\n public async connect(\n newMessageCallback: (\n message: BeaconRequestOutputMessage,\n connectionContext: ConnectionContext\n ) => void\n ): Promise<void> {\n this.handleResponse = async (\n message: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage> | DisconnectMessage,\n connectionContext: ConnectionContext\n ): Promise<void> => {\n // Define valid request types that wallets should process\n const validRequestTypes = [\n BeaconMessageType.PermissionRequest,\n BeaconMessageType.OperationRequest,\n BeaconMessageType.SignPayloadRequest,\n BeaconMessageType.BroadcastRequest,\n BeaconMessageType.ProofOfEventChallengeRequest,\n BeaconMessageType.SimulatedProofOfEventChallengeRequest,\n BeaconMessageType.BlockchainRequest,\n BeaconMessageType.ChangeAccountRequest\n ]\n\n if (usesWrappedMessages(message.version)) {\n const typedMessage = message as BeaconMessageWrapper<BeaconBaseMessage>\n\n if (typedMessage.message.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.message.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n } else {\n // Legacy flat v2 dialect (a v4.8.x dApp): served transparently — the\n // flat request is already the shape wallet apps consume, and the\n // response is emitted back in the same dialect (see\n // OutgoingResponseInterceptor).\n const typedMessage = message as BeaconRequestMessage | DisconnectMessage\n\n if (typedMessage.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n if (typedMessage.version && typedMessage.version !== '1') {\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n }\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n }\n }\n\n return this._connect()\n }\n\n public async getRegisterPushChallenge(\n backendUrl: string,\n accountPublicKey: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ) {\n // Check if account is already registered\n const challengeResponse = await fetch(`${oracleUrl}/challenge`)\n if (!challengeResponse.ok) {\n throw new Error(\n `getRegisterPushChallenge failed: ${challengeResponse.status} ${challengeResponse.statusText}`\n )\n }\n const challenge: { id: string; timestamp: string } = await challengeResponse.json()\n\n const constructedString = [\n 'Tezos Signed Message: ',\n challenge.id,\n challenge.timestamp,\n accountPublicKey,\n backendUrl\n ].join(' ')\n\n const bytes = toHex(constructedString)\n const payloadBytes = `05` + `01${ bytes.length.toString(16).padStart(8, '0') }${bytes}`\n\n return {\n challenge,\n payloadToSign: payloadBytes\n }\n }\n\n public async registerPush(\n challenge: { id: string; timestamp: string },\n signature: string,\n backendUrl: string,\n accountPublicKey: string,\n protocolIdentifier: string,\n deviceId: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ): Promise<PushToken> {\n const tokens = await this.storage.get(StorageKey.PUSH_TOKENS)\n const token = tokens.find(\n (el) => el.publicKey === accountPublicKey && el.backendUrl === backendUrl\n )\n if (token) {\n return token\n }\n\n const registerResponse = await fetch(`${oracleUrl}/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: this.name,\n challenge,\n accountPublicKey,\n signature,\n backendUrl,\n protocolIdentifier,\n deviceId\n })\n })\n if (!registerResponse.ok) {\n throw new Error(\n `registerPush failed: ${registerResponse.status} ${registerResponse.statusText}`\n )\n }\n const register: {\n accessToken: string\n managementToken: string\n message: string\n success: boolean\n } = await registerResponse.json()\n\n const newToken = {\n publicKey: accountPublicKey,\n backendUrl,\n accessToken: register.accessToken,\n managementToken: register.managementToken\n }\n\n tokens.push(newToken)\n\n await this.storage.set(StorageKey.PUSH_TOKENS, tokens)\n\n return newToken\n }\n\n /**\n * The method will attempt to initiate a connection using the active transport.\n */\n public async _connect(attempts: number = 3): Promise<void> {\n const transport: WalletP2PTransport = (await this.transport) as WalletP2PTransport\n if (attempts == 0 || transport.connectionStatus !== TransportStatus.NOT_CONNECTED) {\n return\n }\n\n try {\n await transport.connect()\n } catch (err: any) {\n logger.warn('_connect', err.message)\n await transport.disconnect()\n await this._connect(--attempts)\n\n return\n }\n\n transport\n .addListener(async (message: unknown, connectionInfo: ConnectionContext) => {\n if (typeof message === 'string') {\n const peer = await this.findPeer(connectionInfo.id)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const deserializedMessage = (await new Serializer(protocolVersion).deserialize(\n message\n )) as BeaconRequestMessage\n this.handleResponse(deserializedMessage, connectionInfo)\n }\n })\n .catch((error) => logger.log('_connect', error))\n this._isConnected.resolve(true)\n }\n\n /**\n * This method sends a response for a specific request back to the DApp\n *\n * @param message The BeaconResponseMessage that will be sent back to the DApp\n */\n public async respond(message: BeaconResponseInputMessage): Promise<void> {\n logger.log('RESPONSE', message)\n const request = this.pendingRequests.find(\n (pendingRequest) => pendingRequest[0].id === message.id\n )\n if (!request) {\n throw new Error('No matching request found!')\n }\n\n this.pendingRequests = this.pendingRequests.filter(\n (pendingRequest) => pendingRequest[0].id !== message.id\n )\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request: request[0],\n message,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, request[1])\n },\n blockchains: this.blockchains\n })\n }\n\n public async getAppMetadataList(): Promise<AppMetadata[]> {\n return this.appMetadataManager.getAppMetadataList()\n }\n\n public async getAppMetadata(senderId: string): Promise<AppMetadata | undefined> {\n return this.appMetadataManager.getAppMetadata(senderId)\n }\n\n public async removeAppMetadata(senderId: string): Promise<void> {\n return this.appMetadataManager.removeAppMetadata(senderId)\n }\n\n public async removeAllAppMetadata(): Promise<void> {\n return this.appMetadataManager.removeAllAppMetadata()\n }\n\n public async getPermissions(): Promise<PermissionInfo[]> {\n return this.permissionManager.getPermissions()\n }\n\n public async getPermission(accountIdentifier: string): Promise<PermissionInfo | undefined> {\n return this.permissionManager.getPermission(accountIdentifier)\n }\n\n public async removePermission(accountIdentifier: string, senderId: string): Promise<void> {\n return this.permissionManager.removePermission(accountIdentifier, senderId)\n }\n\n public async removeAllPermissions(): Promise<void> {\n return this.permissionManager.removeAllPermissions()\n }\n\n private async getPeerInfo(peer: PeerInfo): Promise<ExtendedPeerInfo> {\n const senderId = await getSenderId(peer.publicKey)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n\n if (peer instanceof PostMessagePairingRequest || peer instanceof ExtendedPostMessagePairingRequest) {\n const base = peer as PostMessagePairingRequest & {\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedPostMessagePairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (peer instanceof P2PPairingRequest || peer instanceof ExtendedP2PPairingRequest) {\n const base = peer as P2PPairingRequest & {\n relayServer: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedP2PPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n base.relayServer,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (\n peer instanceof WalletConnectPairingRequest ||\n peer instanceof ExtendedWalletConnectPairingRequest\n ) {\n const base = peer as ExtendedWalletConnectPairingRequest & {\n uri: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedWalletConnectPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n base.uri,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n return {\n ...peer,\n senderId,\n protocolVersion\n }\n }\n\n /**\n * Add a new peer to the known peers\n * @param peer The new peer to add\n */\n public async addPeer(peer: PeerInfo, sendPairingResponse: boolean = true): Promise<void> {\n return (await this.transport).addPeer(await this.getPeerInfo(peer), sendPairingResponse)\n }\n\n public async removePeer(\n peer: ExtendedP2PPairingResponse,\n sendDisconnectToPeer: boolean = false\n ): Promise<void> {\n const removePeerResult = (await this.transport).removePeer(peer)\n\n await this.removePermissionsForPeers([peer])\n\n if (sendDisconnectToPeer) {\n await this.sendDisconnectToPeer(peer)\n }\n\n return removePeerResult\n }\n\n public async removeAllPeers(sendDisconnectToPeers: boolean = false): Promise<void> {\n const peers: ExtendedP2PPairingResponse[] = await (await this.transport).getPeers()\n const removePeerResult = (await this.transport).removeAllPeers()\n\n await this.removePermissionsForPeers(peers)\n\n if (sendDisconnectToPeers) {\n const disconnectPromises = peers.map((peer) => this.sendDisconnectToPeer(peer))\n\n await Promise.all(disconnectPromises)\n }\n\n return removePeerResult\n }\n\n private async removePermissionsForPeers(\n peersToRemove: ExtendedP2PPairingResponse[]\n ): Promise<void> {\n const permissions = await this.permissionManager.getPermissions()\n\n const peerIdsToRemove = peersToRemove.map((peer) => peer.senderId)\n // Remove all permissions with origin of the specified peer\n const permissionsToRemove = permissions.filter((permission) =>\n peerIdsToRemove.includes(permission.appMetadata.senderId)\n )\n const permissionIdentifiersToRemove = permissionsToRemove.map(\n (permissionInfo) => permissionInfo.accountIdentifier\n )\n await this.permissionManager.removePermissions(permissionIdentifiersToRemove)\n }\n\n /**\n * Send an acknowledge message back to the sender\n *\n * @param message The message that was received\n */\n private async sendAcknowledgeResponse(\n request: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n connectionContext: ConnectionContext\n ): Promise<void> {\n // Acknowledge the message\n const acknowledgeResponse: AcknowledgeResponseInput = {\n id: request.id,\n type: BeaconMessageType.Acknowledge\n }\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request,\n message: acknowledgeResponse,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, connectionContext)\n },\n blockchains: this.blockchains\n })\n }\n\n /**\n * An internal method to send a BeaconMessage to the DApp\n *\n * @param response Send a message back to the DApp\n */\n private async respondToMessage(\n response: BeaconMessage,\n connectionContext: ConnectionContext\n ): Promise<void> {\n let peer: PeerInfo | undefined\n if (connectionContext) {\n peer = await this.findPeer(connectionContext.id)\n }\n\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const serializedMessage: string = await new Serializer(protocolVersion).serialize(response)\n if (connectionContext) {\n await (await this.transport).send(serializedMessage, peer)\n } else {\n await (await this.transport).send(serializedMessage)\n }\n }\n\n private async disconnect(senderId: string) {\n const transport = await this.transport\n const peers: ExtendedPeerInfo[] = await transport.getPeers()\n const peer: ExtendedPeerInfo | undefined = peers.find((peerEl) => peerEl.senderId === senderId)\n\n if (peer) {\n await this.removePeer(peer as any)\n }\n\n return\n }\n}\n"]}
1
+ {"version":3,"file":"WalletClient.js","sourceRoot":"","sources":["../../../src/client/WalletClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Serializer,\n Client,\n LocalStorage,\n PermissionManager,\n AppMetadataManager,\n getSenderId,\n Logger,\n NOTIFICATION_ORACLE_URL,\n usesWrappedMessages\n} from '@tezos-x/octez.connect-core'\n\nimport { ExposedPromise, toHex } from '@tezos-x/octez.connect-utils'\n\nimport {\n ConnectionContext,\n BeaconRequestMessage,\n BeaconMessageType,\n AcknowledgeResponseInput,\n ExtendedP2PPairingResponse,\n ExtendedPeerInfo,\n PeerInfo,\n DisconnectMessage,\n TransportType,\n BeaconRequestOutputMessage,\n BeaconResponseInputMessage,\n AppMetadata,\n PermissionInfo,\n TransportStatus,\n BeaconMessage,\n BeaconMessageWrapper,\n BeaconBaseMessage,\n StorageKey,\n PushToken,\n PostMessagePairingRequest,\n ExtendedPostMessagePairingRequest,\n P2PPairingRequest,\n ExtendedP2PPairingRequest,\n WalletConnectPairingRequest,\n ExtendedWalletConnectPairingRequest\n} from '@tezos-x/octez.connect-types'\nimport { TezosBlockchain } from '@tezos-x/octez.connect-blockchain-tezos'\nimport { WalletP2PTransport } from '../transports/WalletP2PTransport'\nimport { IncomingRequestInterceptor } from '../interceptors/IncomingRequestInterceptor'\nimport { OutgoingResponseInterceptor } from '../interceptors/OutgoingResponseInterceptor'\nimport { WalletClientOptions } from './WalletClientOptions'\n\nconst logger = new Logger('WalletClient')\n\n/**\n * @publicapi\n *\n * The WalletClient has to be used in the wallet. It handles all the logic related to connecting to beacon-compatible\n * dapps and handling/responding to requests.\n *\n * @warning For browser extensions: The WalletClient maintains a persistent connection that polls relay servers\n * every 30 seconds. Call `destroy()` when the client is no longer needed to stop polling and free resources.\n * For extensions, consider conditional initialization - only connect when there are existing peers or when\n * a new pairing request arrives. See the README for lifecycle management best practices.\n *\n * @category Wallet\n */\nexport class WalletClient extends Client {\n /**\n * Returns whether or not the transport is connected\n */\n protected readonly _isConnected: ExposedPromise<boolean> = new ExposedPromise()\n public get isConnected(): Promise<boolean> {\n return this._isConnected.promise\n }\n\n private readonly permissionManager: PermissionManager\n private readonly appMetadataManager: AppMetadataManager\n\n /**\n * This array stores pending requests, meaning requests we received and have not yet handled / sent a response.\n */\n private pendingRequests: [\n BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n ConnectionContext\n ][] = []\n\n constructor(config: WalletClientOptions) {\n super({\n storage: config && config.storage ? config.storage : new LocalStorage(),\n ...config\n })\n this.permissionManager = new PermissionManager(this.storage)\n this.appMetadataManager = new AppMetadataManager(this.storage)\n // Tezos is the default chain: the wrapped-only pipeline needs the\n // registry handler for every request/response, so registration is no\n // longer a consumer obligation. addBlockchain stays public — a later\n // registration under 'tezos' overrides this default.\n this.addBlockchain(new TezosBlockchain())\n }\n\n public async init(): Promise<TransportType> {\n const keyPair = await this.keyPair // We wait for keypair here so the P2P Transport creation is not delayed and causing issues\n const p2pTransport = new WalletP2PTransport(\n this.name,\n keyPair,\n this.storage,\n this.matrixNodes,\n this.iconUrl,\n this.appUrl\n )\n\n return super.init(p2pTransport)\n }\n\n /**\n * This method initiates a connection to the P2P network and registers a callback that will be called\n * whenever a message is received.\n *\n * @param newMessageCallback The callback that will be invoked for every message the transport receives.\n */\n public async connect(\n newMessageCallback: (\n message: BeaconRequestOutputMessage,\n connectionContext: ConnectionContext\n ) => void\n ): Promise<void> {\n this.handleResponse = async (\n message: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage> | DisconnectMessage,\n connectionContext: ConnectionContext\n ): Promise<void> => {\n // Define valid request types that wallets should process\n const validRequestTypes = [\n BeaconMessageType.PermissionRequest,\n BeaconMessageType.OperationRequest,\n BeaconMessageType.SignPayloadRequest,\n BeaconMessageType.BroadcastRequest,\n BeaconMessageType.ProofOfEventChallengeRequest,\n BeaconMessageType.SimulatedProofOfEventChallengeRequest,\n BeaconMessageType.BlockchainRequest,\n BeaconMessageType.ChangeAccountRequest\n ]\n\n if (usesWrappedMessages(message.version)) {\n const typedMessage = message as BeaconMessageWrapper<BeaconBaseMessage>\n\n if (typedMessage.message.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.message.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n } else {\n // Legacy flat v2 dialect (a v4.8.x dApp): served transparently — the\n // flat request is already the shape wallet apps consume, and the\n // response is emitted back in the same dialect (see\n // OutgoingResponseInterceptor).\n const typedMessage = message as BeaconRequestMessage | DisconnectMessage\n\n if (typedMessage.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n if (typedMessage.version && typedMessage.version !== '1') {\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n }\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n }\n }\n\n return this._connect()\n }\n\n public async getRegisterPushChallenge(\n backendUrl: string,\n accountPublicKey: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ) {\n // Check if account is already registered\n const challengeResponse = await fetch(`${oracleUrl}/challenge`)\n if (!challengeResponse.ok) {\n throw new Error(\n `getRegisterPushChallenge failed: ${challengeResponse.status} ${challengeResponse.statusText}`\n )\n }\n const challenge: { id: string; timestamp: string } = await challengeResponse.json()\n\n const constructedString = [\n 'Tezos Signed Message: ',\n challenge.id,\n challenge.timestamp,\n accountPublicKey,\n backendUrl\n ].join(' ')\n\n const bytes = toHex(constructedString)\n const payloadBytes = `05` + `01${ bytes.length.toString(16).padStart(8, '0') }${bytes}`\n\n return {\n challenge,\n payloadToSign: payloadBytes\n }\n }\n\n public async registerPush(\n challenge: { id: string; timestamp: string },\n signature: string,\n backendUrl: string,\n accountPublicKey: string,\n protocolIdentifier: string,\n deviceId: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ): Promise<PushToken> {\n const tokens = await this.storage.get(StorageKey.PUSH_TOKENS)\n const token = tokens.find(\n (el) => el.publicKey === accountPublicKey && el.backendUrl === backendUrl\n )\n if (token) {\n return token\n }\n\n const registerResponse = await fetch(`${oracleUrl}/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: this.name,\n challenge,\n accountPublicKey,\n signature,\n backendUrl,\n protocolIdentifier,\n deviceId\n })\n })\n if (!registerResponse.ok) {\n throw new Error(\n `registerPush failed: ${registerResponse.status} ${registerResponse.statusText}`\n )\n }\n const register: {\n accessToken: string\n managementToken: string\n message: string\n success: boolean\n } = await registerResponse.json()\n\n const newToken = {\n publicKey: accountPublicKey,\n backendUrl,\n accessToken: register.accessToken,\n managementToken: register.managementToken\n }\n\n tokens.push(newToken)\n\n await this.storage.set(StorageKey.PUSH_TOKENS, tokens)\n\n return newToken\n }\n\n /**\n * The method will attempt to initiate a connection using the active transport.\n */\n public async _connect(attempts: number = 3): Promise<void> {\n const transport: WalletP2PTransport = (await this.transport) as WalletP2PTransport\n if (attempts == 0 || transport.connectionStatus !== TransportStatus.NOT_CONNECTED) {\n return\n }\n\n try {\n await transport.connect()\n } catch (err: any) {\n logger.warn('_connect', err.message)\n await transport.disconnect()\n await this._connect(--attempts)\n\n return\n }\n\n transport\n .addListener(async (message: unknown, connectionInfo: ConnectionContext) => {\n if (typeof message === 'string') {\n const peer = await this.findPeer(connectionInfo.id, transport)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const deserializedMessage = (await new Serializer(protocolVersion).deserialize(\n message\n )) as BeaconRequestMessage\n this.handleResponse(deserializedMessage, connectionInfo)\n }\n })\n .catch((error) => logger.log('_connect', error))\n this._isConnected.resolve(true)\n }\n\n /**\n * This method sends a response for a specific request back to the DApp\n *\n * @param message The BeaconResponseMessage that will be sent back to the DApp\n */\n public async respond(message: BeaconResponseInputMessage): Promise<void> {\n logger.log('RESPONSE', message)\n const request = this.pendingRequests.find(\n (pendingRequest) => pendingRequest[0].id === message.id\n )\n if (!request) {\n throw new Error('No matching request found!')\n }\n\n this.pendingRequests = this.pendingRequests.filter(\n (pendingRequest) => pendingRequest[0].id !== message.id\n )\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request: request[0],\n message,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, request[1])\n },\n blockchains: this.blockchains\n })\n }\n\n public async getAppMetadataList(): Promise<AppMetadata[]> {\n return this.appMetadataManager.getAppMetadataList()\n }\n\n public async getAppMetadata(senderId: string): Promise<AppMetadata | undefined> {\n return this.appMetadataManager.getAppMetadata(senderId)\n }\n\n public async removeAppMetadata(senderId: string): Promise<void> {\n return this.appMetadataManager.removeAppMetadata(senderId)\n }\n\n public async removeAllAppMetadata(): Promise<void> {\n return this.appMetadataManager.removeAllAppMetadata()\n }\n\n public async getPermissions(): Promise<PermissionInfo[]> {\n return this.permissionManager.getPermissions()\n }\n\n public async getPermission(accountIdentifier: string): Promise<PermissionInfo | undefined> {\n return this.permissionManager.getPermission(accountIdentifier)\n }\n\n public async removePermission(accountIdentifier: string, senderId: string): Promise<void> {\n return this.permissionManager.removePermission(accountIdentifier, senderId)\n }\n\n public async removeAllPermissions(): Promise<void> {\n return this.permissionManager.removeAllPermissions()\n }\n\n private async getPeerInfo(peer: PeerInfo): Promise<ExtendedPeerInfo> {\n const senderId = await getSenderId(peer.publicKey)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n\n if (peer instanceof PostMessagePairingRequest || peer instanceof ExtendedPostMessagePairingRequest) {\n const base = peer as PostMessagePairingRequest & {\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedPostMessagePairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (peer instanceof P2PPairingRequest || peer instanceof ExtendedP2PPairingRequest) {\n const base = peer as P2PPairingRequest & {\n relayServer: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedP2PPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n base.relayServer,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (\n peer instanceof WalletConnectPairingRequest ||\n peer instanceof ExtendedWalletConnectPairingRequest\n ) {\n const base = peer as ExtendedWalletConnectPairingRequest & {\n uri: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedWalletConnectPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n base.uri,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n return {\n ...peer,\n senderId,\n protocolVersion\n }\n }\n\n /**\n * Add a new peer to the known peers\n * @param peer The new peer to add\n */\n public async addPeer(peer: PeerInfo, sendPairingResponse: boolean = true): Promise<void> {\n return (await this.transport).addPeer(await this.getPeerInfo(peer), sendPairingResponse)\n }\n\n public async removePeer(\n peer: ExtendedP2PPairingResponse,\n sendDisconnectToPeer: boolean = false\n ): Promise<void> {\n const removePeerResult = (await this.transport).removePeer(peer)\n\n await this.removePermissionsForPeers([peer])\n\n if (sendDisconnectToPeer) {\n await this.sendDisconnectToPeer(peer)\n }\n\n return removePeerResult\n }\n\n public async removeAllPeers(sendDisconnectToPeers: boolean = false): Promise<void> {\n const peers: ExtendedP2PPairingResponse[] = await (await this.transport).getPeers()\n const removePeerResult = (await this.transport).removeAllPeers()\n\n await this.removePermissionsForPeers(peers)\n\n if (sendDisconnectToPeers) {\n const disconnectPromises = peers.map((peer) => this.sendDisconnectToPeer(peer))\n\n await Promise.all(disconnectPromises)\n }\n\n return removePeerResult\n }\n\n private async removePermissionsForPeers(\n peersToRemove: ExtendedP2PPairingResponse[]\n ): Promise<void> {\n const permissions = await this.permissionManager.getPermissions()\n\n const peerIdsToRemove = peersToRemove.map((peer) => peer.senderId)\n // Remove all permissions with origin of the specified peer\n const permissionsToRemove = permissions.filter((permission) =>\n peerIdsToRemove.includes(permission.appMetadata.senderId)\n )\n const permissionIdentifiersToRemove = permissionsToRemove.map(\n (permissionInfo) => permissionInfo.accountIdentifier\n )\n await this.permissionManager.removePermissions(permissionIdentifiersToRemove)\n }\n\n /**\n * Send an acknowledge message back to the sender\n *\n * @param message The message that was received\n */\n private async sendAcknowledgeResponse(\n request: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n connectionContext: ConnectionContext\n ): Promise<void> {\n // Acknowledge the message\n const acknowledgeResponse: AcknowledgeResponseInput = {\n id: request.id,\n type: BeaconMessageType.Acknowledge\n }\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request,\n message: acknowledgeResponse,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, connectionContext)\n },\n blockchains: this.blockchains\n })\n }\n\n /**\n * An internal method to send a BeaconMessage to the DApp\n *\n * @param response Send a message back to the DApp\n */\n private async respondToMessage(\n response: BeaconMessage,\n connectionContext: ConnectionContext\n ): Promise<void> {\n const transport = await this.transport\n\n let peer: PeerInfo | undefined\n if (connectionContext) {\n peer = await this.findPeer(connectionContext.id, transport)\n }\n\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const serializedMessage: string = await new Serializer(protocolVersion).serialize(response)\n if (connectionContext) {\n await transport.send(serializedMessage, peer)\n } else {\n await transport.send(serializedMessage)\n }\n }\n\n private async disconnect(senderId: string) {\n const transport = await this.transport\n const peers: ExtendedPeerInfo[] = await transport.getPeers()\n const peer: ExtendedPeerInfo | undefined = peers.find((peerEl) => peerEl.senderId === senderId)\n\n if (peer) {\n await this.removePeer(peer as any)\n }\n\n return\n }\n}\n"]}
@@ -193,7 +193,7 @@ export class WalletClient extends Client {
193
193
  transport
194
194
  .addListener(async (message, connectionInfo) => {
195
195
  if (typeof message === 'string') {
196
- const peer = await this.findPeer(connectionInfo.id);
196
+ const peer = await this.findPeer(connectionInfo.id, transport);
197
197
  const protocolVersion = this.getPeerProtocolVersion(peer);
198
198
  const deserializedMessage = (await new Serializer(protocolVersion).deserialize(message));
199
199
  this.handleResponse(deserializedMessage, connectionInfo);
@@ -336,17 +336,18 @@ export class WalletClient extends Client {
336
336
  * @param response Send a message back to the DApp
337
337
  */
338
338
  async respondToMessage(response, connectionContext) {
339
+ const transport = await this.transport;
339
340
  let peer;
340
341
  if (connectionContext) {
341
- peer = await this.findPeer(connectionContext.id);
342
+ peer = await this.findPeer(connectionContext.id, transport);
342
343
  }
343
344
  const protocolVersion = this.getPeerProtocolVersion(peer);
344
345
  const serializedMessage = await new Serializer(protocolVersion).serialize(response);
345
346
  if (connectionContext) {
346
- await (await this.transport).send(serializedMessage, peer);
347
+ await transport.send(serializedMessage, peer);
347
348
  }
348
349
  else {
349
- await (await this.transport).send(serializedMessage);
350
+ await transport.send(serializedMessage);
350
351
  }
351
352
  }
352
353
  async disconnect(senderId) {
@@ -1 +1 @@
1
- {"version":3,"file":"WalletClient.js","sourceRoot":"","sources":["../../../src/client/WalletClient.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n Serializer,\n Client,\n LocalStorage,\n PermissionManager,\n AppMetadataManager,\n getSenderId,\n Logger,\n NOTIFICATION_ORACLE_URL,\n usesWrappedMessages\n} from '@tezos-x/octez.connect-core'\n\nimport { ExposedPromise, toHex } from '@tezos-x/octez.connect-utils'\n\nimport {\n ConnectionContext,\n BeaconRequestMessage,\n BeaconMessageType,\n AcknowledgeResponseInput,\n ExtendedP2PPairingResponse,\n ExtendedPeerInfo,\n PeerInfo,\n DisconnectMessage,\n TransportType,\n BeaconRequestOutputMessage,\n BeaconResponseInputMessage,\n AppMetadata,\n PermissionInfo,\n TransportStatus,\n BeaconMessage,\n BeaconMessageWrapper,\n BeaconBaseMessage,\n StorageKey,\n PushToken,\n PostMessagePairingRequest,\n ExtendedPostMessagePairingRequest,\n P2PPairingRequest,\n ExtendedP2PPairingRequest,\n WalletConnectPairingRequest,\n ExtendedWalletConnectPairingRequest\n} from '@tezos-x/octez.connect-types'\nimport { TezosBlockchain } from '@tezos-x/octez.connect-blockchain-tezos'\nimport { WalletP2PTransport } from '../transports/WalletP2PTransport'\nimport { IncomingRequestInterceptor } from '../interceptors/IncomingRequestInterceptor'\nimport { OutgoingResponseInterceptor } from '../interceptors/OutgoingResponseInterceptor'\nimport { WalletClientOptions } from './WalletClientOptions'\n\nconst logger = new Logger('WalletClient')\n\n/**\n * @publicapi\n *\n * The WalletClient has to be used in the wallet. It handles all the logic related to connecting to beacon-compatible\n * dapps and handling/responding to requests.\n *\n * @warning For browser extensions: The WalletClient maintains a persistent connection that polls relay servers\n * every 30 seconds. Call `destroy()` when the client is no longer needed to stop polling and free resources.\n * For extensions, consider conditional initialization - only connect when there are existing peers or when\n * a new pairing request arrives. See the README for lifecycle management best practices.\n *\n * @category Wallet\n */\nexport class WalletClient extends Client {\n /**\n * Returns whether or not the transport is connected\n */\n protected readonly _isConnected: ExposedPromise<boolean> = new ExposedPromise()\n public get isConnected(): Promise<boolean> {\n return this._isConnected.promise\n }\n\n private readonly permissionManager: PermissionManager\n private readonly appMetadataManager: AppMetadataManager\n\n /**\n * This array stores pending requests, meaning requests we received and have not yet handled / sent a response.\n */\n private pendingRequests: [\n BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n ConnectionContext\n ][] = []\n\n constructor(config: WalletClientOptions) {\n super({\n storage: config && config.storage ? config.storage : new LocalStorage(),\n ...config\n })\n this.permissionManager = new PermissionManager(this.storage)\n this.appMetadataManager = new AppMetadataManager(this.storage)\n // Tezos is the default chain: the wrapped-only pipeline needs the\n // registry handler for every request/response, so registration is no\n // longer a consumer obligation. addBlockchain stays public — a later\n // registration under 'tezos' overrides this default.\n this.addBlockchain(new TezosBlockchain())\n }\n\n public async init(): Promise<TransportType> {\n const keyPair = await this.keyPair // We wait for keypair here so the P2P Transport creation is not delayed and causing issues\n const p2pTransport = new WalletP2PTransport(\n this.name,\n keyPair,\n this.storage,\n this.matrixNodes,\n this.iconUrl,\n this.appUrl\n )\n\n return super.init(p2pTransport)\n }\n\n /**\n * This method initiates a connection to the P2P network and registers a callback that will be called\n * whenever a message is received.\n *\n * @param newMessageCallback The callback that will be invoked for every message the transport receives.\n */\n public async connect(\n newMessageCallback: (\n message: BeaconRequestOutputMessage,\n connectionContext: ConnectionContext\n ) => void\n ): Promise<void> {\n this.handleResponse = async (\n message: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage> | DisconnectMessage,\n connectionContext: ConnectionContext\n ): Promise<void> => {\n // Define valid request types that wallets should process\n const validRequestTypes = [\n BeaconMessageType.PermissionRequest,\n BeaconMessageType.OperationRequest,\n BeaconMessageType.SignPayloadRequest,\n BeaconMessageType.BroadcastRequest,\n BeaconMessageType.ProofOfEventChallengeRequest,\n BeaconMessageType.SimulatedProofOfEventChallengeRequest,\n BeaconMessageType.BlockchainRequest,\n BeaconMessageType.ChangeAccountRequest\n ]\n\n if (usesWrappedMessages(message.version)) {\n const typedMessage = message as BeaconMessageWrapper<BeaconBaseMessage>\n\n if (typedMessage.message.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.message.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n } else {\n // Legacy flat v2 dialect (a v4.8.x dApp): served transparently — the\n // flat request is already the shape wallet apps consume, and the\n // response is emitted back in the same dialect (see\n // OutgoingResponseInterceptor).\n const typedMessage = message as BeaconRequestMessage | DisconnectMessage\n\n if (typedMessage.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n if (typedMessage.version && typedMessage.version !== '1') {\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n }\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n }\n }\n\n return this._connect()\n }\n\n public async getRegisterPushChallenge(\n backendUrl: string,\n accountPublicKey: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ) {\n // Check if account is already registered\n const challengeResponse = await fetch(`${oracleUrl}/challenge`)\n if (!challengeResponse.ok) {\n throw new Error(\n `getRegisterPushChallenge failed: ${challengeResponse.status} ${challengeResponse.statusText}`\n )\n }\n const challenge: { id: string; timestamp: string } = await challengeResponse.json()\n\n const constructedString = [\n 'Tezos Signed Message: ',\n challenge.id,\n challenge.timestamp,\n accountPublicKey,\n backendUrl\n ].join(' ')\n\n const bytes = toHex(constructedString)\n const payloadBytes = `05` + `01${ bytes.length.toString(16).padStart(8, '0') }${bytes}`\n\n return {\n challenge,\n payloadToSign: payloadBytes\n }\n }\n\n public async registerPush(\n challenge: { id: string; timestamp: string },\n signature: string,\n backendUrl: string,\n accountPublicKey: string,\n protocolIdentifier: string,\n deviceId: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ): Promise<PushToken> {\n const tokens = await this.storage.get(StorageKey.PUSH_TOKENS)\n const token = tokens.find(\n (el) => el.publicKey === accountPublicKey && el.backendUrl === backendUrl\n )\n if (token) {\n return token\n }\n\n const registerResponse = await fetch(`${oracleUrl}/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: this.name,\n challenge,\n accountPublicKey,\n signature,\n backendUrl,\n protocolIdentifier,\n deviceId\n })\n })\n if (!registerResponse.ok) {\n throw new Error(\n `registerPush failed: ${registerResponse.status} ${registerResponse.statusText}`\n )\n }\n const register: {\n accessToken: string\n managementToken: string\n message: string\n success: boolean\n } = await registerResponse.json()\n\n const newToken = {\n publicKey: accountPublicKey,\n backendUrl,\n accessToken: register.accessToken,\n managementToken: register.managementToken\n }\n\n tokens.push(newToken)\n\n await this.storage.set(StorageKey.PUSH_TOKENS, tokens)\n\n return newToken\n }\n\n /**\n * The method will attempt to initiate a connection using the active transport.\n */\n public async _connect(attempts: number = 3): Promise<void> {\n const transport: WalletP2PTransport = (await this.transport) as WalletP2PTransport\n if (attempts == 0 || transport.connectionStatus !== TransportStatus.NOT_CONNECTED) {\n return\n }\n\n try {\n await transport.connect()\n } catch (err: any) {\n logger.warn('_connect', err.message)\n await transport.disconnect()\n await this._connect(--attempts)\n\n return\n }\n\n transport\n .addListener(async (message: unknown, connectionInfo: ConnectionContext) => {\n if (typeof message === 'string') {\n const peer = await this.findPeer(connectionInfo.id)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const deserializedMessage = (await new Serializer(protocolVersion).deserialize(\n message\n )) as BeaconRequestMessage\n this.handleResponse(deserializedMessage, connectionInfo)\n }\n })\n .catch((error) => logger.log('_connect', error))\n this._isConnected.resolve(true)\n }\n\n /**\n * This method sends a response for a specific request back to the DApp\n *\n * @param message The BeaconResponseMessage that will be sent back to the DApp\n */\n public async respond(message: BeaconResponseInputMessage): Promise<void> {\n logger.log('RESPONSE', message)\n const request = this.pendingRequests.find(\n (pendingRequest) => pendingRequest[0].id === message.id\n )\n if (!request) {\n throw new Error('No matching request found!')\n }\n\n this.pendingRequests = this.pendingRequests.filter(\n (pendingRequest) => pendingRequest[0].id !== message.id\n )\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request: request[0],\n message,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, request[1])\n },\n blockchains: this.blockchains\n })\n }\n\n public async getAppMetadataList(): Promise<AppMetadata[]> {\n return this.appMetadataManager.getAppMetadataList()\n }\n\n public async getAppMetadata(senderId: string): Promise<AppMetadata | undefined> {\n return this.appMetadataManager.getAppMetadata(senderId)\n }\n\n public async removeAppMetadata(senderId: string): Promise<void> {\n return this.appMetadataManager.removeAppMetadata(senderId)\n }\n\n public async removeAllAppMetadata(): Promise<void> {\n return this.appMetadataManager.removeAllAppMetadata()\n }\n\n public async getPermissions(): Promise<PermissionInfo[]> {\n return this.permissionManager.getPermissions()\n }\n\n public async getPermission(accountIdentifier: string): Promise<PermissionInfo | undefined> {\n return this.permissionManager.getPermission(accountIdentifier)\n }\n\n public async removePermission(accountIdentifier: string, senderId: string): Promise<void> {\n return this.permissionManager.removePermission(accountIdentifier, senderId)\n }\n\n public async removeAllPermissions(): Promise<void> {\n return this.permissionManager.removeAllPermissions()\n }\n\n private async getPeerInfo(peer: PeerInfo): Promise<ExtendedPeerInfo> {\n const senderId = await getSenderId(peer.publicKey)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n\n if (peer instanceof PostMessagePairingRequest || peer instanceof ExtendedPostMessagePairingRequest) {\n const base = peer as PostMessagePairingRequest & {\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedPostMessagePairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (peer instanceof P2PPairingRequest || peer instanceof ExtendedP2PPairingRequest) {\n const base = peer as P2PPairingRequest & {\n relayServer: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedP2PPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n base.relayServer,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (\n peer instanceof WalletConnectPairingRequest ||\n peer instanceof ExtendedWalletConnectPairingRequest\n ) {\n const base = peer as ExtendedWalletConnectPairingRequest & {\n uri: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedWalletConnectPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n base.uri,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n return {\n ...peer,\n senderId,\n protocolVersion\n }\n }\n\n /**\n * Add a new peer to the known peers\n * @param peer The new peer to add\n */\n public async addPeer(peer: PeerInfo, sendPairingResponse: boolean = true): Promise<void> {\n return (await this.transport).addPeer(await this.getPeerInfo(peer), sendPairingResponse)\n }\n\n public async removePeer(\n peer: ExtendedP2PPairingResponse,\n sendDisconnectToPeer: boolean = false\n ): Promise<void> {\n const removePeerResult = (await this.transport).removePeer(peer)\n\n await this.removePermissionsForPeers([peer])\n\n if (sendDisconnectToPeer) {\n await this.sendDisconnectToPeer(peer)\n }\n\n return removePeerResult\n }\n\n public async removeAllPeers(sendDisconnectToPeers: boolean = false): Promise<void> {\n const peers: ExtendedP2PPairingResponse[] = await (await this.transport).getPeers()\n const removePeerResult = (await this.transport).removeAllPeers()\n\n await this.removePermissionsForPeers(peers)\n\n if (sendDisconnectToPeers) {\n const disconnectPromises = peers.map((peer) => this.sendDisconnectToPeer(peer))\n\n await Promise.all(disconnectPromises)\n }\n\n return removePeerResult\n }\n\n private async removePermissionsForPeers(\n peersToRemove: ExtendedP2PPairingResponse[]\n ): Promise<void> {\n const permissions = await this.permissionManager.getPermissions()\n\n const peerIdsToRemove = peersToRemove.map((peer) => peer.senderId)\n // Remove all permissions with origin of the specified peer\n const permissionsToRemove = permissions.filter((permission) =>\n peerIdsToRemove.includes(permission.appMetadata.senderId)\n )\n const permissionIdentifiersToRemove = permissionsToRemove.map(\n (permissionInfo) => permissionInfo.accountIdentifier\n )\n await this.permissionManager.removePermissions(permissionIdentifiersToRemove)\n }\n\n /**\n * Send an acknowledge message back to the sender\n *\n * @param message The message that was received\n */\n private async sendAcknowledgeResponse(\n request: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n connectionContext: ConnectionContext\n ): Promise<void> {\n // Acknowledge the message\n const acknowledgeResponse: AcknowledgeResponseInput = {\n id: request.id,\n type: BeaconMessageType.Acknowledge\n }\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request,\n message: acknowledgeResponse,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, connectionContext)\n },\n blockchains: this.blockchains\n })\n }\n\n /**\n * An internal method to send a BeaconMessage to the DApp\n *\n * @param response Send a message back to the DApp\n */\n private async respondToMessage(\n response: BeaconMessage,\n connectionContext: ConnectionContext\n ): Promise<void> {\n let peer: PeerInfo | undefined\n if (connectionContext) {\n peer = await this.findPeer(connectionContext.id)\n }\n\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const serializedMessage: string = await new Serializer(protocolVersion).serialize(response)\n if (connectionContext) {\n await (await this.transport).send(serializedMessage, peer)\n } else {\n await (await this.transport).send(serializedMessage)\n }\n }\n\n private async disconnect(senderId: string) {\n const transport = await this.transport\n const peers: ExtendedPeerInfo[] = await transport.getPeers()\n const peer: ExtendedPeerInfo | undefined = peers.find((peerEl) => peerEl.senderId === senderId)\n\n if (peer) {\n await this.removePeer(peer as any)\n }\n\n return\n }\n}\n"]}
1
+ {"version":3,"file":"WalletClient.js","sourceRoot":"","sources":["../../../src/client/WalletClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,kBAAkB,EAClB,WAAW,EACX,MAAM,EACN,uBAAuB,EACvB,mBAAmB,EACpB,MAAM,6BAA6B,CAAA;AAEpC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAA;AAEpE,OAAO,EAGL,iBAAiB,EAWjB,eAAe,EAIf,UAAU,EAEV,yBAAyB,EACzB,iCAAiC,EACjC,iBAAiB,EACjB,yBAAyB,EACzB,2BAA2B,EAC3B,mCAAmC,EACpC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,yCAAyC,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4CAA4C,CAAA;AACvF,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAA;AAGzF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,cAAc,CAAC,CAAA;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,OAAO,YAAa,SAAQ,MAAM;IACtC;;OAEG;IACgB,YAAY,GAA4B,IAAI,cAAc,EAAE,CAAA;IAC/E,IAAW,WAAW;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAA;IAClC,CAAC;IAEgB,iBAAiB,CAAmB;IACpC,kBAAkB,CAAoB;IAEvD;;OAEG;IACK,eAAe,GAGjB,EAAE,CAAA;IAER,YAAY,MAA2B;QACrC,KAAK,CAAC;YACJ,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE;YACvE,GAAG,MAAM;SACV,CAAC,CAAA;QACF,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5D,IAAI,CAAC,kBAAkB,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC9D,kEAAkE;QAClE,qEAAqE;QACrE,qEAAqE;QACrE,qDAAqD;QACrD,IAAI,CAAC,aAAa,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;IAC3C,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAA,CAAC,2FAA2F;QAC9H,MAAM,YAAY,GAAG,IAAI,kBAAkB,CACzC,IAAI,CAAC,IAAI,EACT,OAAO,EACP,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,CACZ,CAAA;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACjC,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,OAAO,CAClB,kBAGS;QAET,IAAI,CAAC,cAAc,GAAG,KAAK,EACzB,OAA2F,EAC3F,iBAAoC,EACrB,EAAE;YACjB,yDAAyD;YACzD,MAAM,iBAAiB,GAAG;gBACxB,iBAAiB,CAAC,iBAAiB;gBACnC,iBAAiB,CAAC,gBAAgB;gBAClC,iBAAiB,CAAC,kBAAkB;gBACpC,iBAAiB,CAAC,gBAAgB;gBAClC,iBAAiB,CAAC,4BAA4B;gBAC9C,iBAAiB,CAAC,qCAAqC;gBACvD,iBAAiB,CAAC,iBAAiB;gBACnC,iBAAiB,CAAC,oBAAoB;aACvC,CAAA;YAED,IAAI,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,MAAM,YAAY,GAAG,OAAkD,CAAA;gBAEvE,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,KAAK,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBAC/D,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;gBAC/C,CAAC;gBAED,2DAA2D;gBAC3D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3D,OAAM;gBACR,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC1E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAA;oBAE5D,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;oBAEnE,MAAM,0BAA0B,CAAC,SAAS,CAAC;wBACzC,OAAO,EAAE,YAAY;wBACrB,cAAc,EAAE,iBAAiB;wBACjC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wBAC3C,mBAAmB,EAAE,kBAAkB;qBACxC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,qEAAqE;gBACrE,iEAAiE;gBACjE,oDAAoD;gBACpD,gCAAgC;gBAChC,MAAM,YAAY,GAAG,OAAmD,CAAA;gBAExE,IAAI,YAAY,CAAC,IAAI,KAAK,iBAAiB,CAAC,UAAU,EAAE,CAAC;oBACvD,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAA;gBAC/C,CAAC;gBAED,2DAA2D;gBAC3D,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;oBACnD,OAAM;gBACR,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;oBAC1E,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAA;oBAE5D,IAAI,YAAY,CAAC,OAAO,IAAI,YAAY,CAAC,OAAO,KAAK,GAAG,EAAE,CAAC;wBACzD,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAA;oBACrE,CAAC;oBAED,MAAM,0BAA0B,CAAC,SAAS,CAAC;wBACzC,OAAO,EAAE,YAAY;wBACrB,cAAc,EAAE,iBAAiB;wBACjC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;wBAC3C,mBAAmB,EAAE,kBAAkB;qBACxC,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;QACH,CAAC,CAAA;QAED,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;IAEM,KAAK,CAAC,wBAAwB,CACnC,UAAkB,EAClB,gBAAwB,EACxB,YAAoB,uBAAuB;QAE3C,yCAAyC;QACzC,MAAM,iBAAiB,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,YAAY,CAAC,CAAA;QAC/D,IAAI,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,oCAAoC,iBAAiB,CAAC,MAAM,IAAI,iBAAiB,CAAC,UAAU,EAAE,CAC/F,CAAA;QACH,CAAC;QACD,MAAM,SAAS,GAAsC,MAAM,iBAAiB,CAAC,IAAI,EAAE,CAAA;QAEnF,MAAM,iBAAiB,GAAG;YACxB,wBAAwB;YACxB,SAAS,CAAC,EAAE;YACZ,SAAS,CAAC,SAAS;YACnB,gBAAgB;YAChB,UAAU;SACX,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QAEX,MAAM,KAAK,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAA;QACtC,MAAM,YAAY,GAAG,IAAI,GAAG,KAAO,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAG,GAAG,KAAK,EAAE,CAAA;QAEzF,OAAO;YACL,SAAS;YACT,aAAa,EAAE,YAAY;SAC5B,CAAA;IACH,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,SAA4C,EAC5C,SAAiB,EACjB,UAAkB,EAClB,gBAAwB,EACxB,kBAA0B,EAC1B,QAAgB,EAChB,YAAoB,uBAAuB;QAE3C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAA;QAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,KAAK,gBAAgB,IAAI,EAAE,CAAC,UAAU,KAAK,UAAU,CAC1E,CAAA;QACD,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,WAAW,EAAE;YAC5D,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,SAAS;gBACT,gBAAgB;gBAChB,SAAS;gBACT,UAAU;gBACV,kBAAkB;gBAClB,QAAQ;aACT,CAAC;SACH,CAAC,CAAA;QACF,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,wBAAwB,gBAAgB,CAAC,MAAM,IAAI,gBAAgB,CAAC,UAAU,EAAE,CACjF,CAAA;QACH,CAAC;QACD,MAAM,QAAQ,GAKV,MAAM,gBAAgB,CAAC,IAAI,EAAE,CAAA;QAEjC,MAAM,QAAQ,GAAG;YACf,SAAS,EAAE,gBAAgB;YAC3B,UAAU;YACV,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,eAAe,EAAE,QAAQ,CAAC,eAAe;SAC1C,CAAA;QAED,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAErB,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;QAEtD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,QAAQ,CAAC,WAAmB,CAAC;QACxC,MAAM,SAAS,GAAuB,CAAC,MAAM,IAAI,CAAC,SAAS,CAAuB,CAAA;QAClF,IAAI,QAAQ,IAAI,CAAC,IAAI,SAAS,CAAC,gBAAgB,KAAK,eAAe,CAAC,aAAa,EAAE,CAAC;YAClF,OAAM;QACR,CAAC;QAED,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,OAAO,EAAE,CAAA;QAC3B,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;YACpC,MAAM,SAAS,CAAC,UAAU,EAAE,CAAA;YAC5B,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAA;YAE/B,OAAM;QACR,CAAC;QAED,SAAS;aACN,WAAW,CAAC,KAAK,EAAE,OAAgB,EAAE,cAAiC,EAAE,EAAE;YACzE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;gBAC9D,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;gBACzD,MAAM,mBAAmB,GAAG,CAAC,MAAM,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,WAAW,CAC5E,OAAO,CACR,CAAyB,CAAA;gBAC1B,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAA;YAC1D,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAA;QAClD,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,OAAO,CAAC,OAAmC;QACtD,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CACvC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CACxD,CAAA;QACD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAChD,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CACxD,CAAA;QAED,MAAM,2BAA2B,CAAC,SAAS,CAAC;YAC1C,QAAQ,EAAE,MAAM,WAAW,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;YAChD,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;YACnB,OAAO;YACP,cAAc,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE;YAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,mBAAmB,EAAE,KAAK,EAAE,QAAuB,EAAiB,EAAE;gBACpE,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;YACnD,CAAC;YACD,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC7B,OAAO,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,EAAE,CAAA;IACrD,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,QAAgB;QAC1C,OAAO,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;IACzD,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,QAAgB;QAC7C,OAAO,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAC5D,CAAC;IAEM,KAAK,CAAC,oBAAoB;QAC/B,OAAO,IAAI,CAAC,kBAAkB,CAAC,oBAAoB,EAAE,CAAA;IACvD,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAA;IAChD,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,iBAAyB;QAClD,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAA;IAChE,CAAC;IAEM,KAAK,CAAC,gBAAgB,CAAC,iBAAyB,EAAE,QAAgB;QACvE,OAAO,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAA;IAC7E,CAAC;IAEM,KAAK,CAAC,oBAAoB;QAC/B,OAAO,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,CAAA;IACtD,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,IAAc;QACtC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAClD,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;QAEzD,IAAI,IAAI,YAAY,yBAAyB,IAAI,IAAI,YAAY,iCAAiC,EAAE,CAAC;YACnG,MAAM,IAAI,GAAG,IAGZ,CAAA;YAED,OAAO,IAAI,iCAAiC,CAC1C,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,eAAe,EACf,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC;QAED,IAAI,IAAI,YAAY,iBAAiB,IAAI,IAAI,YAAY,yBAAyB,EAAE,CAAC;YACnF,MAAM,IAAI,GAAG,IAIZ,CAAA;YAED,OAAO,IAAI,yBAAyB,CAClC,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,EAChB,QAAQ,EACR,eAAe,EACf,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC;QAED,IACE,IAAI,YAAY,2BAA2B;YAC3C,IAAI,YAAY,mCAAmC,EACnD,CAAC;YACD,MAAM,IAAI,GAAG,IAIZ,CAAA;YAED,OAAO,IAAI,mCAAmC,CAC5C,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,EACd,IAAI,CAAC,OAAO,EACZ,QAAQ,EACR,IAAI,CAAC,GAAG,EACR,eAAe,EACf,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,MAAM,CACZ,CAAA;QACH,CAAC;QAED,OAAO;YACL,GAAG,IAAI;YACP,QAAQ;YACR,eAAe;SAChB,CAAA;IACH,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,OAAO,CAAC,IAAc,EAAE,sBAA+B,IAAI;QACtE,OAAO,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAA;IAC1F,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,IAAgC,EAChC,uBAAgC,KAAK;QAErC,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QAEhE,MAAM,IAAI,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;QAE5C,IAAI,oBAAoB,EAAE,CAAC;YACzB,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,wBAAiC,KAAK;QAChE,MAAM,KAAK,GAAiC,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,CAAA;QACnF,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,cAAc,EAAE,CAAA;QAEhE,MAAM,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAA;QAE3C,IAAI,qBAAqB,EAAE,CAAC;YAC1B,MAAM,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAA;YAE/E,MAAM,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACvC,CAAC;QAED,OAAO,gBAAgB,CAAA;IACzB,CAAC;IAEO,KAAK,CAAC,yBAAyB,CACrC,aAA2C;QAE3C,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAA;QAEjE,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClE,2DAA2D;QAC3D,MAAM,mBAAmB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE,CAC5D,eAAe,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAC1D,CAAA;QACD,MAAM,6BAA6B,GAAG,mBAAmB,CAAC,GAAG,CAC3D,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,iBAAiB,CACrD,CAAA;QACD,MAAM,IAAI,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,6BAA6B,CAAC,CAAA;IAC/E,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,uBAAuB,CACnC,OAAuE,EACvE,iBAAoC;QAEpC,0BAA0B;QAC1B,MAAM,mBAAmB,GAA6B;YACpD,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,IAAI,EAAE,iBAAiB,CAAC,WAAW;SACpC,CAAA;QAED,MAAM,2BAA2B,CAAC,SAAS,CAAC;YAC1C,QAAQ,EAAE,MAAM,WAAW,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC;YAChD,OAAO;YACP,OAAO,EAAE,mBAAmB;YAC5B,cAAc,EAAE,MAAM,IAAI,CAAC,iBAAiB,EAAE;YAC9C,iBAAiB,EAAE,IAAI,CAAC,iBAAiB;YACzC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;YAC3C,mBAAmB,EAAE,KAAK,EAAE,QAAuB,EAAiB,EAAE;gBACpE,MAAM,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAA;YAC1D,CAAC;YACD,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,gBAAgB,CAC5B,QAAuB,EACvB,iBAAoC;QAEpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAA;QAEtC,IAAI,IAA0B,CAAA;QAC9B,IAAI,iBAAiB,EAAE,CAAC;YACtB,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAA;QACzD,MAAM,iBAAiB,GAAW,MAAM,IAAI,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC3F,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,SAAS,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAA;QAC/C,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QACzC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,QAAgB;QACvC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAA;QACtC,MAAM,KAAK,GAAuB,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAA;QAC5D,MAAM,IAAI,GAAiC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAA;QAE/F,IAAI,IAAI,EAAE,CAAC;YACT,MAAM,IAAI,CAAC,UAAU,CAAC,IAAW,CAAC,CAAA;QACpC,CAAC;QAED,OAAM;IACR,CAAC;CACF","sourcesContent":["import {\n Serializer,\n Client,\n LocalStorage,\n PermissionManager,\n AppMetadataManager,\n getSenderId,\n Logger,\n NOTIFICATION_ORACLE_URL,\n usesWrappedMessages\n} from '@tezos-x/octez.connect-core'\n\nimport { ExposedPromise, toHex } from '@tezos-x/octez.connect-utils'\n\nimport {\n ConnectionContext,\n BeaconRequestMessage,\n BeaconMessageType,\n AcknowledgeResponseInput,\n ExtendedP2PPairingResponse,\n ExtendedPeerInfo,\n PeerInfo,\n DisconnectMessage,\n TransportType,\n BeaconRequestOutputMessage,\n BeaconResponseInputMessage,\n AppMetadata,\n PermissionInfo,\n TransportStatus,\n BeaconMessage,\n BeaconMessageWrapper,\n BeaconBaseMessage,\n StorageKey,\n PushToken,\n PostMessagePairingRequest,\n ExtendedPostMessagePairingRequest,\n P2PPairingRequest,\n ExtendedP2PPairingRequest,\n WalletConnectPairingRequest,\n ExtendedWalletConnectPairingRequest\n} from '@tezos-x/octez.connect-types'\nimport { TezosBlockchain } from '@tezos-x/octez.connect-blockchain-tezos'\nimport { WalletP2PTransport } from '../transports/WalletP2PTransport'\nimport { IncomingRequestInterceptor } from '../interceptors/IncomingRequestInterceptor'\nimport { OutgoingResponseInterceptor } from '../interceptors/OutgoingResponseInterceptor'\nimport { WalletClientOptions } from './WalletClientOptions'\n\nconst logger = new Logger('WalletClient')\n\n/**\n * @publicapi\n *\n * The WalletClient has to be used in the wallet. It handles all the logic related to connecting to beacon-compatible\n * dapps and handling/responding to requests.\n *\n * @warning For browser extensions: The WalletClient maintains a persistent connection that polls relay servers\n * every 30 seconds. Call `destroy()` when the client is no longer needed to stop polling and free resources.\n * For extensions, consider conditional initialization - only connect when there are existing peers or when\n * a new pairing request arrives. See the README for lifecycle management best practices.\n *\n * @category Wallet\n */\nexport class WalletClient extends Client {\n /**\n * Returns whether or not the transport is connected\n */\n protected readonly _isConnected: ExposedPromise<boolean> = new ExposedPromise()\n public get isConnected(): Promise<boolean> {\n return this._isConnected.promise\n }\n\n private readonly permissionManager: PermissionManager\n private readonly appMetadataManager: AppMetadataManager\n\n /**\n * This array stores pending requests, meaning requests we received and have not yet handled / sent a response.\n */\n private pendingRequests: [\n BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n ConnectionContext\n ][] = []\n\n constructor(config: WalletClientOptions) {\n super({\n storage: config && config.storage ? config.storage : new LocalStorage(),\n ...config\n })\n this.permissionManager = new PermissionManager(this.storage)\n this.appMetadataManager = new AppMetadataManager(this.storage)\n // Tezos is the default chain: the wrapped-only pipeline needs the\n // registry handler for every request/response, so registration is no\n // longer a consumer obligation. addBlockchain stays public — a later\n // registration under 'tezos' overrides this default.\n this.addBlockchain(new TezosBlockchain())\n }\n\n public async init(): Promise<TransportType> {\n const keyPair = await this.keyPair // We wait for keypair here so the P2P Transport creation is not delayed and causing issues\n const p2pTransport = new WalletP2PTransport(\n this.name,\n keyPair,\n this.storage,\n this.matrixNodes,\n this.iconUrl,\n this.appUrl\n )\n\n return super.init(p2pTransport)\n }\n\n /**\n * This method initiates a connection to the P2P network and registers a callback that will be called\n * whenever a message is received.\n *\n * @param newMessageCallback The callback that will be invoked for every message the transport receives.\n */\n public async connect(\n newMessageCallback: (\n message: BeaconRequestOutputMessage,\n connectionContext: ConnectionContext\n ) => void\n ): Promise<void> {\n this.handleResponse = async (\n message: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage> | DisconnectMessage,\n connectionContext: ConnectionContext\n ): Promise<void> => {\n // Define valid request types that wallets should process\n const validRequestTypes = [\n BeaconMessageType.PermissionRequest,\n BeaconMessageType.OperationRequest,\n BeaconMessageType.SignPayloadRequest,\n BeaconMessageType.BroadcastRequest,\n BeaconMessageType.ProofOfEventChallengeRequest,\n BeaconMessageType.SimulatedProofOfEventChallengeRequest,\n BeaconMessageType.BlockchainRequest,\n BeaconMessageType.ChangeAccountRequest\n ]\n\n if (usesWrappedMessages(message.version)) {\n const typedMessage = message as BeaconMessageWrapper<BeaconBaseMessage>\n\n if (typedMessage.message.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.message.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n } else {\n // Legacy flat v2 dialect (a v4.8.x dApp): served transparently — the\n // flat request is already the shape wallet apps consume, and the\n // response is emitted back in the same dialect (see\n // OutgoingResponseInterceptor).\n const typedMessage = message as BeaconRequestMessage | DisconnectMessage\n\n if (typedMessage.type === BeaconMessageType.Disconnect) {\n return this.disconnect(typedMessage.senderId)\n }\n\n // Filter out response types (echoed back from Matrix room)\n if (!validRequestTypes.includes(typedMessage.type)) {\n return\n }\n\n if (!this.pendingRequests.some((request) => request[0].id === message.id)) {\n this.pendingRequests.push([typedMessage, connectionContext])\n\n if (typedMessage.version && typedMessage.version !== '1') {\n await this.sendAcknowledgeResponse(typedMessage, connectionContext)\n }\n\n await IncomingRequestInterceptor.intercept({\n message: typedMessage,\n connectionInfo: connectionContext,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: newMessageCallback\n })\n }\n }\n }\n\n return this._connect()\n }\n\n public async getRegisterPushChallenge(\n backendUrl: string,\n accountPublicKey: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ) {\n // Check if account is already registered\n const challengeResponse = await fetch(`${oracleUrl}/challenge`)\n if (!challengeResponse.ok) {\n throw new Error(\n `getRegisterPushChallenge failed: ${challengeResponse.status} ${challengeResponse.statusText}`\n )\n }\n const challenge: { id: string; timestamp: string } = await challengeResponse.json()\n\n const constructedString = [\n 'Tezos Signed Message: ',\n challenge.id,\n challenge.timestamp,\n accountPublicKey,\n backendUrl\n ].join(' ')\n\n const bytes = toHex(constructedString)\n const payloadBytes = `05` + `01${ bytes.length.toString(16).padStart(8, '0') }${bytes}`\n\n return {\n challenge,\n payloadToSign: payloadBytes\n }\n }\n\n public async registerPush(\n challenge: { id: string; timestamp: string },\n signature: string,\n backendUrl: string,\n accountPublicKey: string,\n protocolIdentifier: string,\n deviceId: string,\n oracleUrl: string = NOTIFICATION_ORACLE_URL\n ): Promise<PushToken> {\n const tokens = await this.storage.get(StorageKey.PUSH_TOKENS)\n const token = tokens.find(\n (el) => el.publicKey === accountPublicKey && el.backendUrl === backendUrl\n )\n if (token) {\n return token\n }\n\n const registerResponse = await fetch(`${oracleUrl}/register`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n name: this.name,\n challenge,\n accountPublicKey,\n signature,\n backendUrl,\n protocolIdentifier,\n deviceId\n })\n })\n if (!registerResponse.ok) {\n throw new Error(\n `registerPush failed: ${registerResponse.status} ${registerResponse.statusText}`\n )\n }\n const register: {\n accessToken: string\n managementToken: string\n message: string\n success: boolean\n } = await registerResponse.json()\n\n const newToken = {\n publicKey: accountPublicKey,\n backendUrl,\n accessToken: register.accessToken,\n managementToken: register.managementToken\n }\n\n tokens.push(newToken)\n\n await this.storage.set(StorageKey.PUSH_TOKENS, tokens)\n\n return newToken\n }\n\n /**\n * The method will attempt to initiate a connection using the active transport.\n */\n public async _connect(attempts: number = 3): Promise<void> {\n const transport: WalletP2PTransport = (await this.transport) as WalletP2PTransport\n if (attempts == 0 || transport.connectionStatus !== TransportStatus.NOT_CONNECTED) {\n return\n }\n\n try {\n await transport.connect()\n } catch (err: any) {\n logger.warn('_connect', err.message)\n await transport.disconnect()\n await this._connect(--attempts)\n\n return\n }\n\n transport\n .addListener(async (message: unknown, connectionInfo: ConnectionContext) => {\n if (typeof message === 'string') {\n const peer = await this.findPeer(connectionInfo.id, transport)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const deserializedMessage = (await new Serializer(protocolVersion).deserialize(\n message\n )) as BeaconRequestMessage\n this.handleResponse(deserializedMessage, connectionInfo)\n }\n })\n .catch((error) => logger.log('_connect', error))\n this._isConnected.resolve(true)\n }\n\n /**\n * This method sends a response for a specific request back to the DApp\n *\n * @param message The BeaconResponseMessage that will be sent back to the DApp\n */\n public async respond(message: BeaconResponseInputMessage): Promise<void> {\n logger.log('RESPONSE', message)\n const request = this.pendingRequests.find(\n (pendingRequest) => pendingRequest[0].id === message.id\n )\n if (!request) {\n throw new Error('No matching request found!')\n }\n\n this.pendingRequests = this.pendingRequests.filter(\n (pendingRequest) => pendingRequest[0].id !== message.id\n )\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request: request[0],\n message,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, request[1])\n },\n blockchains: this.blockchains\n })\n }\n\n public async getAppMetadataList(): Promise<AppMetadata[]> {\n return this.appMetadataManager.getAppMetadataList()\n }\n\n public async getAppMetadata(senderId: string): Promise<AppMetadata | undefined> {\n return this.appMetadataManager.getAppMetadata(senderId)\n }\n\n public async removeAppMetadata(senderId: string): Promise<void> {\n return this.appMetadataManager.removeAppMetadata(senderId)\n }\n\n public async removeAllAppMetadata(): Promise<void> {\n return this.appMetadataManager.removeAllAppMetadata()\n }\n\n public async getPermissions(): Promise<PermissionInfo[]> {\n return this.permissionManager.getPermissions()\n }\n\n public async getPermission(accountIdentifier: string): Promise<PermissionInfo | undefined> {\n return this.permissionManager.getPermission(accountIdentifier)\n }\n\n public async removePermission(accountIdentifier: string, senderId: string): Promise<void> {\n return this.permissionManager.removePermission(accountIdentifier, senderId)\n }\n\n public async removeAllPermissions(): Promise<void> {\n return this.permissionManager.removeAllPermissions()\n }\n\n private async getPeerInfo(peer: PeerInfo): Promise<ExtendedPeerInfo> {\n const senderId = await getSenderId(peer.publicKey)\n const protocolVersion = this.getPeerProtocolVersion(peer)\n\n if (peer instanceof PostMessagePairingRequest || peer instanceof ExtendedPostMessagePairingRequest) {\n const base = peer as PostMessagePairingRequest & {\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedPostMessagePairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (peer instanceof P2PPairingRequest || peer instanceof ExtendedP2PPairingRequest) {\n const base = peer as P2PPairingRequest & {\n relayServer: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedP2PPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n base.relayServer,\n senderId,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n if (\n peer instanceof WalletConnectPairingRequest ||\n peer instanceof ExtendedWalletConnectPairingRequest\n ) {\n const base = peer as ExtendedWalletConnectPairingRequest & {\n uri: string\n icon?: string\n appUrl?: string\n }\n\n return new ExtendedWalletConnectPairingRequest(\n base.id,\n base.name,\n base.publicKey,\n base.version,\n senderId,\n base.uri,\n protocolVersion,\n base.icon,\n base.appUrl\n )\n }\n\n return {\n ...peer,\n senderId,\n protocolVersion\n }\n }\n\n /**\n * Add a new peer to the known peers\n * @param peer The new peer to add\n */\n public async addPeer(peer: PeerInfo, sendPairingResponse: boolean = true): Promise<void> {\n return (await this.transport).addPeer(await this.getPeerInfo(peer), sendPairingResponse)\n }\n\n public async removePeer(\n peer: ExtendedP2PPairingResponse,\n sendDisconnectToPeer: boolean = false\n ): Promise<void> {\n const removePeerResult = (await this.transport).removePeer(peer)\n\n await this.removePermissionsForPeers([peer])\n\n if (sendDisconnectToPeer) {\n await this.sendDisconnectToPeer(peer)\n }\n\n return removePeerResult\n }\n\n public async removeAllPeers(sendDisconnectToPeers: boolean = false): Promise<void> {\n const peers: ExtendedP2PPairingResponse[] = await (await this.transport).getPeers()\n const removePeerResult = (await this.transport).removeAllPeers()\n\n await this.removePermissionsForPeers(peers)\n\n if (sendDisconnectToPeers) {\n const disconnectPromises = peers.map((peer) => this.sendDisconnectToPeer(peer))\n\n await Promise.all(disconnectPromises)\n }\n\n return removePeerResult\n }\n\n private async removePermissionsForPeers(\n peersToRemove: ExtendedP2PPairingResponse[]\n ): Promise<void> {\n const permissions = await this.permissionManager.getPermissions()\n\n const peerIdsToRemove = peersToRemove.map((peer) => peer.senderId)\n // Remove all permissions with origin of the specified peer\n const permissionsToRemove = permissions.filter((permission) =>\n peerIdsToRemove.includes(permission.appMetadata.senderId)\n )\n const permissionIdentifiersToRemove = permissionsToRemove.map(\n (permissionInfo) => permissionInfo.accountIdentifier\n )\n await this.permissionManager.removePermissions(permissionIdentifiersToRemove)\n }\n\n /**\n * Send an acknowledge message back to the sender\n *\n * @param message The message that was received\n */\n private async sendAcknowledgeResponse(\n request: BeaconRequestMessage | BeaconMessageWrapper<BeaconBaseMessage>,\n connectionContext: ConnectionContext\n ): Promise<void> {\n // Acknowledge the message\n const acknowledgeResponse: AcknowledgeResponseInput = {\n id: request.id,\n type: BeaconMessageType.Acknowledge\n }\n\n await OutgoingResponseInterceptor.intercept({\n senderId: await getSenderId(await this.beaconId),\n request,\n message: acknowledgeResponse,\n ownAppMetadata: await this.getOwnAppMetadata(),\n permissionManager: this.permissionManager,\n appMetadataManager: this.appMetadataManager,\n interceptorCallback: async (response: BeaconMessage): Promise<void> => {\n await this.respondToMessage(response, connectionContext)\n },\n blockchains: this.blockchains\n })\n }\n\n /**\n * An internal method to send a BeaconMessage to the DApp\n *\n * @param response Send a message back to the DApp\n */\n private async respondToMessage(\n response: BeaconMessage,\n connectionContext: ConnectionContext\n ): Promise<void> {\n const transport = await this.transport\n\n let peer: PeerInfo | undefined\n if (connectionContext) {\n peer = await this.findPeer(connectionContext.id, transport)\n }\n\n const protocolVersion = this.getPeerProtocolVersion(peer)\n const serializedMessage: string = await new Serializer(protocolVersion).serialize(response)\n if (connectionContext) {\n await transport.send(serializedMessage, peer)\n } else {\n await transport.send(serializedMessage)\n }\n }\n\n private async disconnect(senderId: string) {\n const transport = await this.transport\n const peers: ExtendedPeerInfo[] = await transport.getPeers()\n const peer: ExtendedPeerInfo | undefined = peers.find((peerEl) => peerEl.senderId === senderId)\n\n if (peer) {\n await this.removePeer(peer as any)\n }\n\n return\n }\n}\n"]}