{
  "version": 3,
  "sources": ["../../../../../src/providers/strategies/WebviewProviderStrategy/WebviewClient/WebviewClient.ts"],
  "sourcesContent": ["import { safeWindow } from 'constants/window.constants';\nimport { Address, Message, Transaction } from 'lib/sdkCore';\nimport {\n  WindowProviderRequestEnums,\n  WindowProviderResponseEnums,\n  RequestMessageType,\n  RequestPayloadType\n} from 'lib/sdkWebWalletCrossWindowProvider';\nimport { getAccountProvider } from 'providers/helpers/accountProvider';\nimport { accountSelector } from 'store/selectors/accountSelectors';\nimport { getStore } from 'store/store';\n\ntype MessageHandler = (event: MessageEvent) => void;\n\ntype MessageEventType = {\n  event: MessageEvent<MessageType>;\n};\n\ntype MessageType =\n  | RequestMessageType\n  | { type: 'cancelAction'; payload: null }\n  | {\n      type: WindowProviderResponseEnums.cancelResponse;\n      payload: null;\n    };\n\nexport class WebviewClient {\n  private readonly handlers: Map<string, MessageHandler> = new Map();\n  private readonly store = getStore();\n  private isLoginInitiated = false;\n  private readonly handleLoginCancelled: () => Promise<void>;\n\n  constructor({ onLoginCancelled }: { onLoginCancelled: () => Promise<void> }) {\n    this.handleMessage = this.handleMessage.bind(this);\n    this.handleLoginCancelled = onLoginCancelled;\n  }\n\n  public startListening() {\n    safeWindow.addEventListener('message', this.handleMessage);\n  }\n\n  public stopListening() {\n    safeWindow.removeEventListener('message', this.handleMessage);\n  }\n\n  public registerEvent(type: string, handler: MessageHandler) {\n    this.handlers.set(type, handler);\n  }\n\n  public unregisterEvent(type: string) {\n    this.handlers.delete(type);\n  }\n\n  private async handleMessage(event: MessageEvent<MessageType>) {\n    const type = event.data?.type;\n\n    if (typeof type === 'string' && this.handlers.has(type)) {\n      const handler = this.handlers.get(type);\n      return handler?.(event);\n    }\n\n    switch (type) {\n      case WindowProviderRequestEnums.finalizeHandshakeRequest:\n        this.handshake({ event });\n        break;\n      case WindowProviderRequestEnums.signMessageRequest:\n        this.signMessage({ event, payload: event.data.payload });\n        break;\n      case WindowProviderRequestEnums.loginRequest:\n        this.isLoginInitiated = true;\n        this.login({ event, payload: event.data.payload });\n        break;\n      case WindowProviderRequestEnums.signTransactionsRequest:\n        this.signTransactions({ event });\n        break;\n      case WindowProviderResponseEnums.cancelResponse: // sent by web-wallet CrossWindow provider\n      case 'cancelAction': // sent by Extension provider\n        if (this.isLoginInitiated) {\n          await this.handleLoginCancelled();\n        }\n        break;\n      default:\n        break;\n    }\n  }\n\n  private async login({\n    event,\n    payload\n  }: MessageEventType & { payload: RequestPayloadType['LOGIN_REQUEST'] }) {\n    const loginToken = payload?.token;\n\n    if (!loginToken) {\n      return;\n    }\n\n    try {\n      const { address } = accountSelector(this.store.getState());\n      const provider = getAccountProvider();\n\n      // Message format needed for token generation\n      const message = `${address}${loginToken}`;\n      const messageToSign = new Message({\n        address: new Address(address),\n        data: new Uint8Array(Buffer.from(message))\n      });\n\n      const signedMessage = await provider.signMessage(messageToSign);\n      const signature = signedMessage?.signature ?? '';\n\n      event.source?.postMessage(\n        {\n          type: WindowProviderResponseEnums.loginResponse,\n          payload: {\n            data: {\n              address,\n              signature: Buffer.from(signature).toString('hex')\n            }\n          }\n        },\n        { targetOrigin: event.origin }\n      );\n    } catch {\n      if (this.isLoginInitiated) {\n        await this.handleLoginCancelled();\n        event.source?.postMessage(\n          {\n            type: WindowProviderResponseEnums.cancelResponse,\n            payload: null\n          },\n          { targetOrigin: event.origin }\n        );\n      }\n    } finally {\n      this.isLoginInitiated = false;\n    }\n  }\n\n  private handshake({ event }: MessageEventType) {\n    const handshakeSession = Date.now().toString();\n\n    event.source?.postMessage(\n      {\n        type: WindowProviderResponseEnums.finalizeHandshakeResponse,\n        payload: { data: handshakeSession }\n      },\n      { targetOrigin: event.origin }\n    );\n  }\n\n  private async signMessage({\n    event,\n    payload\n  }: MessageEventType & {\n    payload: RequestPayloadType['SIGN_MESSAGE_REQUEST'];\n  }) {\n    const { address } = accountSelector(this.store.getState());\n    const { message } = payload;\n\n    try {\n      const messageToSign = new Message({\n        address: new Address(address),\n        data: new Uint8Array(Buffer.from(message))\n      });\n\n      const provider = getAccountProvider();\n      const signedMessage = await provider.signMessage(messageToSign);\n      const signature = signedMessage?.signature ?? '';\n\n      event.source?.postMessage(\n        {\n          type: WindowProviderResponseEnums.signMessageResponse,\n          payload: {\n            data: {\n              signature: Buffer.from(signature).toString('hex'),\n              status: 'signed'\n            }\n          }\n        },\n        { targetOrigin: event.origin }\n      );\n    } catch {\n      throw new Error('Could not sign message');\n    }\n  }\n\n  private async signTransactions({ event }: MessageEventType) {\n    const provider = getAccountProvider();\n    const { payload } = event.data;\n\n    if (!Array.isArray(payload)) {\n      return;\n    }\n\n    try {\n      const transactions = payload.map((plainTransactionObject) =>\n        Transaction.newFromPlainObject(plainTransactionObject)\n      );\n\n      const signedTx = await provider.signTransactions(transactions);\n      event.source?.postMessage(\n        {\n          type: WindowProviderResponseEnums.signTransactionsResponse,\n          payload: {\n            data: signedTx.map((tx) => tx.toPlainObject())\n          }\n        },\n        { targetOrigin: event.origin }\n      );\n    } catch {\n      throw new Error('Could not sign transactions');\n    }\n  }\n}\n"],
  "mappings": "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",
  "names": ["WebviewClient_exports", "__export", "WebviewClient", "__toCommonJS", "import_window", "import_sdkCore", "import_sdkWebWalletCrossWindowProvider", "import_accountProvider", "import_accountSelectors", "import_store", "onLoginCancelled", "type", "handler", "event", "payload", "loginToken", "address", "provider", "message", "messageToSign", "signature", "handshakeSession", "transactions", "plainTransactionObject", "signedTx", "tx"]
}
