bitcoin-wallet-connector 0.1.0

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.
Files changed (158) hide show
  1. package/README.md +208 -0
  2. package/lib/BitcoinConnectionProvider.d.ts +23 -0
  3. package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs +123 -0
  4. package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs.map +1 -0
  5. package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js +2 -0
  6. package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js.map +1 -0
  7. package/lib/BitcoinWalletAdapterConnector.d.ts +30 -0
  8. package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs +10 -0
  9. package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs.map +1 -0
  10. package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js +2 -0
  11. package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js.map +1 -0
  12. package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js +2 -0
  13. package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js.map +1 -0
  14. package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs +184 -0
  15. package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs.map +1 -0
  16. package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs +235 -0
  17. package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs.map +1 -0
  18. package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js +2 -0
  19. package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js.map +1 -0
  20. package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs +67 -0
  21. package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs.map +1 -0
  22. package/lib/OkxWalletAdapter.impl-C8kesjGu.js +2 -0
  23. package/lib/OkxWalletAdapter.impl-C8kesjGu.js.map +1 -0
  24. package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js +2 -0
  25. package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js.map +1 -0
  26. package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs +137 -0
  27. package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs.map +1 -0
  28. package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs +14 -0
  29. package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs.map +1 -0
  30. package/lib/UnisatWalletAdapter.impl-EISvxdpc.js +2 -0
  31. package/lib/UnisatWalletAdapter.impl-EISvxdpc.js.map +1 -0
  32. package/lib/WalletAdapters.types-CnvOqHFH.mjs +32 -0
  33. package/lib/WalletAdapters.types-CnvOqHFH.mjs.map +1 -0
  34. package/lib/WalletAdapters.types-De_x1lzr.js +2 -0
  35. package/lib/WalletAdapters.types-De_x1lzr.js.map +1 -0
  36. package/lib/WalletAdapters.types.d.ts +110 -0
  37. package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js +2 -0
  38. package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js.map +1 -0
  39. package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs +151 -0
  40. package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs.map +1 -0
  41. package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs +105 -0
  42. package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs.map +1 -0
  43. package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js +2 -0
  44. package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js.map +1 -0
  45. package/lib/adapters/BitgetWalletAdapter.d.ts +2 -0
  46. package/lib/adapters/BitgetWalletAdapter.impl.d.ts +8 -0
  47. package/lib/adapters/LeatherWalletAdapter.d.ts +2 -0
  48. package/lib/adapters/LeatherWalletAdapter.impl.d.ts +41 -0
  49. package/lib/adapters/MagicEdenWalletAdapter.d.ts +11 -0
  50. package/lib/adapters/MagicEdenWalletAdapter.impl.d.ts +22 -0
  51. package/lib/adapters/MockAddressWalletAdapter.d.ts +33 -0
  52. package/lib/adapters/OkxWalletAdapter.d.ts +2 -0
  53. package/lib/adapters/OkxWalletAdapter.impl.d.ts +51 -0
  54. package/lib/adapters/UnisatWalletAdapter.d.ts +2 -0
  55. package/lib/adapters/UnisatWalletAdapter.impl.d.ts +14 -0
  56. package/lib/adapters/XverseWalletAdapter.d.ts +3 -0
  57. package/lib/adapters/XverseWalletAdapter.impl.d.ts +14 -0
  58. package/lib/adapters/index.d.ts +7 -0
  59. package/lib/adapters.js +2 -0
  60. package/lib/adapters.js.map +1 -0
  61. package/lib/adapters.mjs +11 -0
  62. package/lib/adapters.mjs.map +1 -0
  63. package/lib/bitget-C7oB4Ffq.mjs +5 -0
  64. package/lib/bitget-C7oB4Ffq.mjs.map +1 -0
  65. package/lib/bitget-DXnsxx_y.js +2 -0
  66. package/lib/bitget-DXnsxx_y.js.map +1 -0
  67. package/lib/index-CaV3F1Nm.js +424 -0
  68. package/lib/index-CaV3F1Nm.js.map +1 -0
  69. package/lib/index-CcQUdePc.mjs +12224 -0
  70. package/lib/index-CcQUdePc.mjs.map +1 -0
  71. package/lib/index-D7YwhNAG.mjs +3946 -0
  72. package/lib/index-D7YwhNAG.mjs.map +1 -0
  73. package/lib/index-Zx0KcpYx.js +2 -0
  74. package/lib/index-Zx0KcpYx.js.map +1 -0
  75. package/lib/index.d.ts +3 -0
  76. package/lib/index.js +2 -0
  77. package/lib/index.js.map +1 -0
  78. package/lib/index.mjs +20 -0
  79. package/lib/index.mjs.map +1 -0
  80. package/lib/leather-BoQG_CPn.mjs +5 -0
  81. package/lib/leather-BoQG_CPn.mjs.map +1 -0
  82. package/lib/leather-DJ8nWmM8.js +2 -0
  83. package/lib/leather-DJ8nWmM8.js.map +1 -0
  84. package/lib/magiceden-B36CEQa6.js +2 -0
  85. package/lib/magiceden-B36CEQa6.js.map +1 -0
  86. package/lib/magiceden-Cg7d3agI.mjs +5 -0
  87. package/lib/magiceden-Cg7d3agI.mjs.map +1 -0
  88. package/lib/misc-B5EWO_dn.mjs +10 -0
  89. package/lib/misc-B5EWO_dn.mjs.map +1 -0
  90. package/lib/misc-CigR0RqC.js +2 -0
  91. package/lib/misc-CigR0RqC.js.map +1 -0
  92. package/lib/okx-ChwzM0dK.js +2 -0
  93. package/lib/okx-ChwzM0dK.js.map +1 -0
  94. package/lib/okx-DWbHwazu.mjs +5 -0
  95. package/lib/okx-DWbHwazu.mjs.map +1 -0
  96. package/lib/react.d.ts +2 -0
  97. package/lib/react.js +2 -0
  98. package/lib/react.js.map +1 -0
  99. package/lib/react.mjs +128 -0
  100. package/lib/react.mjs.map +1 -0
  101. package/lib/transaction-CiLOYSE_.mjs +1063 -0
  102. package/lib/transaction-CiLOYSE_.mjs.map +1 -0
  103. package/lib/transaction-CzdnbXSo.js +2 -0
  104. package/lib/transaction-CzdnbXSo.js.map +1 -0
  105. package/lib/unisat-BvZW5h0U.js +2 -0
  106. package/lib/unisat-BvZW5h0U.js.map +1 -0
  107. package/lib/unisat-pLgab4nG.mjs +5 -0
  108. package/lib/unisat-pLgab4nG.mjs.map +1 -0
  109. package/lib/utils/StateChannel.d.ts +14 -0
  110. package/lib/utils/UnisatCompatibleWalletAdapterImpl.d.ts +99 -0
  111. package/lib/utils/XverseCompatibleWalletAdapterImpl.d.ts +80 -0
  112. package/lib/utils/XverseCompatibleWalletAdapterImpl_legacy.d.ts +44 -0
  113. package/lib/utils/bitcoinAddressHelpers.d.ts +14 -0
  114. package/lib/utils/bitcoinNetworkHelpers.d.ts +4 -0
  115. package/lib/utils/createAdapterAvailability.d.ts +15 -0
  116. package/lib/utils/error.d.ts +6 -0
  117. package/lib/utils/misc.d.ts +3 -0
  118. package/lib/xverse-IKOHyGi-.js +2 -0
  119. package/lib/xverse-IKOHyGi-.js.map +1 -0
  120. package/lib/xverse-iHLNanCB.mjs +5 -0
  121. package/lib/xverse-iHLNanCB.mjs.map +1 -0
  122. package/package.json +86 -0
  123. package/src/BitcoinConnectionProvider.stories.tsx +329 -0
  124. package/src/BitcoinConnectionProvider.tsx +234 -0
  125. package/src/BitcoinWalletAdapterConnector.ts +166 -0
  126. package/src/WalletAdapters.types.ts +154 -0
  127. package/src/_/bitget.png +0 -0
  128. package/src/_/leather.svg +4 -0
  129. package/src/_/magiceden.png +0 -0
  130. package/src/_/okx.png +0 -0
  131. package/src/_/unisat.svg +31 -0
  132. package/src/_/xverse.png +0 -0
  133. package/src/adapters/BitgetWalletAdapter.impl.ts +22 -0
  134. package/src/adapters/BitgetWalletAdapter.ts +44 -0
  135. package/src/adapters/LeatherWalletAdapter.impl.ts +324 -0
  136. package/src/adapters/LeatherWalletAdapter.ts +35 -0
  137. package/src/adapters/MagicEdenWalletAdapter.impl.ts +139 -0
  138. package/src/adapters/MagicEdenWalletAdapter.ts +51 -0
  139. package/src/adapters/MockAddressWalletAdapter.ts +199 -0
  140. package/src/adapters/OkxWalletAdapter.impl.ts +168 -0
  141. package/src/adapters/OkxWalletAdapter.ts +37 -0
  142. package/src/adapters/UnisatWalletAdapter.impl.ts +32 -0
  143. package/src/adapters/UnisatWalletAdapter.ts +50 -0
  144. package/src/adapters/XverseWalletAdapter.impl.ts +150 -0
  145. package/src/adapters/XverseWalletAdapter.ts +37 -0
  146. package/src/adapters/index.ts +7 -0
  147. package/src/env.d.ts +9 -0
  148. package/src/index.ts +3 -0
  149. package/src/react.ts +9 -0
  150. package/src/utils/StateChannel.ts +39 -0
  151. package/src/utils/UnisatCompatibleWalletAdapterImpl.ts +342 -0
  152. package/src/utils/XverseCompatibleWalletAdapterImpl.ts +288 -0
  153. package/src/utils/XverseCompatibleWalletAdapterImpl_legacy.ts +278 -0
  154. package/src/utils/bitcoinAddressHelpers.ts +132 -0
  155. package/src/utils/bitcoinNetworkHelpers.ts +17 -0
  156. package/src/utils/createAdapterAvailability.ts +92 -0
  157. package/src/utils/error.ts +13 -0
  158. package/src/utils/misc.ts +10 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"OkxWalletAdapter.impl-C8kesjGu.js","sources":["../src/adapters/OkxWalletAdapter.impl.ts"],"sourcesContent":["import { UserRejectError, BitcoinWalletAdapterError } from \"../utils/error\"\nimport {\n SignMessageResult,\n WalletAdapter,\n WalletAdapter_onAddressesChanged_callback,\n} from \"../WalletAdapters.types\"\nimport {\n UniSatEvents,\n UnisatCompatibleProviderAPI,\n UnisatCompatibleWalletAdapterImpl,\n} from \"../utils/UnisatCompatibleWalletAdapterImpl\"\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, \"OKX\")\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 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","address","message","handleRpcError","fromAddress","receiverAddress","satoshiAmount","options","inscriptionId","psbtHex","signIndices","callback","handler","addresses","error","OkxWalletAdapterError","BitcoinWalletAdapterError","rpcError","promise","UserRejectError"],"mappings":"mMA+CO,MAAMA,UACHC,EAAAA,iCAEV,CACU,UACR,YAAYC,EAA8B,CAMxC,MAAMA,EAAU,KAAK,EACrB,KAAK,UAAYA,CACnB,CAEA,MAAM,SAAyB,CAG7B,MAAM,KAAK,UAAU,QAAA,CACvB,CAEA,MAAM,YACJC,EACAC,EAC4B,CAC5B,OAAOC,EAAe,MAAM,YAAYF,EAASC,CAAO,CAAC,CAC3D,CAEA,MAAM,YACJE,EACAC,EACAC,EACAC,EAGC,CACD,OAAOJ,EACL,MAAM,YAAYC,EAAaC,EAAiBC,EAAeC,CAAO,CAAA,CAE1E,CAEA,MAAM,gBACJH,EACAC,EACAG,EACAD,EAGC,CACD,OAAOJ,EACL,MAAM,gBACJC,EACAC,EACAG,EACAD,CAAA,CACF,CAEJ,CAEA,MAAM,oBACJE,EACAC,EAGC,CACD,OAAOP,EAAe,MAAM,oBAAoBM,EAASC,CAAW,CAAC,CACvE,CAEA,mBAAmBC,EAEjB,CAGA,GAAI,KAAK,WAAW,IAAM,KAAK,WAAW,eAAgB,CACxD,MAAMC,EAAU,SAA2B,CACzC,GAAI,CACF,MAAMC,EAAY,MAAM,KAAK,aAAA,EAC7BF,EAAS,CAAE,UAAAE,EAAW,CACxB,OAASC,EAAO,CACd,QAAQ,KAAK,2CAA4CA,CAAK,CAChE,CACF,EAGA,YAAK,UAAU,GAAG,iBAAkBF,CAAO,EAC3C,KAAK,UAAU,GAAG,iBAAkBA,CAAO,EAEpC,CACL,YAAa,IAAM,CACjB,KAAK,UAAU,eAAe,iBAAkBA,CAAO,EACvD,KAAK,UAAU,eAAe,iBAAkBA,CAAO,CACzD,CAAA,CAEJ,KAEE,QAAO,MAAM,mBAAmBD,CAAQ,CAE5C,CACF,CAEO,MAAMI,UAA8BC,EAAAA,yBAA0B,CACnE,YAAYC,EAAoB,CAC9B,MAAM,qBAAuBA,EAAS,QAAS,CAAE,MAAOA,EAAU,CACpE,CACF,CAEA,MAAMd,EAAiB,MAAUe,GAAoC,CACnE,GAAI,CACF,OAAO,MAAMA,CACf,OAAS,EAAQ,CACf,MAAI,aAAaC,EAAAA,gBACT,EAGJ,EAAE,OAAS,KACP,IAAIA,EAAAA,gBAGN,IAAIJ,EAAsB,CAAC,CACnC,CACF"}
@@ -0,0 +1,2 @@
1
+ "use strict";const n=require("./index-Zx0KcpYx.js"),w=require("./misc-CigR0RqC.js"),s=require("./WalletAdapters.types-De_x1lzr.js"),A=require("./transaction-CzdnbXSo.js");class g{constructor(e,t){this.unisat=e,this.walletDisplayName=t}async connect(){(await this.unisat.getAccounts()).length===0&&await this.unisat.requestAccounts()}disconnect(){return Promise.resolve()}async getAddresses(){const e=await this.unisat.getAccounts();if(e.length===0)throw new s.WalletAdapterNotConnectedError(this.walletDisplayName);const t=await this.unisat.getPublicKey(),a=await this.unisat.getNetwork()==="livenet"?"mainnet":"testnet";if(!w.hasAny(e))throw new s.BitcoinWalletAdapterError("Request wallet addresses failed");const o=e[0],d=n.getAddressType(n.getBitcoinNetwork(a),o),c=d==="p2tr"?s.WalletAdapterAddressType.P2TR:d==="p2sh"?s.WalletAdapterAddressType.P2SH_P2WPKH:d==="p2wpkh"?s.WalletAdapterAddressType.P2WPKH:void 0;if(c==null)throw new s.BitcoinWalletAdapterError("Please select a SegWit address");const p=n.hex.encode(n.addressToScriptPubKey(n.getBitcoinNetwork(a),o)),u=c!==s.WalletAdapterAddressType.P2TR?void 0:n.hex.encode(n.getTapInternalKeyOf_P2TR_publicKey(n.getBitcoinNetwork(a),n.hex.decode(t))),h=c!==s.WalletAdapterAddressType.P2SH_P2WPKH?void 0:n.hex.encode(n.getRedeemScriptOf_P2SH_P2WPKH_publicKey(n.getBitcoinNetwork(a),n.hex.decode(t)));return[{addressType:c,address:o,scriptPubKey:p,redeemScript:h,tapInternalKey:u,publicKey:t,network:a==="mainnet"?s.WalletAdapterBitcoinNetwork.MAINNET:s.WalletAdapterBitcoinNetwork.TESTNET,purposes:[s.WalletAdapterAddressPurpose.Bitcoin,s.WalletAdapterAddressPurpose.Ordinals,s.WalletAdapterAddressPurpose.BRC20,s.WalletAdapterAddressPurpose.Runes]}]}async signMessage(e,t){return{result:await l(this.unisat.signMessage(t,"bip322-simple")),address:e,algorithm:s.SignMessageAlgorithm.BIP322}}sendBitcoinFeeRateCapability="available";async sendBitcoin(e,t,i,a){return{txid:await l(this.unisat.sendBitcoin(t,Number(i),{feeRate:a?.feeRate}))}}sendInscriptionFeeRateCapability="available";async sendInscription(e,t,i,a){return{txid:await l(this.unisat.sendInscription(t,i,{feeRate:a?.feeRate}))}}async signAndFinalizePsbt(e,t){await this.getAddresses();const i=await l(this.unisat.signPsbt(e,{autoFinalized:!1,toSignInputs:t.map(([o,d])=>({index:d,address:o}))})),a=A.Transaction.fromPSBT(n.hex.decode(i),{allowUnknownInputs:!0,allowUnknownOutputs:!0,disableScriptCheck:!0,allowLegacyWitnessUtxo:!0});return a.finalize(),{signedPsbtHex:n.hex.encode(a.toPSBT())}}onAddressesChanged(e){const t=async()=>{try{const i=await this.getAddresses();e({addresses:i})}catch(i){console.warn(`[${this.walletDisplayName}] Failed to get addresses on change:`,i)}};return this.unisat.on("accountsChanged",t),this.unisat.on("networkChanged",t),{unsubscribe:()=>{this.unisat.removeListener("accountsChanged",t),this.unisat.removeListener("networkChanged",t)}}}}function y(r){return r!=null&&"code"in r&&"message"in r}class P extends Error{code;constructor(e){super(e.message),this.code=e.code,this.cause=e}}const l=async r=>{try{return await r}catch(e){throw y(e)?e.code===4001?new s.UserRejectError:new P(e):e}};exports.UnisatCompatibleWalletAdapterImpl=g;
2
+ //# sourceMappingURL=UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js","sources":["../src/utils/UnisatCompatibleWalletAdapterImpl.ts"],"sourcesContent":["import { hex } from \"@scure/base\"\nimport * as btc from \"@scure/btc-signer\"\nimport { hasAny } from \"./misc\"\nimport {\n addressToScriptPubKey,\n getAddressType,\n getRedeemScriptOf_P2SH_P2WPKH_publicKey,\n getTapInternalKeyOf_P2TR_publicKey,\n} from \"./bitcoinAddressHelpers\"\nimport { getBitcoinNetwork } from \"./bitcoinNetworkHelpers\"\nimport { UserRejectError, BitcoinWalletAdapterError } from \"../utils/error\"\nimport {\n SignMessageAlgorithm,\n SignMessageResult,\n WalletAdapter,\n WalletAdapter_onAddressesChanged_callback,\n WalletAdapterAddress,\n WalletAdapterAddressPurpose,\n WalletAdapterAddressType,\n WalletAdapterBitcoinNetwork,\n WalletAdapterNotConnectedError,\n} from \"../WalletAdapters.types\"\n\n/**\n * https://docs.unisat.io/dev-center/open-api-documentation/unisat-wallet#events\n */\nexport interface UniSatEvents {\n accountsChanged: [accounts: Array<string>]\n networkChanged: [network: string]\n}\n\nexport interface UnisatCompatibleProviderAPI {\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#getaccounts\n */\n getAccounts(): Promise<string[]>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#requestaccounts\n */\n requestAccounts(): Promise<string[]>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#getpublickey\n */\n getPublicKey(): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#getnetwork\n */\n getNetwork(): Promise<\"livenet\" | \"testnet\">\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#signmessage\n */\n signMessage(\n message: string,\n algorithm: \"ecdsa\" | \"bip322-simple\",\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#sendbitcoin\n */\n sendBitcoin(\n receiverAddress: string,\n satoshiAmount: number,\n options?: { feeRate?: number },\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#sendInscription\n */\n sendInscription(\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#signpsbt\n */\n signPsbt(\n psbtHex: string,\n options?: {\n autoFinalized?: boolean\n toSignInputs?: {\n index: number\n address?: string\n publicKey?: string\n sighashTypes?: number[]\n disableTweakSigner?: boolean\n }[]\n },\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#events\n */\n on<K extends keyof UniSatEvents>(\n event: K,\n handler: (...args: UniSatEvents[K]) => void,\n ): void\n removeListener(event: keyof UniSatEvents, handler: () => void): void\n}\n\nexport type UnisatCompatibleWalletAdapterAddresses = (WalletAdapterAddress & {\n publicKey: string\n})[]\n\nexport class UnisatCompatibleWalletAdapterImpl implements WalletAdapter {\n constructor(\n private unisat: UnisatCompatibleProviderAPI,\n private walletDisplayName: string,\n ) {}\n\n async connect(): Promise<void> {\n if ((await this.unisat.getAccounts()).length === 0) {\n await this.unisat.requestAccounts()\n }\n }\n\n disconnect(): Promise<void> {\n // do nothing\n return Promise.resolve()\n }\n\n async getAddresses(): Promise<UnisatCompatibleWalletAdapterAddresses> {\n const addresses: string[] = await this.unisat.getAccounts()\n\n if (addresses.length === 0) {\n throw new WalletAdapterNotConnectedError(this.walletDisplayName)\n }\n\n const publicKey: string = await this.unisat.getPublicKey()\n\n const _network: \"livenet\" | \"testnet\" = await this.unisat.getNetwork()\n const network = _network === \"livenet\" ? \"mainnet\" : \"testnet\"\n\n if (!hasAny(addresses)) {\n throw new BitcoinWalletAdapterError(\"Request wallet addresses failed\")\n }\n\n const address = addresses[0]\n const addrType = getAddressType(getBitcoinNetwork(network), address)\n // prettier-ignore\n const addressType =\n addrType === \"p2tr\" ? WalletAdapterAddressType.P2TR :\n addrType === \"p2sh\" ? WalletAdapterAddressType.P2SH_P2WPKH :\n addrType === \"p2wpkh\" ? WalletAdapterAddressType.P2WPKH :\n undefined\n\n if (addressType == null) {\n throw new BitcoinWalletAdapterError(\"Please select a SegWit address\")\n }\n\n const scriptPubKey = hex.encode(\n addressToScriptPubKey(getBitcoinNetwork(network), address),\n )\n\n const tapInternalKey =\n addressType !== WalletAdapterAddressType.P2TR\n ? undefined\n : hex.encode(\n getTapInternalKeyOf_P2TR_publicKey(\n getBitcoinNetwork(network),\n hex.decode(publicKey),\n ),\n )\n\n const redeemScript =\n addressType !== WalletAdapterAddressType.P2SH_P2WPKH\n ? undefined\n : hex.encode(\n getRedeemScriptOf_P2SH_P2WPKH_publicKey(\n getBitcoinNetwork(network),\n hex.decode(publicKey),\n ),\n )\n\n return [\n {\n addressType,\n address,\n scriptPubKey,\n redeemScript,\n tapInternalKey,\n publicKey,\n network:\n network === \"mainnet\"\n ? WalletAdapterBitcoinNetwork.MAINNET\n : WalletAdapterBitcoinNetwork.TESTNET,\n purposes: [\n WalletAdapterAddressPurpose.Bitcoin,\n WalletAdapterAddressPurpose.Ordinals,\n WalletAdapterAddressPurpose.BRC20,\n WalletAdapterAddressPurpose.Runes,\n ],\n },\n ]\n }\n\n async signMessage(\n address: string,\n message: string,\n ): Promise<SignMessageResult> {\n const result = await handleRpcError(\n this.unisat.signMessage(message, \"bip322-simple\"),\n )\n\n return {\n result,\n address,\n algorithm: SignMessageAlgorithm.BIP322,\n }\n }\n\n sendBitcoinFeeRateCapability: WalletAdapter[\"sendBitcoinFeeRateCapability\"] =\n \"available\" as const\n async sendBitcoin(\n fromAddress: string,\n receiverAddress: string,\n satoshiAmount: bigint,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const txid = await handleRpcError(\n this.unisat.sendBitcoin(receiverAddress, Number(satoshiAmount), {\n feeRate: options?.feeRate,\n }),\n )\n return { txid }\n }\n\n sendInscriptionFeeRateCapability: WalletAdapter[\"sendInscriptionFeeRateCapability\"] =\n \"available\" as const\n async sendInscription(\n fromAddress: string,\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const txid = await handleRpcError(\n this.unisat.sendInscription(receiverAddress, inscriptionId, {\n feeRate: options?.feeRate,\n }),\n )\n return { txid }\n }\n\n async signAndFinalizePsbt(\n psbtHex: string,\n signIndices: [address: string, signIndex: number][],\n ): Promise<{\n signedPsbtHex: string\n }> {\n const addr = await this.getAddresses()\n\n const signedPsbtHex = await handleRpcError(\n this.unisat.signPsbt(psbtHex, {\n autoFinalized: false,\n toSignInputs: signIndices.map(([address, signIndex]) => ({\n index: signIndex,\n address,\n })),\n }),\n )\n\n /**\n * Some version of unisat's signPsbt API does not working well with the autoFinalized option,\n * so we finalize the PSBT manually.\n */\n const tx = btc.Transaction.fromPSBT(hex.decode(signedPsbtHex), {\n allowUnknownInputs: true,\n allowUnknownOutputs: true,\n disableScriptCheck: true,\n allowLegacyWitnessUtxo: true,\n })\n tx.finalize()\n\n return { signedPsbtHex: hex.encode(tx.toPSBT()) }\n }\n\n onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n unsubscribe: () => void\n } {\n const handler = async (): Promise<void> => {\n try {\n const addresses = await this.getAddresses()\n callback({ addresses })\n } catch (error) {\n // Ignore errors from getAddresses (e.g., wallet disconnected)\n console.warn(\n `[${this.walletDisplayName}] Failed to get addresses on change:`,\n error,\n )\n }\n }\n\n // Listen to both account and network changes\n this.unisat.on(\"accountsChanged\", handler)\n this.unisat.on(\"networkChanged\", handler)\n\n return {\n unsubscribe: () => {\n this.unisat.removeListener(\"accountsChanged\", handler)\n this.unisat.removeListener(\"networkChanged\", handler)\n },\n }\n }\n}\n\ninterface UnisatCompatibleProviderAPIThrownError {\n code: number\n message: string\n}\nfunction isUnisatCompatibleProviderAPIThrownError(\n err: any,\n): err is UnisatCompatibleProviderAPIThrownError {\n return err != null && \"code\" in err && \"message\" in err\n}\n\nexport class UnisatCompatibleProviderError extends Error {\n readonly code: number\n constructor(err: UnisatCompatibleProviderAPIThrownError) {\n super(err.message)\n this.code = err.code\n this.cause = err\n }\n}\n\nconst handleRpcError = async <T>(promise: Promise<T>): Promise<T> => {\n try {\n return await promise\n } catch (e: any) {\n if (isUnisatCompatibleProviderAPIThrownError(e)) {\n if (e.code === 4001) {\n throw new UserRejectError()\n }\n throw new UnisatCompatibleProviderError(e)\n }\n throw e\n }\n}\n"],"names":["UnisatCompatibleWalletAdapterImpl","unisat","walletDisplayName","addresses","WalletAdapterNotConnectedError","publicKey","network","hasAny","BitcoinWalletAdapterError","address","addrType","getAddressType","getBitcoinNetwork","addressType","WalletAdapterAddressType","scriptPubKey","hex","addressToScriptPubKey","tapInternalKey","getTapInternalKeyOf_P2TR_publicKey","redeemScript","getRedeemScriptOf_P2SH_P2WPKH_publicKey","WalletAdapterBitcoinNetwork","WalletAdapterAddressPurpose","message","handleRpcError","SignMessageAlgorithm","fromAddress","receiverAddress","satoshiAmount","options","inscriptionId","psbtHex","signIndices","signedPsbtHex","signIndex","tx","btc.Transaction","callback","handler","error","isUnisatCompatibleProviderAPIThrownError","err","UnisatCompatibleProviderError","promise","UserRejectError"],"mappings":"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"}
@@ -0,0 +1,137 @@
1
+ import { d as y, h as r, c as b, b as l, g as f, e as A } from "./index-D7YwhNAG.mjs";
2
+ import { h as T } from "./misc-B5EWO_dn.mjs";
3
+ import { d as R, B as h, b as d, a as u, W as w, S, U as k } from "./WalletAdapters.types-CnvOqHFH.mjs";
4
+ import { T as C } from "./transaction-CiLOYSE_.mjs";
5
+ class N {
6
+ constructor(e, t) {
7
+ this.unisat = e, this.walletDisplayName = t;
8
+ }
9
+ async connect() {
10
+ (await this.unisat.getAccounts()).length === 0 && await this.unisat.requestAccounts();
11
+ }
12
+ disconnect() {
13
+ return Promise.resolve();
14
+ }
15
+ async getAddresses() {
16
+ const e = await this.unisat.getAccounts();
17
+ if (e.length === 0)
18
+ throw new R(this.walletDisplayName);
19
+ const t = await this.unisat.getPublicKey(), s = await this.unisat.getNetwork() === "livenet" ? "mainnet" : "testnet";
20
+ if (!T(e))
21
+ throw new h("Request wallet addresses failed");
22
+ const i = e[0], o = y(l(s), i), c = o === "p2tr" ? d.P2TR : o === "p2sh" ? d.P2SH_P2WPKH : o === "p2wpkh" ? d.P2WPKH : void 0;
23
+ if (c == null)
24
+ throw new h("Please select a SegWit address");
25
+ const g = r.encode(
26
+ b(l(s), i)
27
+ ), m = c !== d.P2TR ? void 0 : r.encode(
28
+ f(
29
+ l(s),
30
+ r.decode(t)
31
+ )
32
+ ), P = c !== d.P2SH_P2WPKH ? void 0 : r.encode(
33
+ A(
34
+ l(s),
35
+ r.decode(t)
36
+ )
37
+ );
38
+ return [
39
+ {
40
+ addressType: c,
41
+ address: i,
42
+ scriptPubKey: g,
43
+ redeemScript: P,
44
+ tapInternalKey: m,
45
+ publicKey: t,
46
+ network: s === "mainnet" ? w.MAINNET : w.TESTNET,
47
+ purposes: [
48
+ u.Bitcoin,
49
+ u.Ordinals,
50
+ u.BRC20,
51
+ u.Runes
52
+ ]
53
+ }
54
+ ];
55
+ }
56
+ async signMessage(e, t) {
57
+ return {
58
+ result: await p(
59
+ this.unisat.signMessage(t, "bip322-simple")
60
+ ),
61
+ address: e,
62
+ algorithm: S.BIP322
63
+ };
64
+ }
65
+ sendBitcoinFeeRateCapability = "available";
66
+ async sendBitcoin(e, t, a, s) {
67
+ return { txid: await p(
68
+ this.unisat.sendBitcoin(t, Number(a), {
69
+ feeRate: s?.feeRate
70
+ })
71
+ ) };
72
+ }
73
+ sendInscriptionFeeRateCapability = "available";
74
+ async sendInscription(e, t, a, s) {
75
+ return { txid: await p(
76
+ this.unisat.sendInscription(t, a, {
77
+ feeRate: s?.feeRate
78
+ })
79
+ ) };
80
+ }
81
+ async signAndFinalizePsbt(e, t) {
82
+ await this.getAddresses();
83
+ const a = await p(
84
+ this.unisat.signPsbt(e, {
85
+ autoFinalized: !1,
86
+ toSignInputs: t.map(([i, o]) => ({
87
+ index: o,
88
+ address: i
89
+ }))
90
+ })
91
+ ), s = C.fromPSBT(r.decode(a), {
92
+ allowUnknownInputs: !0,
93
+ allowUnknownOutputs: !0,
94
+ disableScriptCheck: !0,
95
+ allowLegacyWitnessUtxo: !0
96
+ });
97
+ return s.finalize(), { signedPsbtHex: r.encode(s.toPSBT()) };
98
+ }
99
+ onAddressesChanged(e) {
100
+ const t = async () => {
101
+ try {
102
+ const a = await this.getAddresses();
103
+ e({ addresses: a });
104
+ } catch (a) {
105
+ console.warn(
106
+ `[${this.walletDisplayName}] Failed to get addresses on change:`,
107
+ a
108
+ );
109
+ }
110
+ };
111
+ return this.unisat.on("accountsChanged", t), this.unisat.on("networkChanged", t), {
112
+ unsubscribe: () => {
113
+ this.unisat.removeListener("accountsChanged", t), this.unisat.removeListener("networkChanged", t);
114
+ }
115
+ };
116
+ }
117
+ }
118
+ function W(n) {
119
+ return n != null && "code" in n && "message" in n;
120
+ }
121
+ class x extends Error {
122
+ code;
123
+ constructor(e) {
124
+ super(e.message), this.code = e.code, this.cause = e;
125
+ }
126
+ }
127
+ const p = async (n) => {
128
+ try {
129
+ return await n;
130
+ } catch (e) {
131
+ throw W(e) ? e.code === 4001 ? new k() : new x(e) : e;
132
+ }
133
+ };
134
+ export {
135
+ N as U
136
+ };
137
+ //# sourceMappingURL=UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs","sources":["../src/utils/UnisatCompatibleWalletAdapterImpl.ts"],"sourcesContent":["import { hex } from \"@scure/base\"\nimport * as btc from \"@scure/btc-signer\"\nimport { hasAny } from \"./misc\"\nimport {\n addressToScriptPubKey,\n getAddressType,\n getRedeemScriptOf_P2SH_P2WPKH_publicKey,\n getTapInternalKeyOf_P2TR_publicKey,\n} from \"./bitcoinAddressHelpers\"\nimport { getBitcoinNetwork } from \"./bitcoinNetworkHelpers\"\nimport { UserRejectError, BitcoinWalletAdapterError } from \"../utils/error\"\nimport {\n SignMessageAlgorithm,\n SignMessageResult,\n WalletAdapter,\n WalletAdapter_onAddressesChanged_callback,\n WalletAdapterAddress,\n WalletAdapterAddressPurpose,\n WalletAdapterAddressType,\n WalletAdapterBitcoinNetwork,\n WalletAdapterNotConnectedError,\n} from \"../WalletAdapters.types\"\n\n/**\n * https://docs.unisat.io/dev-center/open-api-documentation/unisat-wallet#events\n */\nexport interface UniSatEvents {\n accountsChanged: [accounts: Array<string>]\n networkChanged: [network: string]\n}\n\nexport interface UnisatCompatibleProviderAPI {\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#getaccounts\n */\n getAccounts(): Promise<string[]>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#requestaccounts\n */\n requestAccounts(): Promise<string[]>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#getpublickey\n */\n getPublicKey(): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#getnetwork\n */\n getNetwork(): Promise<\"livenet\" | \"testnet\">\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#signmessage\n */\n signMessage(\n message: string,\n algorithm: \"ecdsa\" | \"bip322-simple\",\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#sendbitcoin\n */\n sendBitcoin(\n receiverAddress: string,\n satoshiAmount: number,\n options?: { feeRate?: number },\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#sendInscription\n */\n sendInscription(\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#signpsbt\n */\n signPsbt(\n psbtHex: string,\n options?: {\n autoFinalized?: boolean\n toSignInputs?: {\n index: number\n address?: string\n publicKey?: string\n sighashTypes?: number[]\n disableTweakSigner?: boolean\n }[]\n },\n ): Promise<string>\n\n /**\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet#events\n */\n on<K extends keyof UniSatEvents>(\n event: K,\n handler: (...args: UniSatEvents[K]) => void,\n ): void\n removeListener(event: keyof UniSatEvents, handler: () => void): void\n}\n\nexport type UnisatCompatibleWalletAdapterAddresses = (WalletAdapterAddress & {\n publicKey: string\n})[]\n\nexport class UnisatCompatibleWalletAdapterImpl implements WalletAdapter {\n constructor(\n private unisat: UnisatCompatibleProviderAPI,\n private walletDisplayName: string,\n ) {}\n\n async connect(): Promise<void> {\n if ((await this.unisat.getAccounts()).length === 0) {\n await this.unisat.requestAccounts()\n }\n }\n\n disconnect(): Promise<void> {\n // do nothing\n return Promise.resolve()\n }\n\n async getAddresses(): Promise<UnisatCompatibleWalletAdapterAddresses> {\n const addresses: string[] = await this.unisat.getAccounts()\n\n if (addresses.length === 0) {\n throw new WalletAdapterNotConnectedError(this.walletDisplayName)\n }\n\n const publicKey: string = await this.unisat.getPublicKey()\n\n const _network: \"livenet\" | \"testnet\" = await this.unisat.getNetwork()\n const network = _network === \"livenet\" ? \"mainnet\" : \"testnet\"\n\n if (!hasAny(addresses)) {\n throw new BitcoinWalletAdapterError(\"Request wallet addresses failed\")\n }\n\n const address = addresses[0]\n const addrType = getAddressType(getBitcoinNetwork(network), address)\n // prettier-ignore\n const addressType =\n addrType === \"p2tr\" ? WalletAdapterAddressType.P2TR :\n addrType === \"p2sh\" ? WalletAdapterAddressType.P2SH_P2WPKH :\n addrType === \"p2wpkh\" ? WalletAdapterAddressType.P2WPKH :\n undefined\n\n if (addressType == null) {\n throw new BitcoinWalletAdapterError(\"Please select a SegWit address\")\n }\n\n const scriptPubKey = hex.encode(\n addressToScriptPubKey(getBitcoinNetwork(network), address),\n )\n\n const tapInternalKey =\n addressType !== WalletAdapterAddressType.P2TR\n ? undefined\n : hex.encode(\n getTapInternalKeyOf_P2TR_publicKey(\n getBitcoinNetwork(network),\n hex.decode(publicKey),\n ),\n )\n\n const redeemScript =\n addressType !== WalletAdapterAddressType.P2SH_P2WPKH\n ? undefined\n : hex.encode(\n getRedeemScriptOf_P2SH_P2WPKH_publicKey(\n getBitcoinNetwork(network),\n hex.decode(publicKey),\n ),\n )\n\n return [\n {\n addressType,\n address,\n scriptPubKey,\n redeemScript,\n tapInternalKey,\n publicKey,\n network:\n network === \"mainnet\"\n ? WalletAdapterBitcoinNetwork.MAINNET\n : WalletAdapterBitcoinNetwork.TESTNET,\n purposes: [\n WalletAdapterAddressPurpose.Bitcoin,\n WalletAdapterAddressPurpose.Ordinals,\n WalletAdapterAddressPurpose.BRC20,\n WalletAdapterAddressPurpose.Runes,\n ],\n },\n ]\n }\n\n async signMessage(\n address: string,\n message: string,\n ): Promise<SignMessageResult> {\n const result = await handleRpcError(\n this.unisat.signMessage(message, \"bip322-simple\"),\n )\n\n return {\n result,\n address,\n algorithm: SignMessageAlgorithm.BIP322,\n }\n }\n\n sendBitcoinFeeRateCapability: WalletAdapter[\"sendBitcoinFeeRateCapability\"] =\n \"available\" as const\n async sendBitcoin(\n fromAddress: string,\n receiverAddress: string,\n satoshiAmount: bigint,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const txid = await handleRpcError(\n this.unisat.sendBitcoin(receiverAddress, Number(satoshiAmount), {\n feeRate: options?.feeRate,\n }),\n )\n return { txid }\n }\n\n sendInscriptionFeeRateCapability: WalletAdapter[\"sendInscriptionFeeRateCapability\"] =\n \"available\" as const\n async sendInscription(\n fromAddress: string,\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }> {\n const txid = await handleRpcError(\n this.unisat.sendInscription(receiverAddress, inscriptionId, {\n feeRate: options?.feeRate,\n }),\n )\n return { txid }\n }\n\n async signAndFinalizePsbt(\n psbtHex: string,\n signIndices: [address: string, signIndex: number][],\n ): Promise<{\n signedPsbtHex: string\n }> {\n const addr = await this.getAddresses()\n\n const signedPsbtHex = await handleRpcError(\n this.unisat.signPsbt(psbtHex, {\n autoFinalized: false,\n toSignInputs: signIndices.map(([address, signIndex]) => ({\n index: signIndex,\n address,\n })),\n }),\n )\n\n /**\n * Some version of unisat's signPsbt API does not working well with the autoFinalized option,\n * so we finalize the PSBT manually.\n */\n const tx = btc.Transaction.fromPSBT(hex.decode(signedPsbtHex), {\n allowUnknownInputs: true,\n allowUnknownOutputs: true,\n disableScriptCheck: true,\n allowLegacyWitnessUtxo: true,\n })\n tx.finalize()\n\n return { signedPsbtHex: hex.encode(tx.toPSBT()) }\n }\n\n onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n unsubscribe: () => void\n } {\n const handler = async (): Promise<void> => {\n try {\n const addresses = await this.getAddresses()\n callback({ addresses })\n } catch (error) {\n // Ignore errors from getAddresses (e.g., wallet disconnected)\n console.warn(\n `[${this.walletDisplayName}] Failed to get addresses on change:`,\n error,\n )\n }\n }\n\n // Listen to both account and network changes\n this.unisat.on(\"accountsChanged\", handler)\n this.unisat.on(\"networkChanged\", handler)\n\n return {\n unsubscribe: () => {\n this.unisat.removeListener(\"accountsChanged\", handler)\n this.unisat.removeListener(\"networkChanged\", handler)\n },\n }\n }\n}\n\ninterface UnisatCompatibleProviderAPIThrownError {\n code: number\n message: string\n}\nfunction isUnisatCompatibleProviderAPIThrownError(\n err: any,\n): err is UnisatCompatibleProviderAPIThrownError {\n return err != null && \"code\" in err && \"message\" in err\n}\n\nexport class UnisatCompatibleProviderError extends Error {\n readonly code: number\n constructor(err: UnisatCompatibleProviderAPIThrownError) {\n super(err.message)\n this.code = err.code\n this.cause = err\n }\n}\n\nconst handleRpcError = async <T>(promise: Promise<T>): Promise<T> => {\n try {\n return await promise\n } catch (e: any) {\n if (isUnisatCompatibleProviderAPIThrownError(e)) {\n if (e.code === 4001) {\n throw new UserRejectError()\n }\n throw new UnisatCompatibleProviderError(e)\n }\n throw e\n }\n}\n"],"names":["UnisatCompatibleWalletAdapterImpl","unisat","walletDisplayName","addresses","WalletAdapterNotConnectedError","publicKey","network","hasAny","BitcoinWalletAdapterError","address","addrType","getAddressType","getBitcoinNetwork","addressType","WalletAdapterAddressType","scriptPubKey","hex","addressToScriptPubKey","tapInternalKey","getTapInternalKeyOf_P2TR_publicKey","redeemScript","getRedeemScriptOf_P2SH_P2WPKH_publicKey","WalletAdapterBitcoinNetwork","WalletAdapterAddressPurpose","message","handleRpcError","SignMessageAlgorithm","fromAddress","receiverAddress","satoshiAmount","options","inscriptionId","psbtHex","signIndices","signedPsbtHex","signIndex","tx","btc.Transaction","callback","handler","error","isUnisatCompatibleProviderAPIThrownError","err","UnisatCompatibleProviderError","promise","UserRejectError"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { U as a } from "./UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs";
2
+ class l extends a {
3
+ constructor(e) {
4
+ super(e, "UniSat");
5
+ }
6
+ sendBitcoinFeeRateCapability = "required";
7
+ // The default fee rate of unisat is not aligned with mempool.space, so
8
+ // sometimes the tx will be rejected by mempool due to uneligible network fee.
9
+ sendInscriptionFeeRateCapability = "unavailable";
10
+ }
11
+ export {
12
+ l as UnisatWalletAdapterImpl
13
+ };
14
+ //# sourceMappingURL=UnisatWalletAdapter.impl-CJB22se8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnisatWalletAdapter.impl-CJB22se8.mjs","sources":["../src/adapters/UnisatWalletAdapter.impl.ts"],"sourcesContent":["import {\n UnisatCompatibleProviderAPI,\n UnisatCompatibleWalletAdapterImpl,\n} from \"../utils/UnisatCompatibleWalletAdapterImpl\"\nimport { WalletAdapter } from \"../WalletAdapters.types\"\n\n/**\n * Derivation path (Native SegWit) (BIP-84): m/84'/0'/0'/0/address_index\n * Derivation path (Nested SegWit) (BIP-49): m/49'/0'/0'/0/address_index\n * Derivation path (Taproot) (BIP-86): m/86'/0'/0'/0/address_index\n * Derivation path (Taproot) (BIP-44): m/44'/0'/0'/0/address_index\n * Derivation path (Legacy) (BIP-44): m/44'/0'/0'/0/address_index\n */\nexport class UnisatWalletAdapterImpl\n extends UnisatCompatibleWalletAdapterImpl\n implements WalletAdapter\n{\n constructor(provider: UnisatCompatibleProviderAPI) {\n /**\n * UniSat Provider API:\n *\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet\n */\n super(provider, \"UniSat\")\n }\n\n sendBitcoinFeeRateCapability = \"required\" as const\n\n // The default fee rate of unisat is not aligned with mempool.space, so\n // sometimes the tx will be rejected by mempool due to uneligible network fee.\n sendInscriptionFeeRateCapability = \"unavailable\" as const\n}\n"],"names":["UnisatWalletAdapterImpl","UnisatCompatibleWalletAdapterImpl","provider"],"mappings":";AAaO,MAAMA,UACHC,EAEV;AAAA,EACE,YAAYC,GAAuC;AAMjD,UAAMA,GAAU,QAAQ;AAAA,EAC1B;AAAA,EAEA,+BAA+B;AAAA;AAAA;AAAA,EAI/B,mCAAmC;AACrC;"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js");class a extends t.UnisatCompatibleWalletAdapterImpl{constructor(e){super(e,"UniSat")}sendBitcoinFeeRateCapability="required";sendInscriptionFeeRateCapability="unavailable"}exports.UnisatWalletAdapterImpl=a;
2
+ //# sourceMappingURL=UnisatWalletAdapter.impl-EISvxdpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UnisatWalletAdapter.impl-EISvxdpc.js","sources":["../src/adapters/UnisatWalletAdapter.impl.ts"],"sourcesContent":["import {\n UnisatCompatibleProviderAPI,\n UnisatCompatibleWalletAdapterImpl,\n} from \"../utils/UnisatCompatibleWalletAdapterImpl\"\nimport { WalletAdapter } from \"../WalletAdapters.types\"\n\n/**\n * Derivation path (Native SegWit) (BIP-84): m/84'/0'/0'/0/address_index\n * Derivation path (Nested SegWit) (BIP-49): m/49'/0'/0'/0/address_index\n * Derivation path (Taproot) (BIP-86): m/86'/0'/0'/0/address_index\n * Derivation path (Taproot) (BIP-44): m/44'/0'/0'/0/address_index\n * Derivation path (Legacy) (BIP-44): m/44'/0'/0'/0/address_index\n */\nexport class UnisatWalletAdapterImpl\n extends UnisatCompatibleWalletAdapterImpl\n implements WalletAdapter\n{\n constructor(provider: UnisatCompatibleProviderAPI) {\n /**\n * UniSat Provider API:\n *\n * https://docs.unisat.io/dev/unisat-developer-service/unisat-wallet\n */\n super(provider, \"UniSat\")\n }\n\n sendBitcoinFeeRateCapability = \"required\" as const\n\n // The default fee rate of unisat is not aligned with mempool.space, so\n // sometimes the tx will be rejected by mempool due to uneligible network fee.\n sendInscriptionFeeRateCapability = \"unavailable\" as const\n}\n"],"names":["UnisatWalletAdapterImpl","UnisatCompatibleWalletAdapterImpl","provider"],"mappings":"mJAaO,MAAMA,UACHC,EAAAA,iCAEV,CACE,YAAYC,EAAuC,CAMjD,MAAMA,EAAU,QAAQ,CAC1B,CAEA,6BAA+B,WAI/B,iCAAmC,aACrC"}
@@ -0,0 +1,32 @@
1
+ class s extends Error {
2
+ constructor(n, t) {
3
+ super(n, t), this.name = "BitcoinWalletAdapterError";
4
+ }
5
+ }
6
+ class u extends s {
7
+ constructor(n, t) {
8
+ super(n, t), this.name = "UserRejectError";
9
+ }
10
+ }
11
+ var o = /* @__PURE__ */ ((r) => (r.MAINNET = "mainnet", r.TESTNET = "testnet", r.UNKNOWN = "unknown", r))(o || {}), a = /* @__PURE__ */ ((r) => (r.Bitcoin = "bitcoin", r.Ordinals = "ordinals", r.BRC20 = "brc20", r.Runes = "runes", r))(a || {}), c = /* @__PURE__ */ ((r) => (r.P2SH_P2WPKH = "p2sh-p2wpkh", r.P2WPKH = "p2wpkh", r.P2TR = "p2tr", r.P2PKH = "p2pkh", r))(c || {}), e = /* @__PURE__ */ ((r) => (r.ECDSA = "ECDSA", r.BIP322 = "BIP322", r))(e || {});
12
+ class E extends Error {
13
+ constructor(n) {
14
+ super(n), this.name = "WalletAdapterErrorBase";
15
+ }
16
+ }
17
+ class i extends E {
18
+ constructor(n, t) {
19
+ super(t ?? `Wallet ${n} is not connected`), this.name = "WalletAdapterNotConnectedError";
20
+ }
21
+ }
22
+ export {
23
+ s as B,
24
+ e as S,
25
+ u as U,
26
+ o as W,
27
+ a,
28
+ c as b,
29
+ E as c,
30
+ i as d
31
+ };
32
+ //# sourceMappingURL=WalletAdapters.types-CnvOqHFH.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletAdapters.types-CnvOqHFH.mjs","sources":["../src/utils/error.ts","../src/WalletAdapters.types.ts"],"sourcesContent":["export class BitcoinWalletAdapterError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options)\n this.name = \"BitcoinWalletAdapterError\"\n }\n}\n\nexport class UserRejectError extends BitcoinWalletAdapterError {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options)\n this.name = \"UserRejectError\"\n }\n}\n","import { Availability } from \"./utils/createAdapterAvailability\"\n\nexport enum WalletAdapterBitcoinNetwork {\n MAINNET = \"mainnet\",\n TESTNET = \"testnet\",\n UNKNOWN = \"unknown\",\n}\n\nexport enum WalletAdapterAddressPurpose {\n Bitcoin = \"bitcoin\",\n Ordinals = \"ordinals\",\n BRC20 = \"brc20\",\n Runes = \"runes\",\n}\n\n// prettier-ignore\nexport enum WalletAdapterAddressType {\n P2SH_P2WPKH = \"p2sh-p2wpkh\", // aka Nested SegWit\n P2WPKH = \"p2wpkh\", // aka Native SegWit\n P2TR = \"p2tr\", // aka Taproot\n P2PKH = \"p2pkh\", // aka Legacy\n}\n\nexport enum SignMessageAlgorithm {\n ECDSA = \"ECDSA\",\n BIP322 = \"BIP322\",\n}\nexport type SignMessageResult =\n | SignMessageResult.ECDSA\n | SignMessageResult.BIP322\nexport namespace SignMessageResult {\n export interface ECDSA {\n algorithm: SignMessageAlgorithm.ECDSA\n result: string\n address: string\n publicKey: string\n }\n\n export interface BIP322 {\n algorithm: SignMessageAlgorithm.BIP322\n result: string\n address: string\n }\n}\n\nexport interface WalletAdapterAddressBasic {\n addressType: WalletAdapterAddressType\n address: string\n scriptPubKey: string\n}\n\nexport interface WalletAdapterAddressWithPublicKey {\n /**\n * Some wallet may won't give us the public key of the address, like Xverse\n */\n publicKey: string\n}\n\nexport interface WalletAdapterAddressWithRedeemScript {\n /**\n * Some address is SH address, which requires redeem script to spend, like Xverse\n */\n redeemScript: string\n}\n\nexport interface WalletAdapterAddressWithTapInternalKey {\n /**\n * Some address is taproot address, which requires taproot internal key to spend.\n */\n tapInternalKey: string\n}\n\nexport interface WalletAdapterAddress extends Partial<\n WalletAdapterAddressWithPublicKey &\n WalletAdapterAddressWithRedeemScript &\n WalletAdapterAddressWithTapInternalKey\n> {\n addressType: WalletAdapterAddressType\n address: string\n scriptPubKey: string\n network: WalletAdapterBitcoinNetwork\n purposes: WalletAdapterAddressPurpose[]\n}\n\nexport interface WalletAdapterMetadata {\n name: string\n iconUrl: Promise<string>\n websiteUrl: string\n downloadUrl: string\n}\n\nexport interface WalletAdapterStatic<T extends WalletAdapter> {\n adapterId: string\n metadata: WalletAdapterMetadata\n getAdapter(): Availability<T>\n}\n\nexport type WalletAdapter_onAddressesChanged_callback = (data: {\n addresses: WalletAdapterAddress[]\n}) => void\n\nexport interface WalletAdapter {\n connect(): Promise<void>\n\n disconnect(): Promise<void>\n\n getAddresses(): Promise<WalletAdapterAddress[]>\n onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n unsubscribe: () => void\n }\n\n signMessage(address: string, message: string): Promise<SignMessageResult>\n\n readonly sendBitcoinFeeRateCapability:\n | \"unavailable\"\n | \"available\"\n | \"required\"\n sendBitcoin(\n fromAddress: string,\n receiverAddress: string,\n satoshiAmount: bigint,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }>\n\n readonly sendInscriptionFeeRateCapability:\n | \"unavailable\"\n | \"available\"\n | \"required\"\n sendInscription?(\n fromAddress: string,\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }>\n\n signAndFinalizePsbt(\n psbtHex: string,\n signIndices: [address: string, signIndex: number][],\n ): Promise<{ signedPsbtHex: string }>\n}\n\nexport class WalletAdapterErrorBase extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"WalletAdapterErrorBase\"\n }\n}\n\nexport class WalletAdapterNotConnectedError extends WalletAdapterErrorBase {\n constructor(walletName: string, message?: string) {\n super(message ?? `Wallet ${walletName} is not connected`)\n this.name = \"WalletAdapterNotConnectedError\"\n }\n}\n"],"names":["BitcoinWalletAdapterError","message","options","UserRejectError","WalletAdapterBitcoinNetwork","WalletAdapterAddressPurpose","WalletAdapterAddressType","SignMessageAlgorithm","WalletAdapterErrorBase","WalletAdapterNotConnectedError","walletName"],"mappings":"AAAO,MAAMA,UAAkC,MAAM;AAAA,EACnD,YAAYC,GAAkBC,GAAwB;AACpD,UAAMD,GAASC,CAAO,GACtB,KAAK,OAAO;AAAA,EACd;AACF;AAEO,MAAMC,UAAwBH,EAA0B;AAAA,EAC7D,YAAYC,GAAkBC,GAAwB;AACpD,UAAMD,GAASC,CAAO,GACtB,KAAK,OAAO;AAAA,EACd;AACF;ACVO,IAAKE,sBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,UAAU,WACVA,EAAA,UAAU,WAHAA,IAAAA,KAAA,CAAA,CAAA,GAMAC,sBAAAA,OACVA,EAAA,UAAU,WACVA,EAAA,WAAW,YACXA,EAAA,QAAQ,SACRA,EAAA,QAAQ,SAJEA,IAAAA,KAAA,CAAA,CAAA,GAQAC,sBAAAA,OACVA,EAAA,cAAc,eACdA,EAAA,SAAS,UACTA,EAAA,OAAO,QACPA,EAAA,QAAQ,SAJEA,IAAAA,KAAA,CAAA,CAAA,GAOAC,sBAAAA,OACVA,EAAA,QAAQ,SACRA,EAAA,SAAS,UAFCA,IAAAA,KAAA,CAAA,CAAA;AAsHL,MAAMC,UAA+B,MAAM;AAAA,EAChD,YAAYP,GAAiB;AAC3B,UAAMA,CAAO,GACb,KAAK,OAAO;AAAA,EACd;AACF;AAEO,MAAMQ,UAAuCD,EAAuB;AAAA,EACzE,YAAYE,GAAoBT,GAAkB;AAChD,UAAMA,KAAW,UAAUS,CAAU,mBAAmB,GACxD,KAAK,OAAO;AAAA,EACd;AACF;"}
@@ -0,0 +1,2 @@
1
+ "use strict";class n extends Error{constructor(t,e){super(t,e),this.name="BitcoinWalletAdapterError"}}class i extends n{constructor(t,e){super(t,e),this.name="UserRejectError"}}var o=(r=>(r.MAINNET="mainnet",r.TESTNET="testnet",r.UNKNOWN="unknown",r))(o||{}),s=(r=>(r.Bitcoin="bitcoin",r.Ordinals="ordinals",r.BRC20="brc20",r.Runes="runes",r))(s||{}),a=(r=>(r.P2SH_P2WPKH="p2sh-p2wpkh",r.P2WPKH="p2wpkh",r.P2TR="p2tr",r.P2PKH="p2pkh",r))(a||{}),c=(r=>(r.ECDSA="ECDSA",r.BIP322="BIP322",r))(c||{});class E extends Error{constructor(t){super(t),this.name="WalletAdapterErrorBase"}}class l extends E{constructor(t,e){super(e??`Wallet ${t} is not connected`),this.name="WalletAdapterNotConnectedError"}}exports.BitcoinWalletAdapterError=n;exports.SignMessageAlgorithm=c;exports.UserRejectError=i;exports.WalletAdapterAddressPurpose=s;exports.WalletAdapterAddressType=a;exports.WalletAdapterBitcoinNetwork=o;exports.WalletAdapterErrorBase=E;exports.WalletAdapterNotConnectedError=l;
2
+ //# sourceMappingURL=WalletAdapters.types-De_x1lzr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletAdapters.types-De_x1lzr.js","sources":["../src/utils/error.ts","../src/WalletAdapters.types.ts"],"sourcesContent":["export class BitcoinWalletAdapterError extends Error {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options)\n this.name = \"BitcoinWalletAdapterError\"\n }\n}\n\nexport class UserRejectError extends BitcoinWalletAdapterError {\n constructor(message?: string, options?: ErrorOptions) {\n super(message, options)\n this.name = \"UserRejectError\"\n }\n}\n","import { Availability } from \"./utils/createAdapterAvailability\"\n\nexport enum WalletAdapterBitcoinNetwork {\n MAINNET = \"mainnet\",\n TESTNET = \"testnet\",\n UNKNOWN = \"unknown\",\n}\n\nexport enum WalletAdapterAddressPurpose {\n Bitcoin = \"bitcoin\",\n Ordinals = \"ordinals\",\n BRC20 = \"brc20\",\n Runes = \"runes\",\n}\n\n// prettier-ignore\nexport enum WalletAdapterAddressType {\n P2SH_P2WPKH = \"p2sh-p2wpkh\", // aka Nested SegWit\n P2WPKH = \"p2wpkh\", // aka Native SegWit\n P2TR = \"p2tr\", // aka Taproot\n P2PKH = \"p2pkh\", // aka Legacy\n}\n\nexport enum SignMessageAlgorithm {\n ECDSA = \"ECDSA\",\n BIP322 = \"BIP322\",\n}\nexport type SignMessageResult =\n | SignMessageResult.ECDSA\n | SignMessageResult.BIP322\nexport namespace SignMessageResult {\n export interface ECDSA {\n algorithm: SignMessageAlgorithm.ECDSA\n result: string\n address: string\n publicKey: string\n }\n\n export interface BIP322 {\n algorithm: SignMessageAlgorithm.BIP322\n result: string\n address: string\n }\n}\n\nexport interface WalletAdapterAddressBasic {\n addressType: WalletAdapterAddressType\n address: string\n scriptPubKey: string\n}\n\nexport interface WalletAdapterAddressWithPublicKey {\n /**\n * Some wallet may won't give us the public key of the address, like Xverse\n */\n publicKey: string\n}\n\nexport interface WalletAdapterAddressWithRedeemScript {\n /**\n * Some address is SH address, which requires redeem script to spend, like Xverse\n */\n redeemScript: string\n}\n\nexport interface WalletAdapterAddressWithTapInternalKey {\n /**\n * Some address is taproot address, which requires taproot internal key to spend.\n */\n tapInternalKey: string\n}\n\nexport interface WalletAdapterAddress extends Partial<\n WalletAdapterAddressWithPublicKey &\n WalletAdapterAddressWithRedeemScript &\n WalletAdapterAddressWithTapInternalKey\n> {\n addressType: WalletAdapterAddressType\n address: string\n scriptPubKey: string\n network: WalletAdapterBitcoinNetwork\n purposes: WalletAdapterAddressPurpose[]\n}\n\nexport interface WalletAdapterMetadata {\n name: string\n iconUrl: Promise<string>\n websiteUrl: string\n downloadUrl: string\n}\n\nexport interface WalletAdapterStatic<T extends WalletAdapter> {\n adapterId: string\n metadata: WalletAdapterMetadata\n getAdapter(): Availability<T>\n}\n\nexport type WalletAdapter_onAddressesChanged_callback = (data: {\n addresses: WalletAdapterAddress[]\n}) => void\n\nexport interface WalletAdapter {\n connect(): Promise<void>\n\n disconnect(): Promise<void>\n\n getAddresses(): Promise<WalletAdapterAddress[]>\n onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n unsubscribe: () => void\n }\n\n signMessage(address: string, message: string): Promise<SignMessageResult>\n\n readonly sendBitcoinFeeRateCapability:\n | \"unavailable\"\n | \"available\"\n | \"required\"\n sendBitcoin(\n fromAddress: string,\n receiverAddress: string,\n satoshiAmount: bigint,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }>\n\n readonly sendInscriptionFeeRateCapability:\n | \"unavailable\"\n | \"available\"\n | \"required\"\n sendInscription?(\n fromAddress: string,\n receiverAddress: string,\n inscriptionId: string,\n options?: { feeRate?: number },\n ): Promise<{ txid: string }>\n\n signAndFinalizePsbt(\n psbtHex: string,\n signIndices: [address: string, signIndex: number][],\n ): Promise<{ signedPsbtHex: string }>\n}\n\nexport class WalletAdapterErrorBase extends Error {\n constructor(message: string) {\n super(message)\n this.name = \"WalletAdapterErrorBase\"\n }\n}\n\nexport class WalletAdapterNotConnectedError extends WalletAdapterErrorBase {\n constructor(walletName: string, message?: string) {\n super(message ?? `Wallet ${walletName} is not connected`)\n this.name = \"WalletAdapterNotConnectedError\"\n }\n}\n"],"names":["BitcoinWalletAdapterError","message","options","UserRejectError","WalletAdapterBitcoinNetwork","WalletAdapterAddressPurpose","WalletAdapterAddressType","SignMessageAlgorithm","WalletAdapterErrorBase","WalletAdapterNotConnectedError","walletName"],"mappings":"aAAO,MAAMA,UAAkC,KAAM,CACnD,YAAYC,EAAkBC,EAAwB,CACpD,MAAMD,EAASC,CAAO,EACtB,KAAK,KAAO,2BACd,CACF,CAEO,MAAMC,UAAwBH,CAA0B,CAC7D,YAAYC,EAAkBC,EAAwB,CACpD,MAAMD,EAASC,CAAO,EACtB,KAAK,KAAO,iBACd,CACF,CCVO,IAAKE,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UACVA,EAAA,QAAU,UAHAA,IAAAA,GAAA,CAAA,CAAA,EAMAC,GAAAA,IACVA,EAAA,QAAU,UACVA,EAAA,SAAW,WACXA,EAAA,MAAQ,QACRA,EAAA,MAAQ,QAJEA,IAAAA,GAAA,CAAA,CAAA,EAQAC,GAAAA,IACVA,EAAA,YAAc,cACdA,EAAA,OAAS,SACTA,EAAA,KAAO,OACPA,EAAA,MAAQ,QAJEA,IAAAA,GAAA,CAAA,CAAA,EAOAC,GAAAA,IACVA,EAAA,MAAQ,QACRA,EAAA,OAAS,SAFCA,IAAAA,GAAA,CAAA,CAAA,EAsHL,MAAMC,UAA+B,KAAM,CAChD,YAAYP,EAAiB,CAC3B,MAAMA,CAAO,EACb,KAAK,KAAO,wBACd,CACF,CAEO,MAAMQ,UAAuCD,CAAuB,CACzE,YAAYE,EAAoBT,EAAkB,CAChD,MAAMA,GAAW,UAAUS,CAAU,mBAAmB,EACxD,KAAK,KAAO,gCACd,CACF"}
@@ -0,0 +1,110 @@
1
+ import { Availability } from './utils/createAdapterAvailability';
2
+ export declare enum WalletAdapterBitcoinNetwork {
3
+ MAINNET = "mainnet",
4
+ TESTNET = "testnet",
5
+ UNKNOWN = "unknown"
6
+ }
7
+ export declare enum WalletAdapterAddressPurpose {
8
+ Bitcoin = "bitcoin",
9
+ Ordinals = "ordinals",
10
+ BRC20 = "brc20",
11
+ Runes = "runes"
12
+ }
13
+ export declare enum WalletAdapterAddressType {
14
+ P2SH_P2WPKH = "p2sh-p2wpkh",// aka Nested SegWit
15
+ P2WPKH = "p2wpkh",// aka Native SegWit
16
+ P2TR = "p2tr",// aka Taproot
17
+ P2PKH = "p2pkh"
18
+ }
19
+ export declare enum SignMessageAlgorithm {
20
+ ECDSA = "ECDSA",
21
+ BIP322 = "BIP322"
22
+ }
23
+ export type SignMessageResult = SignMessageResult.ECDSA | SignMessageResult.BIP322;
24
+ export declare namespace SignMessageResult {
25
+ interface ECDSA {
26
+ algorithm: SignMessageAlgorithm.ECDSA;
27
+ result: string;
28
+ address: string;
29
+ publicKey: string;
30
+ }
31
+ interface BIP322 {
32
+ algorithm: SignMessageAlgorithm.BIP322;
33
+ result: string;
34
+ address: string;
35
+ }
36
+ }
37
+ export interface WalletAdapterAddressBasic {
38
+ addressType: WalletAdapterAddressType;
39
+ address: string;
40
+ scriptPubKey: string;
41
+ }
42
+ export interface WalletAdapterAddressWithPublicKey {
43
+ /**
44
+ * Some wallet may won't give us the public key of the address, like Xverse
45
+ */
46
+ publicKey: string;
47
+ }
48
+ export interface WalletAdapterAddressWithRedeemScript {
49
+ /**
50
+ * Some address is SH address, which requires redeem script to spend, like Xverse
51
+ */
52
+ redeemScript: string;
53
+ }
54
+ export interface WalletAdapterAddressWithTapInternalKey {
55
+ /**
56
+ * Some address is taproot address, which requires taproot internal key to spend.
57
+ */
58
+ tapInternalKey: string;
59
+ }
60
+ export interface WalletAdapterAddress extends Partial<WalletAdapterAddressWithPublicKey & WalletAdapterAddressWithRedeemScript & WalletAdapterAddressWithTapInternalKey> {
61
+ addressType: WalletAdapterAddressType;
62
+ address: string;
63
+ scriptPubKey: string;
64
+ network: WalletAdapterBitcoinNetwork;
65
+ purposes: WalletAdapterAddressPurpose[];
66
+ }
67
+ export interface WalletAdapterMetadata {
68
+ name: string;
69
+ iconUrl: Promise<string>;
70
+ websiteUrl: string;
71
+ downloadUrl: string;
72
+ }
73
+ export interface WalletAdapterStatic<T extends WalletAdapter> {
74
+ adapterId: string;
75
+ metadata: WalletAdapterMetadata;
76
+ getAdapter(): Availability<T>;
77
+ }
78
+ export type WalletAdapter_onAddressesChanged_callback = (data: {
79
+ addresses: WalletAdapterAddress[];
80
+ }) => void;
81
+ export interface WalletAdapter {
82
+ connect(): Promise<void>;
83
+ disconnect(): Promise<void>;
84
+ getAddresses(): Promise<WalletAdapterAddress[]>;
85
+ onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {
86
+ unsubscribe: () => void;
87
+ };
88
+ signMessage(address: string, message: string): Promise<SignMessageResult>;
89
+ readonly sendBitcoinFeeRateCapability: "unavailable" | "available" | "required";
90
+ sendBitcoin(fromAddress: string, receiverAddress: string, satoshiAmount: bigint, options?: {
91
+ feeRate?: number;
92
+ }): Promise<{
93
+ txid: string;
94
+ }>;
95
+ readonly sendInscriptionFeeRateCapability: "unavailable" | "available" | "required";
96
+ sendInscription?(fromAddress: string, receiverAddress: string, inscriptionId: string, options?: {
97
+ feeRate?: number;
98
+ }): Promise<{
99
+ txid: string;
100
+ }>;
101
+ signAndFinalizePsbt(psbtHex: string, signIndices: [address: string, signIndex: number][]): Promise<{
102
+ signedPsbtHex: string;
103
+ }>;
104
+ }
105
+ export declare class WalletAdapterErrorBase extends Error {
106
+ constructor(message: string);
107
+ }
108
+ export declare class WalletAdapterNotConnectedError extends WalletAdapterErrorBase {
109
+ constructor(walletName: string, message?: string);
110
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";const o=require("./index-Zx0KcpYx.js"),c=require("./WalletAdapters.types-De_x1lzr.js"),A=require("./transaction-CzdnbXSo.js");class P{walletDisplayName;getProviderId;parseAddresses;constructor(e){this.walletDisplayName=e.walletDisplayName,this.getProviderId=e.getProviderId,this.parseAddresses=e.parseAddresses}async getSdk(){return Promise.resolve().then(()=>require("./index-CaV3F1Nm.js"))}async connect(){await(await this.getSdk()).request("wallet_connect",null)}async disconnect(){return Promise.resolve()}async getAddresses(){const e=await this.getSdk(),t=await l(e.request("getAddresses",{purposes:[e.AddressPurpose.Ordinals,e.AddressPurpose.Payment]},await this.getProviderId()));if(t==null)throw new c.WalletAdapterNotConnectedError(this.walletDisplayName);return this.parseAddresses({sdk:e,network:t.network.bitcoin.name,addresses:t.addresses})}async signMessage(e,t){const a=await this.getSdk();return{result:(await l(a.request("signMessage",{address:e,message:t,protocol:a.MessageSigningProtocols.BIP322},await this.getProviderId()))).signature,address:e,algorithm:c.SignMessageAlgorithm.BIP322}}sendBitcoinFeeRateCapability="unavailable";async sendBitcoin(e,t,a){if((await this.getAddresses()).find(r=>r.purposes.includes(c.WalletAdapterAddressPurpose.Bitcoin))==null)throw new u({code:-32602,message:"Bitcoin address not found"});const d=await this.getSdk();return await l(d.request("sendTransfer",{recipients:[{address:t,amount:Number(a)}]},await this.getProviderId()))}sendInscriptionFeeRateCapability="unavailable";async signAndFinalizePsbt(e,t){const a=await this.getSdk(),n=o.base64.encode(o.hex.decode(e)),d=await l(a.request("signPsbt",{psbt:n,signInputs:t.reduce((i,[g,h])=>(i[g]=[h],i),{}),broadcast:!1},await this.getProviderId())),r=A.Transaction.fromPSBT(o.base64.decode(d.psbt),{allowUnknownInputs:!0,allowUnknownOutputs:!0,disableScriptCheck:!0,allowLegacyWitnessUtxo:!0});return r.finalize(),{signedPsbtHex:o.hex.encode(r.toPSBT())}}onAddressesChanged(e){const t=[];return(async()=>{const a=await this.getSdk(),n=async()=>{try{const i=await this.getAddresses();e({addresses:i})}catch(i){console.warn(`[${this.walletDisplayName}] Failed to get addresses on change:`,i)}},d=a.addListener("accountChange",n),r=a.addListener("networkChange",n);t.push(d,r)})(),{unsubscribe:()=>{t.forEach(a=>a())}}}}var w=(s=>(s[s.PARSE_ERROR=-32700]="PARSE_ERROR",s[s.INVALID_REQUEST=-32600]="INVALID_REQUEST",s[s.METHOD_NOT_FOUND=-32601]="METHOD_NOT_FOUND",s[s.INVALID_PARAMS=-32602]="INVALID_PARAMS",s[s.INTERNAL_ERROR=-32603]="INTERNAL_ERROR",s[s.USER_REJECTION=-32e3]="USER_REJECTION",s[s.METHOD_NOT_SUPPORTED=-32001]="METHOD_NOT_SUPPORTED",s[s.ACCESS_DENIED=-32002]="ACCESS_DENIED",s))(w||{});function p(s){return s!=null&&"code"in s&&"message"in s}class u extends Error{code;constructor(e){super(e.message),this.code=e.code,this.cause=e}}const l=async s=>{try{const e=await s;if(e.status==="error")throw e.error;return e.result}catch(e){throw p(e)?e.code===-32e3?new c.UserRejectError:new u(e):e}};exports.XverseCompatibleProviderError=u;exports.XverseCompatibleWalletAdapterImpl=P;exports.XverseRpcErrorCode=w;
2
+ //# sourceMappingURL=XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js","sources":["../src/utils/XverseCompatibleWalletAdapterImpl.ts"],"sourcesContent":["import { base64, hex } from \"@scure/base\"\nimport * as btc from \"@scure/btc-signer\"\nimport { UserRejectError } from \"../utils/error\"\nimport {\n SignMessageAlgorithm,\n SignMessageResult,\n WalletAdapter,\n WalletAdapter_onAddressesChanged_callback,\n WalletAdapterAddress,\n WalletAdapterAddressPurpose,\n WalletAdapterNotConnectedError,\n} from \"../WalletAdapters.types\"\n\nexport type XverseCompatibleWalletAdapterGetProviderIdFn = () => Promise<string>\n\nexport type XverseCompatibleWalletAdapterParsedAddressesFn = (info: {\n sdk: typeof import(\"sats-connect\")\n network: import(\"sats-connect\").BitcoinNetworkType\n addresses: import(\"sats-connect\").Address[]\n}) => Promise<XverseCompatibleWalletAdapterImplAddress[]>\n\nexport type XverseCompatibleWalletAdapterImplAddress = WalletAdapterAddress & {\n publicKey: string\n}\n\nexport class XverseCompatibleWalletAdapterImpl implements WalletAdapter {\n protected readonly walletDisplayName: string\n protected readonly getProviderId: XverseCompatibleWalletAdapterGetProviderIdFn\n protected readonly parseAddresses: XverseCompatibleWalletAdapterParsedAddressesFn\n\n constructor(info: {\n walletDisplayName: string\n getProviderId: XverseCompatibleWalletAdapterGetProviderIdFn\n parseAddresses: XverseCompatibleWalletAdapterParsedAddressesFn\n }) {\n this.walletDisplayName = info.walletDisplayName\n this.getProviderId = info.getProviderId\n this.parseAddresses = info.parseAddresses\n }\n\n private async getSdk(): Promise<typeof import(\"sats-connect\")> {\n return import(\"sats-connect\")\n }\n\n async connect(): Promise<void> {\n await (await this.getSdk()).request(\"wallet_connect\", null)\n }\n\n async disconnect(): Promise<void> {\n return Promise.resolve()\n }\n\n async getAddresses(): Promise<XverseCompatibleWalletAdapterImplAddress[]> {\n const sdk = await this.getSdk()\n\n const resp = await handleRpcError(\n sdk.request(\n \"getAddresses\",\n {\n purposes: [sdk.AddressPurpose.Ordinals, sdk.AddressPurpose.Payment],\n },\n await this.getProviderId(),\n ),\n )\n\n if (resp == null) {\n throw new WalletAdapterNotConnectedError(this.walletDisplayName)\n }\n\n return this.parseAddresses({\n sdk,\n network: resp.network.bitcoin.name,\n addresses: resp.addresses,\n })\n }\n\n async signMessage(\n address: string,\n message: string,\n ): Promise<SignMessageResult> {\n const sdk = await this.getSdk()\n\n const result = await handleRpcError(\n sdk.request(\n \"signMessage\",\n {\n address,\n message,\n protocol: sdk.MessageSigningProtocols.BIP322,\n },\n await this.getProviderId(),\n ),\n )\n\n return {\n result: result.signature,\n address,\n algorithm: SignMessageAlgorithm.BIP322,\n }\n }\n\n sendBitcoinFeeRateCapability = \"unavailable\" as const\n async sendBitcoin(\n fromAddress: string,\n receiverAddress: string,\n satoshiAmount: bigint,\n ): Promise<{ txid: string }> {\n const senderAddress = (await this.getAddresses()).find(a =>\n a.purposes.includes(WalletAdapterAddressPurpose.Bitcoin),\n )\n if (senderAddress == null) {\n throw new XverseCompatibleProviderError({\n code: XverseRpcErrorCode.INVALID_PARAMS,\n message: \"Bitcoin address not found\",\n })\n }\n\n const sdk = await this.getSdk()\n\n return await handleRpcError(\n sdk.request(\n \"sendTransfer\",\n {\n recipients: [\n {\n address: receiverAddress,\n amount: Number(satoshiAmount),\n },\n ],\n },\n await this.getProviderId(),\n ),\n )\n }\n\n sendInscriptionFeeRateCapability = \"unavailable\" as const\n\n async signAndFinalizePsbt(\n psbtHex: string,\n signIndices: [address: string, signIndex: number][],\n ): Promise<{\n signedPsbtHex: string\n }> {\n const sdk = await this.getSdk()\n\n const psbtBase64 = base64.encode(hex.decode(psbtHex))\n\n const result = await handleRpcError(\n sdk.request(\n \"signPsbt\",\n {\n psbt: psbtBase64,\n signInputs: signIndices.reduce(\n (acc, [address, signIndex]) => {\n acc[address] = [signIndex]\n return acc\n },\n {} as Record<string, number[]>,\n ),\n broadcast: false,\n },\n await this.getProviderId(),\n ),\n )\n\n const tx = btc.Transaction.fromPSBT(base64.decode(result.psbt), {\n allowUnknownInputs: true,\n allowUnknownOutputs: true,\n disableScriptCheck: true,\n allowLegacyWitnessUtxo: true,\n })\n tx.finalize()\n\n return { signedPsbtHex: hex.encode(tx.toPSBT()) }\n }\n\n onAddressesChanged(callback: WalletAdapter_onAddressesChanged_callback): {\n unsubscribe: () => void\n } {\n // Xverse uses sats-connect Wallet.addListener for events\n // https://docs.xverse.app/sats-connect/xverse-wallet-events\n const removeListeners: Array<() => void> = []\n\n void (async () => {\n const sdk = await this.getSdk()\n\n const handler = async (): Promise<void> => {\n try {\n const addresses = await this.getAddresses()\n callback({ addresses })\n } catch (error) {\n console.warn(\n `[${this.walletDisplayName}] Failed to get addresses on change:`,\n error,\n )\n }\n }\n\n // Listen to account and network changes\n const removeAccountListener = sdk.addListener(\"accountChange\", handler)\n const removeNetworkListener = sdk.addListener(\"networkChange\", handler)\n\n removeListeners.push(removeAccountListener, removeNetworkListener)\n })()\n\n return {\n unsubscribe: () => {\n removeListeners.forEach(remove => remove())\n },\n }\n }\n}\n\nexport enum XverseRpcErrorCode {\n /**\n * Parse error Invalid JSON\n **/\n PARSE_ERROR = -32700,\n /**\n * The JSON sent is not a valid Request object.\n **/\n INVALID_REQUEST = -32600,\n /**\n * The method does not exist/is not available.\n **/\n METHOD_NOT_FOUND = -32601,\n /**\n * Invalid method parameter(s).\n */\n INVALID_PARAMS = -32602,\n /**\n * Internal JSON-RPC error.\n * This is a generic error, used when the server encounters an error in performing the request.\n **/\n INTERNAL_ERROR = -32603,\n /**\n * user rejected/canceled the request\n */\n USER_REJECTION = -32000,\n /**\n * method is not supported for the address provided\n */\n METHOD_NOT_SUPPORTED = -32001,\n /**\n * The client does not have permission to access the requested resource.\n */\n ACCESS_DENIED = -32002,\n}\nexport interface XverseCompatibleProviderAPIThrownError {\n code: XverseRpcErrorCode\n message: string\n}\nexport function isXverseCompatibleProviderAPIThrownError(\n err: any,\n): err is XverseCompatibleProviderAPIThrownError {\n return err != null && \"code\" in err && \"message\" in err\n}\n\nexport class XverseCompatibleProviderError extends Error {\n readonly code: number\n constructor(err: XverseCompatibleProviderAPIThrownError) {\n super(err.message)\n this.code = err.code\n this.cause = err\n }\n}\n\nconst handleRpcError = async <T>(\n promise: Promise<\n { status: \"success\"; result: T } | { status: \"error\"; error: unknown }\n >,\n): Promise<T> => {\n try {\n const res = await promise\n if (res.status === \"error\") {\n throw res.error\n }\n return res.result\n } catch (e: any) {\n if (isXverseCompatibleProviderAPIThrownError(e)) {\n if (e.code === XverseRpcErrorCode.USER_REJECTION) {\n throw new UserRejectError()\n }\n throw new XverseCompatibleProviderError(e)\n }\n throw e\n }\n}\n"],"names":["XverseCompatibleWalletAdapterImpl","info","sdk","resp","handleRpcError","WalletAdapterNotConnectedError","address","message","SignMessageAlgorithm","fromAddress","receiverAddress","satoshiAmount","a","WalletAdapterAddressPurpose","XverseCompatibleProviderError","psbtHex","signIndices","psbtBase64","base64","hex","result","acc","signIndex","tx","btc.Transaction","callback","removeListeners","handler","addresses","error","removeAccountListener","removeNetworkListener","remove","XverseRpcErrorCode","isXverseCompatibleProviderAPIThrownError","err","promise","res","UserRejectError"],"mappings":"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"}
@@ -0,0 +1,151 @@
1
+ import { i as l, h as c } from "./index-D7YwhNAG.mjs";
2
+ import { d as h, S as A, a as m, U as P } from "./WalletAdapters.types-CnvOqHFH.mjs";
3
+ import { T as p } from "./transaction-CiLOYSE_.mjs";
4
+ class b {
5
+ walletDisplayName;
6
+ getProviderId;
7
+ parseAddresses;
8
+ constructor(s) {
9
+ this.walletDisplayName = s.walletDisplayName, this.getProviderId = s.getProviderId, this.parseAddresses = s.parseAddresses;
10
+ }
11
+ async getSdk() {
12
+ return import("./index-CcQUdePc.mjs");
13
+ }
14
+ async connect() {
15
+ await (await this.getSdk()).request("wallet_connect", null);
16
+ }
17
+ async disconnect() {
18
+ return Promise.resolve();
19
+ }
20
+ async getAddresses() {
21
+ const s = await this.getSdk(), t = await o(
22
+ s.request(
23
+ "getAddresses",
24
+ {
25
+ purposes: [s.AddressPurpose.Ordinals, s.AddressPurpose.Payment]
26
+ },
27
+ await this.getProviderId()
28
+ )
29
+ );
30
+ if (t == null)
31
+ throw new h(this.walletDisplayName);
32
+ return this.parseAddresses({
33
+ sdk: s,
34
+ network: t.network.bitcoin.name,
35
+ addresses: t.addresses
36
+ });
37
+ }
38
+ async signMessage(s, t) {
39
+ const a = await this.getSdk();
40
+ return {
41
+ result: (await o(
42
+ a.request(
43
+ "signMessage",
44
+ {
45
+ address: s,
46
+ message: t,
47
+ protocol: a.MessageSigningProtocols.BIP322
48
+ },
49
+ await this.getProviderId()
50
+ )
51
+ )).signature,
52
+ address: s,
53
+ algorithm: A.BIP322
54
+ };
55
+ }
56
+ sendBitcoinFeeRateCapability = "unavailable";
57
+ async sendBitcoin(s, t, a) {
58
+ if ((await this.getAddresses()).find(
59
+ (i) => i.purposes.includes(m.Bitcoin)
60
+ ) == null)
61
+ throw new u({
62
+ code: -32602,
63
+ message: "Bitcoin address not found"
64
+ });
65
+ const d = await this.getSdk();
66
+ return await o(
67
+ d.request(
68
+ "sendTransfer",
69
+ {
70
+ recipients: [
71
+ {
72
+ address: t,
73
+ amount: Number(a)
74
+ }
75
+ ]
76
+ },
77
+ await this.getProviderId()
78
+ )
79
+ );
80
+ }
81
+ sendInscriptionFeeRateCapability = "unavailable";
82
+ async signAndFinalizePsbt(s, t) {
83
+ const a = await this.getSdk(), n = l.encode(c.decode(s)), d = await o(
84
+ a.request(
85
+ "signPsbt",
86
+ {
87
+ psbt: n,
88
+ signInputs: t.reduce(
89
+ (r, [w, g]) => (r[w] = [g], r),
90
+ {}
91
+ ),
92
+ broadcast: !1
93
+ },
94
+ await this.getProviderId()
95
+ )
96
+ ), i = p.fromPSBT(l.decode(d.psbt), {
97
+ allowUnknownInputs: !0,
98
+ allowUnknownOutputs: !0,
99
+ disableScriptCheck: !0,
100
+ allowLegacyWitnessUtxo: !0
101
+ });
102
+ return i.finalize(), { signedPsbtHex: c.encode(i.toPSBT()) };
103
+ }
104
+ onAddressesChanged(s) {
105
+ const t = [];
106
+ return (async () => {
107
+ const a = await this.getSdk(), n = async () => {
108
+ try {
109
+ const r = await this.getAddresses();
110
+ s({ addresses: r });
111
+ } catch (r) {
112
+ console.warn(
113
+ `[${this.walletDisplayName}] Failed to get addresses on change:`,
114
+ r
115
+ );
116
+ }
117
+ }, d = a.addListener("accountChange", n), i = a.addListener("networkChange", n);
118
+ t.push(d, i);
119
+ })(), {
120
+ unsubscribe: () => {
121
+ t.forEach((a) => a());
122
+ }
123
+ };
124
+ }
125
+ }
126
+ var I = /* @__PURE__ */ ((e) => (e[e.PARSE_ERROR = -32700] = "PARSE_ERROR", e[e.INVALID_REQUEST = -32600] = "INVALID_REQUEST", e[e.METHOD_NOT_FOUND = -32601] = "METHOD_NOT_FOUND", e[e.INVALID_PARAMS = -32602] = "INVALID_PARAMS", e[e.INTERNAL_ERROR = -32603] = "INTERNAL_ERROR", e[e.USER_REJECTION = -32e3] = "USER_REJECTION", e[e.METHOD_NOT_SUPPORTED = -32001] = "METHOD_NOT_SUPPORTED", e[e.ACCESS_DENIED = -32002] = "ACCESS_DENIED", e))(I || {});
127
+ function S(e) {
128
+ return e != null && "code" in e && "message" in e;
129
+ }
130
+ class u extends Error {
131
+ code;
132
+ constructor(s) {
133
+ super(s.message), this.code = s.code, this.cause = s;
134
+ }
135
+ }
136
+ const o = async (e) => {
137
+ try {
138
+ const s = await e;
139
+ if (s.status === "error")
140
+ throw s.error;
141
+ return s.result;
142
+ } catch (s) {
143
+ throw S(s) ? s.code === -32e3 ? new P() : new u(s) : s;
144
+ }
145
+ };
146
+ export {
147
+ b as X,
148
+ u as a,
149
+ I as b
150
+ };
151
+ //# sourceMappingURL=XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs.map