@tcswap/wallet-hardware 4.2.16

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 (123) hide show
  1. package/dist/chunk-1w9rn6fj.js +5 -0
  2. package/dist/chunk-1w9rn6fj.js.map +10 -0
  3. package/dist/chunk-1z3vq8v6.js +4 -0
  4. package/dist/chunk-1z3vq8v6.js.map +10 -0
  5. package/dist/chunk-3jd7804n.js +4 -0
  6. package/dist/chunk-3jd7804n.js.map +10 -0
  7. package/dist/chunk-4pybhxzx.js +4 -0
  8. package/dist/chunk-4pybhxzx.js.map +10 -0
  9. package/dist/chunk-9kbkdt6e.js +4 -0
  10. package/dist/chunk-9kbkdt6e.js.map +10 -0
  11. package/dist/chunk-eng8tyvd.js +4 -0
  12. package/dist/chunk-eng8tyvd.js.map +10 -0
  13. package/dist/chunk-fazw0jvt.js +4 -0
  14. package/dist/chunk-fazw0jvt.js.map +9 -0
  15. package/dist/chunk-zzfbcc7e.js +5 -0
  16. package/dist/chunk-zzfbcc7e.js.map +9 -0
  17. package/dist/index.cjs +4 -0
  18. package/dist/index.cjs.map +9 -0
  19. package/dist/index.js +3 -0
  20. package/dist/index.js.map +9 -0
  21. package/dist/keepkey/index.cjs +4 -0
  22. package/dist/keepkey/index.cjs.map +15 -0
  23. package/dist/keepkey/index.js +4 -0
  24. package/dist/keepkey/index.js.map +15 -0
  25. package/dist/ledger/index.cjs +5 -0
  26. package/dist/ledger/index.cjs.map +25 -0
  27. package/dist/ledger/index.js +5 -0
  28. package/dist/ledger/index.js.map +25 -0
  29. package/dist/trezor/index.cjs +4 -0
  30. package/dist/trezor/index.cjs.map +10 -0
  31. package/dist/trezor/index.js +4 -0
  32. package/dist/trezor/index.js.map +10 -0
  33. package/dist/types/index.d.ts +2 -0
  34. package/dist/types/index.d.ts.map +1 -0
  35. package/dist/types/keepkey/chains/cosmos.d.ts +7 -0
  36. package/dist/types/keepkey/chains/cosmos.d.ts.map +1 -0
  37. package/dist/types/keepkey/chains/evm.d.ts +29 -0
  38. package/dist/types/keepkey/chains/evm.d.ts.map +1 -0
  39. package/dist/types/keepkey/chains/mayachain.d.ts +10 -0
  40. package/dist/types/keepkey/chains/mayachain.d.ts.map +1 -0
  41. package/dist/types/keepkey/chains/ripple.d.ts +37 -0
  42. package/dist/types/keepkey/chains/ripple.d.ts.map +1 -0
  43. package/dist/types/keepkey/chains/thorchain.d.ts +10 -0
  44. package/dist/types/keepkey/chains/thorchain.d.ts.map +1 -0
  45. package/dist/types/keepkey/chains/utxo.d.ts +25 -0
  46. package/dist/types/keepkey/chains/utxo.d.ts.map +1 -0
  47. package/dist/types/keepkey/coins.d.ts +15 -0
  48. package/dist/types/keepkey/coins.d.ts.map +1 -0
  49. package/dist/types/keepkey/index.d.ts +15 -0
  50. package/dist/types/keepkey/index.d.ts.map +1 -0
  51. package/dist/types/ledger/clients/cosmos.d.ts +23 -0
  52. package/dist/types/ledger/clients/cosmos.d.ts.map +1 -0
  53. package/dist/types/ledger/clients/evm.d.ts +52 -0
  54. package/dist/types/ledger/clients/evm.d.ts.map +1 -0
  55. package/dist/types/ledger/clients/near.d.ts +7 -0
  56. package/dist/types/ledger/clients/near.d.ts.map +1 -0
  57. package/dist/types/ledger/clients/thorchain/common.d.ts +28 -0
  58. package/dist/types/ledger/clients/thorchain/common.d.ts.map +1 -0
  59. package/dist/types/ledger/clients/thorchain/helpers.d.ts +10 -0
  60. package/dist/types/ledger/clients/thorchain/helpers.d.ts.map +1 -0
  61. package/dist/types/ledger/clients/thorchain/index.d.ts +25 -0
  62. package/dist/types/ledger/clients/thorchain/index.d.ts.map +1 -0
  63. package/dist/types/ledger/clients/thorchain/lib.d.ts +25 -0
  64. package/dist/types/ledger/clients/thorchain/lib.d.ts.map +1 -0
  65. package/dist/types/ledger/clients/thorchain/utils.d.ts +5 -0
  66. package/dist/types/ledger/clients/thorchain/utils.d.ts.map +1 -0
  67. package/dist/types/ledger/clients/tron.d.ts +26 -0
  68. package/dist/types/ledger/clients/tron.d.ts.map +1 -0
  69. package/dist/types/ledger/clients/utxo.d.ts +43 -0
  70. package/dist/types/ledger/clients/utxo.d.ts.map +1 -0
  71. package/dist/types/ledger/clients/xrp.d.ts +11 -0
  72. package/dist/types/ledger/clients/xrp.d.ts.map +1 -0
  73. package/dist/types/ledger/cosmosTypes.d.ts +43 -0
  74. package/dist/types/ledger/cosmosTypes.d.ts.map +1 -0
  75. package/dist/types/ledger/helpers/getLedgerAddress.d.ts +10 -0
  76. package/dist/types/ledger/helpers/getLedgerAddress.d.ts.map +1 -0
  77. package/dist/types/ledger/helpers/getLedgerClient.d.ts +42 -0
  78. package/dist/types/ledger/helpers/getLedgerClient.d.ts.map +1 -0
  79. package/dist/types/ledger/helpers/getLedgerTransport.d.ts +6 -0
  80. package/dist/types/ledger/helpers/getLedgerTransport.d.ts.map +1 -0
  81. package/dist/types/ledger/helpers/index.d.ts +4 -0
  82. package/dist/types/ledger/helpers/index.d.ts.map +1 -0
  83. package/dist/types/ledger/index.d.ts +14 -0
  84. package/dist/types/ledger/index.d.ts.map +1 -0
  85. package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts +14 -0
  86. package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts.map +1 -0
  87. package/dist/types/ledger/types.d.ts +16 -0
  88. package/dist/types/ledger/types.d.ts.map +1 -0
  89. package/dist/types/trezor/evmSigner.d.ts +32 -0
  90. package/dist/types/trezor/evmSigner.d.ts.map +1 -0
  91. package/dist/types/trezor/index.d.ts +14 -0
  92. package/dist/types/trezor/index.d.ts.map +1 -0
  93. package/package.json +101 -0
  94. package/src/index.ts +1 -0
  95. package/src/keepkey/chains/cosmos.ts +69 -0
  96. package/src/keepkey/chains/evm.ts +117 -0
  97. package/src/keepkey/chains/mayachain.ts +102 -0
  98. package/src/keepkey/chains/ripple.ts +88 -0
  99. package/src/keepkey/chains/thorchain.ts +97 -0
  100. package/src/keepkey/chains/utxo.ts +141 -0
  101. package/src/keepkey/coins.ts +70 -0
  102. package/src/keepkey/index.ts +159 -0
  103. package/src/ledger/clients/cosmos.ts +83 -0
  104. package/src/ledger/clients/evm.ts +145 -0
  105. package/src/ledger/clients/near.ts +67 -0
  106. package/src/ledger/clients/thorchain/common.ts +93 -0
  107. package/src/ledger/clients/thorchain/helpers.ts +124 -0
  108. package/src/ledger/clients/thorchain/index.ts +91 -0
  109. package/src/ledger/clients/thorchain/lib.ts +282 -0
  110. package/src/ledger/clients/thorchain/utils.ts +71 -0
  111. package/src/ledger/clients/tron.ts +84 -0
  112. package/src/ledger/clients/utxo.ts +158 -0
  113. package/src/ledger/clients/xrp.ts +50 -0
  114. package/src/ledger/cosmosTypes.ts +102 -0
  115. package/src/ledger/helpers/getLedgerAddress.ts +73 -0
  116. package/src/ledger/helpers/getLedgerClient.ts +121 -0
  117. package/src/ledger/helpers/getLedgerTransport.ts +106 -0
  118. package/src/ledger/helpers/index.ts +3 -0
  119. package/src/ledger/index.ts +303 -0
  120. package/src/ledger/interfaces/CosmosLedgerInterface.ts +58 -0
  121. package/src/ledger/types.ts +40 -0
  122. package/src/trezor/evmSigner.ts +181 -0
  123. package/src/trezor/index.ts +350 -0
@@ -0,0 +1,5 @@
1
+ var Zy={};Ny(Zy,{ledgerWallet:()=>VL,LEDGER_SUPPORTED_CHAINS:()=>Cy});module.exports=By(Zy);var T=require("@tcswap/helpers"),x=require("@tcswap/wallet-core");var B=require("@tcswap/helpers"),o=async({chain:L,ledgerClient:y})=>{if(!y)return"";switch(L){case B.Chain.Cosmos:case B.Chain.THORChain:return y.connect();case B.Chain.Ethereum:case B.Chain.BinanceSmartChain:case B.Chain.Avalanche:case B.Chain.Polygon:case B.Chain.Arbitrum:case B.Chain.Optimism:case B.Chain.Base:case B.Chain.Aurora:case B.Chain.Gnosis:case B.Chain.XLayer:return y.getAddress();case B.Chain.Bitcoin:case B.Chain.BitcoinCash:case B.Chain.Dash:case B.Chain.Dogecoin:case B.Chain.Litecoin:case B.Chain.Zcash:{let i=y;await i.connect();let m=await i.getAddress();return L===B.Chain.BitcoinCash?m.replace("bitcoincash:",""):m}case B.Chain.Near:return await y.getAddress();case B.Chain.Ripple:return y.getAddress();case B.Chain.Tron:return y.getAddress();default:throw new B.USwapError("wallet_chain_not_supported",{chain:L,wallet:B.WalletOption.LEDGER})}};var G=require("@tcswap/helpers");var z=require("@tcswap/helpers");var f=require("@tcswap/helpers");var yL=require("@tcswap/helpers");var S=85,e=250;var P={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},I={ADD:1,INIT:0,LAST:2},r={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},c={JSON:0},W={NoError:36864},GL={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 J(L){if(L in GL)return GL[L];return`Unknown Status Code: ${L}`}function wy(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function j(L){if(L){if(wy(L)){if(Object.hasOwn(L,"statusCode"))return{error_message:J(L.statusCode),return_code:L.statusCode};if(Object.hasOwn(L,"return_code")&&Object.hasOwn(L,"error_message"))return L}return{error_message:L.toString(),return_code:65535}}return{error_message:L.toString(),return_code:65535}}function s(L){return L.send(85,P.GET_VERSION,0,0).then((y)=>{let i=y.slice(-2),m=i[0]*256+i[1],_=0;if(y.length>=9)_=(y[5]<<24)+(y[6]<<16)+(y[7]<<8)+(y[8]<<0);return{device_locked:y[4]===1,error_message:J(m),major:y[1],minor:y[2],patch:y[3],return_code:m,target_id:_.toString(16),test_mode:y[0]!==0}},j)}var E=require("@tcswap/helpers");function XL(L){if(L==null||L.length<3)throw new E.USwapError("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new E.USwapError("wallet_ledger_invalid_params",{reason:"Path too long"});let y=Buffer.alloc(1+4*L.length);y.writeUInt8(L.length,0);for(let i=0;i<L.length;i+=1){let m=L[i]||0;if(i<3)m|=2147483648;y.writeInt32LE(m,1+i*4)}return y}function LL(L,y,i,m,_=c.JSON){return L.transport.send(S,P.SIGN_SECP256K1,y,_,m,[W.NoError,27012,27264]).then((w)=>{let l=w.slice(-2),t=l[0]*256+l[1],O=J(t);if(t===27264||t===27012)O=`${O} : ${w.slice(0,w.length-2).toString("ascii")}`;let R=null;if(w.length>2)R=w.slice(0,w.length-2);return{error_message:O,return_code:t,signature:R}},j)}function ty(L){if(L.length!==65)throw new E.USwapError("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let y=L.slice(33,65),i=Buffer.from([2+(y[y.length-1]&1)]);return Buffer.concat([i,L.slice(1,33)])}function BL(L,y){return L.transport.send(S,P.INS_PUBLIC_KEY_SECP256K1,0,0,y,[W.NoError]).then((i)=>{let m=i.slice(-2),_=m[0]*256+m[1],w=Buffer.from(i.slice(0,65));return{compressed_pk:ty(w),error_message:J(_),pk:w,return_code:_}},j)}function NL(L){if(!L||L.length!==5)throw new E.USwapError("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let y=Buffer.alloc(20);return y.writeUInt32LE(2147483648+L[0],0),y.writeUInt32LE(2147483648+L[1],4),y.writeUInt32LE(2147483648+L[2],8),y.writeUInt32LE(L[3],12),y.writeUInt32LE(L[4],16),y}function CL(L,y,i,m,_=c.JSON){let w=I.ADD;if(y===1)w=I.INIT;if(y===i)w=I.LAST;return LL(L,w,0,m,_)}function ML(L,y){return L.transport.send(S,P.GET_ADDR_SECP256K1,0,0,y,[W.NoError]).then((i)=>{let m=i.slice(-2),_=m[0]*256+m[1];return{compressed_pk:Buffer.from(i.slice(0,33)),error_message:J(_),pk:"OBSOLETE PROPERTY",return_code:_}},j)}class b{transport;versionResponse;constructor(L){if(!L)throw new yL.USwapError("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new yL.USwapError("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let y=Buffer.alloc(1+L.length);return y.writeUInt8(L.length,0),y.write(L,1),y}async serializePath(L){if(this.versionResponse=await s(this.transport),this.versionResponse.return_code!==W.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return XL(L);case 2:return NL(L);default:return Buffer.alloc(0)}}async signGetChunks(L,y){let i=await this.serializePath(L),m=[];m.push(i);for(let _=0;_<y.length;_+=e){let w=_+e;if(_>y.length)w=y.length;m.push(y.slice(_,w))}return m}async getVersion(){try{return this.versionResponse=await s(this.transport),this.versionResponse}catch(L){return j(L)}}appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let y=L.slice(-2),i=y[0]*256+y[1],m="",_="",w=0,l=0;if(L[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let t=L[1];m=L.slice(2,2+t).toString("ascii");let O=2+t,R=L[O];O+=1,_=L.slice(O,O+R).toString("ascii"),O+=R;let g=L[O];return O+=1,w=g,l=L[O],{appName:m,appVersion:_,error_message:J(i),flag_onboarded:(l&4)!==0,flag_pin_validated:(l&128)!==0,flag_recovery:(l&1)!==0,flag_signed_mcu_code:(l&2)!==0,flagLen:w,flagsValue:l,return_code:i}},j)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[W.NoError,28160]).then((L)=>{let y=L.slice(-2),i=y[0]*256+y[1];if(i===28160)return{error_message:"This command is only available in the Dashboard",return_code:i};let m=L.slice(0,4).toString("hex"),_=4,w=L[_];_+=1;let l=L.slice(_,_+w).toString();_+=w;let t=L[_];_+=1;let O=L.slice(_,_+t).toString("hex");_+=t;let R=L[_];_+=1;let g=L.slice(_,_+R);if(g[R-1]===0)g=L.slice(_,_+R-1);let N=g.toString();return{error_message:J(i),flag:O,mcuVersion:N,return_code:i,seVersion:l,targetId:m}},j)}async publicKey(L){try{let y=await this.serializePath(L);switch(this.versionResponse.major){case 1:return BL(this,y);case 2:{let i=Buffer.concat([b.serializeHRP("thor"),y]);return ML(this,i)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(y){return j(y)}}getAddressAndPubKey(L,y,i=!1){return this.serializePath(L).then((m)=>{let _=Buffer.concat([b.serializeHRP(y),m]);return this.transport.send(S,P.GET_ADDR_SECP256K1,i?r.SHOW_ADDRESS_IN_DEVICE:r.ONLY_RETRIEVE,0,_,[W.NoError]).then((w)=>{let l=w.slice(-2),t=l[0]*256+l[1],O=Buffer.from(w.slice(0,33));return{bech32_address:Buffer.from(w.slice(33,-2)).toString(),compressed_pk:O,error_message:J(t),return_code:t}},j)}).catch((m)=>j(m))}showAddressAndPubKey(L,y){return this.getAddressAndPubKey(L,y,!0)}signSendChunk(L,y,i,m=c.JSON){switch(this.versionResponse.major){case 1:return LL(this,L,y,i,m);case 2:return CL(this,L,y,i,m);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(L,y,i=c.JSON){let m=Buffer.from(y),_=[],w;try{_=await this.signGetChunks(L,m),w=await this.signSendChunk(1,_.length,_[0],i)}catch(t){j(t)}let l={error_message:w.error_message,return_code:w.return_code,signature:null};for(let t=1;t<_.length;t+=1)if(l=await this.signSendChunk(1+t,_.length,_[t],i),l.return_code!==W.NoError)break;return{error_message:l.error_message,return_code:l.return_code,signature:l.signature}}}var n=require("@tcswap/helpers"),iL=()=>navigator?.usb,ly=async()=>{let L=iL();if(typeof L?.getDevices!=="function")return{};let{ledgerUSBVendorId:y}=await import("@ledgerhq/devices"),m=(await L?.getDevices()).filter((_)=>_.vendorId===y);if(m.length>0)return m[0];return L?.requestDevice({filters:[{vendorId:y}]})},F=async()=>{let L=await ly();if(!L)throw new n.USwapError("wallet_ledger_device_not_found");if(L.opened||await L.open(),L.configuration===null)await L.selectConfiguration(1);try{await L.reset()}catch{}let y=L.configuration??L.configurations?.[0],i=y?.interfaces.find(({alternates:g})=>g.some(({interfaceClass:N})=>N===255))||y?.interfaces.find(({alternates:g})=>g.some(({interfaceClass:N})=>N===3));if(!i)throw await L.close(),new n.USwapError("wallet_ledger_connection_error");let m=i.alternates?.find(({interfaceClass:g})=>g===3)?.interfaceClass,_=i.alternates?.find(({interfaceClass:g})=>g===255)?.interfaceClass;if(m&&!_){let g=(await import("@ledgerhq/hw-transport-webhid")).default;if(!await g.isSupported())throw await L.close(),new n.USwapError("wallet_ledger_webhid_not_supported");return await g.create()}try{await L.claimInterface(i.interfaceNumber)}catch(g){throw await L.close(),new n.USwapError("wallet_ledger_connection_claimed",g)}let w=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await w.isSupported())throw new n.USwapError("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:t}=await import("@ledgerhq/errors"),O=new w(L,i.interfaceNumber),R=(g)=>{if(L===g.device)iL()?.removeEventListener("disconnect",R),O._emitDisconnect(new t)};return iL()?.addEventListener("disconnect",R),O};class V{ledgerTimeout=50000;derivationPath=f.NetworkDerivationPath.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await F():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new b(this.transport):this.ledgerApp;break}case"cosmos":{let y=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=L||!this.ledgerApp?new y(this.transport):this.ledgerApp}}return this.ledgerApp}catch(y){throw new f.USwapError("wallet_ledger_connection_error",y)}};validateResponse=(L,y)=>{switch(L){case f.LedgerErrorCode.NoError:return;case f.LedgerErrorCode.LockedDevice:throw new f.USwapError("wallet_ledger_device_locked",{message:`Ledger is locked: ${y}`});case f.LedgerErrorCode.TC_NotFound:throw new f.USwapError("wallet_ledger_device_not_found");default:break}}}class _L extends V{pubKey=null;derivationPath;constructor(L=z.NetworkDerivationPath.GAIA){super();this.chain="cosmos",this.derivationPath=z.derivationPathToString(L)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:L,address:y}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(L,"hex").toString("base64"),y};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:i,error_message:m,signature:_}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new z.USwapError("wallet_ledger_pubkey_not_found");return this.validateResponse(i,m),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:_}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let i=await this.getAccounts();if(i.findIndex((M)=>M.address===L)===-1)throw new z.USwapError("wallet_ledger_address_not_found",{address:L});let _=await import("@cosmjs/amino"),w=_.encodeSecp256k1Signature??_.default?.encodeSecp256k1Signature,l=_.serializeSignDoc??_.default?.serializeSignDoc,t=await import("@cosmjs/crypto"),O=t.Secp256k1Signature??t.default?.Secp256k1Signature,R=l(y),g=await this.ledgerApp.sign(this.derivationPath,R);this.validateResponse(g.return_code,g.error_message);let N=O.fromDer(g.signature).toFixedLength();return{signature:w(i[0].pubkey,N),signed:y}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.getAddressAndPubKey();return[{address:L.address,algo:"secp256k1",pubkey:Buffer.from(L.publicKey,"hex")}]}}var C=require("@tcswap/helpers"),FL=require("ethers");class Z extends FL.AbstractSigner{chainId=C.ChainId.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:y=C.NetworkDerivationPath.OP,chainId:i=C.ChainId.Optimism}){super(L);this.chainId=i||C.ChainId.Ethereum,this.derivationPath=typeof y==="string"?y:C.derivationPathToString(y),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new Z({chainId:this.chainId,derivationPath:this.derivationPath,provider:L});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await F(),y=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new y(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new C.USwapError("wallet_ledger_failed_to_get_address");return L.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(L)=>{let{Signature:y}=await import("ethers");await this.createTransportAndLedger();let i=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!i)throw new C.USwapError("wallet_ledger_signing_error");return i.r=`0x${i.r}`,i.s=`0x${i.s}`,y.from(i).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new C.USwapError("wallet_ledger_no_provider");let y=await this.signTransaction(L);return await this.provider.broadcastTransaction(y)};signTypedData(){throw new C.USwapError("wallet_ledger_method_not_supported",{method:"signTypedData"})}signTransaction=async(L)=>{let{Transaction:y}=await import("ethers");await this.createTransportAndLedger();let i=await this.provider?.getTransactionCount(L.from||await this.getAddress()),m={chainId:L.chainId||this.chainId,data:L.data,gasLimit:L.gasLimit,...L.gasPrice&&{gasPrice:L.gasPrice},...!L.gasPrice&&L.maxFeePerGas&&{maxFeePerGas:L.maxFeePerGas,maxPriorityFeePerGas:L.maxPriorityFeePerGas},nonce:L.nonce!==void 0?Number((L.nonce||i||0).toString()):i,to:L.to?.toString(),type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0,value:L.value},_=y.from(m).unsignedSerialized.slice(2),{ledgerService:w}=await import("@ledgerhq/hw-app-eth"),l=await w.resolveTransaction(_,{},{erc20:!0,externalPlugins:!0}),t=await this.ledgerApp?.signTransaction(this.derivationPath,_,l);if(!t)throw new C.USwapError("wallet_ledger_signing_error");let{r:O,s:R,v:g}=t;return y.from({...m,signature:{r:`0x${O}`,s:`0x${R}`,v:Number(BigInt(g))}}).serialized}}var jL=(L)=>new Z({...L,chainId:C.ChainId.Arbitrum}),ZL=(L)=>new Z({...L,chainId:C.ChainId.Aurora}),AL=(L)=>new Z({...L,chainId:C.ChainId.Avalanche}),$L=(L)=>new Z({...L,chainId:C.ChainId.Base}),JL=(L)=>new Z({...L,chainId:C.ChainId.Ethereum}),fL=(L)=>new Z({...L,chainId:C.ChainId.Gnosis}),KL=(L)=>new Z({...L,chainId:C.ChainId.Optimism}),QL=(L)=>new Z({...L,chainId:C.ChainId.Polygon}),WL=(L)=>new Z({...L,chainId:C.ChainId.BinanceSmartChain}),YL=(L)=>new Z({...L,chainId:C.ChainId.Monad}),DL=(L)=>new Z({...L,chainId:C.ChainId.XLayer});async function HL(L){let y=(await import("@ledgerhq/hw-app-near")).default,{Chain:i,NetworkDerivationPath:m,USwapError:_}=await import("@tcswap/helpers"),w=await F(),l=new y(w),t=(L||m[i.Near]).join("'/").concat("'"),{address:O,publicKey:R}=await l.getAddress(t);return{getAddress(){return Promise.resolve(O)},async getPublicKey(){let{PublicKey:N}=await import("@near-js/crypto");return N.fromString(`ed25519:${R}`)},signDelegateAction(N){return Promise.reject(new _("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(N,M,$,A,D){return Promise.reject(new _("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(N){let{Signature:M,SignedTransaction:$}=await import("@near-js/transactions");try{let A=await l.signTransaction(N.encode(),t);if(!A)throw Error("Signature undefined");let D=new M({data:A,keyType:0}),d=new $({signature:D,transaction:N});return[A,d]}catch(A){throw new _("wallet_ledger_signing_error",{error:A})}}}}var PL=require("@scure/base"),v=require("@tcswap/helpers");var oL=require("@scure/base"),K=require("@tcswap/helpers"),mL=(L)=>{if(L.length<64)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let y=L[3],i=L.slice(4,y+4);if(i.length===33&&i[0]===0)i=i.slice(1,33);else if(i.length===33)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"r too long"});while(i.length<32)i.unshift(0);if(L[y+4]!==2)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let m=L[y+5];if(4+y+2+m!==L.length)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let _=L.slice(y+6,L.length);if(_.length===33&&_[0]===0)_=_.slice(1,33);else if(_.length===33)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"s too long"});while(_.length<32)_.unshift(0);if(i.length!==32||_.length!==32)throw new K.USwapError("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return oL.base64.encode(Buffer.concat([i,_]))};class TL extends V{pubKey=null;derivationPath;constructor(L=v.NetworkDerivationPath.THOR){super();this.chain="thor",this.derivationPath=L}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:L,bech32_address:y}=await this.getAddressAndPubKey();return this.pubKey=PL.base64.encode(L),y};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:i,error_message:m,signature:_}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new v.USwapError("wallet_ledger_pubkey_not_found");return this.validateResponse(i,m),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:mL(_)}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:i,signature:m}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new v.USwapError("wallet_ledger_pubkey_not_found");return this.validateResponse(y,i),mL(m)}}var Q=require("@tcswap/helpers");class zL{derivationPath;ledgerApp=null;ledgerTimeout=50000;constructor(L){this.derivationPath=typeof L==="string"?L:Q.derivationPathToString(L||Q.NetworkDerivationPath.TRON)}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await F(),y=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new y(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new Q.USwapError("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let L=await this.ledgerApp?.getAddress(this.derivationPath);if(!L)throw new Q.USwapError("wallet_ledger_failed_to_get_address");return{address:L.address,publicKey:L.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(L)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new Q.USwapError("wallet_ledger_transport_error");let y=JSON.stringify(L);try{let i=await this.ledgerApp.signTransaction(this.derivationPath,y,[]);if(!i)throw new Q.USwapError("wallet_ledger_signing_error");return{...L,signature:[i]}}catch(i){throw new Q.USwapError("wallet_ledger_signing_error",{error:i})}}}var qL=(L)=>new zL(L);var q=require("@tcswap/helpers");var gy=["bitcoin-cash","dash","dogecoin","zcash"],Oy=({psbt:L,inputUtxos:y,btcApp:i,derivationPath:m,chain:_},w)=>{let l=y.map((N)=>{return[i.splitTransaction(N.txHex||"",!gy.includes(_),_==="zcash"),N.index,void 0,void 0]}),t=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),O=i.splitTransaction(t,!0),R=i.serializeTransactionOutputs(O).toString("hex"),g={additionals:["bech32"],associatedKeysets:l.map(()=>m),inputs:l,outputScriptHex:R,segwit:!0,useTrustedInputForSegwit:!0};return i.createPaymentTransaction({...g,...w})},U=({chain:L,additionalSignParams:y})=>{let i,m=null;async function _(l=!0){if(l&&!i)new q.USwapError("wallet_ledger_connection_error",{message:`Ledger connection failed:
2
+ ${JSON.stringify({btcApp:i,checkBtcApp:l})}`});m||=await F()}async function w(){m=await F(),i=new(await import("@ledgerhq/hw-app-btc")).default({currency:L,transport:m})}return(l)=>{let t=typeof l==="string"?l:q.derivationPathToString(l),O=q.getWalletFormatFor(t);return{connect:async()=>{await _(!1),i=new(await import("@ledgerhq/hw-app-btc")).default({currency:L,transport:m})},getAddress:async()=>{let{toCashAddress:R}=await import("@tcswap/toolboxes/utxo");await _(!1);let{bitcoinAddress:g}=await i.getWalletPublicKey(t,{format:O});if(!g)throw new q.USwapError("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${t}`});return L==="bitcoin-cash"&&O==="legacy"?R(g).replace(/(bchtest:|bitcoincash:)/,""):g},getExtendedPublicKey:async(R="84'/0'/0'",g=76067358)=>{return await _(!1),i.getWalletXpub({path:R,xpubVersion:g})},signTransaction:async(R,g)=>{return await w(),Oy({btcApp:i,chain:L,derivationPath:t,inputUtxos:g,psbt:R},y)}}}},SL=U({chain:"bitcoin"}),cL=U({chain:"litecoin"}),nL=U({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),UL=U({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),kL=U({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),dL=U({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let L=Buffer.allocUnsafe(4);return L.writeUInt32LE(0),L})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});var EL=X(require("@ledgerhq/hw-app-xrp")),k=require("@tcswap/helpers"),wL=require("ripple-binary-codec");var Ry=2147483648;function Gy(L){let y={};for(let i in L)if(L[i]!==null&&L[i]!==void 0)y[i]=L[i];return y}function Xy(L){return new EL.default(L)}var bL=async(L)=>{let y=k.derivationPathToString(L||k.NetworkDerivationPath[k.Chain.Ripple]),i=await F(),m=Xy(i),{address:_,publicKey:w}=await m.getAddress(y);async function l(t){let{hashes:O}=await import("@tcswap/toolboxes/ripple"),g={...Gy(t),Flags:t.Flags||Ry,SigningPubKey:w.toUpperCase()},N=wL.encode(g),M=await m.signTransaction(y,N),$=wL.encode({...g,TxnSignature:M});return{hash:O.hashSignedTx($),tx_blob:$}}return{getAddress:()=>_,signTransaction:l}};var Y=async({chain:L,derivationPath:y})=>{let{match:i}=await import("ts-pattern");return i(L).returnType().with(G.Chain.THORChain,()=>Promise.resolve(new TL(y))).with(G.Chain.Cosmos,()=>Promise.resolve(new _L(y))).with(G.Chain.Bitcoin,()=>Promise.resolve(SL(y))).with(G.Chain.BitcoinCash,()=>Promise.resolve(nL(y))).with(G.Chain.Dash,()=>Promise.resolve(kL(y))).with(G.Chain.Dogecoin,()=>Promise.resolve(UL(y))).with(G.Chain.Litecoin,()=>Promise.resolve(cL(y))).with(G.Chain.Zcash,()=>Promise.resolve(dL(y))).with(G.Chain.Ripple,()=>Promise.resolve(bL(y))).with(G.Chain.Tron,()=>Promise.resolve(qL(y))).with(G.Chain.Near,()=>{return Promise.resolve(HL(y))}).with(G.Chain.Arbitrum,G.Chain.Aurora,G.Chain.Avalanche,G.Chain.BinanceSmartChain,G.Chain.Ethereum,G.Chain.Gnosis,G.Chain.Monad,G.Chain.Optimism,G.Chain.Polygon,G.Chain.Base,G.Chain.XLayer,async()=>{let{getProvider:m}=await import("@tcswap/toolboxes/evm"),_={derivationPath:y,provider:await m(L)};return i(L).with(G.Chain.BinanceSmartChain,()=>WL(_)).with(G.Chain.Avalanche,()=>AL(_)).with(G.Chain.Arbitrum,()=>jL(_)).with(G.Chain.Optimism,()=>KL(_)).with(G.Chain.Polygon,()=>QL(_)).with(G.Chain.Base,()=>$L(_)).with(G.Chain.Aurora,()=>ZL(_)).with(G.Chain.Gnosis,()=>fL(_)).with(G.Chain.Monad,()=>YL(_)).with(G.Chain.XLayer,()=>DL(_)).otherwise(()=>JL(_))}).otherwise(()=>{throw new G.USwapError("wallet_chain_not_supported",{chain:L,wallet:G.WalletOption.LEDGER})})};var VL=x.createWallet({connect:({addChain:L,supportedChains:y,walletType:i})=>async function(_,w){let[l]=T.filterSupportedChains({chains:_,supportedChains:y,walletType:i});if(!l)return!1;let t=await jy({chain:l,derivationPath:w});return L({...t,chain:l,walletType:T.WalletOption.LEDGER}),!0},name:"connectLedger",supportedChains:[T.Chain.Arbitrum,T.Chain.Aurora,T.Chain.Avalanche,T.Chain.Base,T.Chain.BinanceSmartChain,T.Chain.Bitcoin,T.Chain.BitcoinCash,T.Chain.Cosmos,T.Chain.Dash,T.Chain.Dogecoin,T.Chain.Ethereum,T.Chain.Gnosis,T.Chain.Litecoin,T.Chain.Monad,T.Chain.Near,T.Chain.Optimism,T.Chain.Polygon,T.Chain.Ripple,T.Chain.THORChain,T.Chain.XLayer,T.Chain.Tron,T.Chain.Zcash],walletType:T.WalletOption.LEDGER}),Cy=x.getWalletSupportedChains(VL);function My(L,y="t"){if(!L?.includes("=:"))return L;let i=L.includes(`:${y}:`)?L.split(`:${y}:`)[0]:L;return i?.substring(0,i.lastIndexOf(":"))}function h(L){if(Array.isArray(L))return L.forEach((m,_)=>{L[_]=h(m)}),L;if(typeof L!=="object")return L;let y={},i=Object.keys(L).sort();for(let m of i)y[m]=h(L[m]);return y}function Fy(L){return JSON.stringify(h(L))}async function jy({chain:L,derivationPath:y}){switch(L){case T.Chain.BitcoinCash:case T.Chain.Bitcoin:case T.Chain.Dash:case T.Chain.Dogecoin:case T.Chain.Litecoin:case T.Chain.Zcash:{let{getUtxoToolbox:i}=await import("@tcswap/toolboxes/utxo"),m=await i(L),_=await Y({chain:L,derivationPath:y}),w=await o({chain:L,ledgerClient:_});return{...m,address:w,transfer:async(t)=>{let O=t.feeRate||(await m.getFeeRates())[T.FeeOption.Average],R=[T.Chain.Bitcoin].includes(L)?t.memo:My(t.memo),{psbt:g,inputs:N}=await m.createTransaction({...t,feeRate:O,fetchTxHex:!0,memo:R,sender:w}),M=await _.signTransaction(g,N);return await m.broadcastTx(M)}}}case T.Chain.Ethereum:case T.Chain.Avalanche:case T.Chain.Arbitrum:case T.Chain.Optimism:case T.Chain.Polygon:case T.Chain.BinanceSmartChain:case T.Chain.Base:case T.Chain.Aurora:case T.Chain.Gnosis:case T.Chain.Monad:case T.Chain.XLayer:{let{getEvmToolbox:i}=await import("@tcswap/toolboxes/evm"),m=await Y({chain:L,derivationPath:y}),_=await o({chain:L,ledgerClient:m});return{...await i(L,{signer:m}),address:_}}case T.Chain.Cosmos:{let{createSigningStargateClient:i,getMsgSendDenom:m,getCosmosToolbox:_}=await import("@tcswap/toolboxes/cosmos"),w=await _(T.Chain.Cosmos),l=await Y({chain:L,derivationPath:y}),t=await o({chain:L,ledgerClient:l});return{...w,address:t,transfer:async({assetValue:R,recipient:g,memo:N})=>{if(!R)throw new T.USwapError("wallet_ledger_invalid_asset");let M={amount:[{amount:R.getBaseValue("string"),denom:m(`u${R.symbol}`).toLowerCase()}],fromAddress:t,toAddress:g},$=await T.getRPCUrl(L),A=await i($,l,"0.007uatom"),{transactionHash:D}=await A.signAndBroadcast(t,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:M}],2,N);return D}}}case T.Chain.THORChain:{let{SignMode:i}=await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js"),{TxRaw:m}=await import("cosmjs-types/cosmos/tx/v1beta1/tx.js"),_=await import("@cosmjs/proto-signing"),w=_.encodePubkey??_.default?.encodePubkey,l=_.makeAuthInfoBytes??_.default?.makeAuthInfoBytes,{createStargateClient:t,buildEncodedTxBody:O,getCosmosToolbox:R,buildAminoMsg:g,getDefaultChainFee:N,fromBase64:M,parseAminoMessageForDirectSigning:$}=await import("@tcswap/toolboxes/cosmos"),A=await R(L),D=await Y({chain:L,derivationPath:y}),d=await o({chain:L,ledgerClient:D}),u=N(L),{pubkey:tL,signTransaction:vL,sign:IL}=D,lL=async({memo:H="",assetValue:gL,...hL})=>{let OL=await A.getAccount(d);if(!OL)throw new T.USwapError("wallet_ledger_invalid_account");if(!gL)throw new T.USwapError("wallet_ledger_invalid_asset");if(!tL)throw new T.USwapError("wallet_ledger_pubkey_not_found");let{accountNumber:xL,sequence:uL}=OL,p=(uL||0).toString(),RL=h([g({assetValue:gL,memo:H,sender:d,...hL})]),pL=Fy({account_number:xL?.toString(),chain_id:T.THORConfig.chainId,fee:u,memo:H,msgs:RL,sequence:p}),a=await vL(pL,p);if(!a)throw new T.USwapError("wallet_ledger_signing_error");let aL=w({type:"tendermint/PubKeySecp256k1",value:tL}),eL=RL.map($),rL=await O({chain:L,memo:H,msgs:eL}),sL=l([{pubkey:aL,sequence:Number(p)}],u.amount,Number.parseInt(u.gas,10),void 0,void 0,i.SIGN_MODE_LEGACY_AMINO_JSON),Ly=a?.[0]?.signature?M(a[0].signature):Uint8Array.from([]),yy=m.fromPartial({authInfoBytes:sL,bodyBytes:rL,signatures:[Ly]}),iy=m.encode(yy).finish(),_y=await T.getRPCUrl(T.Chain.THORChain),my=await t(_y),{transactionHash:Ty}=await my.broadcastTx(iy);return Ty};return{...A,address:d,deposit:(H)=>lL(H),signMessage:IL,transfer:(H)=>lL(H)}}case T.Chain.Near:{let{getNearToolbox:i}=await import("@tcswap/toolboxes/near"),m=await Y({chain:L,derivationPath:y}),_=await m.getAddress();return{...await i({signer:m}),address:_}}case T.Chain.Ripple:{let{getRippleToolbox:i}=await import("@tcswap/toolboxes/ripple"),m=await Y({chain:L,derivationPath:y}),_=m.getAddress();return{...await i({signer:m}),address:_}}case T.Chain.Tron:{let{createTronToolbox:i}=await import("@tcswap/toolboxes/tron"),m=await Y({chain:L,derivationPath:y}),_=await o({chain:L,ledgerClient:m});return{...await i({signer:m}),address:_}}default:throw new T.USwapError("wallet_ledger_chain_not_supported",{chain:L})}}
3
+
4
+ //# debugId=F86B094CA6D6190064756E2164756E21
5
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,25 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/ledger/index.ts", "../src/ledger/helpers/getLedgerAddress.ts", "../src/ledger/helpers/getLedgerClient.ts", "../src/ledger/clients/cosmos.ts", "../src/ledger/interfaces/CosmosLedgerInterface.ts", "../src/ledger/clients/thorchain/lib.ts", "../src/ledger/clients/thorchain/common.ts", "../src/ledger/clients/thorchain/helpers.ts", "../src/ledger/helpers/getLedgerTransport.ts", "../src/ledger/clients/evm.ts", "../src/ledger/clients/near.ts", "../src/ledger/clients/thorchain/index.ts", "../src/ledger/clients/thorchain/utils.ts", "../src/ledger/clients/tron.ts", "../src/ledger/clients/utxo.ts", "../src/ledger/clients/xrp.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport {\n Chain,\n type DerivationPathArray,\n FeeOption,\n filterSupportedChains,\n type GenericTransferParams,\n getRPCUrl,\n THORConfig,\n USwapError,\n WalletOption,\n} from \"@tcswap/helpers\";\nimport type { ThorchainDepositParams } from \"@tcswap/toolboxes/cosmos\";\nimport type { UTXOBuildTxParams } from \"@tcswap/toolboxes/utxo\";\n\nimport { createWallet, getWalletSupportedChains } from \"@tcswap/wallet-core\";\nimport { getLedgerAddress, getLedgerClient } from \"./helpers\";\n\nexport const ledgerWallet = createWallet({\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectLedger(chains: Chain[], derivationPath?: DerivationPathArray) {\n const [chain] = filterSupportedChains({ chains, supportedChains, walletType });\n\n if (!chain) return false;\n\n const walletMethods = await getWalletMethods({ chain, derivationPath });\n\n addChain({ ...walletMethods, chain, walletType: WalletOption.LEDGER });\n\n return true;\n },\n name: \"connectLedger\",\n supportedChains: [\n Chain.Arbitrum,\n Chain.Aurora,\n Chain.Avalanche,\n Chain.Base,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Cosmos,\n Chain.Dash,\n Chain.Dogecoin,\n Chain.Ethereum,\n Chain.Gnosis,\n Chain.Litecoin,\n Chain.Monad,\n Chain.Near,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Ripple,\n Chain.THORChain,\n Chain.XLayer,\n Chain.Tron,\n Chain.Zcash,\n ],\n walletType: WalletOption.LEDGER,\n});\n\nexport const LEDGER_SUPPORTED_CHAINS = getWalletSupportedChains(ledgerWallet);\n\n// reduce memo length by removing trade limit\nfunction reduceMemo(memo?: string, affiliateAddress = \"t\") {\n if (!memo?.includes(\"=:\")) return memo;\n\n const removedAffiliate = memo.includes(`:${affiliateAddress}:`) ? memo.split(`:${affiliateAddress}:`)[0] : memo;\n\n return removedAffiliate?.substring(0, removedAffiliate.lastIndexOf(\":\"));\n}\n\nfunction recursivelyOrderKeys(unordered: any) {\n // If it's an array - recursively order any\n // dictionary items within the array\n if (Array.isArray(unordered)) {\n unordered.forEach((item, index) => {\n unordered[index] = recursivelyOrderKeys(item);\n });\n return unordered;\n }\n\n // If it's an object - let's order the keys\n if (typeof unordered !== \"object\") return unordered;\n const ordered: any = {};\n const sortedKeys = Object.keys(unordered).sort();\n\n for (const key of sortedKeys) {\n ordered[key] = recursivelyOrderKeys(unordered[key]);\n }\n\n return ordered;\n}\n\nfunction stringifyKeysInOrder(data: any) {\n return JSON.stringify(recursivelyOrderKeys(data));\n}\n\nasync function getWalletMethods({ chain, derivationPath }: { chain: Chain; derivationPath?: DerivationPathArray }) {\n switch (chain) {\n case Chain.BitcoinCash:\n case Chain.Bitcoin:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n case Chain.Zcash: {\n const { getUtxoToolbox } = await import(\"@tcswap/toolboxes/utxo\");\n const toolbox = await getUtxoToolbox(chain as typeof Chain.Bitcoin);\n\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const transfer = async (params: UTXOBuildTxParams) => {\n const feeRate = params.feeRate || (await toolbox.getFeeRates())[FeeOption.Average];\n const memo = [Chain.Bitcoin].includes(chain as typeof Chain.Bitcoin) ? params.memo : reduceMemo(params.memo);\n\n const { psbt, inputs } = await toolbox.createTransaction({\n ...params,\n feeRate,\n fetchTxHex: true,\n memo,\n sender: address,\n });\n const txHex = await signer.signTransaction(psbt, inputs);\n const tx = await toolbox.broadcastTx(txHex);\n\n return tx;\n };\n\n return { ...toolbox, address, transfer };\n }\n\n case Chain.Ethereum:\n case Chain.Avalanche:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.BinanceSmartChain:\n case Chain.Base:\n case Chain.Aurora:\n case Chain.Gnosis:\n case Chain.Monad:\n case Chain.XLayer: {\n const { getEvmToolbox } = await import(\"@tcswap/toolboxes/evm\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n const toolbox = await getEvmToolbox(chain, { signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Cosmos: {\n const { createSigningStargateClient, getMsgSendDenom, getCosmosToolbox } = await import(\n \"@tcswap/toolboxes/cosmos\"\n );\n const toolbox = await getCosmosToolbox(Chain.Cosmos);\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const transfer = async ({ assetValue, recipient, memo }: GenericTransferParams) => {\n if (!assetValue) throw new USwapError(\"wallet_ledger_invalid_asset\");\n\n const sendCoinsMessage = {\n amount: [\n {\n amount: assetValue.getBaseValue(\"string\"),\n denom: getMsgSendDenom(`u${assetValue.symbol}`).toLowerCase(),\n },\n ],\n fromAddress: address,\n toAddress: recipient,\n };\n\n const rpcUrl = await getRPCUrl(chain);\n const signingClient = await createSigningStargateClient(rpcUrl, signer, \"0.007uatom\");\n\n const { transactionHash } = await signingClient.signAndBroadcast(\n address,\n [{ typeUrl: \"/cosmos.bank.v1beta1.MsgSend\", value: sendCoinsMessage }],\n 2,\n memo,\n );\n\n return transactionHash;\n };\n\n return { ...toolbox, address, transfer };\n }\n\n case Chain.THORChain: {\n const { SignMode } = await import(\"cosmjs-types/cosmos/tx/signing/v1beta1/signing.js\");\n const { TxRaw } = await import(\"cosmjs-types/cosmos/tx/v1beta1/tx.js\");\n const importedSigning = await import(\"@cosmjs/proto-signing\");\n const encodePubkey = importedSigning.encodePubkey ?? importedSigning.default?.encodePubkey;\n const makeAuthInfoBytes = importedSigning.makeAuthInfoBytes ?? importedSigning.default?.makeAuthInfoBytes;\n const {\n createStargateClient,\n buildEncodedTxBody,\n getCosmosToolbox,\n buildAminoMsg,\n getDefaultChainFee,\n fromBase64,\n parseAminoMessageForDirectSigning,\n } = await import(\"@tcswap/toolboxes/cosmos\");\n const toolbox = await getCosmosToolbox(chain);\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n\n const fee = getDefaultChainFee(chain);\n const { pubkey: value, signTransaction, sign: signMessage } = signer;\n\n // ANCHOR (@Chillios): Same parts in methods + can extract StargateClient init to toolbox\n const thorchainTransfer = async ({\n memo = \"\",\n assetValue,\n ...rest\n }: GenericTransferParams | ThorchainDepositParams) => {\n const account = await toolbox.getAccount(address);\n if (!account) throw new USwapError(\"wallet_ledger_invalid_account\");\n if (!assetValue) throw new USwapError(\"wallet_ledger_invalid_asset\");\n if (!value) throw new USwapError(\"wallet_ledger_pubkey_not_found\");\n\n const { accountNumber, sequence: sequenceNumber } = account;\n const sequence = (sequenceNumber || 0).toString();\n\n const orderedMessages = recursivelyOrderKeys([buildAminoMsg({ assetValue, memo, sender: address, ...rest })]);\n\n // get tx signing msg\n const rawSendTx = stringifyKeysInOrder({\n account_number: accountNumber?.toString(),\n chain_id: THORConfig.chainId,\n fee,\n memo,\n msgs: orderedMessages,\n sequence,\n });\n\n const signatures = await signTransaction(rawSendTx, sequence);\n if (!signatures) throw new USwapError(\"wallet_ledger_signing_error\");\n\n const pubkey = encodePubkey({ type: \"tendermint/PubKeySecp256k1\", value });\n const msgs = orderedMessages.map(parseAminoMessageForDirectSigning);\n const bodyBytes = await buildEncodedTxBody({ chain, memo, msgs });\n\n const authInfoBytes = makeAuthInfoBytes(\n [{ pubkey, sequence: Number(sequence) }],\n fee.amount,\n Number.parseInt(fee.gas, 10),\n undefined,\n undefined,\n SignMode.SIGN_MODE_LEGACY_AMINO_JSON,\n );\n\n const signature = signatures?.[0]?.signature ? fromBase64(signatures[0].signature) : Uint8Array.from([]);\n\n const txRaw = TxRaw.fromPartial({ authInfoBytes, bodyBytes, signatures: [signature] });\n const txBytes = TxRaw.encode(txRaw).finish();\n const rpcUrl = await getRPCUrl(Chain.THORChain);\n\n const broadcaster = await createStargateClient(rpcUrl);\n const { transactionHash } = await broadcaster.broadcastTx(txBytes);\n\n return transactionHash;\n };\n\n const transfer = (params: GenericTransferParams) => thorchainTransfer(params);\n const deposit = (params: ThorchainDepositParams) => thorchainTransfer(params);\n\n return { ...toolbox, address, deposit, signMessage, transfer };\n }\n\n case Chain.Near: {\n const { getNearToolbox } = await import(\"@tcswap/toolboxes/near\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const accountId = await signer.getAddress();\n const toolbox = await getNearToolbox({ signer });\n\n return { ...toolbox, address: accountId };\n }\n\n case Chain.Ripple: {\n const { getRippleToolbox } = await import(\"@tcswap/toolboxes/ripple\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = signer.getAddress();\n const toolbox = await getRippleToolbox({ signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Tron: {\n const { createTronToolbox } = await import(\"@tcswap/toolboxes/tron\");\n const signer = await getLedgerClient({ chain, derivationPath });\n const address = await getLedgerAddress({ chain, ledgerClient: signer });\n const toolbox = await createTronToolbox({ signer });\n\n return { ...toolbox, address };\n }\n\n default:\n throw new USwapError(\"wallet_ledger_chain_not_supported\", { chain });\n }\n}\n",
6
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { Chain, USwapError, WalletOption } from \"@tcswap/helpers\";\n\nimport type { getNearLedgerClient } from \"../clients/near\";\nimport type { TronLedger } from \"../clients/tron\";\nimport type { XRPLedger } from \"../clients/xrp\";\nimport type { LEDGER_SUPPORTED_CHAINS } from \"../index\";\nimport type { CosmosLedgerClients, EVMLedgerClients, UTXOLedgerClients } from \"../types\";\nimport type { getLedgerClient } from \"./getLedgerClient\";\n\nexport const getLedgerAddress = async <\n T extends (typeof LEDGER_SUPPORTED_CHAINS)[number],\n L extends Awaited<ReturnType<typeof getLedgerClient<T>>>,\n>({\n chain,\n ledgerClient,\n}: {\n chain: T;\n ledgerClient: L;\n}) => {\n if (!ledgerClient) return \"\";\n\n switch (chain) {\n case Chain.Cosmos:\n case Chain.THORChain: {\n return (ledgerClient as CosmosLedgerClients).connect();\n }\n\n case Chain.Ethereum:\n case Chain.BinanceSmartChain:\n case Chain.Avalanche:\n case Chain.Polygon:\n case Chain.Arbitrum:\n case Chain.Optimism:\n case Chain.Base:\n case Chain.Aurora:\n case Chain.Gnosis:\n case Chain.XLayer: {\n return (ledgerClient as EVMLedgerClients).getAddress();\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.Litecoin:\n case Chain.Zcash: {\n const ledger = ledgerClient as UTXOLedgerClients;\n await ledger.connect();\n const address = await ledger.getAddress();\n\n return chain === Chain.BitcoinCash ? address.replace(\"bitcoincash:\", \"\") : address;\n }\n\n case Chain.Near: {\n return await (ledgerClient as Awaited<ReturnType<typeof getNearLedgerClient>>).getAddress();\n }\n\n case Chain.Ripple: {\n return (ledgerClient as Awaited<ReturnType<typeof XRPLedger>>).getAddress();\n }\n\n case Chain.Tron: {\n return (ledgerClient as Awaited<ReturnType<typeof TronLedger>>).getAddress();\n }\n\n default:\n throw new USwapError(\"wallet_chain_not_supported\", { chain, wallet: WalletOption.LEDGER });\n }\n};\n",
7
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { Chain, type DerivationPathArray, type EVMChain, USwapError, WalletOption } from \"@tcswap/helpers\";\n\nimport { CosmosLedger } from \"../clients/cosmos\";\nimport {\n ArbitrumLedger,\n AuroraLedger,\n AvalancheLedger,\n BaseLedger,\n BinanceSmartChainLedger,\n EthereumLedger,\n GnosisLedger,\n MonadLedger,\n OptimismLedger,\n PolygonLedger,\n XLayerLedger,\n} from \"../clients/evm\";\nimport { getNearLedgerClient } from \"../clients/near\";\nimport { THORChainLedger } from \"../clients/thorchain\";\nimport { TronLedger } from \"../clients/tron\";\nimport {\n BitcoinCashLedger,\n BitcoinLedger,\n DashLedger,\n DogecoinLedger,\n LitecoinLedger,\n ZcashLedger,\n} from \"../clients/utxo\";\nimport { XRPLedger } from \"../clients/xrp\";\n\ntype LedgerSignerMap = {\n [Chain.Arbitrum]: ReturnType<typeof ArbitrumLedger>;\n [Chain.Aurora]: ReturnType<typeof AuroraLedger>;\n [Chain.Avalanche]: ReturnType<typeof AvalancheLedger>;\n [Chain.Base]: ReturnType<typeof BaseLedger>;\n [Chain.BinanceSmartChain]: ReturnType<typeof BinanceSmartChainLedger>;\n [Chain.BitcoinCash]: ReturnType<typeof BitcoinCashLedger>;\n [Chain.Bitcoin]: ReturnType<typeof BitcoinLedger>;\n [Chain.Cosmos]: CosmosLedger;\n [Chain.Dash]: ReturnType<typeof DashLedger>;\n [Chain.Dogecoin]: ReturnType<typeof DogecoinLedger>;\n [Chain.Ethereum]: ReturnType<typeof EthereumLedger>;\n [Chain.Gnosis]: ReturnType<typeof GnosisLedger>;\n [Chain.Litecoin]: ReturnType<typeof LitecoinLedger>;\n [Chain.Monad]: ReturnType<typeof MonadLedger>;\n [Chain.Near]: ReturnType<typeof getNearLedgerClient>;\n [Chain.Optimism]: ReturnType<typeof OptimismLedger>;\n [Chain.Polygon]: ReturnType<typeof PolygonLedger>;\n [Chain.Ripple]: ReturnType<typeof XRPLedger>;\n [Chain.THORChain]: THORChainLedger;\n [Chain.Tron]: ReturnType<typeof TronLedger>;\n [Chain.XLayer]: ReturnType<typeof XLayerLedger>;\n [Chain.Zcash]: ReturnType<typeof ZcashLedger>;\n};\n\ntype LedgerSupportedChain = keyof LedgerSignerMap;\n\nexport const getLedgerClient = async <T extends LedgerSupportedChain>({\n chain,\n derivationPath,\n}: {\n chain: T;\n derivationPath?: DerivationPathArray;\n}): Promise<LedgerSignerMap[T]> => {\n const { match } = await import(\"ts-pattern\");\n\n return (\n match(chain as LedgerSupportedChain)\n .returnType<Promise<LedgerSignerMap[T]>>()\n .with(Chain.THORChain, () => Promise.resolve(new THORChainLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Cosmos, () => Promise.resolve(new CosmosLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Bitcoin, () => Promise.resolve(BitcoinLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.BitcoinCash, () => Promise.resolve(BitcoinCashLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Dash, () => Promise.resolve(DashLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Dogecoin, () => Promise.resolve(DogecoinLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Litecoin, () => Promise.resolve(LitecoinLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Zcash, () => Promise.resolve(ZcashLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Ripple, () => Promise.resolve(XRPLedger(derivationPath) as LedgerSignerMap[T]))\n .with(Chain.Tron, () => Promise.resolve(TronLedger(derivationPath) as LedgerSignerMap[T]))\n // @ts-expect-error\n .with(Chain.Near, () => {\n return Promise.resolve(getNearLedgerClient(derivationPath));\n })\n .with(\n Chain.Arbitrum,\n Chain.Aurora,\n Chain.Avalanche,\n Chain.BinanceSmartChain,\n Chain.Ethereum,\n Chain.Gnosis,\n Chain.Monad,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Base,\n Chain.XLayer,\n async () => {\n const { getProvider } = await import(\"@tcswap/toolboxes/evm\");\n const params = { derivationPath, provider: await getProvider(chain as EVMChain) };\n\n return match(chain as Chain)\n .with(Chain.BinanceSmartChain, () => BinanceSmartChainLedger(params) as LedgerSignerMap[T])\n .with(Chain.Avalanche, () => AvalancheLedger(params) as LedgerSignerMap[T])\n .with(Chain.Arbitrum, () => ArbitrumLedger(params) as LedgerSignerMap[T])\n .with(Chain.Optimism, () => OptimismLedger(params) as LedgerSignerMap[T])\n .with(Chain.Polygon, () => PolygonLedger(params) as LedgerSignerMap[T])\n .with(Chain.Base, () => BaseLedger(params) as LedgerSignerMap[T])\n .with(Chain.Aurora, () => AuroraLedger(params) as LedgerSignerMap[T])\n .with(Chain.Gnosis, () => GnosisLedger(params) as LedgerSignerMap[T])\n .with(Chain.Monad, () => MonadLedger(params) as LedgerSignerMap[T])\n .with(Chain.XLayer, () => XLayerLedger(params) as LedgerSignerMap[T])\n .otherwise(() => EthereumLedger(params) as LedgerSignerMap[T]);\n },\n )\n .otherwise(() => {\n throw new USwapError(\"wallet_chain_not_supported\", { chain, wallet: WalletOption.LEDGER });\n })\n );\n};\n",
8
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { type DerivationPathArray, derivationPathToString, NetworkDerivationPath, USwapError } from \"@tcswap/helpers\";\nimport { CosmosLedgerInterface } from \"../interfaces/CosmosLedgerInterface\";\n\nexport class CosmosLedger extends CosmosLedgerInterface {\n private pubKey: string | null = null;\n\n derivationPath: string;\n\n constructor(derivationPath: DerivationPathArray = NetworkDerivationPath.GAIA) {\n super();\n this.chain = \"cosmos\";\n this.derivationPath = derivationPathToString(derivationPath);\n }\n\n connect = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n const { publicKey, address } = await this.getAddressAndPubKey();\n\n this.pubKey = Buffer.from(publicKey, \"hex\").toString(\"base64\");\n\n return address;\n };\n\n getAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response = await this.ledgerApp.getAddress(this.derivationPath, this.chain);\n\n return response;\n };\n\n signTransaction = async (rawTx: string, sequence = \"0\") => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(this.derivationPath, rawTx);\n\n if (!this.pubKey) throw new USwapError(\"wallet_ledger_pubkey_not_found\");\n\n this.validateResponse(return_code, error_message);\n\n return [{ pub_key: { type: \"tendermint/PubKeySecp256k1\", value: this.pubKey }, sequence, signature }];\n };\n\n signAmino = async (signerAddress: string, signDoc: any): Promise<any> => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const accounts = await this.getAccounts();\n const accountIndex = accounts.findIndex((account) => account.address === signerAddress);\n\n if (accountIndex === -1) {\n throw new USwapError(\"wallet_ledger_address_not_found\", { address: signerAddress });\n }\n\n const importedAmino = await import(\"@cosmjs/amino\");\n const encodeSecp256k1Signature =\n importedAmino.encodeSecp256k1Signature ?? importedAmino.default?.encodeSecp256k1Signature;\n const serializeSignDoc = importedAmino.serializeSignDoc ?? importedAmino.default?.serializeSignDoc;\n const importedCrypto = await import(\"@cosmjs/crypto\");\n const Secp256k1Signature = importedCrypto.Secp256k1Signature ?? importedCrypto.default?.Secp256k1Signature;\n\n const message = serializeSignDoc(signDoc);\n const signature = await this.ledgerApp.sign(this.derivationPath, message);\n\n this.validateResponse(signature.return_code, signature.error_message);\n\n const secpSignature = Secp256k1Signature.fromDer(signature.signature).toFixedLength();\n\n return { signature: encodeSecp256k1Signature(accounts[0].pubkey, secpSignature), signed: signDoc };\n };\n\n getAccounts = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const addressAndPubKey = await this.getAddressAndPubKey();\n return [\n { address: addressAndPubKey.address, algo: \"secp256k1\", pubkey: Buffer.from(addressAndPubKey.publicKey, \"hex\") },\n ] as any[];\n };\n}\n",
9
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { type DerivationPathArray, LedgerErrorCode, NetworkDerivationPath, USwapError } from \"@tcswap/helpers\";\n\nimport { THORChainApp } from \"../clients/thorchain/lib\";\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nexport abstract class CosmosLedgerInterface {\n ledgerTimeout = 50000;\n derivationPath: DerivationPathArray | string = NetworkDerivationPath.GAIA;\n transport: any;\n ledgerApp: any;\n chain: \"thor\" | \"cosmos\" = \"thor\";\n\n checkOrCreateTransportAndLedger = async (forceReconnect = false) => {\n if (!forceReconnect && this.transport && this.ledgerApp) return;\n\n try {\n this.transport = forceReconnect || !this.transport ? await getLedgerTransport() : this.transport;\n\n switch (this.chain) {\n case \"thor\": {\n this.ledgerApp = forceReconnect || !this.ledgerApp ? new THORChainApp(this.transport) : this.ledgerApp;\n\n break;\n }\n\n case \"cosmos\": {\n const CosmosApp = (await import(\"@ledgerhq/hw-app-cosmos\")).default;\n this.ledgerApp = forceReconnect || !this.ledgerApp ? new CosmosApp(this.transport) : this.ledgerApp;\n }\n }\n\n return this.ledgerApp;\n } catch (error: unknown) {\n throw new USwapError(\"wallet_ledger_connection_error\", error);\n }\n };\n\n validateResponse = (errorCode: LedgerErrorCode, message?: string) => {\n switch (errorCode) {\n case LedgerErrorCode.NoError:\n return;\n\n case LedgerErrorCode.LockedDevice:\n throw new USwapError(\"wallet_ledger_device_locked\", { message: `Ledger is locked: ${message}` });\n\n case LedgerErrorCode.TC_NotFound:\n throw new USwapError(\"wallet_ledger_device_not_found\");\n\n default: {\n break;\n }\n }\n };\n}\n",
10
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { USwapError } from \"@tcswap/helpers\";\n/** ******************************************************************************\n * (c) 2019 ZondaX GmbH\n * (c) 2016-2017 Ledger\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n ******************************************************************************* */\n\nimport {\n CHUNK_SIZE,\n CLA,\n ERROR_CODE,\n errorCodeToString,\n getVersion,\n INS,\n P1_VALUES,\n P2_VALUES,\n processErrorResponse,\n} from \"./common\";\nimport {\n publicKeyv1,\n publicKeyv2,\n serializePathv1,\n serializePathv2,\n signSendChunkv1,\n signSendChunkv2,\n} from \"./helpers\";\n\nexport class THORChainApp {\n transport: Transport;\n versionResponse: any;\n\n constructor(transport: any) {\n if (!transport) {\n throw new USwapError(\"wallet_ledger_transport_not_defined\");\n }\n\n this.transport = transport;\n }\n\n static serializeHRP(hrp: string) {\n if (hrp == null || hrp.length < 3 || hrp.length > 83) {\n throw new USwapError(\"wallet_ledger_invalid_params\", { reason: \"Invalid HRP\" });\n }\n const buf = Buffer.alloc(1 + hrp.length);\n buf.writeUInt8(hrp.length, 0);\n buf.write(hrp, 1);\n return buf;\n }\n\n async serializePath(path: number[]) {\n this.versionResponse = await getVersion(this.transport);\n\n if (this.versionResponse.return_code !== ERROR_CODE.NoError) {\n throw this.versionResponse;\n }\n\n switch (this.versionResponse.major) {\n case 1:\n return serializePathv1(path);\n case 2:\n return serializePathv2(path);\n default:\n return Buffer.alloc(0);\n }\n }\n\n async signGetChunks(path: number[], buffer: Buffer) {\n const serializedPath = await this.serializePath(path);\n\n const chunks = [];\n chunks.push(serializedPath);\n\n for (let i = 0; i < buffer.length; i += CHUNK_SIZE) {\n let end = i + CHUNK_SIZE;\n if (i > buffer.length) {\n end = buffer.length;\n }\n chunks.push(buffer.slice(i, end));\n }\n\n return chunks;\n }\n\n async getVersion() {\n try {\n this.versionResponse = await getVersion(this.transport);\n return this.versionResponse;\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n appInfo() {\n return this.transport.send(0xb0, 0x01, 0, 0).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n let appName = \"\";\n let appVersion = \"\";\n let flagLen = 0;\n let flagsValue = 0;\n\n if (response[0] !== 1) {\n // Ledger responds with format ID 1. There is no spec for any format != 1\n return { error_message: \"response format ID not recognized\", return_code: 0x9001 };\n }\n\n const appNameLen = response[1];\n appName = response.slice(2, 2 + appNameLen).toString(\"ascii\");\n let idx = 2 + appNameLen;\n const appVersionLen = response[idx];\n idx += 1;\n appVersion = response.slice(idx, idx + appVersionLen).toString(\"ascii\");\n idx += appVersionLen;\n const appFlagsLen = response[idx];\n idx += 1;\n flagLen = appFlagsLen;\n flagsValue = response[idx];\n\n return {\n appName,\n appVersion,\n error_message: errorCodeToString(returnCode),\n flag_onboarded: (flagsValue & 4) !== 0,\n flag_pin_validated: (flagsValue & 128) !== 0,\n flag_recovery: (flagsValue & 1) !== 0,\n flag_signed_mcu_code: (flagsValue & 2) !== 0,\n flagLen,\n flagsValue,\n return_code: returnCode,\n };\n }, processErrorResponse);\n }\n\n deviceInfo() {\n return this.transport\n .send(0xe0, 0x01, 0, 0, Buffer.from([]), [ERROR_CODE.NoError, 0x6e00])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n if (returnCode === 0x6e00) {\n return { error_message: \"This command is only available in the Dashboard\", return_code: returnCode };\n }\n\n const targetId = response.slice(0, 4).toString(\"hex\");\n\n let pos = 4;\n const secureElementVersionLen = response[pos];\n pos += 1;\n const seVersion = response.slice(pos, pos + secureElementVersionLen).toString();\n pos += secureElementVersionLen;\n\n const flagsLen = response[pos];\n pos += 1;\n const flag = response.slice(pos, pos + flagsLen).toString(\"hex\");\n pos += flagsLen;\n\n const mcuVersionLen = response[pos];\n pos += 1;\n // Patch issue in mcu version\n let tmp = response.slice(pos, pos + mcuVersionLen);\n if (tmp[mcuVersionLen - 1] === 0) {\n tmp = response.slice(pos, pos + mcuVersionLen - 1);\n }\n const mcuVersion = tmp.toString();\n\n return {\n error_message: errorCodeToString(returnCode),\n flag,\n mcuVersion,\n return_code: returnCode,\n seVersion,\n // //\n targetId,\n };\n }, processErrorResponse);\n }\n\n async publicKey(path: number[]) {\n try {\n const serializedPath = await this.serializePath(path);\n\n switch (this.versionResponse.major) {\n case 1:\n return publicKeyv1(this, serializedPath);\n case 2: {\n const data = Buffer.concat([THORChainApp.serializeHRP(\"thor\"), serializedPath]);\n return publicKeyv2(this, data);\n }\n default:\n return { error_message: \"App Version is not supported\", return_code: 0x6400 };\n }\n } catch (e) {\n return processErrorResponse(e);\n }\n }\n\n getAddressAndPubKey(path: number[], hrp: string, showInDevice = false) {\n return this.serializePath(path)\n .then((serializedPath: Buffer) => {\n const data = Buffer.concat([THORChainApp.serializeHRP(hrp), serializedPath]);\n return this.transport\n .send(\n CLA,\n INS.GET_ADDR_SECP256K1,\n showInDevice ? P1_VALUES.SHOW_ADDRESS_IN_DEVICE : P1_VALUES.ONLY_RETRIEVE,\n 0,\n data,\n [ERROR_CODE.NoError],\n )\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n const compressedPk = Buffer.from(response.slice(0, 33));\n const bech32Address = Buffer.from(response.slice(33, -2)).toString();\n\n return {\n bech32_address: bech32Address,\n compressed_pk: compressedPk,\n error_message: errorCodeToString(returnCode),\n return_code: returnCode,\n };\n }, processErrorResponse);\n })\n .catch((err) => processErrorResponse(err));\n }\n\n showAddressAndPubKey(path: number[], hrp: string) {\n return this.getAddressAndPubKey(path, hrp, true);\n }\n\n signSendChunk(chunkIdx: number, chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n switch (this.versionResponse.major) {\n case 1:\n return signSendChunkv1(this, chunkIdx, chunkNum, chunk, txType);\n case 2:\n return signSendChunkv2(this, chunkIdx, chunkNum, chunk, txType);\n default:\n return { error_message: \"App Version is not supported\", return_code: 0x6400 };\n }\n }\n\n async sign(path: number[], message: string, txType = P2_VALUES.JSON) {\n const buffer = Buffer.from(message);\n let chunks: Buffer[] = [];\n let response: any;\n try {\n chunks = await this.signGetChunks(path, buffer);\n response = await this.signSendChunk(1, chunks.length, chunks[0] as Buffer, txType);\n } catch (error) {\n processErrorResponse(error);\n }\n let result = { error_message: response.error_message, return_code: response.return_code, signature: null };\n\n for (let i = 1; i < chunks.length; i += 1) {\n result = await this.signSendChunk(1 + i, chunks.length, chunks[i] as Buffer, txType);\n if (result.return_code !== ERROR_CODE.NoError) {\n break;\n }\n }\n\n return { error_message: result.error_message, return_code: result.return_code, signature: result.signature };\n }\n}\n",
11
+ "export const CLA = 0x55;\nexport const CHUNK_SIZE = 250;\nexport const APP_KEY = \"CSM\";\n\nexport const INS = {\n GET_ADDR_SECP256K1: 0x04,\n GET_VERSION: 0x00,\n INS_PUBLIC_KEY_SECP256K1: 0x01, // Obsolete\n SIGN_SECP256K1: 0x02,\n};\n\nexport const PAYLOAD_TYPE = { ADD: 0x01, INIT: 0x00, LAST: 0x02 };\n\nexport const P1_VALUES = { ONLY_RETRIEVE: 0x00, SHOW_ADDRESS_IN_DEVICE: 0x01 };\n\nexport const P2_VALUES = { JSON: 0x0 };\n\nexport const ERROR_CODE = { NoError: 0x9000 };\n\nconst ERROR_DESCRIPTION: any = {\n 1: \"U2F: Unknown\",\n 2: \"U2F: Bad request\",\n 3: \"U2F: Configuration unsupported\",\n 4: \"U2F: Device Ineligible\",\n 5: \"U2F: Timeout\",\n 14: \"Timeout\",\n 25600: \"Execution Error\",\n 26368: \"Wrong Length\",\n 26626: \"Error deriving keys\",\n 27010: \"Empty Buffer\",\n 27011: \"Output buffer too small\",\n 27012: \"Data is invalid\",\n 27013: \"Conditions not satisfied\",\n 27014: \"Transaction rejected\",\n 27264: \"Bad key handle\",\n 27392: \"Invalid P1/P2\",\n 27904: \"Instruction not supported\",\n 28160: \"App does not seem to be open\",\n 28416: \"Unknown error\",\n 28417: \"Sign/verify error\",\n 36864: \"No errors\",\n 36865: \"Device is busy\",\n};\n\nexport function errorCodeToString(statusCode: number) {\n if (statusCode in ERROR_DESCRIPTION) return ERROR_DESCRIPTION[statusCode];\n return `Unknown Status Code: ${statusCode}`;\n}\n\nfunction isDict(v: any) {\n return typeof v === \"object\" && v !== null && !Array.isArray(v) && !(v instanceof Date);\n}\n\nexport function processErrorResponse(response: any) {\n if (response) {\n if (isDict(response)) {\n if (Object.hasOwn(response, \"statusCode\")) {\n return { error_message: errorCodeToString(response.statusCode), return_code: response.statusCode };\n }\n\n if (Object.hasOwn(response, \"return_code\") && Object.hasOwn(response, \"error_message\")) {\n return response;\n }\n }\n return { error_message: response.toString(), return_code: 0xffff };\n }\n\n return { error_message: response.toString(), return_code: 0xffff };\n}\n\nexport function getVersion(transport: any) {\n return transport.send(CLA, INS.GET_VERSION, 0, 0).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n\n let targetId = 0;\n if (response.length >= 9) {\n targetId = (response[5] << 24) + (response[6] << 16) + (response[7] << 8) + (response[8] << 0);\n }\n\n return {\n device_locked: response[4] === 1,\n error_message: errorCodeToString(returnCode),\n major: response[1],\n minor: response[2],\n patch: response[3],\n return_code: returnCode,\n target_id: targetId.toString(16),\n // ///\n test_mode: response[0] !== 0,\n };\n }, processErrorResponse);\n}\n",
12
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { USwapError } from \"@tcswap/helpers\";\nimport { CLA, ERROR_CODE, errorCodeToString, INS, P2_VALUES, PAYLOAD_TYPE, processErrorResponse } from \"./common\";\n\nexport function serializePathv1(path: number[]) {\n if (path == null || path.length < 3) {\n throw new USwapError(\"wallet_ledger_invalid_params\", { reason: \"Path too short\" });\n }\n if (path.length > 10) {\n throw new USwapError(\"wallet_ledger_invalid_params\", { reason: \"Path too long\" });\n }\n const buf = Buffer.alloc(1 + 4 * path.length);\n buf.writeUInt8(path.length, 0);\n for (let i = 0; i < path.length; i += 1) {\n let v = path[i] || 0;\n if (i < 3) {\n // eslint-disable-next-line no-bitwise\n v |= 0x80000000; // Harden\n }\n buf.writeInt32LE(v, 1 + i * 4);\n }\n return buf;\n}\n\nexport function signSendChunkv1(app: any, chunkIdx: number, _chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n return app.transport\n .send(CLA, INS.SIGN_SECP256K1, chunkIdx, txType, chunk, [ERROR_CODE.NoError, 0x6984, 0x6a80])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n let errorMessage = errorCodeToString(returnCode);\n\n if (returnCode === 0x6a80 || returnCode === 0x6984) {\n errorMessage = `${errorMessage} : ${response.slice(0, response.length - 2).toString(\"ascii\")}`;\n }\n\n let signature: any = null;\n if (response.length > 2) {\n signature = response.slice(0, response.length - 2);\n }\n\n return { error_message: errorMessage, return_code: returnCode, signature };\n }, processErrorResponse);\n}\n\nfunction compressPublicKey(publicKey: Buffer) {\n if (publicKey.length !== 65) {\n throw new USwapError(\"wallet_ledger_invalid_params\", {\n reason: \"decompressed public key length should be 65 bytes\",\n });\n }\n const y = publicKey.slice(33, 65);\n\n // @ts-expect-error\n const z = Buffer.from([2 + (y[y.length - 1] & 1)]);\n return Buffer.concat([z, publicKey.slice(1, 33)]);\n}\n\nexport function publicKeyv1(app: any, data: Buffer) {\n return app.transport\n .send(CLA, INS.INS_PUBLIC_KEY_SECP256K1, 0, 0, data, [ERROR_CODE.NoError])\n .then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n const pk = Buffer.from(response.slice(0, 65));\n\n return {\n compressed_pk: compressPublicKey(pk),\n error_message: errorCodeToString(returnCode),\n pk,\n return_code: returnCode,\n };\n }, processErrorResponse);\n}\n\nexport function serializePathv2(path: number[]) {\n if (!path || path.length !== 5) {\n throw new USwapError(\"wallet_ledger_invalid_params\", { reason: \"Path must be exactly 5 elements\" });\n }\n\n const buf = Buffer.alloc(20);\n // @ts-expect-error\n buf.writeUInt32LE(0x80000000 + path[0], 0);\n // @ts-expect-error\n buf.writeUInt32LE(0x80000000 + path[1], 4);\n // @ts-expect-error\n buf.writeUInt32LE(0x80000000 + path[2], 8);\n // @ts-expect-error\n buf.writeUInt32LE(path[3], 12);\n // @ts-expect-error\n buf.writeUInt32LE(path[4], 16);\n\n return buf;\n}\n\nexport function signSendChunkv2(app: any, chunkIdx: number, chunkNum: number, chunk: Buffer, txType = P2_VALUES.JSON) {\n let payloadType = PAYLOAD_TYPE.ADD;\n if (chunkIdx === 1) {\n payloadType = PAYLOAD_TYPE.INIT;\n }\n if (chunkIdx === chunkNum) {\n payloadType = PAYLOAD_TYPE.LAST;\n }\n\n return signSendChunkv1(app, payloadType, 0, chunk, txType);\n}\n\nexport function publicKeyv2(app: any, data: Buffer) {\n return app.transport.send(CLA, INS.GET_ADDR_SECP256K1, 0, 0, data, [ERROR_CODE.NoError]).then((response: any) => {\n const errorCodeData = response.slice(-2);\n const returnCode = errorCodeData[0] * 256 + errorCodeData[1];\n const compressedPk = Buffer.from(response.slice(0, 33));\n\n return {\n compressed_pk: compressedPk,\n error_message: errorCodeToString(returnCode),\n pk: \"OBSOLETE PROPERTY\",\n return_code: returnCode,\n };\n }, processErrorResponse);\n}\n",
13
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { USwapError } from \"@tcswap/helpers\";\n\nconst getNavigatorUsb = () =>\n navigator?.usb as unknown as {\n getDevices: () => Promise<any[]>;\n requestDevice: (requestObject: any) => Promise<any>;\n removeEventListener: (event: string, callback: (e: any) => void) => void;\n addEventListener: (event: string, callback: (e: any) => void) => void;\n };\n\nconst getLedgerDevices = async (): Promise<USBDevice> => {\n const navigatorUsb = getNavigatorUsb();\n\n if (typeof navigatorUsb?.getDevices !== \"function\") return {} as USBDevice;\n const { ledgerUSBVendorId } = await import(\"@ledgerhq/devices\");\n\n const devices = await navigatorUsb?.getDevices();\n const existingDevices = devices.filter((d) => d.vendorId === ledgerUSBVendorId);\n if (existingDevices.length > 0) return existingDevices[0];\n\n return navigatorUsb?.requestDevice({ filters: [{ vendorId: ledgerUSBVendorId }] });\n};\n\nexport const getLedgerTransport = async (): Promise<Transport> => {\n const device = await getLedgerDevices();\n\n if (!device) {\n throw new USwapError(\"wallet_ledger_device_not_found\");\n }\n\n device.opened || (await device.open());\n if (device.configuration === null) await device.selectConfiguration(1);\n\n try {\n await device.reset();\n } catch {\n // reset fails on devices that are already open\n }\n\n const configuration = device.configuration ?? device.configurations?.[0];\n\n const iface =\n configuration?.interfaces.find(({ alternates }: { alternates: { interfaceClass: number }[] }) =>\n alternates.some(({ interfaceClass }) => interfaceClass === 0xff),\n ) ||\n configuration?.interfaces.find(({ alternates }: { alternates: { interfaceClass: number }[] }) =>\n alternates.some(({ interfaceClass }) => interfaceClass === 0x03),\n );\n\n if (!iface) {\n await device.close();\n throw new USwapError(\"wallet_ledger_connection_error\");\n }\n\n const klass0x03 = (iface.alternates as any[])?.find(\n ({ interfaceClass }: { interfaceClass: number }) => interfaceClass === 0x03,\n )?.interfaceClass as number;\n\n const klass0xff = (iface.alternates as any[])?.find(\n ({ interfaceClass }: { interfaceClass: number }) => interfaceClass === 0xff,\n )?.interfaceClass as number;\n\n if (klass0x03 && !klass0xff) {\n // -------- HID class (NEAR, ETH, SOL, etc.) -> WebHID transport --------\n const TransportWebHID = (await import(\"@ledgerhq/hw-transport-webhid\")).default;\n const supported = await TransportWebHID.isSupported();\n if (!supported) {\n await device.close();\n throw new USwapError(\"wallet_ledger_webhid_not_supported\");\n }\n const transport = await TransportWebHID.create();\n return transport;\n }\n\n try {\n await device.claimInterface(iface.interfaceNumber);\n } catch (error: unknown) {\n await device.close();\n\n throw new USwapError(\"wallet_ledger_connection_claimed\", error);\n }\n\n const Transport = (await import(\"@ledgerhq/hw-transport-webusb\")).default;\n const isSupported = await Transport.isSupported();\n if (!isSupported) throw new USwapError(\"wallet_ledger_webusb_not_supported\");\n\n const { DisconnectedDevice } = await import(\"@ledgerhq/errors\");\n\n const transport = new Transport(device, iface.interfaceNumber);\n\n const onDisconnect = (e: any) => {\n if (device === e.device) {\n getNavigatorUsb()?.removeEventListener(\"disconnect\", onDisconnect);\n\n transport._emitDisconnect(new DisconnectedDevice());\n }\n };\n getNavigatorUsb()?.addEventListener(\"disconnect\", onDisconnect);\n\n return transport as Transport;\n};\n",
14
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type EthereumApp from \"@ledgerhq/hw-app-eth\";\nimport {\n ChainId,\n type DerivationPathArray,\n derivationPathToString,\n NetworkDerivationPath,\n USwapError,\n} from \"@tcswap/helpers\";\nimport { AbstractSigner, type Provider, type TransactionRequest } from \"ethers\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nclass EVMLedgerInterface extends AbstractSigner {\n chainId: ChainId = ChainId.Ethereum;\n derivationPath = \"\";\n ledgerApp: InstanceType<typeof EthereumApp> | null = null;\n ledgerTimeout = 50000;\n\n constructor({\n provider,\n derivationPath = NetworkDerivationPath.OP,\n chainId = ChainId.Optimism,\n }: { provider: Provider; derivationPath?: DerivationPathArray | string; chainId?: ChainId }) {\n super(provider);\n\n this.chainId = chainId || ChainId.Ethereum;\n this.derivationPath = typeof derivationPath === \"string\" ? derivationPath : derivationPathToString(derivationPath);\n\n Object.defineProperty(this, \"provider\", { enumerable: true, value: provider || null, writable: false });\n }\n\n connect = (provider: Provider) =>\n new EVMLedgerInterface({ chainId: this.chainId, derivationPath: this.derivationPath, provider });\n\n checkOrCreateTransportAndLedger = async () => {\n if (this.ledgerApp) return;\n await this.createTransportAndLedger();\n };\n\n createTransportAndLedger = async () => {\n const transport = await getLedgerTransport();\n const EthereumApp = (await import(\"@ledgerhq/hw-app-eth\")).default;\n\n this.ledgerApp = new EthereumApp(transport);\n };\n\n getAddress = async () => {\n const response = await this.getAddressAndPubKey();\n if (!response) throw new USwapError(\"wallet_ledger_failed_to_get_address\");\n return response.address;\n };\n\n getAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath);\n };\n\n showAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath, true);\n };\n\n signMessage = async (messageHex: string) => {\n const { Signature } = await import(\"ethers\");\n await this.createTransportAndLedger();\n\n const sig = await this.ledgerApp?.signPersonalMessage(this.derivationPath, messageHex);\n\n if (!sig) throw new USwapError(\"wallet_ledger_signing_error\");\n\n sig.r = `0x${sig.r}`;\n sig.s = `0x${sig.s}`;\n return Signature.from(sig).serialized;\n };\n\n sendTransaction = async (tx: TransactionRequest): Promise<any> => {\n if (!this.provider) throw new USwapError(\"wallet_ledger_no_provider\");\n\n const signedTxHex = await this.signTransaction(tx);\n\n return await this.provider.broadcastTransaction(signedTxHex);\n };\n\n signTypedData(): Promise<string> {\n throw new USwapError(\"wallet_ledger_method_not_supported\", { method: \"signTypedData\" });\n }\n\n signTransaction = async (tx: TransactionRequest) => {\n const { Transaction } = await import(\"ethers\");\n await this.createTransportAndLedger();\n\n const transactionCount = await this.provider?.getTransactionCount(tx.from || (await this.getAddress()));\n\n const baseTx = {\n chainId: tx.chainId || this.chainId,\n data: tx.data,\n gasLimit: tx.gasLimit,\n ...(tx.gasPrice && { gasPrice: tx.gasPrice }),\n ...(!tx.gasPrice &&\n tx.maxFeePerGas && { maxFeePerGas: tx.maxFeePerGas, maxPriorityFeePerGas: tx.maxPriorityFeePerGas }),\n nonce: tx.nonce !== undefined ? Number((tx.nonce || transactionCount || 0).toString()) : transactionCount,\n to: tx.to?.toString(),\n type: tx.type && !Number.isNaN(tx.type) ? tx.type : tx.maxFeePerGas ? 2 : 0,\n value: tx.value,\n };\n\n // ledger expects the tx to be serialized without the 0x prefix\n const unsignedTx = Transaction.from(baseTx).unsignedSerialized.slice(2);\n\n const { ledgerService } = await import(\"@ledgerhq/hw-app-eth\");\n\n const resolution = await ledgerService.resolveTransaction(unsignedTx, {}, { erc20: true, externalPlugins: true });\n\n const signature = await this.ledgerApp?.signTransaction(this.derivationPath, unsignedTx, resolution);\n\n if (!signature) throw new USwapError(\"wallet_ledger_signing_error\");\n\n const { r, s, v } = signature;\n\n return Transaction.from({ ...baseTx, signature: { r: `0x${r}`, s: `0x${s}`, v: Number(BigInt(v)) } }).serialized;\n };\n}\n\ntype LedgerParams = { provider: Provider; derivationPath?: DerivationPathArray };\n\nexport const ArbitrumLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Arbitrum });\nexport const AuroraLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Aurora });\nexport const AvalancheLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Avalanche });\nexport const BaseLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Base });\nexport const EthereumLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Ethereum });\nexport const GnosisLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Gnosis });\nexport const OptimismLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.Optimism });\nexport const PolygonLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Polygon });\nexport const BinanceSmartChainLedger = (params: LedgerParams) =>\n new EVMLedgerInterface({ ...params, chainId: ChainId.BinanceSmartChain });\nexport const MonadLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.Monad });\nexport const XLayerLedger = (params: LedgerParams) => new EVMLedgerInterface({ ...params, chainId: ChainId.XLayer });\n",
15
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type { SignedTransaction, Transaction } from \"@near-js/transactions\";\nimport type { DerivationPathArray } from \"@tcswap/helpers\";\nimport type { NearSigner } from \"@tcswap/toolboxes/near\";\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nexport async function getNearLedgerClient(derivationPath?: DerivationPathArray) {\n const Near = (await import(\"@ledgerhq/hw-app-near\")).default;\n const { Chain, NetworkDerivationPath, USwapError } = await import(\"@tcswap/helpers\");\n const transport = await getLedgerTransport();\n const nearApp = new Near(transport);\n\n const path = (derivationPath || NetworkDerivationPath[Chain.Near]).join(\"'/\").concat(\"'\");\n\n const { address, publicKey: pubKeyHex } = await nearApp.getAddress(path);\n\n const signer = {\n getAddress() {\n return Promise.resolve(address);\n },\n async getPublicKey() {\n const { PublicKey } = await import(\"@near-js/crypto\");\n return PublicKey.fromString(`ed25519:${pubKeyHex}`);\n },\n\n signDelegateAction(_delegateAction: any) {\n return Promise.reject(\n new USwapError(\"wallet_ledger_method_not_supported\", { method: \"signDelegateAction\", wallet: \"Ledger\" }),\n );\n },\n\n signNep413Message(\n _message: string,\n _accountId: string,\n _recipient: string,\n _nonce: Uint8Array,\n _callbackUrl?: string,\n ) {\n return Promise.reject(\n new USwapError(\"wallet_ledger_method_not_supported\", { method: \"signNep413Message\", wallet: \"Ledger\" }),\n );\n },\n\n async signTransaction(transaction: Transaction) {\n const { Signature, SignedTransaction } = await import(\"@near-js/transactions\");\n try {\n const signatureArray = await nearApp.signTransaction(transaction.encode(), path);\n if (!signatureArray) {\n throw new Error(\"Signature undefined\");\n }\n\n const signature = new Signature({ data: signatureArray, keyType: 0 });\n\n const signedTransaction = new SignedTransaction({ signature, transaction });\n\n return [signatureArray, signedTransaction] as [Uint8Array<ArrayBufferLike>, SignedTransaction];\n } catch (error) {\n throw new USwapError(\"wallet_ledger_signing_error\", { error });\n }\n },\n };\n\n return signer as NearSigner;\n}\n",
16
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { base64 } from \"@scure/base\";\nimport { type DerivationPathArray, NetworkDerivationPath, USwapError } from \"@tcswap/helpers\";\n\nimport { CosmosLedgerInterface } from \"../../interfaces/CosmosLedgerInterface\";\nimport type { GetAddressAndPubKeyResponse } from \"../../types\";\nimport { getSignature } from \"./utils\";\n\nexport class THORChainLedger extends CosmosLedgerInterface {\n private pubKey: string | null = null;\n\n derivationPath: DerivationPathArray;\n\n constructor(derivationPath: DerivationPathArray = NetworkDerivationPath.THOR) {\n super();\n this.chain = \"thor\";\n this.derivationPath = derivationPath;\n }\n\n get pubkey() {\n return this.pubKey;\n }\n\n connect = async () => {\n await this.checkOrCreateTransportAndLedger();\n const { compressed_pk, bech32_address }: GetAddressAndPubKeyResponse = await this.getAddressAndPubKey();\n\n this.pubKey = base64.encode(compressed_pk);\n\n return bech32_address;\n };\n\n getAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response: GetAddressAndPubKeyResponse = await this.ledgerApp.getAddressAndPubKey(\n this.derivationPath,\n this.chain,\n );\n\n this.validateResponse(response.return_code, response.error_message);\n\n return response;\n };\n\n showAddressAndPubKey = async () => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const response: GetAddressAndPubKeyResponse = await this.ledgerApp.showAddressAndPubKey(\n this.derivationPath,\n this.chain,\n );\n\n this.validateResponse(response.return_code, response.error_message);\n\n return response;\n };\n\n signTransaction = async (rawTx: string, sequence = \"0\") => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(this.derivationPath, rawTx);\n\n if (!this.pubKey) throw new USwapError(\"wallet_ledger_pubkey_not_found\");\n\n this.validateResponse(return_code, error_message);\n\n return [\n {\n pub_key: { type: \"tendermint/PubKeySecp256k1\", value: this.pubKey },\n sequence,\n signature: getSignature(signature),\n },\n ];\n };\n\n sign = async (message: string) => {\n await this.checkOrCreateTransportAndLedger(true);\n\n const { return_code, error_message, signature } = await this.ledgerApp.sign(this.derivationPath, message);\n\n if (!this.pubKey) throw new USwapError(\"wallet_ledger_pubkey_not_found\");\n\n this.validateResponse(return_code, error_message);\n\n return getSignature(signature);\n };\n}\n",
17
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { base64 } from \"@scure/base\";\nimport { USwapError } from \"@tcswap/helpers\";\n\nexport const getSignature = (signatureArray: any) => {\n // Check Type Length Value encoding\n if (signatureArray.length < 64) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"Too short\" });\n }\n if (signatureArray[0] !== 0x30) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"TLV encoding: expected first byte 0x30\" });\n }\n if (signatureArray[1] + 2 !== signatureArray.length) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"signature length does not match TLV\" });\n }\n if (signatureArray[2] !== 0x02) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"TLV encoding: expected length type 0x02\" });\n }\n\n // r signature\n const rLength = signatureArray[3];\n let rSignature = signatureArray.slice(4, rLength + 4);\n\n // Drop leading zero on some 'r' signatures that are 33 bytes.\n if (rSignature.length === 33 && rSignature[0] === 0) {\n rSignature = rSignature.slice(1, 33);\n } else if (rSignature.length === 33) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"r too long\" });\n }\n\n // add leading zero's to pad to 32 bytes\n while (rSignature.length < 32) {\n rSignature.unshift(0);\n }\n\n // s signature\n if (signatureArray[rLength + 4] !== 0x02) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", {\n reason: \"TLV encoding: expected length type 0x02 for s\",\n });\n }\n\n const sLength = signatureArray[rLength + 5];\n\n if (4 + rLength + 2 + sLength !== signatureArray.length) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"TLV byte lengths do not match message length\" });\n }\n\n let sSignature = signatureArray.slice(rLength + 6, signatureArray.length);\n\n // Drop leading zero on 's' signatures that are 33 bytes. This shouldn't occur since ledger signs using \"Small s\" math. But just to be sure...\n if (sSignature.length === 33 && sSignature[0] === 0) {\n sSignature = sSignature.slice(1, 33);\n } else if (sSignature.length === 33) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"s too long\" });\n }\n\n // add leading zero's to pad to 32 bytes\n while (sSignature.length < 32) {\n sSignature.unshift(0);\n }\n\n if (rSignature.length !== 32 || sSignature.length !== 32) {\n throw new USwapError(\"wallet_ledger_invalid_signature\", { reason: \"must be 32 bytes each\" });\n }\n\n return base64.encode(Buffer.concat([rSignature, sSignature]));\n};\n",
18
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type TronApp from \"@ledgerhq/hw-app-trx\";\nimport { type DerivationPathArray, derivationPathToString, NetworkDerivationPath, USwapError } from \"@tcswap/helpers\";\nimport type { TronSignedTransaction, TronSigner, TronTransaction } from \"@tcswap/toolboxes/tron\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nexport class TronLedgerInterface implements TronSigner {\n derivationPath: string;\n ledgerApp: InstanceType<typeof TronApp> | null = null;\n ledgerTimeout = 50000;\n\n constructor(derivationPath?: DerivationPathArray | string) {\n this.derivationPath =\n typeof derivationPath === \"string\"\n ? derivationPath\n : derivationPathToString(derivationPath || NetworkDerivationPath.TRON);\n }\n\n checkOrCreateTransportAndLedger = async () => {\n if (this.ledgerApp) return;\n await this.createTransportAndLedger();\n };\n\n createTransportAndLedger = async () => {\n const transport = await getLedgerTransport();\n const TronApp = (await import(\"@ledgerhq/hw-app-trx\")).default;\n\n this.ledgerApp = new TronApp(transport);\n };\n\n getAddress = async (): Promise<string> => {\n const response = await this.getAddressAndPubKey();\n if (!response) throw new USwapError(\"wallet_ledger_failed_to_get_address\");\n return response.address;\n };\n\n getAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n const result = await this.ledgerApp?.getAddress(this.derivationPath);\n\n if (!result) throw new USwapError(\"wallet_ledger_failed_to_get_address\");\n\n return { address: result.address, publicKey: result.publicKey };\n };\n\n showAddressAndPubKey = async () => {\n await this.createTransportAndLedger();\n return this.ledgerApp?.getAddress(this.derivationPath, true);\n };\n\n signTransaction = async (transaction: TronTransaction): Promise<TronSignedTransaction> => {\n await this.createTransportAndLedger();\n\n if (!this.ledgerApp) {\n throw new USwapError(\"wallet_ledger_transport_error\");\n }\n\n // Tron transactions need to be serialized before signing\n const serializedTx = JSON.stringify(transaction);\n\n try {\n const signature = await this.ledgerApp.signTransaction(\n this.derivationPath,\n serializedTx,\n [], // Token signatures array - empty for native TRX transfers\n );\n\n if (!signature) {\n throw new USwapError(\"wallet_ledger_signing_error\");\n }\n\n // Return the signed transaction in Tron's expected format\n return { ...transaction, signature: [signature] };\n } catch (error) {\n throw new USwapError(\"wallet_ledger_signing_error\", { error });\n }\n };\n}\n\nexport const TronLedger = (derivationPath?: DerivationPathArray) => new TronLedgerInterface(derivationPath);\n",
19
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport type BitcoinApp from \"@ledgerhq/hw-app-btc\";\nimport type { CreateTransactionArg } from \"@ledgerhq/hw-app-btc/lib-es/createTransaction\";\nimport { type DerivationPathArray, derivationPathToString, getWalletFormatFor, USwapError } from \"@tcswap/helpers\";\nimport type { UTXOType } from \"@tcswap/toolboxes/utxo\";\nimport type { Psbt } from \"bitcoinjs-lib\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nconst nonSegwitLedgerChains = [\"bitcoin-cash\", \"dash\", \"dogecoin\", \"zcash\"];\n\ntype Params = {\n psbt: Psbt;\n inputUtxos: UTXOType[];\n btcApp: BitcoinApp;\n derivationPath: string;\n chain: \"bitcoin-cash\" | \"bitcoin\" | \"litecoin\" | \"dogecoin\" | \"dash\" | \"zcash\";\n};\n\nconst signUTXOTransaction = (\n { psbt, inputUtxos, btcApp, derivationPath, chain }: Params,\n options?: Partial<CreateTransactionArg>,\n) => {\n const inputs = inputUtxos.map((item) => {\n const splitTx = btcApp.splitTransaction(\n item.txHex || \"\",\n !nonSegwitLedgerChains.includes(chain),\n chain === \"zcash\",\n );\n\n return [splitTx, item.index, undefined as string | null | undefined, undefined as number | null | undefined] as any;\n });\n\n const newTxHex = psbt.data.globalMap.unsignedTx.toBuffer().toString(\"hex\");\n\n const splitNewTx = btcApp.splitTransaction(newTxHex, true);\n const outputScriptHex = btcApp.serializeTransactionOutputs(splitNewTx).toString(\"hex\");\n\n const params: CreateTransactionArg = {\n additionals: [\"bech32\"],\n associatedKeysets: inputs.map(() => derivationPath),\n inputs,\n outputScriptHex,\n segwit: true,\n useTrustedInputForSegwit: true,\n };\n\n return btcApp.createPaymentTransaction({ ...params, ...options });\n};\n\nconst BaseLedgerUTXO = ({\n chain,\n additionalSignParams,\n}: {\n chain: \"bitcoin-cash\" | \"bitcoin\" | \"litecoin\" | \"dogecoin\" | \"dash\" | \"zcash\";\n additionalSignParams?: Partial<CreateTransactionArg>;\n}) => {\n let btcApp: InstanceType<typeof BitcoinApp>;\n let transport: any = null;\n\n async function checkBtcAppAndCreateTransportWebUSB(checkBtcApp = true) {\n if (checkBtcApp && !btcApp) {\n new USwapError(\"wallet_ledger_connection_error\", {\n message: `Ledger connection failed:\\n${JSON.stringify({ btcApp, checkBtcApp })}`,\n });\n }\n\n transport ||= await getLedgerTransport();\n }\n\n async function createTransportWebUSB() {\n transport = await getLedgerTransport();\n const BitcoinApp = (await import(\"@ledgerhq/hw-app-btc\")).default;\n\n btcApp = new BitcoinApp({ currency: chain, transport });\n }\n\n return (derivationPathArray?: DerivationPathArray | string) => {\n const derivationPath =\n typeof derivationPathArray === \"string\"\n ? derivationPathArray\n : derivationPathToString(derivationPathArray as DerivationPathArray);\n\n const format = getWalletFormatFor(derivationPath);\n\n return {\n connect: async () => {\n await checkBtcAppAndCreateTransportWebUSB(false);\n const BitcoinApp = (await import(\"@ledgerhq/hw-app-btc\")).default;\n\n btcApp = new BitcoinApp({ currency: chain, transport });\n },\n getAddress: async () => {\n const { toCashAddress } = await import(\"@tcswap/toolboxes/utxo\");\n\n await checkBtcAppAndCreateTransportWebUSB(false);\n\n const { bitcoinAddress: address } = await btcApp.getWalletPublicKey(derivationPath, { format });\n\n if (!address) {\n throw new USwapError(\"wallet_ledger_get_address_error\", {\n message: `Cannot get ${chain} address from ledger derivation path: ${derivationPath}`,\n });\n }\n\n return chain === \"bitcoin-cash\" && format === \"legacy\"\n ? toCashAddress(address).replace(/(bchtest:|bitcoincash:)/, \"\")\n : address;\n },\n getExtendedPublicKey: async (path = \"84'/0'/0'\", xpubVersion = 76067358) => {\n await checkBtcAppAndCreateTransportWebUSB(false);\n\n return btcApp.getWalletXpub({ path, xpubVersion });\n },\n signTransaction: async (psbt: Psbt, inputUtxos: UTXOType[]) => {\n await createTransportWebUSB();\n\n return signUTXOTransaction({ btcApp, chain, derivationPath, inputUtxos, psbt }, additionalSignParams);\n },\n };\n };\n};\n\nexport const BitcoinLedger = BaseLedgerUTXO({ chain: \"bitcoin\" });\nexport const LitecoinLedger = BaseLedgerUTXO({ chain: \"litecoin\" });\n\nexport const BitcoinCashLedger = BaseLedgerUTXO({\n additionalSignParams: { additionals: [\"abc\"], segwit: false, sigHashType: 0x41 },\n chain: \"bitcoin-cash\",\n});\n\nexport const DogecoinLedger = BaseLedgerUTXO({\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n chain: \"dogecoin\",\n});\n\nexport const DashLedger = BaseLedgerUTXO({\n additionalSignParams: { additionals: [], segwit: false, useTrustedInputForSegwit: false },\n chain: \"dash\",\n});\n\nexport const ZcashLedger = BaseLedgerUTXO({\n additionalSignParams: {\n additionals: [\"zcash\", \"sapling\"],\n expiryHeight: (() => {\n const buf = Buffer.allocUnsafe(4);\n buf.writeUInt32LE(0);\n return buf;\n })(),\n lockTime: 0,\n segwit: false,\n useTrustedInputForSegwit: false,\n },\n chain: \"zcash\",\n});\n",
20
+ "import Xrp from \"@ledgerhq/hw-app-xrp\";\nimport type Transport from \"@ledgerhq/hw-transport\";\nimport { Chain, type DerivationPathArray, derivationPathToString, NetworkDerivationPath } from \"@tcswap/helpers\";\nimport type { Transaction } from \"@tcswap/toolboxes/ripple\";\nimport { encode } from \"ripple-binary-codec\";\nimport type { Payment } from \"xrpl\";\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\nconst TF_FULLY_CANONICAL_SIG = 2147483648;\n\nfunction cleanTransactionObject(obj: Record<string, any>) {\n const cleaned: Record<string, any> = {};\n for (const key in obj) {\n if (obj[key] !== null && obj[key] !== undefined) {\n cleaned[key] = obj[key];\n }\n }\n return cleaned;\n}\n\nfunction establishConnection(transport: Transport) {\n return new Xrp(transport);\n}\n\nexport const XRPLedger = async (derivationPath?: DerivationPathArray) => {\n const path = derivationPathToString(derivationPath || NetworkDerivationPath[Chain.Ripple]);\n const transport = await getLedgerTransport();\n const xrpInstance = establishConnection(transport);\n\n const { address, publicKey } = await xrpInstance.getAddress(path);\n\n async function signTransaction(transaction: Payment | Transaction) {\n const { hashes } = await import(\"@tcswap/toolboxes/ripple\");\n const cleanedTxWithPubKey = cleanTransactionObject(transaction);\n const transactionJSON = {\n ...cleanedTxWithPubKey,\n Flags: transaction.Flags || TF_FULLY_CANONICAL_SIG,\n SigningPubKey: publicKey.toUpperCase(),\n };\n\n const transactionToSignOnLedger = encode(transactionJSON);\n const txnSignature = await xrpInstance.signTransaction(path, transactionToSignOnLedger);\n const tx_blob = encode({ ...transactionJSON, TxnSignature: txnSignature });\n const hash = hashes.hashSignedTx(tx_blob);\n\n return { hash, tx_blob };\n }\n\n return { getAddress: () => address, signTransaction };\n};\n"
21
+ ],
22
+ "mappings": "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",
23
+ "debugId": "F86B094CA6D6190064756E2164756E21",
24
+ "names": []
25
+ }
@@ -0,0 +1,5 @@
1
+ import{c as G,d as X}from"../chunk-zzfbcc7e.js";import{Chain as l,FeeOption as qy,filterSupportedChains as Sy,getRPCUrl as EL,THORConfig as cy,USwapError as S,WalletOption as bL}from"@tcswap/helpers";import{createWallet as ny,getWalletSupportedChains as Uy}from"@tcswap/wallet-core";import{Chain as C,USwapError as Ty,WalletOption as wy}from"@tcswap/helpers";var H=async({chain:L,ledgerClient:y})=>{if(!y)return"";switch(L){case C.Cosmos:case C.THORChain:return y.connect();case C.Ethereum:case C.BinanceSmartChain:case C.Avalanche:case C.Polygon:case C.Arbitrum:case C.Optimism:case C.Base:case C.Aurora:case C.Gnosis:case C.XLayer:return y.getAddress();case C.Bitcoin:case C.BitcoinCash:case C.Dash:case C.Dogecoin:case C.Litecoin:case C.Zcash:{let i=y;await i.connect();let m=await i.getAddress();return L===C.BitcoinCash?m.replace("bitcoincash:",""):m}case C.Near:return await y.getAddress();case C.Ripple:return y.getAddress();case C.Tron:return y.getAddress();default:throw new Ty("wallet_chain_not_supported",{chain:L,wallet:wy.LEDGER})}};import{Chain as B,USwapError as Py,WalletOption as zy}from"@tcswap/helpers";import{derivationPathToString as Ry,NetworkDerivationPath as Gy,USwapError as CL}from"@tcswap/helpers";import{LedgerErrorCode as s,NetworkDerivationPath as Oy,USwapError as LL}from"@tcswap/helpers";import{USwapError as NL}from"@tcswap/helpers";var P=85,u=250;var o={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},b={ADD:1,INIT:0,LAST:2},p={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},z={JSON:0},K={NoError:36864},gL={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 f(L){if(L in gL)return gL[L];return`Unknown Status Code: ${L}`}function ty(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function Z(L){if(L){if(ty(L)){if(Object.hasOwn(L,"statusCode"))return{error_message:f(L.statusCode),return_code:L.statusCode};if(Object.hasOwn(L,"return_code")&&Object.hasOwn(L,"error_message"))return L}return{error_message:L.toString(),return_code:65535}}return{error_message:L.toString(),return_code:65535}}function a(L){return L.send(85,o.GET_VERSION,0,0).then((y)=>{let i=y.slice(-2),m=i[0]*256+i[1],_=0;if(y.length>=9)_=(y[5]<<24)+(y[6]<<16)+(y[7]<<8)+(y[8]<<0);return{device_locked:y[4]===1,error_message:f(m),major:y[1],minor:y[2],patch:y[3],return_code:m,target_id:_.toString(16),test_mode:y[0]!==0}},Z)}import{USwapError as V}from"@tcswap/helpers";function OL(L){if(L==null||L.length<3)throw new V("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new V("wallet_ledger_invalid_params",{reason:"Path too long"});let y=Buffer.alloc(1+4*L.length);y.writeUInt8(L.length,0);for(let i=0;i<L.length;i+=1){let m=L[i]||0;if(i<3)m|=2147483648;y.writeInt32LE(m,1+i*4)}return y}function e(L,y,i,m,_=z.JSON){return L.transport.send(P,o.SIGN_SECP256K1,y,_,m,[K.NoError,27012,27264]).then((T)=>{let t=T.slice(-2),w=t[0]*256+t[1],O=f(w);if(w===27264||w===27012)O=`${O} : ${T.slice(0,T.length-2).toString("ascii")}`;let R=null;if(T.length>2)R=T.slice(0,T.length-2);return{error_message:O,return_code:w,signature:R}},Z)}function ly(L){if(L.length!==65)throw new V("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let y=L.slice(33,65),i=Buffer.from([2+(y[y.length-1]&1)]);return Buffer.concat([i,L.slice(1,33)])}function RL(L,y){return L.transport.send(P,o.INS_PUBLIC_KEY_SECP256K1,0,0,y,[K.NoError]).then((i)=>{let m=i.slice(-2),_=m[0]*256+m[1],T=Buffer.from(i.slice(0,65));return{compressed_pk:ly(T),error_message:f(_),pk:T,return_code:_}},Z)}function GL(L){if(!L||L.length!==5)throw new V("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let y=Buffer.alloc(20);return y.writeUInt32LE(2147483648+L[0],0),y.writeUInt32LE(2147483648+L[1],4),y.writeUInt32LE(2147483648+L[2],8),y.writeUInt32LE(L[3],12),y.writeUInt32LE(L[4],16),y}function XL(L,y,i,m,_=z.JSON){let T=b.ADD;if(y===1)T=b.INIT;if(y===i)T=b.LAST;return e(L,T,0,m,_)}function BL(L,y){return L.transport.send(P,o.GET_ADDR_SECP256K1,0,0,y,[K.NoError]).then((i)=>{let m=i.slice(-2),_=m[0]*256+m[1];return{compressed_pk:Buffer.from(i.slice(0,33)),error_message:f(_),pk:"OBSOLETE PROPERTY",return_code:_}},Z)}class n{transport;versionResponse;constructor(L){if(!L)throw new NL("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new NL("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let y=Buffer.alloc(1+L.length);return y.writeUInt8(L.length,0),y.write(L,1),y}async serializePath(L){if(this.versionResponse=await a(this.transport),this.versionResponse.return_code!==K.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return OL(L);case 2:return GL(L);default:return Buffer.alloc(0)}}async signGetChunks(L,y){let i=await this.serializePath(L),m=[];m.push(i);for(let _=0;_<y.length;_+=u){let T=_+u;if(_>y.length)T=y.length;m.push(y.slice(_,T))}return m}async getVersion(){try{return this.versionResponse=await a(this.transport),this.versionResponse}catch(L){return Z(L)}}appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let y=L.slice(-2),i=y[0]*256+y[1],m="",_="",T=0,t=0;if(L[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let w=L[1];m=L.slice(2,2+w).toString("ascii");let O=2+w,R=L[O];O+=1,_=L.slice(O,O+R).toString("ascii"),O+=R;let g=L[O];return O+=1,T=g,t=L[O],{appName:m,appVersion:_,error_message:f(i),flag_onboarded:(t&4)!==0,flag_pin_validated:(t&128)!==0,flag_recovery:(t&1)!==0,flag_signed_mcu_code:(t&2)!==0,flagLen:T,flagsValue:t,return_code:i}},Z)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[K.NoError,28160]).then((L)=>{let y=L.slice(-2),i=y[0]*256+y[1];if(i===28160)return{error_message:"This command is only available in the Dashboard",return_code:i};let m=L.slice(0,4).toString("hex"),_=4,T=L[_];_+=1;let t=L.slice(_,_+T).toString();_+=T;let w=L[_];_+=1;let O=L.slice(_,_+w).toString("hex");_+=w;let R=L[_];_+=1;let g=L.slice(_,_+R);if(g[R-1]===0)g=L.slice(_,_+R-1);let N=g.toString();return{error_message:f(i),flag:O,mcuVersion:N,return_code:i,seVersion:t,targetId:m}},Z)}async publicKey(L){try{let y=await this.serializePath(L);switch(this.versionResponse.major){case 1:return RL(this,y);case 2:{let i=Buffer.concat([n.serializeHRP("thor"),y]);return BL(this,i)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(y){return Z(y)}}getAddressAndPubKey(L,y,i=!1){return this.serializePath(L).then((m)=>{let _=Buffer.concat([n.serializeHRP(y),m]);return this.transport.send(P,o.GET_ADDR_SECP256K1,i?p.SHOW_ADDRESS_IN_DEVICE:p.ONLY_RETRIEVE,0,_,[K.NoError]).then((T)=>{let t=T.slice(-2),w=t[0]*256+t[1],O=Buffer.from(T.slice(0,33));return{bech32_address:Buffer.from(T.slice(33,-2)).toString(),compressed_pk:O,error_message:f(w),return_code:w}},Z)}).catch((m)=>Z(m))}showAddressAndPubKey(L,y){return this.getAddressAndPubKey(L,y,!0)}signSendChunk(L,y,i,m=z.JSON){switch(this.versionResponse.major){case 1:return e(this,L,y,i,m);case 2:return XL(this,L,y,i,m);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(L,y,i=z.JSON){let m=Buffer.from(y),_=[],T;try{_=await this.signGetChunks(L,m),T=await this.signSendChunk(1,_.length,_[0],i)}catch(w){Z(w)}let t={error_message:T.error_message,return_code:T.return_code,signature:null};for(let w=1;w<_.length;w+=1)if(t=await this.signSendChunk(1+w,_.length,_[w],i),t.return_code!==K.NoError)break;return{error_message:t.error_message,return_code:t.return_code,signature:t.signature}}}import{USwapError as U}from"@tcswap/helpers";var r=()=>navigator?.usb,gy=async()=>{let L=r();if(typeof L?.getDevices!=="function")return{};let{ledgerUSBVendorId:y}=await import("@ledgerhq/devices"),m=(await L?.getDevices()).filter((_)=>_.vendorId===y);if(m.length>0)return m[0];return L?.requestDevice({filters:[{vendorId:y}]})},F=async()=>{let L=await gy();if(!L)throw new U("wallet_ledger_device_not_found");if(L.opened||await L.open(),L.configuration===null)await L.selectConfiguration(1);try{await L.reset()}catch{}let y=L.configuration??L.configurations?.[0],i=y?.interfaces.find(({alternates:g})=>g.some(({interfaceClass:N})=>N===255))||y?.interfaces.find(({alternates:g})=>g.some(({interfaceClass:N})=>N===3));if(!i)throw await L.close(),new U("wallet_ledger_connection_error");let m=i.alternates?.find(({interfaceClass:g})=>g===3)?.interfaceClass,_=i.alternates?.find(({interfaceClass:g})=>g===255)?.interfaceClass;if(m&&!_){let g=(await import("@ledgerhq/hw-transport-webhid")).default;if(!await g.isSupported())throw await L.close(),new U("wallet_ledger_webhid_not_supported");return await g.create()}try{await L.claimInterface(i.interfaceNumber)}catch(g){throw await L.close(),new U("wallet_ledger_connection_claimed",g)}let T=(await import("@ledgerhq/hw-transport-webusb")).default;if(!await T.isSupported())throw new U("wallet_ledger_webusb_not_supported");let{DisconnectedDevice:w}=await import("@ledgerhq/errors"),O=new T(L,i.interfaceNumber),R=(g)=>{if(L===g.device)r()?.removeEventListener("disconnect",R),O._emitDisconnect(new w)};return r()?.addEventListener("disconnect",R),O};class k{ledgerTimeout=50000;derivationPath=Oy.GAIA;transport;ledgerApp;chain="thor";checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{switch(this.transport=L||!this.transport?await F():this.transport,this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new n(this.transport):this.ledgerApp;break}case"cosmos":{let y=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=L||!this.ledgerApp?new y(this.transport):this.ledgerApp}}return this.ledgerApp}catch(y){throw new LL("wallet_ledger_connection_error",y)}};validateResponse=(L,y)=>{switch(L){case s.NoError:return;case s.LockedDevice:throw new LL("wallet_ledger_device_locked",{message:`Ledger is locked: ${y}`});case s.TC_NotFound:throw new LL("wallet_ledger_device_not_found");default:break}}}class yL extends k{pubKey=null;derivationPath;constructor(L=Gy.GAIA){super();this.chain="cosmos",this.derivationPath=Ry(L)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:L,address:y}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(L,"hex").toString("base64"),y};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:i,error_message:m,signature:_}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new CL("wallet_ledger_pubkey_not_found");return this.validateResponse(i,m),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:_}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let i=await this.getAccounts();if(i.findIndex((M)=>M.address===L)===-1)throw new CL("wallet_ledger_address_not_found",{address:L});let _=await import("@cosmjs/amino"),T=_.encodeSecp256k1Signature??_.default?.encodeSecp256k1Signature,t=_.serializeSignDoc??_.default?.serializeSignDoc,w=await import("@cosmjs/crypto"),O=w.Secp256k1Signature??w.default?.Secp256k1Signature,R=t(y),g=await this.ledgerApp.sign(this.derivationPath,R);this.validateResponse(g.return_code,g.error_message);let N=O.fromDer(g.signature).toFixedLength();return{signature:T(i[0].pubkey,N),signed:y}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.getAddressAndPubKey();return[{address:L.address,algo:"secp256k1",pubkey:Buffer.from(L.publicKey,"hex")}]}}import{ChainId as j,derivationPathToString as Xy,NetworkDerivationPath as By,USwapError as d}from"@tcswap/helpers";import{AbstractSigner as Ny}from"ethers";class A extends Ny{chainId=j.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;constructor({provider:L,derivationPath:y=By.OP,chainId:i=j.Optimism}){super(L);this.chainId=i||j.Ethereum,this.derivationPath=typeof y==="string"?y:Xy(y),Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new A({chainId:this.chainId,derivationPath:this.derivationPath,provider:L});checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await F(),y=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new y(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new d("wallet_ledger_failed_to_get_address");return L.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(L)=>{let{Signature:y}=await import("ethers");await this.createTransportAndLedger();let i=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!i)throw new d("wallet_ledger_signing_error");return i.r=`0x${i.r}`,i.s=`0x${i.s}`,y.from(i).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new d("wallet_ledger_no_provider");let y=await this.signTransaction(L);return await this.provider.broadcastTransaction(y)};signTypedData(){throw new d("wallet_ledger_method_not_supported",{method:"signTypedData"})}signTransaction=async(L)=>{let{Transaction:y}=await import("ethers");await this.createTransportAndLedger();let i=await this.provider?.getTransactionCount(L.from||await this.getAddress()),m={chainId:L.chainId||this.chainId,data:L.data,gasLimit:L.gasLimit,...L.gasPrice&&{gasPrice:L.gasPrice},...!L.gasPrice&&L.maxFeePerGas&&{maxFeePerGas:L.maxFeePerGas,maxPriorityFeePerGas:L.maxPriorityFeePerGas},nonce:L.nonce!==void 0?Number((L.nonce||i||0).toString()):i,to:L.to?.toString(),type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0,value:L.value},_=y.from(m).unsignedSerialized.slice(2),{ledgerService:T}=await import("@ledgerhq/hw-app-eth"),t=await T.resolveTransaction(_,{},{erc20:!0,externalPlugins:!0}),w=await this.ledgerApp?.signTransaction(this.derivationPath,_,t);if(!w)throw new d("wallet_ledger_signing_error");let{r:O,s:R,v:g}=w;return y.from({...m,signature:{r:`0x${O}`,s:`0x${R}`,v:Number(BigInt(g))}}).serialized}}var ML=(L)=>new A({...L,chainId:j.Arbitrum}),FL=(L)=>new A({...L,chainId:j.Aurora}),jL=(L)=>new A({...L,chainId:j.Avalanche}),ZL=(L)=>new A({...L,chainId:j.Base}),AL=(L)=>new A({...L,chainId:j.Ethereum}),$L=(L)=>new A({...L,chainId:j.Gnosis}),JL=(L)=>new A({...L,chainId:j.Optimism}),fL=(L)=>new A({...L,chainId:j.Polygon}),KL=(L)=>new A({...L,chainId:j.BinanceSmartChain}),QL=(L)=>new A({...L,chainId:j.Monad}),WL=(L)=>new A({...L,chainId:j.XLayer});async function YL(L){let y=(await import("@ledgerhq/hw-app-near")).default,{Chain:i,NetworkDerivationPath:m,USwapError:_}=await import("@tcswap/helpers"),T=await F(),t=new y(T),w=(L||m[i.Near]).join("'/").concat("'"),{address:O,publicKey:R}=await t.getAddress(w);return{getAddress(){return Promise.resolve(O)},async getPublicKey(){let{PublicKey:N}=await import("@near-js/crypto");return N.fromString(`ed25519:${R}`)},signDelegateAction(N){return Promise.reject(new _("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(N,M,J,$,Y){return Promise.reject(new _("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(N){let{Signature:M,SignedTransaction:J}=await import("@near-js/transactions");try{let $=await t.signTransaction(N.encode(),w);if(!$)throw Error("Signature undefined");let Y=new M({data:$,keyType:0}),c=new J({signature:Y,transaction:N});return[$,c]}catch($){throw new _("wallet_ledger_signing_error",{error:$})}}}}import{base64 as My}from"@scure/base";import{NetworkDerivationPath as Fy,USwapError as DL}from"@tcswap/helpers";import{base64 as Cy}from"@scure/base";import{USwapError as Q}from"@tcswap/helpers";var iL=(L)=>{if(L.length<64)throw new Q("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new Q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new Q("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new Q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let y=L[3],i=L.slice(4,y+4);if(i.length===33&&i[0]===0)i=i.slice(1,33);else if(i.length===33)throw new Q("wallet_ledger_invalid_signature",{reason:"r too long"});while(i.length<32)i.unshift(0);if(L[y+4]!==2)throw new Q("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let m=L[y+5];if(4+y+2+m!==L.length)throw new Q("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let _=L.slice(y+6,L.length);if(_.length===33&&_[0]===0)_=_.slice(1,33);else if(_.length===33)throw new Q("wallet_ledger_invalid_signature",{reason:"s too long"});while(_.length<32)_.unshift(0);if(i.length!==32||_.length!==32)throw new Q("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return Cy.encode(Buffer.concat([i,_]))};class _L extends k{pubKey=null;derivationPath;constructor(L=Fy.THOR){super();this.chain="thor",this.derivationPath=L}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:L,bech32_address:y}=await this.getAddressAndPubKey();return this.pubKey=My.encode(L),y};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let L=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(L.return_code,L.error_message),L};signTransaction=async(L,y="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:i,error_message:m,signature:_}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new DL("wallet_ledger_pubkey_not_found");return this.validateResponse(i,m),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:iL(_)}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:i,signature:m}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new DL("wallet_ledger_pubkey_not_found");return this.validateResponse(y,i),iL(m)}}import{derivationPathToString as jy,NetworkDerivationPath as Zy,USwapError as E}from"@tcswap/helpers";class HL{derivationPath;ledgerApp=null;ledgerTimeout=50000;constructor(L){this.derivationPath=typeof L==="string"?L:jy(L||Zy.TRON)}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=await F(),y=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new y(L)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new E("wallet_ledger_failed_to_get_address");return L.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let L=await this.ledgerApp?.getAddress(this.derivationPath);if(!L)throw new E("wallet_ledger_failed_to_get_address");return{address:L.address,publicKey:L.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(L)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new E("wallet_ledger_transport_error");let y=JSON.stringify(L);try{let i=await this.ledgerApp.signTransaction(this.derivationPath,y,[]);if(!i)throw new E("wallet_ledger_signing_error");return{...L,signature:[i]}}catch(i){throw new E("wallet_ledger_signing_error",{error:i})}}}var oL=(L)=>new HL(L);import{derivationPathToString as Ay,getWalletFormatFor as $y,USwapError as PL}from"@tcswap/helpers";var Jy=["bitcoin-cash","dash","dogecoin","zcash"],fy=({psbt:L,inputUtxos:y,btcApp:i,derivationPath:m,chain:_},T)=>{let t=y.map((N)=>{return[i.splitTransaction(N.txHex||"",!Jy.includes(_),_==="zcash"),N.index,void 0,void 0]}),w=L.data.globalMap.unsignedTx.toBuffer().toString("hex"),O=i.splitTransaction(w,!0),R=i.serializeTransactionOutputs(O).toString("hex"),g={additionals:["bech32"],associatedKeysets:t.map(()=>m),inputs:t,outputScriptHex:R,segwit:!0,useTrustedInputForSegwit:!0};return i.createPaymentTransaction({...g,...T})},q=({chain:L,additionalSignParams:y})=>{let i,m=null;async function _(t=!0){if(t&&!i)new PL("wallet_ledger_connection_error",{message:`Ledger connection failed:
2
+ ${JSON.stringify({btcApp:i,checkBtcApp:t})}`});m||=await F()}async function T(){m=await F(),i=new(await import("@ledgerhq/hw-app-btc")).default({currency:L,transport:m})}return(t)=>{let w=typeof t==="string"?t:Ay(t),O=$y(w);return{connect:async()=>{await _(!1),i=new(await import("@ledgerhq/hw-app-btc")).default({currency:L,transport:m})},getAddress:async()=>{let{toCashAddress:R}=await import("@tcswap/toolboxes/utxo");await _(!1);let{bitcoinAddress:g}=await i.getWalletPublicKey(w,{format:O});if(!g)throw new PL("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${w}`});return L==="bitcoin-cash"&&O==="legacy"?R(g).replace(/(bchtest:|bitcoincash:)/,""):g},getExtendedPublicKey:async(R="84'/0'/0'",g=76067358)=>{return await _(!1),i.getWalletXpub({path:R,xpubVersion:g})},signTransaction:async(R,g)=>{return await T(),fy({btcApp:i,chain:L,derivationPath:w,inputUtxos:g,psbt:R},y)}}}},zL=q({chain:"bitcoin"}),qL=q({chain:"litecoin"}),SL=q({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),cL=q({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),nL=q({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),UL=q({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let L=Buffer.allocUnsafe(4);return L.writeUInt32LE(0),L})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});import Ky from"@ledgerhq/hw-app-xrp";import{Chain as Qy,derivationPathToString as Wy,NetworkDerivationPath as Yy}from"@tcswap/helpers";import{encode as kL}from"ripple-binary-codec";var Dy=2147483648;function Hy(L){let y={};for(let i in L)if(L[i]!==null&&L[i]!==void 0)y[i]=L[i];return y}function oy(L){return new Ky(L)}var dL=async(L)=>{let y=Wy(L||Yy[Qy.Ripple]),i=await F(),m=oy(i),{address:_,publicKey:T}=await m.getAddress(y);async function t(w){let{hashes:O}=await import("@tcswap/toolboxes/ripple"),g={...Hy(w),Flags:w.Flags||Dy,SigningPubKey:T.toUpperCase()},N=kL(g),M=await m.signTransaction(y,N),J=kL({...g,TxnSignature:M});return{hash:O.hashSignedTx(J),tx_blob:J}}return{getAddress:()=>_,signTransaction:t}};var W=async({chain:L,derivationPath:y})=>{let{match:i}=await import("ts-pattern");return i(L).returnType().with(B.THORChain,()=>Promise.resolve(new _L(y))).with(B.Cosmos,()=>Promise.resolve(new yL(y))).with(B.Bitcoin,()=>Promise.resolve(zL(y))).with(B.BitcoinCash,()=>Promise.resolve(SL(y))).with(B.Dash,()=>Promise.resolve(nL(y))).with(B.Dogecoin,()=>Promise.resolve(cL(y))).with(B.Litecoin,()=>Promise.resolve(qL(y))).with(B.Zcash,()=>Promise.resolve(UL(y))).with(B.Ripple,()=>Promise.resolve(dL(y))).with(B.Tron,()=>Promise.resolve(oL(y))).with(B.Near,()=>{return Promise.resolve(YL(y))}).with(B.Arbitrum,B.Aurora,B.Avalanche,B.BinanceSmartChain,B.Ethereum,B.Gnosis,B.Monad,B.Optimism,B.Polygon,B.Base,B.XLayer,async()=>{let{getProvider:m}=await import("@tcswap/toolboxes/evm"),_={derivationPath:y,provider:await m(L)};return i(L).with(B.BinanceSmartChain,()=>KL(_)).with(B.Avalanche,()=>jL(_)).with(B.Arbitrum,()=>ML(_)).with(B.Optimism,()=>JL(_)).with(B.Polygon,()=>fL(_)).with(B.Base,()=>ZL(_)).with(B.Aurora,()=>FL(_)).with(B.Gnosis,()=>$L(_)).with(B.Monad,()=>QL(_)).with(B.XLayer,()=>WL(_)).otherwise(()=>AL(_))}).otherwise(()=>{throw new Py("wallet_chain_not_supported",{chain:L,wallet:zy.LEDGER})})};var ky=ny({connect:({addChain:L,supportedChains:y,walletType:i})=>async function(_,T){let[t]=Sy({chains:_,supportedChains:y,walletType:i});if(!t)return!1;let w=await by({chain:t,derivationPath:T});return L({...w,chain:t,walletType:bL.LEDGER}),!0},name:"connectLedger",supportedChains:[l.Arbitrum,l.Aurora,l.Avalanche,l.Base,l.BinanceSmartChain,l.Bitcoin,l.BitcoinCash,l.Cosmos,l.Dash,l.Dogecoin,l.Ethereum,l.Gnosis,l.Litecoin,l.Monad,l.Near,l.Optimism,l.Polygon,l.Ripple,l.THORChain,l.XLayer,l.Tron,l.Zcash],walletType:bL.LEDGER}),e0=Uy(ky);function dy(L,y="t"){if(!L?.includes("=:"))return L;let i=L.includes(`:${y}:`)?L.split(`:${y}:`)[0]:L;return i?.substring(0,i.lastIndexOf(":"))}function v(L){if(Array.isArray(L))return L.forEach((m,_)=>{L[_]=v(m)}),L;if(typeof L!=="object")return L;let y={},i=Object.keys(L).sort();for(let m of i)y[m]=v(L[m]);return y}function Ey(L){return JSON.stringify(v(L))}async function by({chain:L,derivationPath:y}){switch(L){case l.BitcoinCash:case l.Bitcoin:case l.Dash:case l.Dogecoin:case l.Litecoin:case l.Zcash:{let{getUtxoToolbox:i}=await import("@tcswap/toolboxes/utxo"),m=await i(L),_=await W({chain:L,derivationPath:y}),T=await H({chain:L,ledgerClient:_});return{...m,address:T,transfer:async(w)=>{let O=w.feeRate||(await m.getFeeRates())[qy.Average],R=[l.Bitcoin].includes(L)?w.memo:dy(w.memo),{psbt:g,inputs:N}=await m.createTransaction({...w,feeRate:O,fetchTxHex:!0,memo:R,sender:T}),M=await _.signTransaction(g,N);return await m.broadcastTx(M)}}}case l.Ethereum:case l.Avalanche:case l.Arbitrum:case l.Optimism:case l.Polygon:case l.BinanceSmartChain:case l.Base:case l.Aurora:case l.Gnosis:case l.Monad:case l.XLayer:{let{getEvmToolbox:i}=await import("@tcswap/toolboxes/evm"),m=await W({chain:L,derivationPath:y}),_=await H({chain:L,ledgerClient:m});return{...await i(L,{signer:m}),address:_}}case l.Cosmos:{let{createSigningStargateClient:i,getMsgSendDenom:m,getCosmosToolbox:_}=await import("@tcswap/toolboxes/cosmos"),T=await _(l.Cosmos),t=await W({chain:L,derivationPath:y}),w=await H({chain:L,ledgerClient:t});return{...T,address:w,transfer:async({assetValue:R,recipient:g,memo:N})=>{if(!R)throw new S("wallet_ledger_invalid_asset");let M={amount:[{amount:R.getBaseValue("string"),denom:m(`u${R.symbol}`).toLowerCase()}],fromAddress:w,toAddress:g},J=await EL(L),$=await i(J,t,"0.007uatom"),{transactionHash:Y}=await $.signAndBroadcast(w,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:M}],2,N);return Y}}}case l.THORChain:{let{SignMode:i}=await import("cosmjs-types/cosmos/tx/signing/v1beta1/signing.js"),{TxRaw:m}=await import("cosmjs-types/cosmos/tx/v1beta1/tx.js"),_=await import("@cosmjs/proto-signing"),T=_.encodePubkey??_.default?.encodePubkey,t=_.makeAuthInfoBytes??_.default?.makeAuthInfoBytes,{createStargateClient:w,buildEncodedTxBody:O,getCosmosToolbox:R,buildAminoMsg:g,getDefaultChainFee:N,fromBase64:M,parseAminoMessageForDirectSigning:J}=await import("@tcswap/toolboxes/cosmos"),$=await R(L),Y=await W({chain:L,derivationPath:y}),c=await H({chain:L,ledgerClient:Y}),I=N(L),{pubkey:mL,signTransaction:VL,sign:vL}=Y,TL=async({memo:D="",assetValue:wL,...IL})=>{let tL=await $.getAccount(c);if(!tL)throw new S("wallet_ledger_invalid_account");if(!wL)throw new S("wallet_ledger_invalid_asset");if(!mL)throw new S("wallet_ledger_pubkey_not_found");let{accountNumber:hL,sequence:xL}=tL,h=(xL||0).toString(),lL=v([g({assetValue:wL,memo:D,sender:c,...IL})]),uL=Ey({account_number:hL?.toString(),chain_id:cy.chainId,fee:I,memo:D,msgs:lL,sequence:h}),x=await VL(uL,h);if(!x)throw new S("wallet_ledger_signing_error");let pL=T({type:"tendermint/PubKeySecp256k1",value:mL}),aL=lL.map(J),eL=await O({chain:L,memo:D,msgs:aL}),rL=t([{pubkey:pL,sequence:Number(h)}],I.amount,Number.parseInt(I.gas,10),void 0,void 0,i.SIGN_MODE_LEGACY_AMINO_JSON),sL=x?.[0]?.signature?M(x[0].signature):Uint8Array.from([]),Ly=m.fromPartial({authInfoBytes:rL,bodyBytes:eL,signatures:[sL]}),yy=m.encode(Ly).finish(),iy=await EL(l.THORChain),_y=await w(iy),{transactionHash:my}=await _y.broadcastTx(yy);return my};return{...$,address:c,deposit:(D)=>TL(D),signMessage:vL,transfer:(D)=>TL(D)}}case l.Near:{let{getNearToolbox:i}=await import("@tcswap/toolboxes/near"),m=await W({chain:L,derivationPath:y}),_=await m.getAddress();return{...await i({signer:m}),address:_}}case l.Ripple:{let{getRippleToolbox:i}=await import("@tcswap/toolboxes/ripple"),m=await W({chain:L,derivationPath:y}),_=m.getAddress();return{...await i({signer:m}),address:_}}case l.Tron:{let{createTronToolbox:i}=await import("@tcswap/toolboxes/tron"),m=await W({chain:L,derivationPath:y}),_=await H({chain:L,ledgerClient:m});return{...await i({signer:m}),address:_}}default:throw new S("wallet_ledger_chain_not_supported",{chain:L})}}export{ky as ledgerWallet,e0 as LEDGER_SUPPORTED_CHAINS};
3
+
4
+ //# debugId=4CD429398959A7DE64756E2164756E21
5
+ //# sourceMappingURL=index.js.map