{"version":3,"file":"OkxWalletAdapter.impl-blaCCmMX.mjs","sources":["../src/adapters/OkxWalletAdapter.impl.ts"],"sourcesContent":["import { BitcoinWalletAdapterError, UserRejectError } from \"../utils/error\"\nimport {\n  UniSatEvents,\n  UnisatCompatibleProviderAPI,\n  UnisatCompatibleWalletAdapterImpl,\n} from \"../utils/UnisatCompatibleWalletAdapterImpl\"\nimport {\n  SignMessageResult,\n  WalletAdapter,\n  WalletAdapter_onAddressesChanged_callback,\n} from \"../WalletAdapters.types\"\nimport { metadata } from \"./LeatherWalletAdapter\"\n\nenum RpcErrorCode {\n  PARSE_ERROR = -32700,\n  INVALID_REQUEST = -32600,\n  METHOD_NOT_FOUND = -32601,\n  INVALID_PARAMS = -32602,\n  INTERNAL_ERROR = -32603,\n  SERVER_ERROR = -32000,\n  USER_REJECTION = 4001,\n  METHOD_NOT_SUPPORTED = 4002,\n}\n\ninterface RpcError<TErrorData = unknown> {\n  code: number | RpcErrorCode\n  message: string\n  data?: TErrorData\n}\n\ninterface OkxBitcoinProvider\n  extends UnisatCompatibleProviderAPI, Record<string, any> {\n  connect(): Promise<void>\n  on<K extends keyof UniSatEvents>(\n    event: K,\n    handler: (...args: UniSatEvents[K]) => void,\n  ): void\n  on(event: \"accountChanged\" | \"networkChanged\", handler: () => void): void\n  removeListener<K extends keyof UniSatEvents>(\n    event: K,\n    handler: (...args: UniSatEvents[K]) => void,\n  ): void\n  removeListener(\n    event: \"accountChanged\" | \"networkChanged\",\n    handler: () => void,\n  ): void\n}\n\nexport class OkxWalletAdapterImpl\n  extends UnisatCompatibleWalletAdapterImpl\n  implements WalletAdapter\n{\n  private okxwallet: OkxBitcoinProvider\n  constructor(provider: OkxBitcoinProvider) {\n    /**\n     * OKX Provider API:\n     *\n     * https://web3.okx.com/zh-hans/build/dev-docs/sdks/chains/bitcoin/provider\n     */\n    super(provider, metadata.name)\n    this.okxwallet = provider\n  }\n\n  async connect(): Promise<void> {\n    // if not authorized, okx wallet will pop up a window to ask user to authorize\n    // if authorized, okx wallet will do nothing\n    await this.okxwallet.connect()\n  }\n\n  async signMessage(\n    address: string,\n    message: string,\n  ): Promise<SignMessageResult> {\n    return handleRpcError(super.signMessage(address, message))\n  }\n\n  async sendBitcoin(\n    fromAddress: string,\n    receiverAddress: string,\n    satoshiAmount: bigint,\n    options?: { feeRate?: number },\n  ): Promise<{\n    txid: string\n  }> {\n    return handleRpcError(\n      super.sendBitcoin(fromAddress, receiverAddress, satoshiAmount, options),\n    )\n  }\n\n  /**\n   * @internal\n   * @experimental\n   */\n  async sendInscription(\n    fromAddress: string,\n    receiverAddress: string,\n    inscriptionId: string,\n    options?: { feeRate?: number },\n  ): Promise<{\n    txid: string\n  }> {\n    return handleRpcError(\n      super.sendInscription(\n        fromAddress,\n        receiverAddress,\n        inscriptionId,\n        options,\n      ),\n    )\n  }\n\n  async signAndFinalizePsbt(\n    psbtHex: string,\n    signIndices: [address: string, signIndex: number][],\n  ): Promise<{\n    signedPsbtHex: string\n  }> {\n    return handleRpcError(super.signAndFinalizePsbt(psbtHex, signIndices))\n  }\n\n  onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n    unsubscribe: () => void\n  } {\n    // OKX uses 'accountChanged' (no 's') and 'networkChanged' events\n    // https://web3.okx.com/build/dev-docs/sdks/chains/bitcoin/provider\n    if (this.okxwallet?.on && this.okxwallet?.removeListener) {\n      const handler = async (): Promise<void> => {\n        try {\n          const addresses = await this.getAddresses()\n          callback({ addresses })\n        } catch (error) {\n          console.warn(\"[OKX] Failed to get addresses on change:\", error)\n        }\n      }\n\n      // Listen to account and network changes (OKX uses 'accountChanged' not 'accountsChanged')\n      this.okxwallet.on(\"accountChanged\", handler)\n      this.okxwallet.on(\"networkChanged\", handler)\n\n      return {\n        unsubscribe: () => {\n          this.okxwallet.removeListener(\"accountChanged\", handler)\n          this.okxwallet.removeListener(\"networkChanged\", handler)\n        },\n      }\n    } else {\n      // Fallback to parent implementation (polling)\n      return super.onAddressesChanged(callback)\n    }\n  }\n}\n\nexport class OkxWalletAdapterError extends BitcoinWalletAdapterError {\n  constructor(rpcError: RpcError) {\n    super(\"OKX wallet error: \" + rpcError.message, { cause: rpcError })\n  }\n}\n\nconst handleRpcError = async <T>(promise: Promise<T>): Promise<T> => {\n  try {\n    return await promise\n  } catch (e: any) {\n    if (e instanceof UserRejectError) {\n      throw e\n    }\n\n    if (e.code === RpcErrorCode.USER_REJECTION) {\n      throw new UserRejectError()\n    }\n\n    throw new OkxWalletAdapterError(e)\n  }\n}\n"],"names":["OkxWalletAdapterImpl","UnisatCompatibleWalletAdapterImpl","provider","metadata","address","message","handleRpcError","fromAddress","receiverAddress","satoshiAmount","options","inscriptionId","psbtHex","signIndices","callback","handler","addresses","error","OkxWalletAdapterError","BitcoinWalletAdapterError","rpcError","promise","UserRejectError"],"mappings":";;AAgDO,MAAMA,UACHC,EAEV;AAAA,EACU;AAAA,EACR,YAAYC,GAA8B;AAMxC,UAAMA,GAAUC,EAAS,IAAI,GAC7B,KAAK,YAAYD;AAAA,EACnB;AAAA,EAEA,MAAM,UAAyB;AAG7B,UAAM,KAAK,UAAU,QAAA;AAAA,EACvB;AAAA,EAEA,MAAM,YACJE,GACAC,GAC4B;AAC5B,WAAOC,EAAe,MAAM,YAAYF,GAASC,CAAO,CAAC;AAAA,EAC3D;AAAA,EAEA,MAAM,YACJE,GACAC,GACAC,GACAC,GAGC;AACD,WAAOJ;AAAA,MACL,MAAM,YAAYC,GAAaC,GAAiBC,GAAeC,CAAO;AAAA,IAAA;AAAA,EAE1E;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gBACJH,GACAC,GACAG,GACAD,GAGC;AACD,WAAOJ;AAAA,MACL,MAAM;AAAA,QACJC;AAAA,QACAC;AAAA,QACAG;AAAA,QACAD;AAAA,MAAA;AAAA,IACF;AAAA,EAEJ;AAAA,EAEA,MAAM,oBACJE,GACAC,GAGC;AACD,WAAOP,EAAe,MAAM,oBAAoBM,GAASC,CAAW,CAAC;AAAA,EACvE;AAAA,EAEA,mBAAmBC,GAEjB;AAGA,QAAI,KAAK,WAAW,MAAM,KAAK,WAAW,gBAAgB;AACxD,YAAMC,IAAU,YAA2B;AACzC,YAAI;AACF,gBAAMC,IAAY,MAAM,KAAK,aAAA;AAC7B,UAAAF,EAAS,EAAE,WAAAE,GAAW;AAAA,QACxB,SAASC,GAAO;AACd,kBAAQ,KAAK,4CAA4CA,CAAK;AAAA,QAChE;AAAA,MACF;AAGA,kBAAK,UAAU,GAAG,kBAAkBF,CAAO,GAC3C,KAAK,UAAU,GAAG,kBAAkBA,CAAO,GAEpC;AAAA,QACL,aAAa,MAAM;AACjB,eAAK,UAAU,eAAe,kBAAkBA,CAAO,GACvD,KAAK,UAAU,eAAe,kBAAkBA,CAAO;AAAA,QACzD;AAAA,MAAA;AAAA,IAEJ;AAEE,aAAO,MAAM,mBAAmBD,CAAQ;AAAA,EAE5C;AACF;AAEO,MAAMI,UAA8BC,EAA0B;AAAA,EACnE,YAAYC,GAAoB;AAC9B,UAAM,uBAAuBA,EAAS,SAAS,EAAE,OAAOA,GAAU;AAAA,EACpE;AACF;AAEA,MAAMd,IAAiB,OAAUe,MAAoC;AACnE,MAAI;AACF,WAAO,MAAMA;AAAA,EACf,SAAS,GAAQ;AACf,UAAI,aAAaC,IACT,IAGJ,EAAE,SAAS,OACP,IAAIA,EAAA,IAGN,IAAIJ,EAAsB,CAAC;AAAA,EACnC;AACF;"}