@swapkit/wallet-hardware 5.0.1 → 6.0.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 (165) hide show
  1. package/dist/THIRD_PARTY_LICENSES.md +2344 -0
  2. package/dist/chunk-09e51wma.js +4 -0
  3. package/dist/chunk-09e51wma.js.map +167 -0
  4. package/dist/chunk-0arpsm5f.js +4 -0
  5. package/dist/chunk-0arpsm5f.js.map +10 -0
  6. package/dist/chunk-1amf58aq.js +4 -0
  7. package/dist/{chunk-xkh15edk.js.map → chunk-1amf58aq.js.map} +2 -2
  8. package/dist/chunk-3t17wpjg.js +17 -0
  9. package/dist/chunk-3t17wpjg.js.map +29 -0
  10. package/dist/chunk-5c7b7z2d.js +4 -0
  11. package/dist/{chunk-20wx60bn.js.map → chunk-5c7b7z2d.js.map} +2 -2
  12. package/dist/chunk-5p3ttw6y.js +4 -0
  13. package/dist/{chunk-1jpcb30j.js.map → chunk-5p3ttw6y.js.map} +1 -1
  14. package/dist/chunk-dptbnkzm.js +64 -0
  15. package/dist/chunk-dptbnkzm.js.map +260 -0
  16. package/dist/chunk-ds2m83jp.js +5 -0
  17. package/dist/chunk-ds2m83jp.js.map +11 -0
  18. package/dist/chunk-eenx3cv6.js +4 -0
  19. package/dist/chunk-eenx3cv6.js.map +33 -0
  20. package/dist/chunk-gr3eswf1.js +4 -0
  21. package/dist/chunk-gr3eswf1.js.map +73 -0
  22. package/dist/{chunk-7fsaymh4.js → chunk-hg71hp4m.js} +3 -3
  23. package/dist/{chunk-7fsaymh4.js.map → chunk-hg71hp4m.js.map} +1 -1
  24. package/dist/chunk-jewm2ag3.js +5 -0
  25. package/dist/{chunk-4tbtxdxa.js.map → chunk-jewm2ag3.js.map} +2 -2
  26. package/dist/chunk-jzrytcrf.js +4 -0
  27. package/dist/chunk-jzrytcrf.js.map +12 -0
  28. package/dist/chunk-k3thje6a.js +4 -0
  29. package/dist/chunk-k3thje6a.js.map +9 -0
  30. package/dist/chunk-nhva847d.js +5 -0
  31. package/dist/chunk-nhva847d.js.map +9 -0
  32. package/dist/chunk-tm47brht.js +4 -0
  33. package/dist/chunk-tm47brht.js.map +140 -0
  34. package/dist/chunk-xmvg4cds.js +4 -0
  35. package/dist/chunk-xmvg4cds.js.map +127 -0
  36. package/dist/chunk-xx7cwpzq.js +4 -0
  37. package/dist/chunk-xx7cwpzq.js.map +9 -0
  38. package/dist/chunk-yrxe491r.js +20 -0
  39. package/dist/chunk-yrxe491r.js.map +17 -0
  40. package/dist/index.cjs +2 -2
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/keepkey/index.cjs +2 -2
  43. package/dist/keepkey/index.cjs.map +2 -2
  44. package/dist/keepkey/index.js +2 -2
  45. package/dist/keepkey/index.js.map +2 -2
  46. package/dist/ledger/index.cjs +90 -2
  47. package/dist/ledger/index.cjs.map +830 -24
  48. package/dist/ledger/index.js +2 -2
  49. package/dist/ledger/index.js.map +21 -19
  50. package/dist/trezor/index.cjs +2 -2
  51. package/dist/trezor/index.cjs.map +5 -5
  52. package/dist/trezor/index.js +2 -2
  53. package/dist/trezor/index.js.map +3 -3
  54. package/dist/types/ledger/clients/bitcoin.d.ts +36 -0
  55. package/dist/types/ledger/clients/bitcoin.d.ts.map +1 -0
  56. package/dist/types/ledger/clients/cosmos.d.ts +38 -10
  57. package/dist/types/ledger/clients/cosmos.d.ts.map +1 -1
  58. package/dist/types/ledger/clients/evm.d.ts +37 -46
  59. package/dist/types/ledger/clients/evm.d.ts.map +1 -1
  60. package/dist/types/ledger/clients/near.d.ts +5 -2
  61. package/dist/types/ledger/clients/near.d.ts.map +1 -1
  62. package/dist/types/ledger/clients/sui.d.ts +8 -12
  63. package/dist/types/ledger/clients/sui.d.ts.map +1 -1
  64. package/dist/types/ledger/clients/thorchain/index.d.ts +34 -8
  65. package/dist/types/ledger/clients/thorchain/index.d.ts.map +1 -1
  66. package/dist/types/ledger/clients/thorchain/protocol.d.ts +58 -0
  67. package/dist/types/ledger/clients/thorchain/protocol.d.ts.map +1 -0
  68. package/dist/types/ledger/clients/tron.d.ts +11 -8
  69. package/dist/types/ledger/clients/tron.d.ts.map +1 -1
  70. package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts +3 -2
  71. package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts.map +1 -1
  72. package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts +18 -0
  73. package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts.map +1 -0
  74. package/dist/types/ledger/clients/utxo.d.ts +10 -13
  75. package/dist/types/ledger/clients/utxo.d.ts.map +1 -1
  76. package/dist/types/ledger/clients/xrp.d.ts +4 -1
  77. package/dist/types/ledger/clients/xrp.d.ts.map +1 -1
  78. package/dist/types/ledger/clients/zcash.d.ts +53 -0
  79. package/dist/types/ledger/clients/zcash.d.ts.map +1 -0
  80. package/dist/types/ledger/helpers/dmk.d.ts +24 -0
  81. package/dist/types/ledger/helpers/dmk.d.ts.map +1 -0
  82. package/dist/types/ledger/helpers/executeDeviceAction.d.ts +34 -0
  83. package/dist/types/ledger/helpers/executeDeviceAction.d.ts.map +1 -0
  84. package/dist/types/ledger/helpers/getLedgerAddress.d.ts +1 -1
  85. package/dist/types/ledger/helpers/getLedgerAddress.d.ts.map +1 -1
  86. package/dist/types/ledger/helpers/getLedgerClient.d.ts +10 -3
  87. package/dist/types/ledger/helpers/getLedgerClient.d.ts.map +1 -1
  88. package/dist/types/ledger/helpers/index.d.ts +2 -1
  89. package/dist/types/ledger/helpers/index.d.ts.map +1 -1
  90. package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts +26 -0
  91. package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts.map +1 -0
  92. package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts +13 -0
  93. package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts.map +1 -0
  94. package/dist/types/ledger/helpers/lowS.d.ts +6 -0
  95. package/dist/types/ledger/helpers/lowS.d.ts.map +1 -0
  96. package/dist/types/ledger/helpers/rawTx.d.ts +2 -0
  97. package/dist/types/ledger/helpers/rawTx.d.ts.map +1 -0
  98. package/dist/types/ledger/index.d.ts +19 -7
  99. package/dist/types/ledger/index.d.ts.map +1 -1
  100. package/dist/types/ledger/types.d.ts +6 -10
  101. package/dist/types/ledger/types.d.ts.map +1 -1
  102. package/dist/types/trezor/index.d.ts +2 -2
  103. package/dist/types/trezor/index.d.ts.map +1 -1
  104. package/package.json +36 -36
  105. package/src/ledger/clients/bitcoin.ts +575 -0
  106. package/src/ledger/clients/cosmos.ts +180 -51
  107. package/src/ledger/clients/evm.ts +238 -195
  108. package/src/ledger/clients/near.ts +43 -13
  109. package/src/ledger/clients/sui.ts +55 -68
  110. package/src/ledger/clients/thorchain/index.ts +210 -86
  111. package/src/ledger/clients/thorchain/protocol.ts +166 -0
  112. package/src/ledger/clients/tron.ts +49 -37
  113. package/src/ledger/clients/utxo-legacy-adapter.ts +35 -32
  114. package/src/ledger/clients/utxo-legacy-outputs.ts +122 -0
  115. package/src/ledger/clients/utxo.ts +108 -206
  116. package/src/ledger/clients/xrp.ts +39 -23
  117. package/src/ledger/clients/zcash.ts +440 -0
  118. package/src/ledger/helpers/dmk.ts +231 -0
  119. package/src/ledger/helpers/executeDeviceAction.ts +201 -0
  120. package/src/ledger/helpers/getLedgerClient.ts +101 -72
  121. package/src/ledger/helpers/index.ts +6 -1
  122. package/src/ledger/helpers/ledgerJsDmkBridge.ts +109 -0
  123. package/src/ledger/helpers/ledgerJsDmkTransport.ts +88 -0
  124. package/src/ledger/helpers/lowS.ts +30 -0
  125. package/src/ledger/helpers/rawTx.ts +12 -0
  126. package/src/ledger/index.ts +564 -369
  127. package/src/ledger/types.ts +15 -10
  128. package/src/trezor/index.ts +115 -27
  129. package/dist/chunk-1jpcb30j.js +0 -5
  130. package/dist/chunk-20wx60bn.js +0 -4
  131. package/dist/chunk-4tbtxdxa.js +0 -5
  132. package/dist/chunk-7v7cgm69.js +0 -4
  133. package/dist/chunk-7v7cgm69.js.map +0 -10
  134. package/dist/chunk-83g13ck6.js +0 -5
  135. package/dist/chunk-83g13ck6.js.map +0 -10
  136. package/dist/chunk-h2r568rz.js +0 -4
  137. package/dist/chunk-h2r568rz.js.map +0 -10
  138. package/dist/chunk-xkh15edk.js +0 -4
  139. package/dist/types/ledger/clients/thorchain/common.d.ts +0 -28
  140. package/dist/types/ledger/clients/thorchain/common.d.ts.map +0 -1
  141. package/dist/types/ledger/clients/thorchain/helpers.d.ts +0 -7
  142. package/dist/types/ledger/clients/thorchain/helpers.d.ts.map +0 -1
  143. package/dist/types/ledger/clients/thorchain/lib.d.ts +0 -22
  144. package/dist/types/ledger/clients/thorchain/lib.d.ts.map +0 -1
  145. package/dist/types/ledger/clients/thorchain/utils.d.ts +0 -2
  146. package/dist/types/ledger/clients/thorchain/utils.d.ts.map +0 -1
  147. package/dist/types/ledger/clients/utxo-psbt.d.ts +0 -18
  148. package/dist/types/ledger/clients/utxo-psbt.d.ts.map +0 -1
  149. package/dist/types/ledger/cosmosTypes.d.ts +0 -40
  150. package/dist/types/ledger/cosmosTypes.d.ts.map +0 -1
  151. package/dist/types/ledger/helpers/getLedgerTransport.d.ts +0 -3
  152. package/dist/types/ledger/helpers/getLedgerTransport.d.ts.map +0 -1
  153. package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts +0 -14
  154. package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts.map +0 -1
  155. package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts +0 -14
  156. package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts.map +0 -1
  157. package/src/ledger/clients/thorchain/common.ts +0 -93
  158. package/src/ledger/clients/thorchain/helpers.ts +0 -120
  159. package/src/ledger/clients/thorchain/lib.ts +0 -258
  160. package/src/ledger/clients/thorchain/utils.ts +0 -69
  161. package/src/ledger/clients/utxo-psbt.ts +0 -204
  162. package/src/ledger/cosmosTypes.ts +0 -98
  163. package/src/ledger/helpers/getLedgerTransport.ts +0 -102
  164. package/src/ledger/helpers/ledgerNetworkInfo.ts +0 -127
  165. package/src/ledger/interfaces/CosmosLedgerInterface.ts +0 -67
@@ -1,4 +1,4 @@
1
- import{c as q}from"../chunk-83g13ck6.js";import{e as C}from"../chunk-1jpcb30j.js";import{Chain as G,derivationPathToString as y_,FeeOption as Z0,filterSupportedChains as DL,getRPCUrl as UL,NetworkDerivationPath as WL,SwapKitError as h,UTXOScriptType as XL,WalletOption as Y_}from"@swapkit/helpers";import{addInputsAndOutputs as FL,assertDerivationIndex as M0,compileMemo as $L,createHDWalletHelpers as CL,getNetworkForChain as j0,getScriptTypeForAddress as ZL,getUTXOAccountIndexFromPath as Q_,getUTXOAccountPath as q_,getUTXOAddressPath as ML,getUtxoApi as jL}from"@swapkit/toolboxes/utxo";import{createWallet as JL,getWalletSupportedChains as YL}from"@swapkit/wallet-core";import{Chain as M,SwapKitError as S0,WalletOption as k0}from"@swapkit/helpers";var m=async({chain:_,ledgerClient:L})=>{if(!L)return"";switch(_){case M.Cosmos:case M.THORChain:return L.connect();case M.Ethereum:case M.BinanceSmartChain:case M.Avalanche:case M.Polygon:case M.Arbitrum:case M.Arc:case M.Berachain:case M.Optimism:case M.Base:case M.Aurora:case M.Gnosis:case M.Monad:case M.XLayer:return L.getAddress();case M.Bitcoin:case M.BitcoinCash:case M.Dash:case M.Dogecoin:case M.Litecoin:case M.Zcash:{let R=L;await R.connect();let f=await R.getAddress();return _===M.BitcoinCash?f.replace("bitcoincash:",""):f}case M.Near:return await L.getAddress();case M.Ripple:return L.getAddress();case M.Tron:return L.getAddress();case M.Sui:return L.connect();default:throw new S0("wallet_chain_not_supported",{chain:_,wallet:k0.LEDGER})}};import{Chain as $,SwapKitError as TL,WalletOption as BL}from"@swapkit/helpers";import{derivationPathToString as m0,NetworkDerivationPath as V0,SwapKitError as c_}from"@swapkit/helpers";import{LedgerErrorCode as W_,NetworkDerivationPath as P0,SwapKitError as X_}from"@swapkit/helpers";import{SwapKitError as I_}from"@swapkit/helpers";var b=85,T_=250;var l={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},__={ADD:1,INIT:0,LAST:2},B_={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},g={JSON:0},V={NoError:36864},k_={1:"U2F: Unknown",2:"U2F: Bad request",3:"U2F: Configuration unsupported",4:"U2F: Device Ineligible",5:"U2F: Timeout",14:"Timeout",25600:"Execution Error",26368:"Wrong Length",26626:"Error deriving keys",27010:"Empty Buffer",27011:"Output buffer too small",27012:"Data is invalid",27013:"Conditions not satisfied",27014:"Transaction rejected",27264:"Bad key handle",27392:"Invalid P1/P2",27904:"Instruction not supported",28160:"App does not seem to be open",28416:"Unknown error",28417:"Sign/verify error",36864:"No errors",36865:"Device is busy"};function P(_){if(_ in k_)return k_[_];return`Unknown Status Code: ${_}`}function z0(_){return typeof _==="object"&&_!==null&&!Array.isArray(_)&&!(_ instanceof Date)}function E(_){if(_){if(z0(_)){if(Object.hasOwn(_,"statusCode"))return{error_message:P(_.statusCode),return_code:_.statusCode};if(Object.hasOwn(_,"return_code")&&Object.hasOwn(_,"error_message"))return _}return{error_message:_.toString(),return_code:65535}}return{error_message:_.toString(),return_code:65535}}function D_(_){return _.send(85,l.GET_VERSION,0,0).then((L)=>{let R=L.slice(-2),f=R[0]*256+R[1],N=0;if(L.length>=9)N=(L[5]<<24)+(L[6]<<16)+(L[7]<<8)+(L[8]<<0);return{device_locked:L[4]===1,error_message:P(f),major:L[1],minor:L[2],patch:L[3],return_code:f,target_id:N.toString(16),test_mode:L[0]!==0}},E)}import{SwapKitError as L_}from"@swapkit/helpers";function z_(_){if(_==null||_.length<3)throw new L_("wallet_ledger_invalid_params",{reason:"Path too short"});if(_.length>10)throw new L_("wallet_ledger_invalid_params",{reason:"Path too long"});let L=Buffer.alloc(1+4*_.length);L.writeUInt8(_.length,0);for(let R=0;R<_.length;R+=1){let f=_[R]||0;if(R<3)f|=2147483648;L.writeInt32LE(f,1+R*4)}return L}function U_(_,L,R,f,N=g.JSON){return _.transport.send(b,l.SIGN_SECP256K1,L,N,f,[V.NoError,27012,27264]).then((y)=>{let w=y.slice(-2),O=w[0]*256+w[1],T=P(O);if(O===27264||O===27012)T=`${T} : ${y.slice(0,y.length-2).toString("ascii")}`;let B=null;if(y.length>2)B=y.slice(0,y.length-2);return{error_message:T,return_code:O,signature:B}},E)}function K0(_){if(_.length!==65)throw new L_("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let L=_.slice(33,65),R=Buffer.from([2+(L[L.length-1]&1)]);return Buffer.concat([R,_.slice(1,33)])}function K_(_,L){return _.transport.send(b,l.INS_PUBLIC_KEY_SECP256K1,0,0,L,[V.NoError]).then((R)=>{let f=R.slice(-2),N=f[0]*256+f[1],y=Buffer.from(R.slice(0,65));return{compressed_pk:K0(y),error_message:P(N),pk:y,return_code:N}},E)}function P_(_){if(!_||_.length!==5)throw new L_("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let L=Buffer.alloc(20);return L.writeUInt32LE(2147483648+_[0],0),L.writeUInt32LE(2147483648+_[1],4),L.writeUInt32LE(2147483648+_[2],8),L.writeUInt32LE(_[3],12),L.writeUInt32LE(_[4],16),L}function m_(_,L,R,f,N=g.JSON){let y=__.ADD;if(L===1)y=__.INIT;if(L===R)y=__.LAST;return U_(_,y,0,f,N)}function V_(_,L){return _.transport.send(b,l.GET_ADDR_SECP256K1,0,0,L,[V.NoError]).then((R)=>{let f=R.slice(-2),N=f[0]*256+f[1];return{compressed_pk:Buffer.from(R.slice(0,33)),error_message:P(N),pk:"OBSOLETE PROPERTY",return_code:N}},E)}class d{transport;versionResponse;constructor(_){if(!_)throw new I_("wallet_ledger_transport_not_defined");this.transport=_}static serializeHRP(_){if(_==null||_.length<3||_.length>83)throw new I_("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let L=Buffer.alloc(1+_.length);return L.writeUInt8(_.length,0),L.write(_,1),L}async serializePath(_){if(this.versionResponse=await D_(this.transport),this.versionResponse.return_code!==V.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return z_(_);case 2:return P_(_);default:return Buffer.alloc(0)}}async signGetChunks(_,L){let R=await this.serializePath(_),f=[];f.push(R);for(let N=0;N<L.length;N+=T_){let y=N+T_;if(N>L.length)y=L.length;f.push(L.slice(N,y))}return f}async getVersion(){try{return this.versionResponse=await D_(this.transport),this.versionResponse}catch(_){return E(_)}}appInfo(){return this.transport.send(176,1,0,0).then((_)=>{let L=_.readUInt16BE(_.length-2),R="",f="",N=0,y=0;if(_[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let w=_[1];R=_.slice(2,2+w).toString("ascii");let O=2+w,T=_[O];O+=1,f=_.slice(O,O+T).toString("ascii"),O+=T;let B=_[O];return O+=1,N=B,y=_[O],{appName:R,appVersion:f,error_message:P(L),flag_onboarded:(y&4)!==0,flag_pin_validated:(y&128)!==0,flag_recovery:(y&1)!==0,flag_signed_mcu_code:(y&2)!==0,flagLen:N,flagsValue:y,return_code:L}},E)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[V.NoError,28160]).then((_)=>{let L=_.slice(-2),R=L[0]*256+L[1];if(R===28160)return{error_message:"This command is only available in the Dashboard",return_code:R};let f=_.slice(0,4).toString("hex"),N=4,y=_[N];N+=1;let w=_.slice(N,N+y).toString();N+=y;let O=_[N];N+=1;let T=_.slice(N,N+O).toString("hex");N+=O;let B=_[N];N+=1;let U=_.slice(N,N+B);if(U[B-1]===0)U=_.slice(N,N+B-1);let W=U.toString();return{error_message:P(R),flag:T,mcuVersion:W,return_code:R,seVersion:w,targetId:f}},E)}async publicKey(_){try{let L=await this.serializePath(_);switch(this.versionResponse.major){case 1:return K_(this,L);case 2:{let R=Buffer.concat([d.serializeHRP("thor"),L]);return V_(this,R)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(L){return E(L)}}async getAddressAndPubKey(_,L,R=!1){try{let f=await this.serializePath(_),N=Buffer.concat([d.serializeHRP(L),f]),y=await this.transport.send(b,l.GET_ADDR_SECP256K1,R?B_.SHOW_ADDRESS_IN_DEVICE:B_.ONLY_RETRIEVE,0,N,[V.NoError]),w=Buffer.from(y.slice(0,33)),O=Buffer.from(y.slice(33,-2)).toString(),T=y.readUInt16BE(y.length-2);return{bech32_address:O,compressed_pk:w,error_message:P(T),return_code:T}}catch(f){return E(f)}}showAddressAndPubKey(_,L){return this.getAddressAndPubKey(_,L,!0)}signSendChunk(_,L,R,f=g.JSON){switch(this.versionResponse.major){case 1:return U_(this,_,L,R,f);case 2:return m_(this,_,L,R,f);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(_,L,R=g.JSON){let f=Buffer.from(L),N=[],y;try{N=await this.signGetChunks(_,f),y=await this.signSendChunk(1,N.length,N[0],R)}catch(O){E(O)}let w={error_message:y.error_message,return_code:y.return_code,signature:null};for(let O=1;O<N.length;O+=1)if(w=await this.signSendChunk(1+O,N.length,N[O],R),w.return_code!==V.NoError)break;return{error_message:w.error_message,return_code:w.return_code,signature:w.signature}}}class n{ledgerTimeout=50000;derivationPath=P0.GAIA;transport;ledgerApp;chain="thor";injectedTransport;constructor(_){if(this.injectedTransport=_,_)this.transport=_}checkOrCreateTransportAndLedger=async(_=!1)=>{if(!_&&this.transport&&this.ledgerApp)return;try{if(!this.transport||_&&!this.injectedTransport)this.transport=this.injectedTransport??await q();switch(this.chain){case"thor":{this.ledgerApp=_||!this.ledgerApp?new d(this.transport):this.ledgerApp;break}case"cosmos":{let R=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=_||!this.ledgerApp?new R(this.transport):this.ledgerApp}}return this.ledgerApp}catch(L){throw new X_("wallet_ledger_connection_error",L)}};validateResponse=(_,L)=>{switch(_){case W_.NoError:return;case W_.LockedDevice:throw new X_("wallet_ledger_device_locked",{message:`Ledger is locked: ${L}`});case W_.TC_NotFound:throw new X_("wallet_ledger_device_not_found");default:break}}}class F_ extends n{pubKey=null;derivationPath;constructor(_=V0.GAIA,L){super(L);this.chain="cosmos",this.derivationPath=m0(_)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:_,address:L}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(_,"hex").toString("base64"),L};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(_,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:R,error_message:f,signature:N}=await this.ledgerApp.sign(this.derivationPath,_);if(!this.pubKey)throw new c_("wallet_ledger_pubkey_not_found");return this.validateResponse(R,f),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:N}]};signAmino=async(_,L)=>{await this.checkOrCreateTransportAndLedger(!0);let R=await this.getAccounts();if(R.findIndex((D)=>D.address===_)===-1)throw new c_("wallet_ledger_address_not_found",{address:_});let N=await import("@cosmjs/amino"),y=N.encodeSecp256k1Signature??N.default?.encodeSecp256k1Signature,w=N.serializeSignDoc??N.default?.serializeSignDoc,O=await import("@cosmjs/crypto"),T=O.Secp256k1Signature??O.default?.Secp256k1Signature,B=w(L),U=await this.ledgerApp.sign(this.derivationPath,B);this.validateResponse(U.return_code,U.error_message);let W=T.fromDer(U.signature).toFixedLength();return{signature:y(R[0].pubkey,W),signed:L}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.getAddressAndPubKey();return[{address:_.address,algo:"secp256k1",pubkey:Buffer.from(_.publicKey,"hex")}]}}import{ChainId as Q,derivationPathToString as v0,NetworkDerivationPath as l0,SwapKitError as o}from"@swapkit/helpers";import{AbstractSigner as b0}from"ethers";var v_={apex:"apexp",europa:"flex",nanoS:"nanos",nanoSP:"nanosp",nanoX:"nanox",stax:"stax"};async function l_(_,L=fetch){let R=v_[_];if(!R)return null;let f=`https://crypto-assets-service.api.ledger.com/v1/certificates?output=descriptor&public_key_usage=network&target_device=${R}`,N=await L(f);if(!N.ok)return null;let w=(await N.json())[0]?.descriptor,O=w?.signatures?.prod;if(!(w?.data&&O))return null;return`${w.data}${I0(O)}`}async function b_(_,L){await _.send(176,6,12,0,Buffer.from(L,"hex"))}async function g_(_,L,R=fetch){let f=v_[L];if(!f)return null;let N=`https://crypto-assets-service.api.ledger.com/v1/networks?chain_id=${_}&output=chain_id,descriptors,icons`,y=await R(N);if(!y.ok)return null;let O=(await y.json()).find((U)=>U.chain_id===_),T=O?.descriptors?.[f],B=T?.signatures?.prod;if(!(T?.data&&B))return null;return{data:T.data,icon:O?.icons?.[f],signature:B}}function I0(_){return x_(21,Buffer.from(_,"hex")).toString("hex")}function x_(_,L){return Buffer.concat([Buffer.from([_,L.length]),L])}function c0({data:_,signature:L}){let R=Buffer.concat([Buffer.from(_,"hex"),x_(21,Buffer.from(L,"hex"))]),f=Buffer.alloc(2);return f.writeUInt16BE(R.length,0),Buffer.concat([f,R])}async function $_(_,L,R){for(let f=0;f<R.length;f+=255){let N=f===0?1:0,y=R.subarray(f,f+255);await _.send(224,48,N,L,y)}}async function h_(_,L){let R=c0(L);if(await $_(_,0,R),!L.icon)return{iconAccepted:!1};try{return await $_(_,1,Buffer.from(L.icon,"hex")),{iconAccepted:!0}}catch{return await $_(_,0,R),{iconAccepted:!1}}}var g0=27264,u_=Number(Q.Arc);function x0(_){return _ instanceof Error&&"statusCode"in _&&_.statusCode===g0}function h0(_){return Object.values(_??{}).some((L)=>Array.isArray(L)&&L.length)}function u0(_){if(typeof _==="number")return _;let L=_.startsWith("0x")?_.slice(2):_;return Number.parseInt(L||"0",16)}class A extends b0{chainId=Q.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;transport;injectedTransport;arcNetworkRegistered=!1;constructor({provider:_,derivationPath:L=l0.OP,chainId:R=Q.Optimism,transport:f}){super(_);this.chainId=R||Q.Ethereum,this.derivationPath=typeof L==="string"?L:v0(L),this.injectedTransport=f,Object.defineProperty(this,"provider",{enumerable:!0,value:_||null,writable:!1})}connect=(_)=>new A({chainId:this.chainId,derivationPath:this.derivationPath,provider:_,transport:this.transport??this.injectedTransport});checkOrCreateTransportAndLedger=async()=>{await this.createTransportAndLedger()};createTransportAndLedger=async()=>{if(this.ledgerApp)return;this.transport||=this.injectedTransport??await q();let _=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new _(this.transport)};getAddress=async()=>{let _=await this.getAddressAndPubKey();if(!_)throw new o("wallet_ledger_failed_to_get_address");return _.address};getAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath)};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signMessage=async(_)=>{let{Signature:L}=await import("ethers");await this.createTransportAndLedger();let R=await this.ledgerApp?.signPersonalMessage(this.derivationPath,_);if(!R)throw new o("wallet_ledger_signing_error");return R.r=`0x${R.r}`,R.s=`0x${R.s}`,L.from(R).serialized};sendTransaction=async(_)=>{if(!this.provider)throw new o("wallet_ledger_no_provider");let L=await this.signTransaction(_);return await this.provider.broadcastTransaction(L)};signTypedData=async(_,L,R,f)=>{let{buildEIP712DomainType:N}=await import("@swapkit/toolboxes/evm"),{Signature:y,TypedDataEncoder:w}=await import("ethers");await this.createTransportAndLedger();let{EIP712Domain:O,...T}=L,B=f??w.from(T).primaryType,U;try{U=await this.ledgerApp?.signEIP712Message(this.derivationPath,{domain:_,message:R,primaryType:B,types:{EIP712Domain:N(_),...T}})}catch(W){let D=W instanceof Error&&"statusCode"in W;if(!D||D&&W.statusCode===27013)throw W;let Z=w.hashDomain(_).slice(2),J=w.from(T).hash(R).slice(2);U=await this.ledgerApp?.signEIP712HashedMessage(this.derivationPath,Z,J)}if(!U)throw new o("wallet_ledger_signing_error");return U.r=`0x${U.r}`,U.s=`0x${U.s}`,y.from(U).serialized};signTransaction=async(_)=>{let{Transaction:L}=await import("ethers");await this.createTransportAndLedger();let R=_.nonce??void 0,f=R===void 0?await this.provider?.getTransactionCount(_.from||await this.getAddress()):void 0,N={chainId:_.chainId||this.chainId,data:_.data,gasLimit:_.gasLimit,..._.gasPrice&&{gasPrice:_.gasPrice},...!_.gasPrice&&_.maxFeePerGas&&{maxFeePerGas:_.maxFeePerGas,maxPriorityFeePerGas:_.maxPriorityFeePerGas},nonce:R!==void 0?Number(R.toString()):f,to:_.to?.toString(),type:_.type&&!Number.isNaN(_.type)?_.type:_.maxFeePerGas?2:0,value:_.value},y=L.from(N).unsignedSerialized.slice(2),{ledgerService:w}=await import("@ledgerhq/hw-app-eth"),O=Number(N.chainId),T=O===u_,B=await w.resolveTransaction(y,{},{erc20:!0,externalPlugins:!0}).catch((J)=>{if(!T)throw J;return console.warn("Ledger: could not fetch clear-signing metadata for Arc, signing blind"),null});if(T&&!this.arcNetworkRegistered)await this.registerNetworkOnDevice(O);let U=await this.signWithLedgerApp(y,B,O);if(!U)throw new o("wallet_ledger_signing_error");let{r:W,s:D,v:Z}=U;return L.from({...N,signature:{r:`0x${W}`,s:`0x${D}`,v:u0(Z)}}).serialized};signWithLedgerApp=async(_,L,R)=>{try{return await this.ledgerApp?.signTransaction(this.derivationPath,_,L)}catch(f){if(!(R===u_&&x0(f)&&h0(L)))throw f;return console.warn("Ledger: the app rejected the Arc metadata, signing blind"),await this.ledgerApp?.signTransaction(this.derivationPath,_,null)}};registerNetworkOnDevice=async(_)=>{let L=this.transport?.deviceModel?.id;if(!(this.transport&&L))return;try{let[R,f]=await Promise.all([g_(_,L),l_(L)]);if(!R)return;if(f)await b_(this.transport,f);await h_(this.transport,R),this.arcNetworkRegistered=!0}catch{}}}var d_=(_)=>new A({..._,chainId:Q.Arbitrum}),n_=(_)=>new A({..._,chainId:Q.Arc}),o_=(_)=>new A({..._,chainId:Q.Aurora}),i_=(_)=>new A({..._,chainId:Q.Avalanche}),p_=(_)=>new A({..._,chainId:Q.Base}),t_=(_)=>new A({..._,chainId:Q.Ethereum}),a_=(_)=>new A({..._,chainId:Q.Gnosis}),e_=(_)=>new A({..._,chainId:Q.Optimism}),r_=(_)=>new A({..._,chainId:Q.Polygon}),s_=(_)=>new A({..._,chainId:Q.BinanceSmartChain}),_0=(_)=>new A({..._,chainId:Q.Monad}),L0=(_)=>new A({..._,chainId:Q.XLayer}),R0=(_)=>new A({..._,chainId:Q.Berachain});async function N0(_,L){let R=(await import("@ledgerhq/hw-app-near")).default,{Chain:f,NetworkDerivationPath:N,SwapKitError:y}=await import("@swapkit/helpers"),w=L??await q(),O=new R(w),T=(_||N[f.Near]).join("'/").concat("'"),{address:B,publicKey:U}=await O.getAddress(T);return{getAddress(){return Promise.resolve(B)},async getPublicKey(){let{PublicKey:D}=await import("@near-js/crypto");return D.fromString(`ed25519:${U}`)},signDelegateAction(D){return Promise.reject(new y("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(D,Z,J,j,k){return Promise.reject(new y("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(D){let{Signature:Z,SignedTransaction:J}=await import("@near-js/transactions");try{let j=await O.signTransaction(D.encode(),T);if(!j)throw Error("Signature undefined");let k=new Z({data:j,keyType:0}),z=new J({signature:k,transaction:D});return[j,z]}catch(j){throw new y("wallet_ledger_signing_error",{error:j})}}}}import{Chain as d0,derivationPathToString as n0,NetworkDerivationPath as o0,SwapKitError as v}from"@swapkit/helpers";class y0{derivationPath;ledgerApp=null;address=null;publicKey=null;injectedTransport;constructor(_,L){this.derivationPath=typeof _==="string"?_:n0(_||o0[d0.Sui]),this.injectedTransport=L}getLedgerPath(){return this.derivationPath.replace(/^m\//,"").replace(/\/(\d+)\/(\d+)$/,"/$1'/$2'")}async createTransportAndLedger(){if(this.ledgerApp)return;let _=this.injectedTransport??await q(),L=(await import("@ledgerhq/hw-app-sui")).default;this.ledgerApp=new L(_)}async connect(){if(await this.createTransportAndLedger(),!this.ledgerApp)throw new v("wallet_ledger_transport_error");let _=this.getLedgerPath(),L=await this.ledgerApp.getPublicKey(_);if(!L?.publicKey)throw new v("wallet_ledger_failed_to_get_address");return this.publicKey=L.publicKey,this.address=`0x${Buffer.from(L.address).toString("hex")}`,this.address}toSuiAddress(){if(!this.address)throw new v("wallet_ledger_failed_to_get_address");return this.address}async getAddress(){if(this.address)return this.address;return await this.connect()}async signTransaction(_){let L=_ instanceof Uint8Array?_:_.transaction;if(await this.createTransportAndLedger(),!this.ledgerApp)throw new v("wallet_ledger_transport_error");if(!this.publicKey)throw new v("wallet_ledger_failed_to_get_address");try{let R=this.getLedgerPath(),f=new Uint8Array(3+L.length);f[0]=0,f[1]=0,f[2]=0,f.set(L,3);let N=await this.ledgerApp.signTransaction(R,f);if(!N?.signature)throw new v("wallet_ledger_signing_error");let y=this.publicKey.length===33?this.publicKey.slice(1):this.publicKey;if(y.length!==32)throw new v("wallet_ledger_signing_error",{error:"Invalid public key length"});let w=new Uint8Array(97);w[0]=0,w.set(N.signature,1),w.set(y,65);let O=Buffer.from(w).toString("base64");return{bytes:Buffer.from(L).toString("base64"),signature:O}}catch(R){throw new v("wallet_ledger_signing_error",{error:R})}}}var f0=(_,L)=>new y0(_,L);import{base64 as C_}from"@scure/base";import{NetworkDerivationPath as p0,SwapKitError as Z_}from"@swapkit/helpers";import{base64 as i0}from"@scure/base";import{SwapKitError as I}from"@swapkit/helpers";var R_=(_)=>{if(_.length<64)throw new I("wallet_ledger_invalid_signature",{reason:"Too short"});if(_[0]!==48)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(_[1]+2!==_.length)throw new I("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(_[2]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let L=_[3],R=_.slice(4,L+4);if(R.length===33&&R[0]===0)R=R.slice(1,33);else if(R.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"r too long"});while(R.length<32)R.unshift(0);if(_[L+4]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let f=_[L+5];if(4+L+2+f!==_.length)throw new I("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let N=_.slice(L+6,_.length);if(N.length===33&&N[0]===0)N=N.slice(1,33);else if(N.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"s too long"});while(N.length<32)N.unshift(0);if(R.length!==32||N.length!==32)throw new I("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return i0.encode(Buffer.concat([R,N]))};function t0(_){if(typeof _==="string")return _;let L=_.chain?.toUpperCase(),R=(_.symbol||_.ticker||"").toUpperCase();if(!(L&&R))return R||L||"";if(_.synth)return`${L}/${R}`;return`${L}.${R}`}function a0(_){return{..._,msgs:_.msgs.map((L)=>{if(!L.type.includes("MsgDeposit"))return L;let R=L.value.coins;if(!Array.isArray(R))return L;return{...L,value:{...L.value,coins:R.map((f)=>({...f,asset:t0(f.asset)}))}}})}}class M_ extends n{pubKey=null;derivationPath;constructor(_=p0.THOR,L){super(L);this.chain="thor",this.derivationPath=_}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:_,bech32_address:L}=await this.getAddressAndPubKey();return this.pubKey=C_.encode(_),L};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(_.return_code,_.error_message),_};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(_.return_code,_.error_message),_};signTransaction=async(_,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:R,error_message:f,signature:N}=await this.ledgerApp.sign(this.derivationPath,_);if(!this.pubKey)throw new Z_("wallet_ledger_pubkey_not_found");return this.validateResponse(R,f),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:R_(N)}]};signAmino=async(_,L)=>{await this.checkOrCreateTransportAndLedger(!0);let R=(await this.getAccounts()).find((U)=>U.address===_);if(!R)throw new Z_("wallet_ledger_address_not_found",{address:_});let f=await import("@cosmjs/amino"),N=f.encodeSecp256k1Signature??f.default?.encodeSecp256k1Signature,y=f.serializeSignDoc??f.default?.serializeSignDoc,w=a0(L),{return_code:O,error_message:T,signature:B}=await this.ledgerApp.sign(this.derivationPath,y(w));return this.validateResponse(O,T),{signature:N(R.pubkey,C_.decode(R_(B))),signed:L}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{bech32_address:_,compressed_pk:L}=await this.getAddressAndPubKey();return this.pubKey=C_.encode(L),[{address:_,algo:"secp256k1",pubkey:L}]};sign=async(_)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:L,error_message:R,signature:f}=await this.ledgerApp.sign(this.derivationPath,_);if(!this.pubKey)throw new Z_("wallet_ledger_pubkey_not_found");return this.validateResponse(L,R),R_(f)}}import{derivationPathToString as e0,NetworkDerivationPath as r0,SwapKitError as i}from"@swapkit/helpers";class G0{derivationPath;ledgerApp=null;ledgerTimeout=50000;injectedTransport;constructor(_,L){this.derivationPath=typeof _==="string"?_:e0(_||r0.TRON),this.injectedTransport=L}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let _=this.injectedTransport??await q(),L=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new L(_)};getAddress=async()=>{let _=await this.getAddressAndPubKey();if(!_)throw new i("wallet_ledger_failed_to_get_address");return _.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let _=await this.ledgerApp?.getAddress(this.derivationPath);if(!_)throw new i("wallet_ledger_failed_to_get_address");return{address:_.address,publicKey:_.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(_)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new i("wallet_ledger_transport_error");try{let L=await this.ledgerApp.signTransaction(this.derivationPath,_.raw_data_hex,[]);if(!L)throw new i("wallet_ledger_signing_error");return{..._,signature:[L]}}catch(L){throw new i("wallet_ledger_signing_error",{error:L})}}}var w0=(_,L)=>new G0(_,L);import{hex as N_}from"@scure/base";import{derivationPathToString as s0,getWalletFormatFor as J_,SwapKitError as j_}from"@swapkit/helpers";var T0=["bitcoin-cash","dash","dogecoin","zcash"],O0=({tx:_,inputUtxos:L,btcApp:R,derivationPath:f,chain:N},y)=>{let w=L.map((Z)=>{return[R.splitTransaction(Z.txHex||"",!T0.includes(N),N==="zcash"),Z.index,void 0,void 0]}),O=N_.encode(_.unsignedTx),T=R.splitTransaction(O,!0),B=R.serializeTransactionOutputs(T).toString("hex"),U=J_(f),W=U!=="legacy",D={additionals:U==="bech32"?["bech32"]:[],associatedKeysets:w.map(()=>f),inputs:w,outputScriptHex:B,segwit:W,useTrustedInputForSegwit:W};return R.createPaymentTransaction({...D,...y})},_L=({tx:_,inputUtxos:L,btcApp:R,derivationPaths:f,chain:N},y)=>{if(f.length!==L.length)throw new j_("wallet_ledger_invalid_params",{message:`Derivation paths count (${f.length}) must match inputs count (${L.length})`});let w=L.map((Z)=>{return[R.splitTransaction(Z.txHex||"",!T0.includes(N),N==="zcash"),Z.index,void 0,void 0]}),O=N_.encode(_.unsignedTx),T=R.splitTransaction(O,!0),B=R.serializeTransactionOutputs(T).toString("hex"),U=J_(f[0]??""),W=U!=="legacy",D={additionals:U==="bech32"?["bech32"]:[],associatedKeysets:f,inputs:w,outputScriptHex:B,segwit:W,useTrustedInputForSegwit:W};return R.createPaymentTransaction({...D,...y})},x=({chain:_,additionalSignParams:L})=>{return(R,f)=>{let N,y=null;async function w(){y||=f??await q();let W=(await import("@ledgerhq/hw-app-btc")).default;return N||=new W({currency:_,transport:y}),N}async function O(){return N||await w()}async function T(){if(!f)await y?.close?.();N=void 0,y=null}let B=typeof R==="string"?R:s0(R),U=J_(B);return{connect:async()=>{await O()},disconnect:T,getAddress:async()=>{let{toCashAddress:W}=await import("@swapkit/toolboxes/utxo"),D=await O(),{bitcoinAddress:Z}=await D.getWalletPublicKey(B,{format:U});if(!Z)throw new j_("wallet_ledger_get_address_error",{message:`Cannot get ${_} address from ledger derivation path: ${B}`});return _==="bitcoin-cash"&&U==="legacy"?W(Z).replace(/(bchtest:|bitcoincash:)/,""):Z},getExtendedPublicKey:async(W="84'/0'/0'",D=76067358)=>{return(await O()).getWalletXpub({path:W,xpubVersion:D})},signPCZT:async(W)=>{if(_!=="zcash")throw new j_("wallet_ledger_chain_not_supported",{message:"PCZT signing is only supported for Zcash"});let D=await O(),{ZcashTransaction:Z,Script:J}=await import("@swapkit/utxo-signer"),j=W.getGlobal(),k=new Z({consensusBranchId:j.consensusBranchId,expiryHeight:j.expiryHeight,lockTime:j.lockTime,version:j.txVersion,versionGroupId:j.versionGroupId}),z=[];for(let X=0;X<W.inputsLength;X++){let F=W.getInput(X);k.addInput({index:F.index,script:new Uint8Array,sequence:F.sequence??4294967295,txid:F.txid,value:F.value}),z.push({hash:N_.encode(new Uint8Array([...F.txid].reverse())),index:F.index,txHex:LL(F,j),value:Number(F.value),witnessUtxo:{script:F.scriptPubkey,value:Number(F.value)}})}for(let X=0;X<W.outputsLength;X++){let F=W.getOutput(X);k.addOutput({amount:F.value,script:F.scriptPubkey})}let u=await O0({btcApp:D,chain:_,derivationPath:B,inputUtxos:z,tx:k},{...L,expiryHeight:(()=>{let X=Buffer.alloc(4);return X.writeUInt32LE(j.expiryHeight),X})(),lockTime:j.lockTime}),p=Z.fromHex(u,{allowUnknownOutputs:!0}),t=W.clone();for(let X=0;X<p.inputsLength;X++){let F=p.getInput(X);if(F.script&&F.script.length>0){let Y=J.decode(F.script);if(Y.length>=2)t.addSignature(X,Y[1],Y[0])}}return t},signTransaction:async(W,D)=>{let Z=await O();return O0({btcApp:Z,chain:_,derivationPath:B,inputUtxos:D,tx:W},L)},signTransactionWithMultiplePaths:async(W,D,Z)=>{let J=await O();return _L({btcApp:J,chain:_,derivationPaths:Z,inputUtxos:D,tx:W},L)}}}};function LL(_,L){let R=[],f=(L.txVersion|2147483648)>>>0;R.push(f&255,f>>8&255,f>>16&255,f>>24&255);let N=L.versionGroupId;R.push(N&255,N>>8&255,N>>16&255,N>>24&255),R.push(0);let y=_.index+1;if(y<253)R.push(y);else R.push(253,y&255,y>>8&255);for(let T=0;T<_.index;T++)R.push(0,0,0,0,0,0,0,0),R.push(0);let w=_.value;R.push(Number(w&0xffn),Number(w>>8n&0xffn),Number(w>>16n&0xffn),Number(w>>24n&0xffn),Number(w>>32n&0xffn),Number(w>>40n&0xffn),Number(w>>48n&0xffn),Number(w>>56n&0xffn));let O=_.scriptPubkey;if(O.length<253)R.push(O.length);else R.push(253,O.length&255,O.length>>8&255);for(let T of O)R.push(T);return R.push(L.lockTime&255,L.lockTime>>8&255,L.lockTime>>16&255,L.lockTime>>24&255),R.push(L.expiryHeight&255,L.expiryHeight>>8&255,L.expiryHeight>>16&255,L.expiryHeight>>24&255),R.push(0,0,0,0,0,0,0,0),R.push(0),R.push(0),R.push(0),N_.encode(new Uint8Array(R))}var B0=x({chain:"bitcoin"}),D0=x({chain:"litecoin"}),U0=x({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),W0=x({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),X0=x({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),F0=x({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let _=Buffer.alloc(4);return _.writeUInt32LE(0),_})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});import RL from"@ledgerhq/hw-app-xrp";import{Chain as NL,derivationPathToString as yL,NetworkDerivationPath as fL}from"@swapkit/helpers";import{encode as $0}from"ripple-binary-codec";var GL=2147483648;function wL(_){let L={};for(let R in _)if(_[R]!==null&&_[R]!==void 0)L[R]=_[R];return L}function OL(_){return new RL(_)}var C0=async(_,L)=>{let R=yL(_||fL[NL.Ripple]),f=L??await q(),N=OL(f),{address:y,publicKey:w}=await N.getAddress(R);async function O(T){let{hashes:B}=await import("xrpl"),W={...wL(T),Flags:T.Flags||GL,SigningPubKey:w.toUpperCase()},D=$0(W),Z=await N.signTransaction(R,D),J=$0({...W,TxnSignature:Z});return{hash:B.hashSignedTx(J),tx_blob:J}}return{getAddress:()=>y,signTransaction:O}};var S=async({chain:_,derivationPath:L,transport:R})=>{let{match:f}=await import("ts-pattern");return f(_).returnType().with($.THORChain,()=>Promise.resolve(new M_(L,R))).with($.Cosmos,()=>Promise.resolve(new F_(L,R))).with($.Bitcoin,()=>Promise.resolve(B0(L,R))).with($.BitcoinCash,()=>Promise.resolve(U0(L,R))).with($.Dash,()=>Promise.resolve(X0(L,R))).with($.Dogecoin,()=>Promise.resolve(W0(L,R))).with($.Litecoin,()=>Promise.resolve(D0(L,R))).with($.Zcash,()=>Promise.resolve(F0(L,R))).with($.Ripple,()=>Promise.resolve(C0(L,R))).with($.Tron,()=>Promise.resolve(w0(L,R))).with($.Sui,()=>Promise.resolve(f0(L,R))).with($.Near,()=>{return Promise.resolve(N0(L,R))}).with($.Arbitrum,$.Arc,$.Aurora,$.Avalanche,$.Berachain,$.BinanceSmartChain,$.Ethereum,$.Gnosis,$.Monad,$.Optimism,$.Polygon,$.Base,$.XLayer,async()=>{let{getProvider:N}=await import("@swapkit/toolboxes/evm"),y={derivationPath:L,provider:await N(_),transport:R};return f(_).with($.BinanceSmartChain,()=>s_(y)).with($.Avalanche,()=>i_(y)).with($.Arbitrum,()=>d_(y)).with($.Arc,()=>n_(y)).with($.Berachain,()=>R0(y)).with($.Optimism,()=>e_(y)).with($.Polygon,()=>r_(y)).with($.Base,()=>p_(y)).with($.Aurora,()=>o_(y)).with($.Gnosis,()=>a_(y)).with($.Monad,()=>_0(y)).with($.XLayer,()=>L0(y)).otherwise(()=>t_(y))}).otherwise(()=>{throw new TL("wallet_chain_not_supported",{chain:_,wallet:BL.LEDGER})})};var QL=JL({connect:({addChain:_,supportedChains:L,walletType:R})=>async function(N,y,{address:w,transport:O}={}){let[T]=DL({chains:N,supportedChains:L,walletType:R});if(!T)return!1;let B=y??WL[T],U=await HL({address:w,chain:T,derivationPath:B,transport:O});return _({...U,chain:T,walletType:Y_.LEDGER}),!0},directSigningSupport:{[G.Arbitrum]:!0,[G.Arc]:!0,[G.Aurora]:!0,[G.Avalanche]:!0,[G.Base]:!0,[G.Berachain]:!0,[G.BinanceSmartChain]:!0,[G.Ethereum]:!0,[G.Gnosis]:!0,[G.Monad]:!0,[G.Bitcoin]:!0,[G.BitcoinCash]:!0,[G.Cosmos]:!0,[G.Dash]:!0,[G.Dogecoin]:!0,[G.Litecoin]:!0,[G.Near]:!0,[G.Optimism]:!0,[G.Polygon]:!0,[G.Ripple]:!0,[G.Sui]:!0,[G.THORChain]:!0,[G.Tron]:!0,[G.XLayer]:!0},getExtendedPublicKey:AL,name:"connectLedger",supportedChains:[G.Arbitrum,G.Arc,G.Aurora,G.Avalanche,G.Base,G.Berachain,G.BinanceSmartChain,G.Bitcoin,G.BitcoinCash,G.Cosmos,G.Dash,G.Dogecoin,G.Ethereum,G.Gnosis,G.Litecoin,G.Monad,G.Near,G.Optimism,G.Polygon,G.Ripple,G.Sui,G.THORChain,G.XLayer,G.Tron,G.Zcash],walletType:Y_.LEDGER}),bR=YL(QL);function qL(_,L="t"){if(!_?.includes("=:"))return _;let R=_.includes(`:${L}:`)?_.split(`:${L}:`)[0]:_;return R?.substring(0,R.lastIndexOf(":"))}async function AL(_,L,{accountIndex:R}={}){if(![G.BitcoinCash,G.Bitcoin,G.Dash,G.Dogecoin,G.Litecoin,G.Zcash].includes(_))throw new h("wallet_chain_not_supported",{chain:_,wallet:Y_.LEDGER});let f=_,N=await S({chain:f,derivationPath:L});if(!N.getExtendedPublicKey)return;let y=q_({accountIndex:R,chain:f,derivationPath:L}),w=y_(y),O=_===G.Bitcoin||_===G.Litecoin?w:w.replace(/^m\//,""),T=j0(f).bip32.public;try{let B=await N.getExtendedPublicKey(O,T);return{accountIndex:Q_(y),path:w,xpub:B}}finally{await N.disconnect?.()}}async function HL({address:_,chain:L,derivationPath:R,transport:f}){switch(L){case G.BitcoinCash:case G.Bitcoin:case G.Dash:case G.Dogecoin:case G.Litecoin:case G.Zcash:{let k=function(X={}){return j(X)},{getUtxoToolbox:N}=await import("@swapkit/toolboxes/utxo"),y=L,w=await S({chain:L,derivationPath:R,transport:f}),O=_??await m({chain:L,ledgerClient:w}),T=ZL(O,y),B,U,W;if(L===G.Bitcoin){let{BitcoinPsbtLedger:X}=await import("../chunk-7v7cgm69.js"),F=X(R,f);U=T===XL.P2SH_P2WPKH?await F.getPublicKey():void 0,B={getAddress:F.getAddress,publicKey:U,signTransaction:F.signTransaction}}else if(L===G.BitcoinCash||L===G.Dogecoin||L===G.Dash||L===G.Litecoin){let{createLegacyPsbtSigner:X,signLegacyPsbtTransaction:F}=await import("../chunk-h2r568rz.js");B=X({address:O,chain:y,legacyClient:w}),W=async(Y)=>{let H=await F({chain:y,legacyClient:w,tx:Y});return D.broadcastTx(H)}}let D=B?await N(y,{scriptType:T,signer:B}):N(y,{scriptType:T}),Z=W??D.signAndBroadcastTransaction,J=async(X)=>{let F=X.feeRate||(await D.getFeeRates())[Z0.Average],Y=[G.Bitcoin].includes(L)?X.memo:qL(X.memo),{tx:H,inputs:c}=await D.createTransaction({...X,feeRate:F,fetchTxHex:!0,memo:Y,publicKey:X.publicKey??U,sender:O}),K=await w.signTransaction(H,c);return await D.broadcastTx(K)};async function j({accountIndex:X}={}){if(!w.getExtendedPublicKey)return;let F=q_({accountIndex:X,chain:y,derivationPath:R}),Y=y_(F),H=L===G.Bitcoin||L===G.Litecoin?Y:Y.replace(/^m\//,""),c=j0(y).bip32.public,K=await w.getExtendedPublicKey(H,c);return{accountIndex:Q_(F),path:Y,xpub:K}}async function z({accountIndex:X,index:F,change:Y=!1}){try{let H=ML({accountIndex:X,chain:y,change:Y,derivationPath:R,index:F}),c=await S({chain:y,derivationPath:H,transport:f}),K=await m({chain:y,ledgerClient:c});return{accountIndex:Q_(H),address:K,change:Y,index:F,path:y_(H),pubkey:""}}catch{return}}async function u({accountIndex:X,count:F,startIndex:Y=0,change:H=!1}){return M0("count",F),M0("startIndex",Y),(await Promise.all(Array.from({length:F},(K,a)=>z({accountIndex:X,change:H,index:Y+a})))).filter((K)=>!!K)}let p=CL({chain:y,deriveAddress:z,getBalance:D.getBalance,getUtxos:(X)=>jL(y).getUtxos({address:X,fetchTxHex:!0})});async function t({utxos:X,recipient:F,assetValue:Y,memo:H,feeRate:c,feeOptionKey:K,changeAddress:a}){if(!X.length)throw new h("wallet_ledger_invalid_params",{message:"No UTXOs provided for multi-address transfer"});let J0=c||(await D.getFeeRates())[K||Z0.Fast],f_=H?$L(H):null,A_=[{address:F,value:Y.getBaseValue("number")}];if(f_)A_.push({script:f_,value:0});let Y0=X.map(({hash:r,index:s,value:G_,txHex:w_,witnessUtxo:O_})=>({hash:r,index:s,txHex:w_,value:G_,witnessUtxo:O_})),{inputs:e,outputs:H_}=D.accumulative({chain:y,feeRate:J0,inputs:Y0,outputs:A_});if(!(e&&H_))throw new h("wallet_ledger_connection_error",{message:"Insufficient balance for multi-address transfer"});let{Transaction:Q0}=await import("@swapkit/utxo-signer"),E_=new Q0({allowLegacyWitnessUtxo:!0,version:1}),q0=a||X[0]?.address||F;FL({chain:y,compiledMemo:f_,inputs:e,outputs:H_,sender:q0,tx:E_});let A0=q_({chain:y,derivationPath:R}),H0=e.map((r)=>{let s=X.find((S_)=>S_.hash===r.hash&&S_.index===r.index),G_=s?.derivationIndex??0,w_=s?.isChange??!1,O_=[...A0,Number(w_),G_];return y_(O_)});if(!w.signTransactionWithMultiplePaths)throw new h("wallet_ledger_method_not_supported",{method:"signTransactionWithMultiplePaths"});let E0=await w.signTransactionWithMultiplePaths(E_,e,H0);return D.broadcastTx(E0)}return{...D,...p,address:O,deriveAddressAtIndex:z,deriveAddresses:u,getExtendedPublicKey:k,getExtendedPublicKeyInfo:j,signAndBroadcastTransaction:Z,transfer:J,transferFromMultipleAddresses:t}}case G.Ethereum:case G.Avalanche:case G.Arbitrum:case G.Arc:case G.Berachain:case G.Optimism:case G.Polygon:case G.BinanceSmartChain:case G.Base:case G.Aurora:case G.Gnosis:case G.Monad:case G.XLayer:{let{getEvmToolboxAsync:N}=await import("@swapkit/toolboxes/evm"),y=await S({chain:L,derivationPath:R,transport:f}),w=await m({chain:L,ledgerClient:y});return{...await N(L,{signer:y}),address:w}}case G.Cosmos:{let{createSigningStargateClient:N,getDefaultChainFee:y,getMsgSendDenom:w,getCosmosToolbox:O}=await import("@swapkit/toolboxes/cosmos"),T=await S({chain:L,derivationPath:R,transport:f}),B=await m({chain:L,ledgerClient:T});return{...await O(G.Cosmos,{signer:T}),address:B,transfer:async({assetValue:D,recipient:Z,memo:J})=>{if(!D)throw new h("wallet_ledger_invalid_asset");let j={amount:[{amount:D.getBaseValue("string"),denom:w(`u${D.symbol}`).toLowerCase()}],fromAddress:B,toAddress:Z},k=await UL(L),z=await N(k,T,"0.007uatom"),{transactionHash:u}=await z.signAndBroadcast(B,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:j}],y(G.Cosmos),J);return u}}}case G.THORChain:{let N=await S({chain:L,derivationPath:R,transport:f}),{getCosmosToolbox:y}=await import("@swapkit/toolboxes/cosmos"),w=y(L,{signer:N}),O=await m({chain:L,ledgerClient:N}),{sign:T}=N;return{...w,address:O,signMessage:T}}case G.Near:{let{getNearToolbox:N}=await import("@swapkit/toolboxes/near"),y=await S({chain:L,derivationPath:R,transport:f}),w=await y.getAddress();return{...N({signer:y}),address:w}}case G.Ripple:{let{getRippleToolbox:N}=await import("@swapkit/toolboxes/ripple"),y=await S({chain:L,derivationPath:R,transport:f}),w=y.getAddress();return{...N({signer:y}),address:w}}case G.Tron:{let{getTronToolbox:N}=await import("@swapkit/toolboxes/tron"),y=await S({chain:L,derivationPath:R,transport:f}),w=await m({chain:L,ledgerClient:y});return{...N({signer:y}),address:w}}case G.Sui:{let{getSuiToolbox:N}=await import("@swapkit/toolboxes/sui"),y=await S({chain:L,derivationPath:R,transport:f}),w=await m({chain:L,ledgerClient:y});return{...N({signer:y}),address:w}}default:throw new h("wallet_ledger_chain_not_supported",{chain:L})}}export{QL as ledgerWallet,AL as getLedgerExtendedPublicKey,bR as LEDGER_SUPPORTED_CHAINS};
1
+ import{Ea as U0,Fa as w$,Ga as m0}from"../chunk-ds2m83jp.js";import{Ia as L$}from"../chunk-jewm2ag3.js";import{$d as W}from"../chunk-nhva847d.js";import{hex as j5}from"@scure/base";import{Chain as z,derivationPathToString as D0,FeeOption as Q5,filterSupportedChains as e8,getUTXOScriptTypeForPath as $9,NetworkDerivationPath as Y9,SwapKitError as j0,UTXOScriptType as A0,WalletOption as N0}from"@swapkit/helpers";import{addInputsAndOutputs as J9,assertDerivationIndex as Z5,compileMemo as j9,createHDWalletHelpers as Q9,getNetworkForChain as X5,getScriptTypeForAddress as Z9,getUTXOAccountIndexFromPath as s0,getUTXOAccountPath as z5,getUTXOAddressPath as G5,getUtxoApi as q5}from"@swapkit/toolboxes/utxo";import{createWallet as G9,getWalletSupportedChains as B9}from"@swapkit/wallet-core";import{match as L0,P as B5}from"ts-pattern";import{SwapKitError as Z0}from"@swapkit/helpers";import{filter as y5,firstValueFrom as r0,map as b5,timeout as A5}from"rxjs";import{SwapKitError as O0}from"@swapkit/helpers";import{match as n0}from"ts-pattern";var E0={Completed:"completed",Error:"error",Stopped:"stopped"},C={None:"none",SignTransaction:"sign-transaction",VerifyAddress:"verify-address"},N5=new Set(["6985","5501"]),e=["6986"],L5=new Set(["5515"]),w5=new Set(["6511","6807","6d00","6e00"]),K5=new Set(["DeviceDisconnectedBeforeSendingApdu","DeviceDisconnectedWhileSendingError","DeviceNotRecognizedError","DeviceSessionNotFound","NoAccessibleDeviceError","ReconnectionFailedError"]),_5=new Set(["DisconnectedDevice","DisconnectedDeviceDuringOperation"]),R5=new Set(["UserRefusedOnDevice"]),O5=4,U5=/^(?:0x)?([0-9a-f]{4})$/i;function k5($){let Y=[],J=$;while(Y.length<O5&&typeof J==="object"&&J!==null){let j=J;Y.push(j),J=j.originalError}return Y}function f5({errorCode:$,statusCode:Y}){let J=typeof $==="string"?U5.exec($)?.[1]:void 0;if(J)return J.toLowerCase();return typeof Y==="number"?Y.toString(16).padStart(4,"0"):void 0}function d($,{userRefusedStatusWords:Y=[]}={}){let J=k5($),j=J.find((X)=>X instanceof O0);if(j)return j;let Q=J.flatMap(({_tag:X})=>typeof X==="string"?[X]:[]),Z=J.flatMap(({name:X})=>typeof X==="string"?[X]:[]),B=J.map(f5).find((X)=>X!==void 0),G=J.map((X)=>X.message).filter((X)=>typeof X==="string"&&X.length>0).at(-1),V=new Set([...N5,...Y]),q=n0({errorNames:Z,errorTags:Q,statusWord:B}).when(({errorNames:X,errorTags:F,statusWord:H})=>F.includes("RefusedByUserDAError")||X.some((M)=>R5.has(M))||!!H&&V.has(H),()=>"wallet_connection_rejected_by_user").when(({errorTags:X,statusWord:F})=>X.includes("DeviceLockedError")||!!F&&L5.has(F),()=>"wallet_ledger_device_locked").when(({errorTags:X,statusWord:F})=>X.includes("UnsupportedApplicationDAError")||!!F&&w5.has(F),()=>"wallet_ledger_app_not_open").when(({errorNames:X,errorTags:F})=>F.some((H)=>K5.has(H))||X.some((H)=>_5.has(H)),()=>"wallet_ledger_connection_error").otherwise(()=>"wallet_ledger_transport_error");return new O0({errorKey:q,info:{errorTag:Q[0],message:G,statusWord:B}},$)}function A({action:$,onDeviceActionState:Y,userRefusedStatusWords:J}){return new Promise((j,Q)=>{let Z;try{Z=$().observable}catch(q){Q(d(q,{userRefusedStatusWords:J}));return}let B=!1,G;function V(q){if(B)return;B=!0,G?.unsubscribe(),q()}if(G=Z.subscribe({complete:()=>{V(()=>Q(new O0("wallet_ledger_invalid_response")))},error:(q)=>{V(()=>Q(d(q,{userRefusedStatusWords:J})))},next:(q)=>{try{Y?.(q)}catch(X){}n0(q).with({status:E0.Completed},({output:X})=>V(()=>j(X))).with({status:E0.Error},({error:X})=>V(()=>Q(d(X,{userRefusedStatusWords:J})))).with({status:E0.Stopped},()=>V(()=>Q(new O0("wallet_ledger_connection_error")))).otherwise(()=>{return})}}),B)G.unsubscribe()})}var D5=1000,C0,x;function T5(){if(typeof navigator>"u"||!("hid"in navigator))return Promise.reject(new Z0("wallet_ledger_webhid_not_supported"));return Promise.all([import("../chunk-k3thje6a.js"),import("../chunk-3t17wpjg.js")]).then(([{DeviceManagementKitBuilder:$},{webHidTransportFactory:Y}])=>new $().addTransport(Y).build()).catch(($)=>{if(C0=void 0,$ instanceof Z0)throw $;throw new Z0("wallet_ledger_connection_error",$)})}function a0(){return C0??=T5(),C0}function P0(){return a0().then(($)=>t0({dmk:$}))}function I5($){return typeof $==="object"&&$!==null&&"_tag"in $&&$._tag==="DeviceSessionNotFound"}function E5({dmk:$,sessionId:Y}){try{return $.getConnectedDevice({sessionId:Y}),!0}catch(J){return!1}}async function C5({sessionPromise:$}){let Y=$;try{let J=await Y;if(E5(J))return J;if(x===Y)x=P0();return x??=P0(),Y=x,await Y}catch(J){if(x===Y)x=void 0;if(J instanceof Z0)throw J;throw new Z0("wallet_ledger_connection_error",J)}}async function P5(){let $=typeof navigator>"u"?void 0:navigator.hid;if(typeof $?.getDevices!=="function")return!1;try{let[Y,{LEDGER_VENDOR_ID:J}]=await Promise.all([$.getDevices(),import("../chunk-k3thje6a.js")]);return Y.some(({vendorId:j})=>j===J)}catch(Y){return!1}}async function v5({dmk:$}){if(!await P5())return;try{return await r0($.listenToAvailableDevices({}).pipe(b5(([Y])=>Y),y5((Y)=>Y!==void 0),A5({first:D5})))}catch(Y){return}}async function t0({dmk:$}){let Y=!1;try{let J=await v5({dmk:$});if(J)return{dmk:$,sessionId:await $.connect({device:J})};let j=$.startDiscovering({});Y=!0;let Q=await r0(j),Z=await $.connect({device:Q});return{dmk:$,sessionId:Z}}catch(J){if(J instanceof Z0)throw J;throw new Z0("wallet_ledger_connection_error",J)}finally{if(Y)try{await $.stopDiscovering()}catch(J){}}}function n({dmk:$}={}){if($)return t0({dmk:$});return x??=P0(),C5({sessionPromise:x})}function $0({build:$,dmkSession:Y}){let J;return async function(){let Q=Y??await n();if(J?.session.dmk!==Q.dmk||J.session.sessionId!==Q.sessionId){let Z=Promise.resolve().then(()=>$(Q));J={session:Q,signer:Z};let B=J;Z.catch(()=>{if(J===B)J=void 0})}return J.signer}}function e0(){let $=a0();return $.catch(()=>{return}),$}async function $$({dmkSession:$}={}){let Y=x,J=$;if(!J){if(!Y)return;if(x===Y)x=void 0;try{J=await Y}catch{return}}if(Y)try{let j=await Y;if(x===Y&&j.dmk===J.dmk&&j.sessionId===J.sessionId)x=void 0}catch(j){if(x===Y)x=void 0}try{await J.dmk.disconnect({sessionId:J.sessionId})}catch(j){if(I5(j))return;throw d(j)}}import{Chain as b,SwapKitError as S5,WalletOption as x5}from"@swapkit/helpers";var r=async({chain:$,ledgerClient:Y})=>{if(!Y)return"";switch($){case b.Cosmos:case b.THORChain:return Y.connect();case b.Ethereum:case b.BinanceSmartChain:case b.Avalanche:case b.Polygon:case b.Arbitrum:case b.Arc:case b.Berachain:case b.Optimism:case b.Base:case b.Aurora:case b.Gnosis:case b.Monad:case b.XLayer:return Y.getAddress();case b.Bitcoin:case b.BitcoinCash:case b.Dash:case b.Dogecoin:case b.Litecoin:case b.Zcash:{let J=Y;await J.connect();let j=await J.getAddress();return $===b.BitcoinCash?j.replace("bitcoincash:",""):j}case b.Near:return await Y.getAddress();case b.Ripple:return Y.getAddress();case b.Tron:return Y.getAddress();case b.Sui:return Y.connect();default:throw new S5("wallet_chain_not_supported",{chain:$,wallet:x5.LEDGER})}};import{Chain as _,EVMChains as r8,NetworkDerivationPath as a8,SwapKitError as o0,WalletOption as t8}from"@swapkit/helpers";import{hex as p}from"@scure/base";import{HARDENED_OFFSET as W$,HDKey as M$}from"@scure/bip32";import{Chain as H0,derivationPathToString as i5,NetworkDerivationPath as n5,SwapKitError as g}from"@swapkit/helpers";import{match as K$}from"ts-pattern";import{hex as u5}from"@scure/base";import{derivationPathToString as c5,getWalletFormatFor as x0,SwapKitError as G$}from"@swapkit/helpers";import{SwapKitError as m5}from"@swapkit/helpers";function l5($){return typeof $==="object"&&$!==null&&!Array.isArray($)}function s({paramsOrPath:$,transport:Y}){if(l5($))return $;return{derivationPath:$,transport:Y}}async function u({appName:$,connection:Y,createApp:J,operation:j,requiredUserInteraction:Q=C.None}){let{dmkSession:Z,onDeviceActionState:B,transport:G}=Y;if(Z&&G)throw new m5("wallet_ledger_invalid_params",{message:"Provide either a Ledger DMK session or a LedgerJS transport, not both"});if(G)try{return await j(J(G))}catch(O){throw d(O)}let V=Z??await n(),[{CallTaskInAppDeviceAction:q,DmkResultFactory:X,UnknownDeviceExchangeError:F},{LedgerJsDmkTransport:H}]=await Promise.all([import("../chunk-k3thje6a.js"),import("../chunk-0arpsm5f.js")]),M=new q({input:{appName:$,requiredUserInteraction:Q,skipOpenApp:!1,task:async(O)=>{try{let y=await j(J(new H(O)));return X({data:{output:y}})}catch(y){return X({error:new F(y)})}}}});return(await A({action:()=>V.dmk.executeDeviceAction({deviceAction:M,sessionId:V.sessionId}),onDeviceActionState:B})).output}import{SwapKitError as g5}from"@swapkit/helpers";var Y$=100,J$={cla:224,ins:74},v0=0,j$=128,h5=[0,144,0];function Q$($,Y){let J=$[Y];if(J===void 0||J===255)return;if(J<253)return{size:1,value:J};let j=J===253?2:4;if(Y+1+j>$.length)return;let Q=new DataView($.buffer,$.byteOffset+Y+1,j);return{size:1+j,value:j===2?Q.getUint16(0,!0):Q.getUint32(0,!0)}}function S0($,Y){let J=(B,G={})=>new g5({errorKey:"wallet_ledger_invalid_params",info:{chain:Y,maxLength:Y$,operation:"splitOutputsForLegacyApp",outputsLength:$.length,reason:B,...G}}),j=Q$($,0);if(!j?.value)throw J("Transaction outputs do not start with a readable non-zero output count");let Q=[],Z=j.size;for(let B=0;B<j.value;B+=1){let G=B===0?0:Z,V=Q$($,Z+8),q=V?Z+8+V.size+V.value:void 0;if(!q||q>$.length)throw J("Transaction output is truncated",{outputIndex:B});let X=q-G;if(X>Y$)throw J("Output is longer than the Ledger app can check; shorten the memo",{outputIndex:B,pieceLength:X});Q.push($.subarray(G,q)),Z=q}if(Z!==$.length)throw J("Transaction outputs are followed by trailing bytes",{trailingBytes:$.length-Z});return Q}function Z$($,Y){let J=[],j=async(Q,Z,B,G,V=Buffer.alloc(0),...q)=>{if(!(Q===J$.cla&&Z===J$.ins&&(B===v0||B===j$)))return $.send(Q,Z,B,G,V,...q);if(J.push(V),B===v0)return Buffer.from(h5);let F=Buffer.concat(J);J=[];let H=S0(F,Y),M=Buffer.alloc(0);for(let[N,O]of H.entries()){let y=N===H.length-1?j$:v0;M=await $.send(Q,Z,y,G,Buffer.from(O),...q)}return M};return new Proxy($,{get:(Q,Z,B)=>Z==="send"?j:Reflect.get(Q,Z,B)})}var B$=["bitcoin-cash","dash","dogecoin","zcash"],d5=["bitcoin-cash","dash","dogecoin","litecoin"],p5={bitcoin:"Bitcoin","bitcoin-cash":"Bitcoin Cash",dash:"Dash",dogecoin:"Dogecoin",litecoin:"Litecoin",zcash:"Zcash"},o5=({outputScriptHex:$,inputUtxos:Y,btcApp:J,derivationPath:j,chain:Q},Z)=>{let B=Y.map((X)=>{return[J.splitTransaction(X.txHex||"",!B$.includes(Q),Q==="zcash"),X.index,void 0,void 0]}),G=x0(j),V=G!=="legacy",q={additionals:G==="bech32"?["bech32"]:[],associatedKeysets:B.map(()=>j),inputs:B,outputScriptHex:$,segwit:V,useTrustedInputForSegwit:V};return J.createPaymentTransaction({...q,...Z})},s5=({outputScriptHex:$,inputUtxos:Y,btcApp:J,derivationPaths:j,chain:Q},Z)=>{if(j.length!==Y.length)throw new G$("wallet_ledger_invalid_params",{message:`Derivation paths count (${j.length}) must match inputs count (${Y.length})`});let B=Y.map((X)=>{return[J.splitTransaction(X.txHex||"",!B$.includes(Q),Q==="zcash"),X.index,void 0,void 0]}),G=x0(j[0]??""),V=G!=="legacy",q={additionals:G==="bech32"?["bech32"]:[],associatedKeysets:j,inputs:B,outputScriptHex:$,segwit:V,useTrustedInputForSegwit:V};return J.createPaymentTransaction({...q,...Z})},X0=({chain:$,additionalSignParams:Y})=>{let J=d5.includes($);return(j,Q)=>{let{derivationPath:Z,...B}=s({paramsOrPath:j,transport:Q}),G=typeof Z==="string"?Z:c5(Z),V=x0(G);async function q({operation:F,requiredUserInteraction:H}){let M=(await import("@ledgerhq/hw-app-btc")).default;return u({appName:p5[$],connection:B,createApp:(N)=>new M({currency:$,transport:J?Z$(N,$):N}),operation:F,requiredUserInteraction:H})}async function X(F){let[{splitTransaction:H},{serializeTransactionOutputs:M}]=await Promise.all([import("@ledgerhq/hw-app-btc/splitTransaction"),import("@ledgerhq/hw-app-btc/serializeTransaction")]),N=M(H(u5.encode(F.unsignedTx),!0));if(J)S0(N,$);return N.toString("hex")}return{connect:async()=>{await q({operation:async()=>!0})},disconnect:async()=>{},getAddress:async()=>{let{toCashAddress:F}=await import("@swapkit/toolboxes/utxo"),{bitcoinAddress:H}=await q({operation:(M)=>M.getWalletPublicKey(G,{format:V})});if(!H)throw new G$("wallet_ledger_get_address_error",{message:`Cannot get ${$} address from ledger derivation path: ${G}`});return $==="bitcoin-cash"&&V==="legacy"?F(H).replace(/(bchtest:|bitcoincash:)/,""):H},getExtendedPublicKey:async(F="84'/0'/0'",H=76067358)=>{return await q({operation:(M)=>M.getWalletXpub({path:F,xpubVersion:H})})},signTransaction:async(F,H)=>{let M=await X(F);return await q({operation:(N)=>o5({btcApp:N,chain:$,derivationPath:G,inputUtxos:H,outputScriptHex:M},Y),requiredUserInteraction:C.SignTransaction})},signTransactionWithMultiplePaths:async(F,H,M)=>{let N=await X(F);return await q({operation:(O)=>s5({btcApp:O,chain:$,derivationPaths:M,inputUtxos:H,outputScriptHex:N},Y),requiredUserInteraction:C.SignTransaction})}}}},X$=X0({chain:"bitcoin"}),z$=X0({chain:"litecoin"}),q$=X0({additionalSignParams:{additionals:["abc","cashaddr"],segwit:!1,sigHashType:65,useTrustedInputForSegwit:!0},chain:"bitcoin-cash"}),V$=X0({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),H$=X0({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),F$=X0({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let $=Buffer.alloc(4);return $.writeUInt32LE(0),$})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});function _$($){return(typeof $==="string"?$:i5($)).replace(/^m\//,"").replace(/^\/+/,"")}function N$({path:$,reason:Y}){return new g("wallet_ledger_invalid_params",{path:$,reason:Y})}function R$($){let Y=_$($),J=/^(44|49|84|86)'\/0'\/(\d+)'(?:\/(0|1)\/(\d+))?$/.exec(Y);if(!J)throw N$({path:Y,reason:"Expected a Bitcoin path with purpose 44, 49, 84, or 86 and coin type 0"});let j=Number(J[1]),Q=Number(J[2]),Z=Number(J[3]??0),B=Number(J[4]??0);if(Q>=W$||B>=W$)throw N$({path:Y,reason:"Account and address index must be below 2^31"});let G=`${j}'/0'/${Q}'`;return{accountPath:G,addressIndex:B,change:Z,fullPath:`${G}/${Z}/${B}`,purpose:j}}function r5($){if($.length!==4)throw new g("wallet_ledger_invalid_response",{reason:`Expected a 4-byte master fingerprint, received ${$.length}`});return new DataView($.buffer,$.byteOffset,$.byteLength).getUint32(0,!1)}function l0({count:$,tx:Y}){if($!==Y.inputsLength)throw new g("wallet_ledger_invalid_params",{reason:`Input metadata count (${$}) must match transaction inputs count (${Y.inputsLength})`})}function a5({accountPath:$,derivationPaths:Y,tx:J}){l0({count:Y.length,tx:J});let j=Y.map(R$),Q=j.find((Z)=>Z.accountPath!==$);if(Q)throw new g("wallet_ledger_invalid_params",{accountPath:$,path:Q.fullPath,reason:"All input derivation paths must belong to the configured Bitcoin account"});return j}function t5($){return import("../chunk-xmvg4cds.js").then(({DefaultDescriptorTemplate:Y})=>K$($).with(44,()=>Y.LEGACY).with(49,()=>Y.NESTED_SEGWIT).with(84,()=>Y.NATIVE_SEGWIT).with(86,()=>Y.TAPROOT).exhaustive())}function e5($){return"signature"in $&&"pubkey"in $}function Y0({inputIndex:$,reason:Y}){return new g("wallet_ledger_invalid_response",{inputIndex:$,reason:Y})}async function $8({input:$,inputIndex:Y,previousTransaction:J}){if(!(J&&$.txid&&$.index!==void 0))throw Y0({inputIndex:Y,reason:"PSBT input is missing its previous output"});let{RawTx:j,utils:Q}=await import("@swapkit/utxo-signer"),Z=j.encode({...J,segwitFlag:!1,witnesses:void 0}),B=Q.sha256x2(Z).reverse();if(p.encode(B)!==p.encode($.txid))throw new g("wallet_ledger_invalid_params",{inputIndex:Y,reason:"Previous transaction does not match the input txid"});let G=J.outputs[$.index];if(!G)throw Y0({inputIndex:Y,reason:"Previous transaction has no spent output"});let{witnessUtxo:V}=$;if(V&&(V.amount!==G.amount||p.encode(V.script)!==p.encode(G.script)))throw new g("wallet_ledger_invalid_params",{inputIndex:Y,reason:"Input witnessUtxo does not match the previous transaction output"});return G}async function Y8({inputIndex:$,path:Y,publicKey:J,spentOutput:j}){let{p2pkh:Q,p2sh:Z,p2tr:B,p2wpkh:G}=await import("@swapkit/utxo-signer"),V=K$(Y.purpose).with(44,()=>Q(J).script).with(49,()=>Z(G(J)).script).with(84,()=>G(J).script).with(86,()=>B(J.slice(1)).script).exhaustive();if(p.encode(V)===p.encode(j.script))return;throw new g("wallet_ledger_invalid_params",{inputIndex:$,path:Y.fullPath,reason:"Input does not spend the script derived from its derivation path"})}function O$({derivationPath:$=n5.BTC,dmkSession:Y,onDeviceActionState:J,transport:j}={}){let Q=R$($),Z=j?X$($,j):void 0,B=$0({build:async(L)=>{let{SignerBtcBuilder:w}=await import("../chunk-xmvg4cds.js");return new w(L).build()},dmkSession:Y}),G,V;function q(){if(Z)throw new g("wallet_ledger_invalid_params",{reason:"A Device Signer Kit operation is unavailable when a legacy transport is supplied"});return B()}function X(){if(!G){G=q().then(async(w)=>{let{extendedPublicKey:k}=await A({action:()=>w.getExtendedPublicKey(Q.accountPath),onDeviceActionState:J});return k});let L=G;L.catch(()=>{if(G===L)G=void 0})}return G}function F(){if(!V){V=q().then(async(w)=>{let{masterFingerprint:k}=await A({action:()=>w.getMasterFingerprint(),onDeviceActionState:J});return r5(k)});let L=V;L.catch(()=>{if(V===L)V=void 0})}return V}async function H(){let L=Z?await Z.getExtendedPublicKey(Q.accountPath):await X(),{publicKey:w}=M$.fromExtendedKey(L).derive(`m/${Q.change}/${Q.addressIndex}`);if(!w)throw new g("wallet_ledger_invalid_response",{path:Q.fullPath,reason:"Could not derive a public key from the Ledger account xpub"});return w}async function M(){let[{DefaultWallet:L},w]=await Promise.all([import("../chunk-xmvg4cds.js"),t5(Q.purpose)]);return new L(Q.accountPath,w)}async function N({inputUtxos:L,tx:w}){let{RawTx:k}=await import("@swapkit/utxo-signer"),K=Array.from({length:w.inputsLength},(R,U)=>U).some((R)=>!(w.getInput(R).nonWitnessUtxo||L?.[R]?.txHex))?await import("@swapkit/toolboxes/utxo").then(({getUtxoApi:R})=>{let U=R(H0.Bitcoin);return U0((f)=>U.getRawTx(f))}):void 0;return Promise.all(Array.from({length:w.inputsLength},async(R,U)=>{let f=w.getInput(U);if(f.nonWitnessUtxo)return f.nonWitnessUtxo;if(!f.txid)throw Y0({inputIndex:U,reason:"PSBT input is missing its previous txid"});let D=L?.[U]?.txHex??await K?.(p.encode(f.txid));if(!D)throw new g("wallet_ledger_invalid_params",{inputIndex:U,reason:"Unable to resolve the previous transaction for Ledger signing"});return k.decode(p.decode(D))}))}async function O({inputUtxos:L,paths:w,tx:k}){let[P,K,R]=await Promise.all([X(),F(),N({inputUtxos:L,tx:k})]),{bip32Path:U}=await import("@swapkit/utxo-signer"),f=M$.fromExtendedKey(P),D=k.clone(),S=[];for(let[T,E]of w.entries()){let l=f.derive(`m/${E.change}/${E.addressIndex}`).publicKey;if(!l)throw new g("wallet_ledger_invalid_response",{inputIndex:T,reason:"Could not derive a public key from the Ledger account xpub"});S[T]=l;let Q0=D.getInput(T),t=R[T],i=await $8({input:Q0,inputIndex:T,previousTransaction:t});await Y8({inputIndex:T,path:E,publicKey:l,spentOutput:i});let V0={fingerprint:K,path:U(`m/${E.fullPath}`)};if(E.purpose===86){let w0=l.slice(1);D.updateInput(T,{tapBip32Derivation:[[w0,{der:V0,hashes:[]}]],tapInternalKey:w0,witnessUtxo:i})}else D.updateInput(T,{bip32Derivation:[[l,V0]],nonWitnessUtxo:t,witnessUtxo:E.purpose===44?void 0:i});await L$({chain:H0.Bitcoin,indexes:[T],publicKey:l,tx:D})}return{psbt:D,publicKeys:S}}async function y({inputUtxos:L,paths:w,tx:k}){let[P,K,{psbt:R,publicKeys:U}]=await Promise.all([q(),M(),O({inputUtxos:L,paths:w,tx:k})]),f=R.toPSBT(0),D=await A({action:()=>P.signPsbt(K,f),onDeviceActionState:J}),S=new Set;for(let T of D){if(!e5(T))throw Y0({reason:"Unexpected MuSig2 signature"});let{inputIndex:E,pubkey:l}=T,Q0=w[E],t=U[E];if(!(Q0&&t)||S.has(E))throw Y0({inputIndex:E,reason:"Unexpected or duplicate input signature"});if(S.add(E),Q0.purpose===86){if(T.tapleafHash)throw Y0({inputIndex:E,reason:"Unexpected taproot script signature"});R.updateInput(E,{tapKeySig:T.signature});continue}if(p.encode(l)!==p.encode(t))throw Y0({inputIndex:E,reason:"Signature public key does not match the input derivation"});R.updateInput(E,{partialSig:[[t,T.signature]]})}if(S.size!==R.inputsLength)throw Y0({reason:`Ledger signed ${S.size} of ${R.inputsLength} inputs`});return R}function I(L){return L.finalize(),L.hex}function h({tx:L,inputUtxos:w}){if(w)l0({count:w.length,tx:L});if(Z)return w?Z.signTransaction(L,w):m0({chain:H0.Bitcoin,legacyClient:Z,tx:L});let k=Array.from({length:L.inputsLength},()=>Q);return y({inputUtxos:w,paths:k,tx:L}).then(I)}return{connect:async()=>{if(Z)return Z.connect();await q()},disconnect:async()=>Z?.disconnect(),getAddress:async()=>{if(Z)return Z.getAddress();let L=await q(),w=await M(),{address:k}=await A({action:()=>L.getWalletAddress(w,Q.addressIndex,{change:Q.change===1}),onDeviceActionState:J});if(!k)throw new g("wallet_ledger_get_address_error",{path:Q.fullPath});return k},getExtendedPublicKey:async({checkOnDevice:L=!1,path:w=Q.accountPath}={})=>{if(Z)return Z.getExtendedPublicKey(w);let k=await q(),P=_$(w),{extendedPublicKey:K}=await A({action:()=>k.getExtendedPublicKey(P,{checkOnDevice:L}),onDeviceActionState:J});return K},getPublicKey:H,showAddressAndPubKey:async()=>{if(Z)return{address:await Z.getAddress()};let L=await q(),w=await M();return A({action:()=>L.getWalletAddress(w,Q.addressIndex,{change:Q.change===1,checkOnDevice:!0}),onDeviceActionState:J})},signTransaction:async(L)=>{if(Z){let k=await m0({chain:H0.Bitcoin,legacyClient:Z,tx:L}),{Transaction:P}=await import("@swapkit/utxo-signer");return P.fromRaw(p.decode(k),{allowUnknownOutputs:!0})}let w=Array.from({length:L.inputsLength},()=>Q);return await y({paths:w,tx:L})},signTransactionHex:h,signTransactionWithMultiplePaths:async({derivationPaths:L,inputUtxos:w,tx:k})=>{if(w)l0({count:w.length,tx:k});let P=a5({accountPath:Q.accountPath,derivationPaths:L,tx:k});if(Z){let K=w??await w$(k,H0.Bitcoin);return Z.signTransactionWithMultiplePaths(k,K,P.map((R)=>`m/${R.fullPath}`))}return y({inputUtxos:w,paths:P,tx:k}).then(I)}}}import{hex as g0}from"@scure/base";import{derivationPathToString as Z8,NetworkDerivationPath as G8,SwapKitError as z0}from"@swapkit/helpers";var U$=0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n,J8=U$>>1n;function j8($){return $.reduce((Y,J)=>Y<<8n|BigInt(J),0n)}function Q8($){let Y=new Uint8Array(32),J=$;for(let j=31;j>=0;j-=1)Y[j]=Number(J&0xffn),J>>=8n;return Y}function k0($){let Y=j8($.subarray(32,64));if(Y<=J8)return $;let J=new Uint8Array(64);return J.set($.subarray(0,32),0),J.set(Q8(U$-Y),32),J}function B8($){let Y=(typeof $==="string"?$:Z8($)).replace(/^m\//,"").replace(/^\/+/,"");if(!/^44'\/118'\/\d+'\/(0|1)\/\d+$/.test(Y))throw new z0("wallet_ledger_invalid_params",{path:Y,reason:"Expected a five-level Cosmos derivation path with coin type 118"});return Y}async function k$($){let{Secp256k1Signature:Y}=await import("@cosmjs/crypto");try{return k0($.length===64?Y.fromFixedLength($).toFixedLength():Y.fromDer($).toFixedLength())}catch(J){throw new z0("wallet_ledger_invalid_response",J)}}class h0{chain="cosmos";derivationPath;onDeviceActionState;transport;legacyAppPromise;pubKey=null;getSessionSigner;constructor({derivationPath:$=G8.GAIA,dmkSession:Y,onDeviceActionState:J,transport:j}={}){this.derivationPath=B8($),this.getSessionSigner=$0({build:async(Q)=>{let{SignerCosmosBuilder:Z}=await import("../chunk-eenx3cv6.js");return new Z(Q).build()},dmkSession:Y}),this.onDeviceActionState=J,this.transport=j}getSigner(){if(this.transport)throw new z0("wallet_ledger_invalid_params",{reason:"A Device Signer Kit operation is unavailable when a legacy transport is supplied"});return this.getSessionSigner()}getLegacyApp(){if(!this.transport)throw new z0("wallet_ledger_invalid_params",{reason:"Legacy Cosmos transport is unavailable"});return this.legacyAppPromise??=import("@ledgerhq/hw-app-cosmos").then(({default:$})=>new $(this.transport)),this.legacyAppPromise}async runLegacyOperation($){let Y=await this.getLegacyApp();try{return await $(Y)}catch(J){throw d(J,{userRefusedStatusWords:e})}}async signBytes($){if(this.transport){let j=await this.runLegacyOperation((Q)=>Q.sign(this.derivationPath,new TextDecoder().decode($)));if(j.return_code!==36864||!j.signature)throw new z0("wallet_ledger_invalid_response",{returnCode:j.return_code});return k$(j.signature)}let Y=await this.getSigner(),J=await A({action:()=>Y.signTransaction(this.derivationPath,this.chain,$),onDeviceActionState:this.onDeviceActionState,userRefusedStatusWords:e});return k$(J)}async connect(){if(this.transport)await this.getLegacyApp();else await this.getSigner();let{address:$,publicKey:Y}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(Y,"hex").toString("base64"),$}async disconnect(){}async getAddressAndPubKey(){if(this.transport)return this.runLegacyOperation((j)=>j.getAddress(this.derivationPath,this.chain));let $=await this.getSigner(),{address:Y,publicKey:J}=await A({action:()=>$.getAddress(this.derivationPath,this.chain),onDeviceActionState:this.onDeviceActionState,userRefusedStatusWords:e});return{address:Y,publicKey:g0.encode(J)}}async showAddressAndPubKey(){if(this.transport)return this.runLegacyOperation((j)=>j.getAddress(this.derivationPath,this.chain,!0));let $=await this.getSigner(),{address:Y,publicKey:J}=await A({action:()=>$.getAddress(this.derivationPath,this.chain,{checkOnDevice:!0}),onDeviceActionState:this.onDeviceActionState,userRefusedStatusWords:e});return{address:Y,publicKey:g0.encode(J)}}async signTransaction($,Y="0"){let J=await this.signBytes(typeof $==="string"?new TextEncoder().encode($):$);if(!this.pubKey){let{publicKey:j}=await this.getAddressAndPubKey();this.pubKey=Buffer.from(j,"hex").toString("base64")}return[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:Y,signature:J}]}async signAmino($,Y){let j=(await this.getAccounts()).find(({address:G})=>G===$);if(!j)throw new z0("wallet_ledger_address_not_found",{address:$});let{encodeSecp256k1Signature:Q,serializeSignDoc:Z}=await import("@cosmjs/amino"),B=await this.signBytes(Z(Y));return{signature:Q(j.pubkey,B),signed:Y}}async getAccounts(){let{address:$,publicKey:Y}=await this.getAddressAndPubKey();return[{address:$,algo:"secp256k1",pubkey:g0.decode(Y)}]}}import{ChainId as v,derivationPathToString as X8,NetworkDerivationPath as z8,SwapKitError as G0}from"@swapkit/helpers";import{AbstractSigner as q8}from"ethers";function V8({primaryType:$,types:Y}){let J={};function j(Q){if(Object.hasOwn(J,Q)||!Object.hasOwn(Y,Q))return;let Z=Y[Q];if(!Z)return;J[Q]=Z;for(let B of Z)j(B.type.replace(/\[[0-9]*\]/g,""))}if(j($),!Object.hasOwn(J,$))throw new G0("wallet_ledger_invalid_params",{primaryType:$,reason:"The EIP-712 primary type is not defined"});return J}var H8={report:()=>Promise.resolve(void 0)};class m extends q8{chainId=v.Ethereum;derivationPath="";dmkSession;getLedgerSigner;onDeviceActionState;originToken;constructor({provider:$,dmkSession:Y,derivationPath:J=z8.OP,chainId:j=v.Optimism,onDeviceActionState:Q,originToken:Z}){super($);this.chainId=j||v.Ethereum,this.derivationPath=(typeof J==="string"?J:X8(J)).replace(/^m\//,""),this.dmkSession=Y,this.onDeviceActionState=Q,this.originToken=Z,this.getLedgerSigner=$0({build:async(B)=>{let[{ContextModuleBuilder:G,ContextModuleChainID:V},{SignerEthBuilder:q}]=await Promise.all([import("../chunk-xx7cwpzq.js"),import("../chunk-tm47brht.js")]),X=new G({loggerFactory:(F)=>B.dmk.getLoggerFactory()(["ContextModule",F]),originToken:Z}).setChain(V.Ethereum).setBlindSigningReporter(H8).build();return X.signReport=()=>Promise.resolve(),new q({...B,originToken:Z}).withContextModule(X).build()},dmkSession:Y}),Object.defineProperty(this,"provider",{enumerable:!0,value:$||null,writable:!1})}connect=($)=>new m({chainId:this.chainId,derivationPath:this.derivationPath,dmkSession:this.dmkSession,onDeviceActionState:this.onDeviceActionState,originToken:this.originToken,provider:$});getAddress=async()=>{let{address:$}=await this.getAddressAndPubKey();if(!$)throw new G0("wallet_ledger_failed_to_get_address");return $};getAddressAndPubKey=async()=>{let $=await this.getLedgerSigner();return A({action:()=>$.getAddress(this.derivationPath,{chainId:Number(this.chainId)}),onDeviceActionState:this.onDeviceActionState})};showAddressAndPubKey=async()=>{let $=await this.getLedgerSigner();return A({action:()=>$.getAddress(this.derivationPath,{chainId:Number(this.chainId),checkOnDevice:!0}),onDeviceActionState:this.onDeviceActionState})};signMessage=async($)=>{let{Signature:Y,toUtf8Bytes:J}=await import("ethers"),j=typeof $==="string"?J($):$,Q=await this.getLedgerSigner(),Z=await A({action:()=>Q.signMessage(this.derivationPath,j),onDeviceActionState:this.onDeviceActionState});return Y.from(Z).serialized};signTypedData=async($,Y,J,j)=>{let{buildEIP712DomainType:Q}=await import("@swapkit/toolboxes/evm"),{hexlify:Z,Signature:B,TypedDataEncoder:G}=await import("ethers"),{EIP712Domain:V,...q}=Y,X=j??G.from(q).primaryType,F=V8({primaryType:X,types:q}),H=await G.resolveNames($,F,J,async(h)=>{let L=await this.resolveName(h);if(!L)throw new G0("wallet_ledger_invalid_params",{name:h});return L}),M=H.domain.chainId==null?void 0:Number(H.domain.chainId);if(M!==void 0&&!Number.isSafeInteger(M))throw new G0("wallet_ledger_invalid_params",{chainId:H.domain.chainId});let O={domain:{...H.domain.chainId!=null&&{chainId:M},...H.domain.name!=null&&{name:H.domain.name},...H.domain.salt!=null&&{salt:Z(H.domain.salt)},...H.domain.verifyingContract!=null&&{verifyingContract:H.domain.verifyingContract},...H.domain.version!=null&&{version:H.domain.version}},message:H.value,primaryType:X,types:{EIP712Domain:Q(H.domain),...F}},y=await this.getLedgerSigner(),I=await A({action:()=>y.signTypedData(this.derivationPath,O),onDeviceActionState:this.onDeviceActionState});return B.from(I).serialized};signTransaction=async($)=>{let{copyRequest:Y,getAddress:J,getBytes:j,resolveAddress:Q,resolveProperties:Z,Transaction:B}=await import("ethers"),G=Y($);if(G.type===4||G.authorizationList?.length)throw new G0("wallet_ledger_invalid_params",{message:"Ledger Ethereum DSK does not support EIP-7702 transactions"});let V=BigInt(this.chainId);if(G.chainId!=null&&G.chainId!==V)throw new G0("wallet_ledger_invalid_params",{chainId:G.chainId,expectedChainId:V,message:"Transaction chainId does not match the Ledger client chain"});let{from:q,to:X}=await Z({from:G.from?Q(G.from,this):void 0,to:G.to?Q(G.to,this):void 0}),F=q||G.nonce==null?await this.getAddress():void 0;if(q&&F&&J(q)!==J(F))throw new G0("wallet_ledger_invalid_params",{message:"Transaction from address does not match the Ledger account"});if(X)G.to=X;if(delete G.from,delete G.authorizationList,G.chainId=V,G.type==null&&G.gasPrice!=null&&G.accessList==null&&G.maxFeePerGas==null&&G.maxPriorityFeePerGas==null)G.type=0;G.nonce??=await this.provider?.getTransactionCount(F??await this.getAddress());let M=B.from(G),N=j(M.unsignedSerialized),O=await this.getLedgerSigner(),y=await A({action:()=>O.signTransaction(this.derivationPath,N),onDeviceActionState:this.onDeviceActionState});return M.signature=y,M.serialized}}function f$($){return new m({...$,chainId:v.Arbitrum})}function y$($){return new m({...$,chainId:v.Arc})}function b$($){return new m({...$,chainId:v.Aurora})}function A$($){return new m({...$,chainId:v.Avalanche})}function D$($){return new m({...$,chainId:v.Base})}function T$($){return new m({...$,chainId:v.Ethereum})}function I$($){return new m({...$,chainId:v.Gnosis})}function E$($){return new m({...$,chainId:v.Optimism})}function C$($){return new m({...$,chainId:v.Polygon})}function P$($){return new m({...$,chainId:v.BinanceSmartChain})}function v$($){return new m({...$,chainId:v.Monad})}function S$($){return new m({...$,chainId:v.XLayer})}function x$($){return new m({...$,chainId:v.Berachain})}import{Chain as F8,NetworkDerivationPath as W8,SwapKitError as F0}from"@swapkit/helpers";async function m$($,Y){let{derivationPath:J,...j}=s({paramsOrPath:$,transport:Y}),Q=(J||W8[F8.Near]).join("'/").concat("'");async function Z({operation:q,requiredUserInteraction:X}){let F=(await import("@ledgerhq/hw-app-near")).default;return u({appName:"NEAR",connection:j,createApp:(H)=>new F(H),operation:q,requiredUserInteraction:X})}let{address:B,publicKey:G}=await Z({operation:(q)=>q.getAddress(Q)});return{getAddress(){return Promise.resolve(B)},async getPublicKey(){let{PublicKey:q}=await import("@near-js/crypto"),X=G.startsWith("ed25519:")?G:`ed25519:${G}`;return q.fromString(X)},signDelegateAction(q){return Promise.reject(new F0("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(q,X,F,H,M){return Promise.reject(new F0("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(q){let{Signature:X,SignedTransaction:F}=await import("@near-js/transactions");try{let H=await Z({operation:(O)=>O.signTransaction(q.encode(),Q),requiredUserInteraction:C.SignTransaction});if(!H)throw new F0("wallet_ledger_signing_error",{reason:"Ledger returned no NEAR signature"});let M=new X({data:H,keyType:0}),N=new F({signature:M,transaction:q});return[H,N]}catch(H){if(H instanceof F0)throw H;throw new F0("wallet_ledger_signing_error",{error:H})}}}}import{Chain as M8,derivationPathToString as N8,NetworkDerivationPath as L8,SwapKitError as B0}from"@swapkit/helpers";class l${derivationPath;address=null;publicKey=null;connection;constructor($,Y){let{derivationPath:J,...j}=s({paramsOrPath:$,transport:Y});this.derivationPath=typeof J==="string"?J:N8(J||L8[M8.Sui]),this.connection=j}getLedgerPath(){return this.derivationPath.replace(/^m\//,"").replace(/\/(\d+)\/(\d+)$/,"/$1'/$2'")}async runSuiOperation({operation:$,requiredUserInteraction:Y}){let J=(await import("@ledgerhq/hw-app-sui")).default;return u({appName:"Sui",connection:this.connection,createApp:(j)=>new J(j),operation:$,requiredUserInteraction:Y})}async connect(){let $=this.getLedgerPath(),Y=await this.runSuiOperation({operation:(J)=>J.getPublicKey($)});if(!Y?.publicKey)throw new B0("wallet_ledger_failed_to_get_address");return this.publicKey=Y.publicKey,this.address=`0x${Buffer.from(Y.address).toString("hex")}`,this.address}toSuiAddress(){if(!this.address)throw new B0("wallet_ledger_failed_to_get_address");return this.address}async getAddress(){if(this.address)return this.address;return await this.connect()}async signTransaction($){let Y=$ instanceof Uint8Array?$:$.transaction;if(!this.publicKey)throw new B0("wallet_ledger_failed_to_get_address");try{let J=this.getLedgerPath(),j=new Uint8Array(3+Y.length);j.set(Y,3);let Q=await this.runSuiOperation({operation:(G)=>G.signTransaction(J,j),requiredUserInteraction:C.SignTransaction});if(!Q?.signature)throw new B0("wallet_ledger_signing_error");let Z=this.publicKey.length===33?this.publicKey.slice(1):this.publicKey;if(Z.length!==32)throw new B0("wallet_ledger_signing_error",{error:"Invalid public key length"});let B=new Uint8Array(97);return B.set(Q.signature,1),B.set(Z,65),{bytes:Buffer.from(Y).toString("base64"),signature:Buffer.from(B).toString("base64")}}catch(J){if(J instanceof B0)throw J;throw new B0("wallet_ledger_signing_error",{error:J})}}}function g$($,Y){return new l$($,Y)}import{base64 as f0,hex as U8}from"@scure/base";import{NetworkDerivationPath as k8,SwapKitError as y0}from"@swapkit/helpers";import{SwapKitError as J0}from"@swapkit/helpers";var c$=85,w8=4,K8=0,u0=2,_8=0,R8=1,h$=2,c0=36864,u$=250;class W0{name="THORChainCommand";params;constructor($){this.params=$}getApdu(){let{data:$=new Uint8Array,ins:Y,p1:J=0,p2:j=0}=this.params;return{cla:c$,data:$,ins:Y,p1:J,p2:j}}parseResponse($){let Y=($.statusCode[0]??0)*256+($.statusCode[1]??0);if(Y!==c0)throw Error(`THORChain app returned status 0x${Y.toString(16).padStart(4,"0")}`);return $.data}}function d$({path:$}){if($.length!==5)throw new J0("wallet_ledger_invalid_params",{reason:"THORChain path must contain five elements"});let Y=new Uint8Array(20),J=new DataView(Y.buffer);return $.forEach((j,Q)=>{if(typeof j!=="number"||!Number.isInteger(j)||j<0||j>4294967295)throw new J0("wallet_ledger_invalid_params",{reason:`Invalid THORChain path segment ${Q}`});if(Q>=3&&j>=2147483648)throw new J0("wallet_ledger_invalid_params",{reason:`THORChain path segment ${Q} must not be hardened`});let Z=j&2147483647,B=Q<3?(Z|2147483648)>>>0:Z;J.setUint32(Q*4,B,!0)}),Y}function O8({hrp:$,path:Y}){let J=new TextEncoder().encode($);if(J.length<1||J.length>83)throw new J0("wallet_ledger_invalid_params",{reason:"Invalid THORChain address prefix"});let j=d$({path:Y});return Uint8Array.from([J.length,...J,...j])}function p$({checkOnDevice:$,hrp:Y,path:J}){return new W0({data:O8({hrp:Y,path:J}),ins:w8,p1:$?1:0})}function o$({message:$,path:Y}){let J=[new W0({data:d$({path:Y}),ins:u0,p1:_8})];if($.length===0)return J.push(new W0({data:new Uint8Array,ins:u0,p1:h$})),J;for(let j=0;j<$.length;j+=u$){let Q=Math.min(j+u$,$.length);J.push(new W0({data:$.slice(j,Q),ins:u0,p1:Q===$.length?h$:R8}))}return J}function s$({response:$}){if($.length<2)throw new J0("wallet_ledger_invalid_response",{reason:"THORChain response is missing status bytes"});return $.slice(0,-2)}async function i$({transport:$}){let Y=await $.send(c$,K8,0,0,Buffer.alloc(0),[c0]),J=s$({response:Y});if(J.length<4)throw new J0("wallet_ledger_invalid_response",{reason:"Invalid THORChain version response"});return`${J[1]}.${J[2]}.${J[3]}`}async function n$({command:$,transport:Y}){let J=$.getApdu(),j=await Y.send(J.cla,J.ins,J.p1,J.p2,Buffer.from(J.data),[c0]);return s$({response:j})}function r$({response:$}){if($.length<34)throw new J0("wallet_ledger_invalid_response",{reason:"Invalid THORChain address response"});let Y=$.slice(0,33),J=new TextDecoder().decode($.slice(33));if(!J)throw new J0("wallet_ledger_invalid_response",{reason:"THORChain address is empty"});return{address:J,publicKey:Y}}function d0({version:$}){return`THORChain Ledger app major 2 is required, received ${$||"unknown"}`}var f8="THORChain";function y8($){if(typeof $==="string")return $;let Y=$.chain?.toUpperCase(),J=($.symbol||$.ticker||"").toUpperCase();if(!(Y&&J))return J||Y||"";return`${Y}${$.synth?"/":"."}${J}`}function b8($){return{...$,msgs:$.msgs.map((Y)=>{if(!Y.type.includes("MsgDeposit"))return Y;let J=Y.value.coins;if(!Array.isArray(J))return Y;return{...Y,value:{...Y.value,coins:J.map((j)=>({...j,asset:y8(j.asset)}))}}})}}async function A8({signature:$}){let{Secp256k1Signature:Y}=await import("@cosmjs/crypto");try{return k0(Y.fromDer($).toFixedLength())}catch(J){throw new y0("wallet_ledger_invalid_signature",J)}}async function D8({commands:$,transport:Y}){let J=await i$({transport:Y});if(!J.startsWith("2.")){let{InvalidResponseFormatError:Q}=await import("../chunk-k3thje6a.js");throw new Q(d0({version:J}))}let j=new Uint8Array;for(let Q of $)j=await n$({command:Q,transport:Y});return j}class p0{derivationPath;dmkSession;onDeviceActionState;pubKey;transport;constructor({derivationPath:$=k8.THOR,dmkSession:Y,onDeviceActionState:J,transport:j}={}){if(Y&&j)throw new y0("wallet_ledger_invalid_params",{message:"Provide either a Ledger DMK session or a LedgerJS transport, not both"});this.derivationPath=$,this.dmkSession=Y,this.onDeviceActionState=J,this.transport=j}get pubkey(){return this.pubKey?f0.encode(this.pubKey):null}executeCommands=async({commands:$,requiredUserInteraction:Y})=>{if(this.transport)try{return await D8({commands:$,transport:this.transport})}catch(N){throw d(N,{userRefusedStatusWords:e})}let J=this.dmkSession??await n(),{Apdu:j,CallTaskInAppDeviceAction:Q,CommandResultFactory:Z,DmkResultFactory:B,InvalidResponseFormatError:G,InvalidStatusWordError:V,isSuccessCommandResult:q,UnknownDeviceExchangeError:X}=await import("../chunk-k3thje6a.js"),F=(N)=>{let O=N.getApdu();return{getApdu:()=>new j(O.cla,O.ins,O.p1,O.p2,O.data),name:N.name,parseResponse:(y)=>{try{return Z({data:N.parseResponse(y)})}catch(I){let h=U8.encode(y.statusCode);return Z({error:Object.assign(new V(I instanceof Error?I.message:String(I)),{errorCode:h})})}}}},H=new Q({input:{appName:f8,requiredUserInteraction:Y,skipOpenApp:!1,task:async(N)=>{try{let O=N.getDeviceSessionState(),y="currentApp"in O?O.currentApp.version:void 0;if(!y?.startsWith("2."))return B({error:new G(d0({version:y}))});let I=new Uint8Array;for(let h of $){let L=await N.sendCommand(F(h));if(!q(L))return B({error:L.error});I=L.data}return B({data:{response:I}})}catch(O){return B({error:new X(O)})}}}});return(await A({action:()=>J.dmk.executeDeviceAction({deviceAction:H,sessionId:J.sessionId}),onDeviceActionState:this.onDeviceActionState,userRefusedStatusWords:e})).response};getAddressData=async({checkOnDevice:$})=>{let Y=await this.executeCommands({commands:[p$({checkOnDevice:$,hrp:"thor",path:this.derivationPath})],requiredUserInteraction:$?C.VerifyAddress:C.None});return r$({response:Y})};signBytes=async({message:$})=>{let Y=await this.executeCommands({commands:o$({message:$,path:this.derivationPath}),requiredUserInteraction:C.SignTransaction});return A8({signature:Y})};connect=async()=>{let{address:$,publicKey:Y}=await this.getAddressData({checkOnDevice:!1});return this.pubKey=Y,$};getAddressAndPubKey=async()=>{let{address:$,publicKey:Y}=await this.getAddressData({checkOnDevice:!1});return this.pubKey=Y,{bech32_address:$,compressed_pk:Y,error_message:"No errors",return_code:36864}};showAddressAndPubKey=async()=>{let{address:$,publicKey:Y}=await this.getAddressData({checkOnDevice:!0});return this.pubKey=Y,{bech32_address:$,compressed_pk:Y,error_message:"No errors",return_code:36864}};signTransaction=async({rawTx:$,sequence:Y="0"})=>{if(!this.pubKey)await this.connect();let J=this.pubKey;if(!J)throw new y0("wallet_ledger_pubkey_not_found");let j=await this.signBytes({message:new TextEncoder().encode($)});return[{pub_key:{type:"tendermint/PubKeySecp256k1",value:f0.encode(J)},sequence:Y,signature:f0.encode(j)}]};signAmino=async($,Y)=>{let J=(await this.getAccounts()).find(({address:B})=>B===$);if(!J)throw new y0("wallet_ledger_address_not_found",{address:$});let{encodeSecp256k1Signature:j,serializeSignDoc:Q}=await import("@cosmjs/amino"),Z=await this.signBytes({message:Q(b8(Y))});return{signature:j(J.pubkey,Z),signed:Y}};getAccounts=async()=>{let{address:$,publicKey:Y}=await this.getAddressData({checkOnDevice:!1});return this.pubKey=Y,[{address:$,algo:"secp256k1",pubkey:Y}]};sign=async($)=>f0.encode(await this.signBytes({message:new TextEncoder().encode($)}))}import{derivationPathToString as T8,NetworkDerivationPath as I8,SwapKitError as M0}from"@swapkit/helpers";class a${derivationPath;ledgerTimeout=50000;connection;constructor($,Y){let{derivationPath:J,...j}=s({paramsOrPath:$,transport:Y});this.derivationPath=typeof J==="string"?J:T8(J||I8.TRON),this.connection=j}async runTronOperation({operation:$,requiredUserInteraction:Y}){let J=(await import("@ledgerhq/hw-app-trx")).default;return u({appName:"Tron",connection:this.connection,createApp:(j)=>new J(j),operation:$,requiredUserInteraction:Y})}checkOrCreateTransportAndLedger=async()=>{await this.runTronOperation({operation:async()=>!0})};createTransportAndLedger=async()=>{await this.runTronOperation({operation:async()=>!0})};getAddress=async()=>{let $=await this.getAddressAndPubKey();if(!$)throw new M0("wallet_ledger_failed_to_get_address");return $.address};getAddressAndPubKey=async()=>{let $=await this.runTronOperation({operation:(Y)=>Y.getAddress(this.derivationPath)});if(!$)throw new M0("wallet_ledger_failed_to_get_address");return{address:$.address,publicKey:$.publicKey}};showAddressAndPubKey=async()=>{return await this.runTronOperation({operation:($)=>$.getAddress(this.derivationPath,!0),requiredUserInteraction:C.VerifyAddress})};signTransaction=async($)=>{try{let Y=await this.runTronOperation({operation:(J)=>J.signTransaction(this.derivationPath,$.raw_data_hex,[]),requiredUserInteraction:C.SignTransaction});if(!Y)throw new M0("wallet_ledger_signing_error");return{...$,signature:[Y]}}catch(Y){if(Y instanceof M0)throw Y;throw new M0("wallet_ledger_signing_error",{error:Y})}}}function t$($,Y){return new a$($,Y)}import{Chain as E8,derivationPathToString as C8,NetworkDerivationPath as P8}from"@swapkit/helpers";var v8=2147483648;function S8($){return Object.fromEntries(Object.entries($).filter(([,Y])=>Y!==null&&Y!==void 0))}async function e$($,Y){let{derivationPath:J,...j}=s({paramsOrPath:$,transport:Y}),Q=C8(J||P8[E8.Ripple]);async function Z({operation:q,requiredUserInteraction:X}){let F=(await import("@ledgerhq/hw-app-xrp")).default;return u({appName:"XRP",connection:j,createApp:(H)=>new F(H),operation:q,requiredUserInteraction:X})}let{address:B,publicKey:G}=await Z({operation:(q)=>q.getAddress(Q)});async function V(q){let[{encode:X},{hashes:F}]=await Promise.all([import("ripple-binary-codec"),import("xrpl")]),H={...S8(q),Flags:q.Flags||v8,SigningPubKey:G.toUpperCase()},M=X(H),N=await Z({operation:(I)=>I.signTransaction(Q,M),requiredUserInteraction:C.SignTransaction}),O=X({...H,TxnSignature:N});return{hash:F.hashSignedTx(O),tx_blob:O}}return{getAddress:()=>B,signTransaction:V}}import{hex as o}from"@scure/base";import{derivationPathToString as x8,NetworkDerivationPath as m8,SwapKitError as a}from"@swapkit/helpers";var l8=3364600;function $5($){return(typeof $==="string"?$:x8($)).replace(/^m\//,"").replace(/^\/+/,"")}function b0($){let Y=$5($),J=/^44'\/133'\/(\d+)'(?:\/(0|1)\/(\d+))?$/.exec(Y);if(!J)throw new a("wallet_ledger_invalid_params",{path:Y,reason:"Expected a Zcash BIP44 path with coin type 133"});let j=Number(J[1]),Q=`44'/133'/${j}'`;return{account:j,accountPath:Q,fullPath:`${Q}/${J[2]??0}/${J[3]??0}`}}function g8($){let Y=new Uint8Array(4);return new DataView(Y.buffer).setUint32(0,$>>>0,!0),Y}function h8($){let Y=new Uint8Array(8);return new DataView(Y.buffer).setBigUint64(0,$,!0),Y}function q0($,Y){return new a({errorKey:"wallet_ledger_invalid_params",info:$},Y)}function u8({bytes:$,offset:Y}){if(Y+4>$.length)throw Error("Unexpected end of previous transaction");return new DataView($.buffer,$.byteOffset+Y,4).getUint32(0,!0)}function c8($){let Y=0;function J(Q){if(Y+Q>$.length)throw Error(`Previous transaction ends before byte ${Y+Q}`);return Y+=Q,$.slice(Y-Q,Y)}function j(){let Q=J(1)[0]??0;if(Q<253)return Q;let Z=new DataView(J(Q===253?2:Q===254?4:8).buffer),B=Z.byteLength===2?Z.getUint16(0,!0):Z.byteLength===4?Z.getUint32(0,!0):Number(Z.getBigUint64(0,!0));if(!Number.isSafeInteger(B))throw Error("Previous transaction compact-size value exceeds safe range");return B}return{compactSize:j,rest:()=>J($.length-Y),take:J,varBytes:()=>J(j())}}function d8({bytes:$,version:Y}){let J=c8($),j=J.take(Y===4?8:20),Q=[];for(let q=J.compactSize();Q.length<q;){let X=J.take(36),F=J.varBytes(),H=J.take(4);Q.push({prevout:X,script:F,sequence:H})}let Z=[];for(let q=J.compactSize();Z.length<q;){let X=J.take(8),F=J.varBytes();Z.push({amount:X,script:F})}let B={inputs:Q,nVersionGroupId:j.slice(4,8),outputs:Z,version:j.slice(0,4)};if(Y>=5)return{...B,consensusBranchId:j.slice(8,12),locktime:j.slice(12,16),nExpiryHeight:j.slice(16,20)};let G=J.take(4),V=J.take(4);return{...B,extraData:J.rest(),locktime:G,nExpiryHeight:V}}function Y5({hash:$,txid:Y}){let J=$.toLowerCase();return J===o.encode(Y)||J===o.encode(Y.slice().reverse())}async function p8($){let{CompactSize:Y,utils:J}=await import("@swapkit/utxo-signer"),j=Array.from({length:$.outputsLength},(Q,Z)=>$.getOutput(Z));return J.concatBytes(Y.encode(BigInt(j.length)),...j.flatMap(({amount:Q,script:Z})=>[h8(Q),Y.encode(BigInt(Z.length)),Z]))}async function o8($){let{ZCASH_IRONWOOD_ACTIVATION_HEIGHT:Y,ZcashConsensusBranchId:J}=await import("@swapkit/utxo-signer");switch($){case J.NU6_2:return l8;case J.IRONWOOD:return Y;default:throw new a("wallet_ledger_invalid_params",{consensusBranchId:$,reason:"Ledger Zcash DSK signing supports NU6.2 and Ironwood target branches"})}}async function s8({inputIndex:$,utxo:Y}){let{hash:J,index:j,txHex:Q}=Y,Z={inputIndex:$,outputIndex:j,txid:J};if(!Q)throw q0({...Z,reason:"Zcash Ledger signing requires the full previous transaction txHex for every input"});function B(M){try{return M()}catch(N){throw q0({...Z,reason:N instanceof Error?N.message:String(N)},N)}}let G=B(()=>o.decode(Q.replace(/^0x/i,""))),V=B(()=>u8({bytes:G,offset:0})),q=V&2147483647;if((V&2147483648)===0||q<4||q>6)throw q0({...Z,reason:"Ledger Zcash signing supports only overwintered v4, v5 and v6 previous transactions",version:q});let X=B(()=>d8({bytes:G,version:q}));if(j<0||j>=X.outputs.length)throw q0({...Z,outputCount:X.outputs.length,reason:"Zcash input references an output outside its previous transaction"});if(q>=5)return{...X,serializedPreviousTransactionOverride:G};let{utils:F}=await import("@swapkit/utxo-signer"),H=F.sha256x2(G);if(!Y5({hash:J,txid:H}))throw q0({...Z,previousTxid:o.encode(H.reverse()),reason:"Previous transaction does not hash to the input txid"});return X}function i8({accountPath:$,derivationPaths:Y,inputUtxos:J,tx:j}){if(J.length!==j.inputsLength||Y.length!==j.inputsLength)throw new a("wallet_ledger_invalid_params",{derivationPathCount:Y.length,inputCount:j.inputsLength,inputUtxoCount:J.length,reason:"Zcash input UTXOs and derivation paths must match the transaction input count"});return J.forEach((Q,Z)=>{let B=j.getInput(Z);if(!Y5({hash:Q.hash,txid:B.txid})||Q.index!==B.index)throw q0({inputIndex:Z,reason:"Zcash input UTXO does not match the transaction input",transactionInput:{index:B.index,txid:o.encode(B.txid)},utxo:{hash:Q.hash,index:Q.index}})}),Y.map((Q)=>{let Z=b0(Q);if(Z.accountPath!==$)throw new a("wallet_ledger_invalid_params",{accountPath:$,path:Z.fullPath,reason:"All Zcash input derivation paths must belong to the configured account"});return Z.fullPath})}function n8($){let Y=$.replace(/^0x/i,""),J=o.decode(Y);if(J.length<4||(new DataView(J.buffer,J.byteOffset,4).getUint32(0,!0)&2147483647)!==5)throw new a("wallet_ledger_invalid_response",{reason:"Ledger Zcash signer did not return a version 5 transaction"});return Y}function J5({derivationPath:$=m8.ZEC,dmkSession:Y,onDeviceActionState:J,transport:j}={}){let Q=b0($),Z=j?F$($,j):void 0,B=$0({build:async(F)=>{let{SignerZcashBuilder:H}=await import("../chunk-gr3eswf1.js");return new H(F).build()},dmkSession:Y});function G(){if(Z)throw new a("wallet_ledger_invalid_params",{reason:"A Device Signer Kit operation is unavailable when a legacy transport is supplied"});return B()}async function V({checkOnDevice:F=!1,path:H=Q.fullPath}={}){let M=await G();return A({action:()=>M.getAddress(H,{checkOnDevice:F}),onDeviceActionState:J})}async function q({path:F=Q.accountPath,xpubVersion:H=76067358}={}){let M=b0(F);if(M.fullPath!==`${M.accountPath}/0/0`||$5(F).split("/").length!==3)throw new a("wallet_ledger_invalid_params",{path:F,reason:"Zcash extended public keys are exported at account level"});let N={dmkSession:j?void 0:Y??await n(),onDeviceActionState:J,transport:j},{default:O}=await import("@ledgerhq/hw-app-btc");return u({appName:"Zcash",connection:N,createApp:(y)=>new O({currency:"zcash",transport:y}),operation:(y)=>y.getWalletXpub({path:M.accountPath,xpubVersion:H})})}async function X({changePath:F,derivationPaths:H,inputUtxos:M,tx:N}){let O=i8({accountPath:Q.accountPath,derivationPaths:H??Array.from({length:N.inputsLength},()=>Q.fullPath),inputUtxos:M,tx:N});if(Z)throw new a("wallet_ledger_invalid_params",{reason:"Zcash signing requires a Ledger DMK session instead of a legacy transport"});let y=await o8(N.consensusBranchId),I=await Promise.all(M.map(async(k,P)=>[await s8({inputIndex:P,utxo:k}),k.index,null,N.getInput(P).sequence??4294967295])),h={additionals:["zcash","sapling"],associatedKeysets:O,blockHeight:y,changePath:F?b0(F).fullPath:Q.fullPath,expiryHeight:g8(N.expiryHeight),inputs:I,lockTime:N.lockTime,outputScriptHex:o.encode(await p8(N))},L=await G(),w=await A({action:()=>L.signTransaction(h),onDeviceActionState:J});return n8(w)}return{connect:async()=>{if(Z)return Z.connect();await G()},disconnect:async()=>Z?.disconnect(),getAddress:async()=>{if(Z)return Z.getAddress();return(await V()).address},getAddressAndPubKey:async()=>{if(Z)return{address:await Z.getAddress()};let{address:F,chainCode:H,publicKey:M}=await V();return{address:F,chainCode:o.encode(H),publicKey:o.encode(M)}},getExtendedPublicKey:q,showAddressAndPubKey:async()=>{if(Z)return{address:await Z.getAddress()};let{address:F,chainCode:H,publicKey:M}=await V({checkOnDevice:!0});return{address:F,chainCode:o.encode(H),publicKey:o.encode(M)}},signTransaction:X,signTransactionWithMultiplePaths:async(F)=>X(F)}}async function c({chain:$,dmkSession:Y,derivationPath:J,onDeviceActionState:j,originToken:Q,transport:Z}){let B=r8.includes($);if(Y&&Z)throw new o0("wallet_ledger_invalid_params",{message:"Provide either a Ledger DMK session or a LedgerJS transport, not both"});if(B&&Z)throw new o0("wallet_ledger_invalid_params",{message:"Ledger EVM clients require a DMK session instead of a LedgerJS transport"});let G={derivationPath:J??a8[$],dmkSession:Y,onDeviceActionState:j,transport:Z},{match:V}=await import("ts-pattern");return V($).returnType().with(_.THORChain,()=>Promise.resolve(new p0(G))).with(_.Cosmos,()=>Promise.resolve(new h0(G))).with(_.Bitcoin,()=>Promise.resolve(O$(G))).with(_.BitcoinCash,()=>Promise.resolve(q$(G))).with(_.Dash,()=>Promise.resolve(H$(G))).with(_.Dogecoin,()=>Promise.resolve(V$(G))).with(_.Litecoin,()=>Promise.resolve(z$(G))).with(_.Zcash,()=>Promise.resolve(J5(G))).with(_.Ripple,()=>Promise.resolve(e$(G))).with(_.Tron,()=>Promise.resolve(t$(G))).with(_.Sui,()=>Promise.resolve(g$(G))).with(_.Near,()=>Promise.resolve(m$(G))).with(_.Arbitrum,_.Arc,_.Aurora,_.Avalanche,_.Berachain,_.BinanceSmartChain,_.Ethereum,_.Gnosis,_.Monad,_.Optimism,_.Polygon,_.Base,_.XLayer,async()=>{let{getProvider:q}=await import("@swapkit/toolboxes/evm"),X={derivationPath:J,dmkSession:Y,onDeviceActionState:j,originToken:Q,provider:await q($)};return V($).with(_.BinanceSmartChain,()=>P$(X)).with(_.Avalanche,()=>A$(X)).with(_.Arbitrum,()=>f$(X)).with(_.Arc,()=>y$(X)).with(_.Berachain,()=>x$(X)).with(_.Optimism,()=>E$(X)).with(_.Polygon,()=>C$(X)).with(_.Base,()=>D$(X)).with(_.Aurora,()=>b$(X)).with(_.Gnosis,()=>I$(X)).with(_.Monad,()=>v$(X)).with(_.XLayer,()=>S$(X)).otherwise(()=>T$(X))}).otherwise(()=>{throw new o0("wallet_chain_not_supported",{chain:$,wallet:t8.LEDGER})})}var V5=[z.Arbitrum,z.Arc,z.Aurora,z.Avalanche,z.Base,z.Berachain,z.BinanceSmartChain,z.Bitcoin,z.BitcoinCash,z.Cosmos,z.Dash,z.Dogecoin,z.Ethereum,z.Gnosis,z.Litecoin,z.Monad,z.Near,z.Optimism,z.Polygon,z.Ripple,z.Sui,z.THORChain,z.XLayer,z.Tron,z.Zcash],X9=[z.BitcoinCash,z.Bitcoin,z.Dash,z.Dogecoin,z.Litecoin,z.Zcash],z9=[z.Ethereum,z.Avalanche,z.Arbitrum,z.Arc,z.Berachain,z.Optimism,z.Polygon,z.BinanceSmartChain,z.Base,z.Aurora,z.Gnosis,z.Monad,z.XLayer];function q9($){return V5.includes($)}var V9=G9({connect:({addChain:$,supportedChains:Y,walletType:J})=>async function(Q,Z,{address:B,dmkSession:G,onDeviceActionState:V,originToken:q,transport:X}={}){let[F]=e8({chains:Q,supportedChains:Y,walletType:J});if(!F)return!1;let H=Z??Y9[F],M=await O9({address:B,chain:F,derivationPath:H,dmkSession:G,onDeviceActionState:V,originToken:q,transport:X});return $({...M,chain:F,walletType:N0.LEDGER}),!0},directSigningSupport:{[z.Arbitrum]:!0,[z.Arc]:!0,[z.Aurora]:!0,[z.Avalanche]:!0,[z.Base]:!0,[z.Berachain]:!0,[z.BinanceSmartChain]:!0,[z.Ethereum]:!0,[z.Gnosis]:!0,[z.Monad]:!0,[z.Bitcoin]:!0,[z.BitcoinCash]:!0,[z.Cosmos]:!0,[z.Dash]:!0,[z.Dogecoin]:!0,[z.Litecoin]:!0,[z.Near]:!0,[z.Optimism]:!0,[z.Polygon]:!0,[z.Ripple]:!0,[z.Sui]:!0,[z.THORChain]:!0,[z.Tron]:!0,[z.XLayer]:!0},getExtendedPublicKey:F9,name:"connectLedger",supportedChains:[...V5],walletType:N0.LEDGER}),q1=B9(V9);function H5({chain:$,path:Y,signer:J,xpubVersion:j}){let Q=L0($).with(z.Bitcoin,z.Litecoin,()=>Y).with(z.BitcoinCash,z.Dash,z.Dogecoin,z.Zcash,()=>Y.replace(/^m\//,"")).exhaustive();return L0($).with(z.Bitcoin,()=>J.getExtendedPublicKey({path:Q})).with(z.Zcash,()=>J.getExtendedPublicKey({path:Q,xpubVersion:j})).with(z.BitcoinCash,z.Dash,z.Dogecoin,z.Litecoin,()=>J.getExtendedPublicKey(Q,j)).exhaustive()}function H9($){let Y=q5(z.Zcash),J=U0((j)=>Y.getRawTx(j));return Promise.all(Array.from({length:$.inputsLength},async(j,Q)=>{let Z=$.getInput(Q),B=j5.encode(Z.txid),G=j5.encode(Z.txid.slice().reverse()),V=await J(B),[q,X]=V?[B,V]:[G,await J(G)];if(!X)throw new j0("wallet_ledger_invalid_params",{inputIndex:Q,outputIndex:Z.index,reason:"Unable to resolve previous transaction hex for Ledger signing in either txid byte order",reversedTxid:G,txid:B});return{hash:q,index:Z.index,txHex:X,value:Number(Z.value)}}))}async function F9($,Y,{accountIndex:J,dmkSession:j,onDeviceActionState:Q,transport:Z}={}){if(![z.BitcoinCash,z.Bitcoin,z.Dash,z.Dogecoin,z.Litecoin,z.Zcash].includes($))throw new j0("wallet_chain_not_supported",{chain:$,wallet:N0.LEDGER});let B=$,G=await c({chain:B,derivationPath:Y,dmkSession:j,onDeviceActionState:Q,transport:Z});if(!G.getExtendedPublicKey)return;let V=z5({accountIndex:J,chain:B,derivationPath:Y}),q=D0(V),X=X5(B).bip32.public;try{let F=await H5({chain:B,path:q,signer:G,xpubVersion:X});return{accountIndex:s0(V),path:q,xpub:F}}finally{await G.disconnect?.()}}async function W9({address:$,chain:Y,dmkSession:J,derivationPath:j,onDeviceActionState:Q,transport:Z}){let{getUtxoToolbox:B}=await import("@swapkit/toolboxes/utxo"),G=Y,V=await c({chain:Y,derivationPath:j,dmkSession:J,onDeviceActionState:Q,transport:Z}),q=$??await r({chain:Y,ledgerClient:V}),X=(Y===z.Bitcoin?$9(j):void 0)??Z9(q,G),{publicKey:F,signLedgerTransaction:H,toolboxSigner:M}=await L0(Y).with(z.Bitcoin,async()=>{let K=V,U=X===A0.P2SH_P2WPKH||X===A0.P2TR?await K.getPublicKey():void 0;return{publicKey:U,signLedgerTransaction:({inputUtxos:f,transaction:D})=>K.signTransactionHex({inputUtxos:f,tx:D}),toolboxSigner:{getAddress:K.getAddress,publicKey:U,signTransaction:K.signTransaction}}}).with(z.BitcoinCash,z.Dogecoin,z.Dash,z.Litecoin,async()=>{let{createLegacyPsbtSigner:K,signLegacyPsbtTransaction:R}=await import("../chunk-5p3ttw6y.js"),U=V;return{publicKey:void 0,signLedgerTransaction:({inputUtxos:f,transaction:D})=>R({chain:G,inputUtxos:f,legacyClient:U,tx:D}),toolboxSigner:K({address:q,chain:G,legacyClient:U})}}).with(z.Zcash,()=>{let K=V;return{publicKey:void 0,signLedgerTransaction:async({inputUtxos:R,transaction:U})=>{if(!("consensusBranchId"in U))throw new j0("wallet_ledger_method_not_supported",{method:"signPCZT",wallet:N0.LEDGER});let f=R??await H9(U);return K.signTransaction({inputUtxos:f,tx:U})},toolboxSigner:void 0}}).exhaustive(),N=M?await B(G,{scriptType:X,signer:M}):B(G,{scriptType:X}),O=async(K)=>N.broadcastTx(await H({transaction:K})),y=async(K)=>{let R=K.feeRate||(await N.getFeeRates())[K.feeOptionKey||Q5.Fast],{tx:U,inputs:f}=await N.createTransaction({...K,feeRate:R,fetchTxHex:!0,publicKey:K.publicKey??F,sender:q}),D=await H({inputUtxos:f,transaction:U});return await N.broadcastTx(D)};async function I({accountIndex:K}={}){if(!V.getExtendedPublicKey)return;let R=z5({accountIndex:K,chain:G,derivationPath:j}),U=D0(R),f=X5(G).bip32.public,D=await H5({chain:Y,path:U,signer:V,xpubVersion:f});return{accountIndex:s0(R),path:U,xpub:D}}function h(K={}){return I(K)}async function L({accountIndex:K,index:R,change:U=!1}){try{let f=G5({accountIndex:K,chain:G,change:U,derivationPath:j,index:R}),D=await c({chain:G,derivationPath:f,dmkSession:J,onDeviceActionState:Q,transport:Z}),S=await r({chain:G,ledgerClient:D});return{accountIndex:s0(f),address:S,change:U,index:R,path:D0(f),pubkey:""}}catch{return}}async function w({accountIndex:K,count:R,startIndex:U=0,change:f=!1}){return Z5("count",R),Z5("startIndex",U),(await Promise.all(Array.from({length:R},(S,T)=>L({accountIndex:K,change:f,index:U+T})))).filter((S)=>!!S)}let k=Q9({chain:G,deriveAddress:L,getBalance:N.getBalance,getUtxos:(K)=>q5(G).getUtxos({address:K,fetchTxHex:!0})});async function P({utxos:K,recipient:R,assetValue:U,memo:f,feeRate:D,feeOptionKey:S,changeAddress:T}){if(Y===z.Zcash)throw new j0("wallet_ledger_method_not_supported",{method:"transferFromMultipleAddresses",wallet:N0.LEDGER});if(!K.length)throw new j0("wallet_ledger_invalid_params",{message:"No UTXOs provided for multi-address transfer"});let E=D||(await N.getFeeRates())[S||Q5.Fast],l=f?j9(f):null,Q0=[{address:R,value:U.getBaseValue("number")}];if(l)Q0.push({script:l,value:0});let t=K.map(({hash:K0,index:_0,value:I0,txHex:R0,witnessUtxo:M5})=>({hash:K0,index:_0,txHex:R0,value:I0,witnessUtxo:M5})),{inputs:i,outputs:V0}=N.accumulative({chain:G,feeRate:E,inputs:t,outputs:Q0});if(!(i&&V0))throw new j0("wallet_ledger_connection_error",{message:"Insufficient balance for multi-address transfer"});let{Transaction:w0}=await import("@swapkit/utxo-signer"),T0=new w0({allowLegacyWitnessUtxo:!0,allowUnknownOutputs:!!l,version:1}),F5=T||K[0]?.address||R;J9({chain:G,compiledMemo:l,inputs:i,outputs:V0,sender:F5,tx:T0});let i0=i.map((K0)=>{let _0=K.find((R0)=>R0.hash===K0.hash&&R0.index===K0.index),I0=G5({chain:G,change:_0?.isChange??!1,derivationPath:j,index:_0?.derivationIndex??0});return D0(I0)});if(!V.signTransactionWithMultiplePaths)throw new j0("wallet_ledger_method_not_supported",{method:"signTransactionWithMultiplePaths"});let W5=await L0(Y).with(z.Bitcoin,()=>V.signTransactionWithMultiplePaths({derivationPaths:i0,inputUtxos:i,tx:T0})).with(z.BitcoinCash,z.Dash,z.Dogecoin,z.Litecoin,()=>V.signTransactionWithMultiplePaths(T0,i,i0)).exhaustive();return N.broadcastTx(W5)}return{...N,...k,address:q,deriveAddressAtIndex:L,deriveAddresses:w,getExtendedPublicKey:h,getExtendedPublicKeyInfo:I,signAndBroadcastTransaction:O,transfer:y,transferFromMultipleAddresses:P}}async function M9({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,originToken:Q,transport:Z}){let B=await c({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,originToken:Q,transport:Z}),{getEvmToolboxAsync:G}=await import("@swapkit/toolboxes/evm"),V=await r({chain:$,ledgerClient:B});return{...await G($,{signer:B}),address:V}}async function N9({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}){let Z=await c({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}),{getCosmosToolbox:B}=await import("@swapkit/toolboxes/cosmos"),G=B($,{signer:Z}),V=await r({chain:$,ledgerClient:Z});return{...G,address:V}}async function L9({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}){let Z=await c({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}),{getCosmosToolbox:B}=await import("@swapkit/toolboxes/cosmos"),G=B($,{signer:Z}),V=await r({chain:$,ledgerClient:Z}),{sign:q}=Z;return{...G,address:V,signMessage:q}}async function w9({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}){let{getNearToolbox:Z}=await import("@swapkit/toolboxes/near"),B=await c({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}),G=await B.getAddress();return{...Z({signer:B}),address:G}}async function K9({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}){let{getRippleToolbox:Z}=await import("@swapkit/toolboxes/ripple"),B=await c({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}),G=B.getAddress();return{...Z({signer:B}),address:G}}async function _9({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}){let{getTronToolbox:Z}=await import("@swapkit/toolboxes/tron"),B=await c({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}),G=await r({chain:$,ledgerClient:B});return{...Z({signer:B}),address:G}}async function R9({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}){let{getSuiToolbox:Z}=await import("@swapkit/toolboxes/sui"),B=await c({chain:$,derivationPath:Y,dmkSession:J,onDeviceActionState:j,transport:Q}),G=await r({chain:$,ledgerClient:B});return{...Z({signer:B}),address:G}}function O9($){if(!q9($.chain))throw new j0("wallet_ledger_chain_not_supported",{chain:$.chain});return L0($.chain).with(B5.union(...X9),(Y)=>W9({...$,chain:Y})).with(B5.union(...z9),(Y)=>M9({...$,chain:Y})).with(z.Cosmos,(Y)=>N9({...$,chain:Y})).with(z.THORChain,(Y)=>L9({...$,chain:Y})).with(z.Near,(Y)=>w9({...$,chain:Y})).with(z.Ripple,(Y)=>K9({...$,chain:Y})).with(z.Tron,(Y)=>_9({...$,chain:Y})).with(z.Sui,(Y)=>R9({...$,chain:Y})).exhaustive()}export{e0 as preloadLedgerDMK,V9 as ledgerWallet,F9 as getLedgerExtendedPublicKey,n as getLedgerDMKSession,$$ as disconnectLedgerDMKSession,q1 as LEDGER_SUPPORTED_CHAINS};
2
2
 
3
- //# debugId=E0C6440FC62DB24464756E2164756E21
3
+ //# debugId=42A8EA57BF63933D64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map