@swapkit/wallet-hardware 4.10.0 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-9gy0xve4.js +4 -0
- package/dist/{chunk-qs60k0yv.js.map → chunk-9gy0xve4.js.map} +3 -3
- package/dist/chunk-egtwbe6q.js +4 -0
- package/dist/{chunk-gwx23jdp.js.map → chunk-egtwbe6q.js.map} +3 -3
- package/dist/keepkey/index.cjs +2 -2
- package/dist/keepkey/index.cjs.map +3 -3
- package/dist/keepkey/index.js +2 -2
- package/dist/keepkey/index.js.map +3 -3
- package/dist/ledger/index.cjs +2 -2
- package/dist/ledger/index.cjs.map +7 -6
- package/dist/ledger/index.js +2 -2
- package/dist/ledger/index.js.map +6 -5
- package/dist/trezor/index.cjs +2 -2
- package/dist/trezor/index.cjs.map +4 -4
- package/dist/trezor/index.js +2 -2
- package/dist/trezor/index.js.map +3 -3
- package/dist/types/keepkey/chains/utxo.d.ts.map +1 -1
- package/dist/types/ledger/clients/evm.d.ts +3 -0
- package/dist/types/ledger/clients/evm.d.ts.map +1 -1
- package/dist/types/ledger/clients/utxo-psbt.d.ts +2 -0
- package/dist/types/ledger/clients/utxo-psbt.d.ts.map +1 -1
- package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts +14 -0
- package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts.map +1 -0
- package/dist/types/ledger/index.d.ts.map +1 -1
- package/dist/types/trezor/evmSigner.d.ts.map +1 -1
- package/dist/types/trezor/index.d.ts +2 -2
- package/dist/types/trezor/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/keepkey/chains/utxo.ts +5 -2
- package/src/ledger/clients/evm.ts +84 -2
- package/src/ledger/clients/utxo-psbt.ts +1 -0
- package/src/ledger/helpers/ledgerNetworkInfo.ts +127 -0
- package/src/ledger/index.ts +14 -4
- package/src/trezor/evmSigner.ts +3 -4
- package/src/trezor/index.ts +12 -6
- package/dist/chunk-gwx23jdp.js +0 -4
- package/dist/chunk-qs60k0yv.js +0 -4
package/dist/ledger/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as f}from"../chunk-3yr76n9s.js";import{d as W}from"../chunk-n05bv2n5.js";import{Chain as w,derivationPathToString as _0,FeeOption as TL,filterSupportedChains as tL,getRPCUrl as eL,NetworkDerivationPath as rL,SwapKitError as x,WalletOption as M0}from"@swapkit/helpers";import{addInputsAndOutputs as sL,assertDerivationIndex as XL,compileMemo as Ly,createHDWalletHelpers as yy,getNetworkForChain as OL,getUTXOAccountIndexFromPath as q0,getUTXOAccountPath as D0,getUTXOAddressPath as _y,getUtxoApi as Ry}from"@swapkit/toolboxes/utxo";import{createWallet as Gy,getWalletSupportedChains as By}from"@swapkit/wallet-core";import{Chain as q,SwapKitError as FL,WalletOption as ML}from"@swapkit/helpers";var P=async({chain:L,ledgerClient:y})=>{if(!y)return"";switch(L){case q.Cosmos:case q.THORChain:return y.connect();case q.Ethereum:case q.BinanceSmartChain:case q.Avalanche:case q.Polygon:case q.Arbitrum:case q.Arc:case q.Berachain:case q.Optimism:case q.Base:case q.Aurora:case q.Gnosis:case q.Monad:case q.XLayer:return y.getAddress();case q.Bitcoin:case q.BitcoinCash:case q.Dash:case q.Dogecoin:case q.Litecoin:case q.Zcash:{let _=y;await _.connect();let B=await _.getAddress();return L===q.BitcoinCash?B.replace("bitcoincash:",""):B}case q.Near:return await y.getAddress();case q.Ripple:return y.getAddress();case q.Tron:return y.getAddress();case q.Sui:return y.connect();default:throw new FL("wallet_chain_not_supported",{chain:L,wallet:ML.LEDGER})}};import{Chain as $,SwapKitError as pL,WalletOption as aL}from"@swapkit/helpers";import{derivationPathToString as CL,NetworkDerivationPath as UL,SwapKitError as P0}from"@swapkit/helpers";import{LedgerErrorCode as J0,NetworkDerivationPath as HL,SwapKitError as Z0}from"@swapkit/helpers";import{SwapKitError as V0}from"@swapkit/helpers";var c=85,N0=250;var l={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},r={ADD:1,INIT:0,LAST:2},T0={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},g={JSON:0},E={NoError:36864},z0={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 V(L){if(L in z0)return z0[L];return`Unknown Status Code: ${L}`}function qL(L){return typeof L==="object"&&L!==null&&!Array.isArray(L)&&!(L instanceof Date)}function K(L){if(L){if(qL(L)){if(Object.hasOwn(L,"statusCode"))return{error_message:V(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 X0(L){return L.send(85,l.GET_VERSION,0,0).then((y)=>{let _=y.slice(-2),B=_[0]*256+_[1],R=0;if(y.length>=9)R=(y[5]<<24)+(y[6]<<16)+(y[7]<<8)+(y[8]<<0);return{device_locked:y[4]===1,error_message:V(B),major:y[1],minor:y[2],patch:y[3],return_code:B,target_id:R.toString(16),test_mode:y[0]!==0}},K)}import{SwapKitError as s}from"@swapkit/helpers";function k0(L){if(L==null||L.length<3)throw new s("wallet_ledger_invalid_params",{reason:"Path too short"});if(L.length>10)throw new s("wallet_ledger_invalid_params",{reason:"Path too long"});let y=Buffer.alloc(1+4*L.length);y.writeUInt8(L.length,0);for(let _=0;_<L.length;_+=1){let B=L[_]||0;if(_<3)B|=2147483648;y.writeInt32LE(B,1+_*4)}return y}function O0(L,y,_,B,R=g.JSON){return L.transport.send(c,l.SIGN_SECP256K1,y,R,B,[E.NoError,27012,27264]).then((G)=>{let N=G.slice(-2),T=N[0]*256+N[1],X=V(T);if(T===27264||T===27012)X=`${X} : ${G.slice(0,G.length-2).toString("ascii")}`;let J=null;if(G.length>2)J=G.slice(0,G.length-2);return{error_message:X,return_code:T,signature:J}},K)}function DL(L){if(L.length!==65)throw new s("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let y=L.slice(33,65),_=Buffer.from([2+(y[y.length-1]&1)]);return Buffer.concat([_,L.slice(1,33)])}function K0(L,y){return L.transport.send(c,l.INS_PUBLIC_KEY_SECP256K1,0,0,y,[E.NoError]).then((_)=>{let B=_.slice(-2),R=B[0]*256+B[1],G=Buffer.from(_.slice(0,65));return{compressed_pk:DL(G),error_message:V(R),pk:G,return_code:R}},K)}function S0(L){if(!L||L.length!==5)throw new s("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 A0(L,y,_,B,R=g.JSON){let G=r.ADD;if(y===1)G=r.INIT;if(y===_)G=r.LAST;return O0(L,G,0,B,R)}function m0(L,y){return L.transport.send(c,l.GET_ADDR_SECP256K1,0,0,y,[E.NoError]).then((_)=>{let B=_.slice(-2),R=B[0]*256+B[1];return{compressed_pk:Buffer.from(_.slice(0,33)),error_message:V(R),pk:"OBSOLETE PROPERTY",return_code:R}},K)}class u{transport;versionResponse;constructor(L){if(!L)throw new V0("wallet_ledger_transport_not_defined");this.transport=L}static serializeHRP(L){if(L==null||L.length<3||L.length>83)throw new V0("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 X0(this.transport),this.versionResponse.return_code!==E.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return k0(L);case 2:return S0(L);default:return Buffer.alloc(0)}}async signGetChunks(L,y){let _=await this.serializePath(L),B=[];B.push(_);for(let R=0;R<y.length;R+=N0){let G=R+N0;if(R>y.length)G=y.length;B.push(y.slice(R,G))}return B}async getVersion(){try{return this.versionResponse=await X0(this.transport),this.versionResponse}catch(L){return K(L)}}appInfo(){return this.transport.send(176,1,0,0).then((L)=>{let y=L.readUInt16BE(L.length-2),_="",B="",R=0,G=0;if(L[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let N=L[1];_=L.slice(2,2+N).toString("ascii");let T=2+N,X=L[T];T+=1,B=L.slice(T,T+X).toString("ascii"),T+=X;let J=L[T];return T+=1,R=J,G=L[T],{appName:_,appVersion:B,error_message:V(y),flag_onboarded:(G&4)!==0,flag_pin_validated:(G&128)!==0,flag_recovery:(G&1)!==0,flag_signed_mcu_code:(G&2)!==0,flagLen:R,flagsValue:G,return_code:y}},K)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[E.NoError,28160]).then((L)=>{let y=L.slice(-2),_=y[0]*256+y[1];if(_===28160)return{error_message:"This command is only available in the Dashboard",return_code:_};let B=L.slice(0,4).toString("hex"),R=4,G=L[R];R+=1;let N=L.slice(R,R+G).toString();R+=G;let T=L[R];R+=1;let X=L.slice(R,R+T).toString("hex");R+=T;let J=L[R];R+=1;let O=L.slice(R,R+J);if(O[J-1]===0)O=L.slice(R,R+J-1);let Z=O.toString();return{error_message:V(_),flag:X,mcuVersion:Z,return_code:_,seVersion:N,targetId:B}},K)}async publicKey(L){try{let y=await this.serializePath(L);switch(this.versionResponse.major){case 1:return K0(this,y);case 2:{let _=Buffer.concat([u.serializeHRP("thor"),y]);return m0(this,_)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(y){return K(y)}}async getAddressAndPubKey(L,y,_=!1){try{let B=await this.serializePath(L),R=Buffer.concat([u.serializeHRP(y),B]),G=await this.transport.send(c,l.GET_ADDR_SECP256K1,_?T0.SHOW_ADDRESS_IN_DEVICE:T0.ONLY_RETRIEVE,0,R,[E.NoError]),N=Buffer.from(G.slice(0,33)),T=Buffer.from(G.slice(33,-2)).toString(),X=G.readUInt16BE(G.length-2);return{bech32_address:T,compressed_pk:N,error_message:V(X),return_code:X}}catch(B){return K(B)}}showAddressAndPubKey(L,y){return this.getAddressAndPubKey(L,y,!0)}signSendChunk(L,y,_,B=g.JSON){switch(this.versionResponse.major){case 1:return O0(this,L,y,_,B);case 2:return A0(this,L,y,_,B);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(L,y,_=g.JSON){let B=Buffer.from(y),R=[],G;try{R=await this.signGetChunks(L,B),G=await this.signSendChunk(1,R.length,R[0],_)}catch(T){K(T)}let N={error_message:G.error_message,return_code:G.return_code,signature:null};for(let T=1;T<R.length;T+=1)if(N=await this.signSendChunk(1+T,R.length,R[T],_),N.return_code!==E.NoError)break;return{error_message:N.error_message,return_code:N.return_code,signature:N.signature}}}class i{ledgerTimeout=50000;derivationPath=HL.GAIA;transport;ledgerApp;chain="thor";injectedTransport;constructor(L){if(this.injectedTransport=L,L)this.transport=L}checkOrCreateTransportAndLedger=async(L=!1)=>{if(!L&&this.transport&&this.ledgerApp)return;try{if(!this.transport||L&&!this.injectedTransport)this.transport=this.injectedTransport??await f();switch(this.chain){case"thor":{this.ledgerApp=L||!this.ledgerApp?new u(this.transport):this.ledgerApp;break}case"cosmos":{let _=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=L||!this.ledgerApp?new _(this.transport):this.ledgerApp}}return this.ledgerApp}catch(y){throw new Z0("wallet_ledger_connection_error",y)}};validateResponse=(L,y)=>{switch(L){case J0.NoError:return;case J0.LockedDevice:throw new Z0("wallet_ledger_device_locked",{message:`Ledger is locked: ${y}`});case J0.TC_NotFound:throw new Z0("wallet_ledger_device_not_found");default:break}}}class $0 extends i{pubKey=null;derivationPath;constructor(L=UL.GAIA,y){super(y);this.chain="cosmos",this.derivationPath=CL(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:_,error_message:B,signature:R}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new P0("wallet_ledger_pubkey_not_found");return this.validateResponse(_,B),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:R}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.getAccounts();if(_.findIndex((j)=>j.address===L)===-1)throw new P0("wallet_ledger_address_not_found",{address:L});let R=await import("@cosmjs/amino"),G=R.encodeSecp256k1Signature??R.default?.encodeSecp256k1Signature,N=R.serializeSignDoc??R.default?.serializeSignDoc,T=await import("@cosmjs/crypto"),X=T.Secp256k1Signature??T.default?.Secp256k1Signature,J=N(y),O=await this.ledgerApp.sign(this.derivationPath,J);this.validateResponse(O.return_code,O.error_message);let Z=X.fromDer(O.signature).toFixedLength();return{signature:G(_[0].pubkey,Z),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 U,derivationPathToString as fL,NetworkDerivationPath as zL,SwapKitError as o}from"@swapkit/helpers";import{AbstractSigner as kL}from"ethers";function KL(L){if(typeof L==="number")return L;let y=L.startsWith("0x")?L.slice(2):L;return Number.parseInt(y||"0",16)}class z extends kL{chainId=U.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;transport;injectedTransport;constructor({provider:L,derivationPath:y=zL.OP,chainId:_=U.Optimism,transport:B}){super(L);this.chainId=_||U.Ethereum,this.derivationPath=typeof y==="string"?y:fL(y),this.injectedTransport=B,Object.defineProperty(this,"provider",{enumerable:!0,value:L||null,writable:!1})}connect=(L)=>new z({chainId:this.chainId,derivationPath:this.derivationPath,provider:L,transport:this.transport??this.injectedTransport});checkOrCreateTransportAndLedger=async()=>{await this.createTransportAndLedger()};createTransportAndLedger=async()=>{if(this.ledgerApp)return;this.transport||=this.injectedTransport??await f();let L=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new L(this.transport)};getAddress=async()=>{let L=await this.getAddressAndPubKey();if(!L)throw new o("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 _=await this.ledgerApp?.signPersonalMessage(this.derivationPath,L);if(!_)throw new o("wallet_ledger_signing_error");return _.r=`0x${_.r}`,_.s=`0x${_.s}`,y.from(_).serialized};sendTransaction=async(L)=>{if(!this.provider)throw new o("wallet_ledger_no_provider");let y=await this.signTransaction(L);return await this.provider.broadcastTransaction(y)};signTypedData=async(L,y,_,B)=>{let{buildEIP712DomainType:R}=await import("@swapkit/toolboxes/evm"),{Signature:G,TypedDataEncoder:N}=await import("ethers");await this.createTransportAndLedger();let{EIP712Domain:T,...X}=y,J=B??N.from(X).primaryType,O;try{O=await this.ledgerApp?.signEIP712Message(this.derivationPath,{domain:L,message:_,primaryType:J,types:{EIP712Domain:R(L),...X}})}catch(Z){let j=Z instanceof Error&&"statusCode"in Z;if(!j||j&&Z.statusCode===27013)throw Z;let F=N.hashDomain(L).slice(2),C=N.from(X).hash(_).slice(2);O=await this.ledgerApp?.signEIP712HashedMessage(this.derivationPath,F,C)}if(!O)throw new o("wallet_ledger_signing_error");return O.r=`0x${O.r}`,O.s=`0x${O.s}`,G.from(O).serialized};signTransaction=async(L)=>{let{Transaction:y}=await import("ethers");await this.createTransportAndLedger();let _=L.nonce??void 0,B=_===void 0?await this.provider?.getTransactionCount(L.from||await this.getAddress()):void 0,R={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:_!==void 0?Number(_.toString()):B,to:L.to?.toString(),type:L.type&&!Number.isNaN(L.type)?L.type:L.maxFeePerGas?2:0,value:L.value},G=y.from(R).unsignedSerialized.slice(2),{ledgerService:N}=await import("@ledgerhq/hw-app-eth"),T=await N.resolveTransaction(G,{},{erc20:!0,externalPlugins:!0}),X=await this.ledgerApp?.signTransaction(this.derivationPath,G,T);if(!X)throw new o("wallet_ledger_signing_error");let{r:J,s:O,v:Z}=X;return y.from({...R,signature:{r:`0x${J}`,s:`0x${O}`,v:KL(Z)}}).serialized}}var E0=(L)=>new z({...L,chainId:U.Arbitrum}),I0=(L)=>new z({...L,chainId:U.Arc}),v0=(L)=>new z({...L,chainId:U.Aurora}),b0=(L)=>new z({...L,chainId:U.Avalanche}),l0=(L)=>new z({...L,chainId:U.Base}),c0=(L)=>new z({...L,chainId:U.Ethereum}),g0=(L)=>new z({...L,chainId:U.Gnosis}),h0=(L)=>new z({...L,chainId:U.Optimism}),x0=(L)=>new z({...L,chainId:U.Polygon}),d0=(L)=>new z({...L,chainId:U.BinanceSmartChain}),u0=(L)=>new z({...L,chainId:U.Monad}),i0=(L)=>new z({...L,chainId:U.XLayer}),o0=(L)=>new z({...L,chainId:U.Berachain});async function n0(L,y){let _=(await import("@ledgerhq/hw-app-near")).default,{Chain:B,NetworkDerivationPath:R,SwapKitError:G}=await import("@swapkit/helpers"),N=y??await f(),T=new _(N),X=(L||R[B.Near]).join("'/").concat("'"),{address:J,publicKey:O}=await T.getAddress(X);return{getAddress(){return Promise.resolve(J)},async getPublicKey(){let{PublicKey:j}=await import("@near-js/crypto");return j.fromString(`ed25519:${O}`)},signDelegateAction(j){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(j,F,C,D,A){return Promise.reject(new G("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(j){let{Signature:F,SignedTransaction:C}=await import("@near-js/transactions");try{let D=await T.signTransaction(j.encode(),X);if(!D)throw Error("Signature undefined");let A=new F({data:D,keyType:0}),v=new C({signature:A,transaction:j});return[D,v]}catch(D){throw new G("wallet_ledger_signing_error",{error:D})}}}}import{Chain as SL,derivationPathToString as AL,NetworkDerivationPath as mL,SwapKitError as b}from"@swapkit/helpers";class p0{derivationPath;ledgerApp=null;address=null;publicKey=null;injectedTransport;constructor(L,y){this.derivationPath=typeof L==="string"?L:AL(L||mL[SL.Sui]),this.injectedTransport=y}getLedgerPath(){return this.derivationPath.replace(/^m\//,"").replace(/\/(\d+)\/(\d+)$/,"/$1'/$2'")}async createTransportAndLedger(){if(this.ledgerApp)return;let L=this.injectedTransport??await f(),y=(await import("@ledgerhq/hw-app-sui")).default;this.ledgerApp=new y(L)}async connect(){if(await this.createTransportAndLedger(),!this.ledgerApp)throw new b("wallet_ledger_transport_error");let L=this.getLedgerPath(),y=await this.ledgerApp.getPublicKey(L);if(!y?.publicKey)throw new b("wallet_ledger_failed_to_get_address");return this.publicKey=y.publicKey,this.address=`0x${Buffer.from(y.address).toString("hex")}`,this.address}toSuiAddress(){if(!this.address)throw new b("wallet_ledger_failed_to_get_address");return this.address}async getAddress(){if(this.address)return this.address;return await this.connect()}async signTransaction(L){let y=L instanceof Uint8Array?L:L.transaction;if(await this.createTransportAndLedger(),!this.ledgerApp)throw new b("wallet_ledger_transport_error");if(!this.publicKey)throw new b("wallet_ledger_failed_to_get_address");try{let _=this.getLedgerPath(),B=new Uint8Array(3+y.length);B[0]=0,B[1]=0,B[2]=0,B.set(y,3);let R=await this.ledgerApp.signTransaction(_,B);if(!R?.signature)throw new b("wallet_ledger_signing_error");let G=this.publicKey.length===33?this.publicKey.slice(1):this.publicKey;if(G.length!==32)throw new b("wallet_ledger_signing_error",{error:"Invalid public key length"});let N=new Uint8Array(97);N[0]=0,N.set(R.signature,1),N.set(G,65);let T=Buffer.from(N).toString("base64");return{bytes:Buffer.from(y).toString("base64"),signature:T}}catch(_){throw new b("wallet_ledger_signing_error",{error:_})}}}var a0=(L,y)=>new p0(L,y);import{base64 as j0}from"@scure/base";import{NetworkDerivationPath as PL,SwapKitError as W0}from"@swapkit/helpers";import{base64 as VL}from"@scure/base";import{SwapKitError as I}from"@swapkit/helpers";var L0=(L)=>{if(L.length<64)throw new I("wallet_ledger_invalid_signature",{reason:"Too short"});if(L[0]!==48)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(L[1]+2!==L.length)throw new I("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(L[2]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let y=L[3],_=L.slice(4,y+4);if(_.length===33&&_[0]===0)_=_.slice(1,33);else if(_.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"r too long"});while(_.length<32)_.unshift(0);if(L[y+4]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let B=L[y+5];if(4+y+2+B!==L.length)throw new I("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let R=L.slice(y+6,L.length);if(R.length===33&&R[0]===0)R=R.slice(1,33);else if(R.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"s too long"});while(R.length<32)R.unshift(0);if(_.length!==32||R.length!==32)throw new I("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return VL.encode(Buffer.concat([_,R]))};function EL(L){if(typeof L==="string")return L;let y=L.chain?.toUpperCase(),_=(L.symbol||L.ticker||"").toUpperCase();if(!(y&&_))return _||y||"";if(L.synth)return`${y}/${_}`;return`${y}.${_}`}function IL(L){return{...L,msgs:L.msgs.map((y)=>{if(!y.type.includes("MsgDeposit"))return y;let _=y.value.coins;if(!Array.isArray(_))return y;return{...y,value:{...y.value,coins:_.map((B)=>({...B,asset:EL(B.asset)}))}}})}}class Q0 extends i{pubKey=null;derivationPath;constructor(L=PL.THOR,y){super(y);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=j0.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:_,error_message:B,signature:R}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new W0("wallet_ledger_pubkey_not_found");return this.validateResponse(_,B),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:y,signature:L0(R)}]};signAmino=async(L,y)=>{await this.checkOrCreateTransportAndLedger(!0);let _=(await this.getAccounts()).find((O)=>O.address===L);if(!_)throw new W0("wallet_ledger_address_not_found",{address:L});let B=await import("@cosmjs/amino"),R=B.encodeSecp256k1Signature??B.default?.encodeSecp256k1Signature,G=B.serializeSignDoc??B.default?.serializeSignDoc,N=IL(y),{return_code:T,error_message:X,signature:J}=await this.ledgerApp.sign(this.derivationPath,G(N));return this.validateResponse(T,X),{signature:R(_.pubkey,j0.decode(L0(J))),signed:y}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{bech32_address:L,compressed_pk:y}=await this.getAddressAndPubKey();return this.pubKey=j0.encode(y),[{address:L,algo:"secp256k1",pubkey:y}]};sign=async(L)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:y,error_message:_,signature:B}=await this.ledgerApp.sign(this.derivationPath,L);if(!this.pubKey)throw new W0("wallet_ledger_pubkey_not_found");return this.validateResponse(y,_),L0(B)}}import{derivationPathToString as vL,NetworkDerivationPath as bL,SwapKitError as n}from"@swapkit/helpers";class t0{derivationPath;ledgerApp=null;ledgerTimeout=50000;injectedTransport;constructor(L,y){this.derivationPath=typeof L==="string"?L:vL(L||bL.TRON),this.injectedTransport=y}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let L=this.injectedTransport??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 n("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 n("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 n("wallet_ledger_transport_error");try{let y=await this.ledgerApp.signTransaction(this.derivationPath,L.raw_data_hex,[]);if(!y)throw new n("wallet_ledger_signing_error");return{...L,signature:[y]}}catch(y){throw new n("wallet_ledger_signing_error",{error:y})}}}var e0=(L,y)=>new t0(L,y);import{hex as y0}from"@scure/base";import{derivationPathToString as lL,getWalletFormatFor as F0,SwapKitError as Y0}from"@swapkit/helpers";var s0=["bitcoin-cash","dash","dogecoin","zcash"],r0=({tx:L,inputUtxos:y,btcApp:_,derivationPath:B,chain:R},G)=>{let N=y.map((F)=>{return[_.splitTransaction(F.txHex||"",!s0.includes(R),R==="zcash"),F.index,void 0,void 0]}),T=y0.encode(L.unsignedTx),X=_.splitTransaction(T,!0),J=_.serializeTransactionOutputs(X).toString("hex"),O=F0(B),Z=O!=="legacy",j={additionals:O==="bech32"?["bech32"]:[],associatedKeysets:N.map(()=>B),inputs:N,outputScriptHex:J,segwit:Z,useTrustedInputForSegwit:Z};return _.createPaymentTransaction({...j,...G})},cL=({tx:L,inputUtxos:y,btcApp:_,derivationPaths:B,chain:R},G)=>{if(B.length!==y.length)throw new Y0("wallet_ledger_invalid_params",{message:`Derivation paths count (${B.length}) must match inputs count (${y.length})`});let N=y.map((F)=>{return[_.splitTransaction(F.txHex||"",!s0.includes(R),R==="zcash"),F.index,void 0,void 0]}),T=y0.encode(L.unsignedTx),X=_.splitTransaction(T,!0),J=_.serializeTransactionOutputs(X).toString("hex"),O=F0(B[0]??""),Z=O!=="legacy",j={additionals:O==="bech32"?["bech32"]:[],associatedKeysets:B,inputs:N,outputScriptHex:J,segwit:Z,useTrustedInputForSegwit:Z};return _.createPaymentTransaction({...j,...G})},h=({chain:L,additionalSignParams:y})=>{return(_,B)=>{let R,G=null;async function N(){G||=B??await f();let Z=(await import("@ledgerhq/hw-app-btc")).default;return R||=new Z({currency:L,transport:G}),R}async function T(){return R||await N()}async function X(){if(!B)await G?.close?.();R=void 0,G=null}let J=typeof _==="string"?_:lL(_),O=F0(J);return{connect:async()=>{await T()},disconnect:X,getAddress:async()=>{let{toCashAddress:Z}=await import("@swapkit/toolboxes/utxo"),j=await T(),{bitcoinAddress:F}=await j.getWalletPublicKey(J,{format:O});if(!F)throw new Y0("wallet_ledger_get_address_error",{message:`Cannot get ${L} address from ledger derivation path: ${J}`});return L==="bitcoin-cash"&&O==="legacy"?Z(F).replace(/(bchtest:|bitcoincash:)/,""):F},getExtendedPublicKey:async(Z="84'/0'/0'",j=76067358)=>{return(await T()).getWalletXpub({path:Z,xpubVersion:j})},signPCZT:async(Z)=>{if(L!=="zcash")throw new Y0("wallet_ledger_chain_not_supported",{message:"PCZT signing is only supported for Zcash"});let j=await T(),{ZcashTransaction:F,Script:C}=await import("@swapkit/utxo-signer"),D=Z.getGlobal(),A=new F({consensusBranchId:D.consensusBranchId,expiryHeight:D.expiryHeight,lockTime:D.lockTime,version:D.txVersion,versionGroupId:D.versionGroupId}),v=[];for(let Y=0;Y<Z.inputsLength;Y++){let Q=Z.getInput(Y);A.addInput({index:Q.index,script:new Uint8Array,sequence:Q.sequence??4294967295,txid:Q.txid,value:Q.value}),v.push({hash:y0.encode(new Uint8Array([...Q.txid].reverse())),index:Q.index,txHex:gL(Q,D),value:Number(Q.value),witnessUtxo:{script:Q.scriptPubkey,value:Number(Q.value)}})}for(let Y=0;Y<Z.outputsLength;Y++){let Q=Z.getOutput(Y);A.addOutput({amount:Q.value,script:Q.scriptPubkey})}let d=await r0({btcApp:j,chain:L,derivationPath:J,inputUtxos:v,tx:A},{...y,expiryHeight:(()=>{let Y=Buffer.alloc(4);return Y.writeUInt32LE(D.expiryHeight),Y})(),lockTime:D.lockTime}),M=F.fromHex(d,{allowUnknownOutputs:!0}),H=Z.clone();for(let Y=0;Y<M.inputsLength;Y++){let Q=M.getInput(Y);if(Q.script&&Q.script.length>0){let k=C.decode(Q.script);if(k.length>=2)H.addSignature(Y,k[1],k[0])}}return H},signTransaction:async(Z,j)=>{let F=await T();return r0({btcApp:F,chain:L,derivationPath:J,inputUtxos:j,tx:Z},y)},signTransactionWithMultiplePaths:async(Z,j,F)=>{let C=await T();return cL({btcApp:C,chain:L,derivationPaths:F,inputUtxos:j,tx:Z},y)}}}};function gL(L,y){let _=[],B=(y.txVersion|2147483648)>>>0;_.push(B&255,B>>8&255,B>>16&255,B>>24&255);let R=y.versionGroupId;_.push(R&255,R>>8&255,R>>16&255,R>>24&255),_.push(0);let G=L.index+1;if(G<253)_.push(G);else _.push(253,G&255,G>>8&255);for(let X=0;X<L.index;X++)_.push(0,0,0,0,0,0,0,0),_.push(0);let N=L.value;_.push(Number(N&0xffn),Number(N>>8n&0xffn),Number(N>>16n&0xffn),Number(N>>24n&0xffn),Number(N>>32n&0xffn),Number(N>>40n&0xffn),Number(N>>48n&0xffn),Number(N>>56n&0xffn));let T=L.scriptPubkey;if(T.length<253)_.push(T.length);else _.push(253,T.length&255,T.length>>8&255);for(let X of T)_.push(X);return _.push(y.lockTime&255,y.lockTime>>8&255,y.lockTime>>16&255,y.lockTime>>24&255),_.push(y.expiryHeight&255,y.expiryHeight>>8&255,y.expiryHeight>>16&255,y.expiryHeight>>24&255),_.push(0,0,0,0,0,0,0,0),_.push(0),_.push(0),_.push(0),y0.encode(new Uint8Array(_))}var LL=h({chain:"bitcoin"}),yL=h({chain:"litecoin"}),_L=h({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),RL=h({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),GL=h({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),BL=h({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let L=Buffer.alloc(4);return L.writeUInt32LE(0),L})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});import hL from"@ledgerhq/hw-app-xrp";import{Chain as xL,derivationPathToString as dL,NetworkDerivationPath as uL}from"@swapkit/helpers";import{encode as wL}from"ripple-binary-codec";var iL=2147483648;function oL(L){let y={};for(let _ in L)if(L[_]!==null&&L[_]!==void 0)y[_]=L[_];return y}function nL(L){return new hL(L)}var NL=async(L,y)=>{let _=dL(L||uL[xL.Ripple]),B=y??await f(),R=nL(B),{address:G,publicKey:N}=await R.getAddress(_);async function T(X){let{hashes:J}=await import("xrpl"),Z={...oL(X),Flags:X.Flags||iL,SigningPubKey:N.toUpperCase()},j=wL(Z),F=await R.signTransaction(_,j),C=wL({...Z,TxnSignature:F});return{hash:J.hashSignedTx(C),tx_blob:C}}return{getAddress:()=>G,signTransaction:T}};var S=async({chain:L,derivationPath:y,transport:_})=>{let{match:B}=await import("ts-pattern");return B(L).returnType().with($.THORChain,()=>Promise.resolve(new Q0(y,_))).with($.Cosmos,()=>Promise.resolve(new $0(y,_))).with($.Bitcoin,()=>Promise.resolve(LL(y,_))).with($.BitcoinCash,()=>Promise.resolve(_L(y,_))).with($.Dash,()=>Promise.resolve(GL(y,_))).with($.Dogecoin,()=>Promise.resolve(RL(y,_))).with($.Litecoin,()=>Promise.resolve(yL(y,_))).with($.Zcash,()=>Promise.resolve(BL(y,_))).with($.Ripple,()=>Promise.resolve(NL(y,_))).with($.Tron,()=>Promise.resolve(e0(y,_))).with($.Sui,()=>Promise.resolve(a0(y,_))).with($.Near,()=>{return Promise.resolve(n0(y,_))}).with($.Arbitrum,$.Arc,$.Aurora,$.Avalanche,$.Berachain,$.BinanceSmartChain,$.Ethereum,$.Gnosis,$.Monad,$.Optimism,$.Polygon,$.Base,$.XLayer,async()=>{let{getProvider:R}=await import("@swapkit/toolboxes/evm"),G={derivationPath:y,provider:await R(L),transport:_};return B(L).with($.BinanceSmartChain,()=>d0(G)).with($.Avalanche,()=>b0(G)).with($.Arbitrum,()=>E0(G)).with($.Arc,()=>I0(G)).with($.Berachain,()=>o0(G)).with($.Optimism,()=>h0(G)).with($.Polygon,()=>x0(G)).with($.Base,()=>l0(G)).with($.Aurora,()=>v0(G)).with($.Gnosis,()=>g0(G)).with($.Monad,()=>u0(G)).with($.XLayer,()=>i0(G)).otherwise(()=>c0(G))}).otherwise(()=>{throw new pL("wallet_chain_not_supported",{chain:L,wallet:aL.LEDGER})})};var wy=Gy({connect:({addChain:L,supportedChains:y,walletType:_})=>async function(R,G,{address:N,transport:T}={}){let[X]=tL({chains:R,supportedChains:y,walletType:_});if(!X)return!1;let J=G??rL[X],O=await Xy({address:N,chain:X,derivationPath:J,transport:T});return L({...O,chain:X,walletType:M0.LEDGER}),!0},directSigningSupport:{[w.Arbitrum]:!0,[w.Arc]:!0,[w.Aurora]:!0,[w.Avalanche]:!0,[w.Base]:!0,[w.Berachain]:!0,[w.BinanceSmartChain]:!0,[w.Ethereum]:!0,[w.Gnosis]:!0,[w.Monad]:!0,[w.Bitcoin]:!0,[w.BitcoinCash]:!0,[w.Cosmos]:!0,[w.Dash]:!0,[w.Dogecoin]:!0,[w.Litecoin]:!0,[w.Near]:!0,[w.Optimism]:!0,[w.Polygon]:!0,[w.Ripple]:!0,[w.Sui]:!0,[w.THORChain]:!0,[w.Tron]:!0,[w.XLayer]:!0},getExtendedPublicKey:Ty,name:"connectLedger",supportedChains:[w.Arbitrum,w.Arc,w.Aurora,w.Avalanche,w.Base,w.Berachain,w.BinanceSmartChain,w.Bitcoin,w.BitcoinCash,w.Cosmos,w.Dash,w.Dogecoin,w.Ethereum,w.Gnosis,w.Litecoin,w.Monad,w.Near,w.Optimism,w.Polygon,w.Ripple,w.Sui,w.THORChain,w.XLayer,w.Tron,w.Zcash],walletType:M0.LEDGER}),q_=By(wy);function Ny(L,y="t"){if(!L?.includes("=:"))return L;let _=L.includes(`:${y}:`)?L.split(`:${y}:`)[0]:L;return _?.substring(0,_.lastIndexOf(":"))}async function Ty(L,y,{accountIndex:_}={}){if(![w.BitcoinCash,w.Bitcoin,w.Dash,w.Dogecoin,w.Litecoin,w.Zcash].includes(L))throw new x("wallet_chain_not_supported",{chain:L,wallet:M0.LEDGER});let B=L,R=await S({chain:B,derivationPath:y});if(!R.getExtendedPublicKey)return;let G=D0({accountIndex:_,chain:B,derivationPath:y}),N=_0(G),T=L===w.Bitcoin||L===w.Litecoin?N:N.replace(/^m\//,""),X=OL(B).bip32.public;try{let J=await R.getExtendedPublicKey(T,X);return{accountIndex:q0(G),path:N,xpub:J}}finally{await R.disconnect?.()}}async function Xy({address:L,chain:y,derivationPath:_,transport:B}){switch(y){case w.BitcoinCash:case w.Bitcoin:case w.Dash:case w.Dogecoin:case w.Litecoin:case w.Zcash:{let C=function(M={}){return F(M)},{getUtxoToolbox:R}=await import("@swapkit/toolboxes/utxo"),G=y,N=await S({chain:y,derivationPath:_,transport:B}),T=L??await P({chain:y,ledgerClient:N}),X,J;if(y===w.Bitcoin){let{BitcoinPsbtLedger:M}=await import("../chunk-gwx23jdp.js"),H=M(_,B);X={getAddress:H.getAddress,signTransaction:H.signTransaction}}else if(y===w.BitcoinCash||y===w.Dogecoin||y===w.Dash||y===w.Litecoin){let{createLegacyPsbtSigner:M,signLegacyPsbtTransaction:H}=await import("../chunk-bwf31zxr.js");X=M({address:T,chain:G,legacyClient:N}),J=async(Y)=>{let Q=await H({chain:G,legacyClient:N,tx:Y});return O.broadcastTx(Q)}}let O=X?await R(G,{signer:X}):R(G),Z=J??O.signAndBroadcastTransaction,j=async(M)=>{let H=M.feeRate||(await O.getFeeRates())[TL.Average],Y=[w.Bitcoin].includes(y)?M.memo:Ny(M.memo),{tx:Q,inputs:k}=await O.createTransaction({...M,feeRate:H,fetchTxHex:!0,memo:Y,sender:T}),m=await N.signTransaction(Q,k);return await O.broadcastTx(m)};async function F({accountIndex:M}={}){if(!N.getExtendedPublicKey)return;let H=D0({accountIndex:M,chain:G,derivationPath:_}),Y=_0(H),Q=y===w.Bitcoin||y===w.Litecoin?Y:Y.replace(/^m\//,""),k=OL(G).bip32.public,m=await N.getExtendedPublicKey(Q,k);return{accountIndex:q0(H),path:Y,xpub:m}}async function D({accountIndex:M,index:H,change:Y=!1}){try{let Q=_y({accountIndex:M,chain:G,change:Y,derivationPath:_,index:H}),k=await S({chain:G,derivationPath:Q,transport:B}),m=await P({chain:G,ledgerClient:k});return{accountIndex:q0(Q),address:m,change:Y,index:H,path:_0(Q),pubkey:""}}catch{return}}async function A({accountIndex:M,count:H,startIndex:Y=0,change:Q=!1}){return XL("count",H),XL("startIndex",Y),(await Promise.all(Array.from({length:H},(m,p)=>D({accountIndex:M,change:Q,index:Y+p})))).filter((m)=>!!m)}let v=yy({chain:G,deriveAddress:D,getBalance:O.getBalance,getUtxos:(M)=>Ry(G).getUtxos({address:M,fetchTxHex:!0})});async function d({utxos:M,recipient:H,assetValue:Y,memo:Q,feeRate:k,feeOptionKey:m,changeAddress:p}){if(!M.length)throw new x("wallet_ledger_invalid_params",{message:"No UTXOs provided for multi-address transfer"});let JL=k||(await O.getFeeRates())[m||TL.Fast],R0=Q?Ly(Q):null,H0=[{address:H,value:Y.getBaseValue("number")}];if(R0)H0.push({script:R0,value:0});let ZL=M.map(({hash:t,index:e,value:G0,txHex:B0,witnessUtxo:w0})=>({hash:t,index:e,txHex:B0,value:G0,witnessUtxo:w0})),{inputs:a,outputs:C0}=O.accumulative({chain:G,feeRate:JL,inputs:ZL,outputs:H0});if(!(a&&C0))throw new x("wallet_ledger_connection_error",{message:"Insufficient balance for multi-address transfer"});let{Transaction:$L}=await import("@swapkit/utxo-signer"),U0=new $L({allowLegacyWitnessUtxo:!0,version:1}),jL=p||M[0]?.address||H;sL({chain:G,compiledMemo:R0,inputs:a,outputs:C0,sender:jL,tx:U0});let WL=D0({chain:G,derivationPath:_}),QL=a.map((t)=>{let e=M.find((f0)=>f0.hash===t.hash&&f0.index===t.index),G0=e?.derivationIndex??0,B0=e?.isChange??!1,w0=[...WL,Number(B0),G0];return _0(w0)});if(!N.signTransactionWithMultiplePaths)throw new x("wallet_ledger_method_not_supported",{method:"signTransactionWithMultiplePaths"});let YL=await N.signTransactionWithMultiplePaths(U0,a,QL);return O.broadcastTx(YL)}return{...O,...v,address:T,deriveAddressAtIndex:D,deriveAddresses:A,getExtendedPublicKey:C,getExtendedPublicKeyInfo:F,signAndBroadcastTransaction:Z,transfer:j,transferFromMultipleAddresses:d}}case w.Ethereum:case w.Avalanche:case w.Arbitrum:case w.Arc:case w.Berachain:case w.Optimism:case w.Polygon:case w.BinanceSmartChain:case w.Base:case w.Aurora:case w.Gnosis:case w.Monad:case w.XLayer:{let{getEvmToolboxAsync:R}=await import("@swapkit/toolboxes/evm"),G=await S({chain:y,derivationPath:_,transport:B}),N=await P({chain:y,ledgerClient:G});return{...await R(y,{signer:G}),address:N}}case w.Cosmos:{let{createSigningStargateClient:R,getDefaultChainFee:G,getMsgSendDenom:N,getCosmosToolbox:T}=await import("@swapkit/toolboxes/cosmos"),X=await S({chain:y,derivationPath:_,transport:B}),J=await P({chain:y,ledgerClient:X});return{...await T(w.Cosmos,{signer:X}),address:J,transfer:async({assetValue:j,recipient:F,memo:C})=>{if(!j)throw new x("wallet_ledger_invalid_asset");let D={amount:[{amount:j.getBaseValue("string"),denom:N(`u${j.symbol}`).toLowerCase()}],fromAddress:J,toAddress:F},A=await eL(y),v=await R(A,X,"0.007uatom"),{transactionHash:d}=await v.signAndBroadcast(J,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:D}],G(w.Cosmos),C);return d}}}case w.THORChain:{let R=await S({chain:y,derivationPath:_,transport:B}),{getCosmosToolbox:G}=await import("@swapkit/toolboxes/cosmos"),N=G(y,{signer:R}),T=await P({chain:y,ledgerClient:R}),{sign:X}=R;return{...N,address:T,signMessage:X}}case w.Near:{let{getNearToolbox:R}=await import("@swapkit/toolboxes/near"),G=await S({chain:y,derivationPath:_,transport:B}),N=await G.getAddress();return{...R({signer:G}),address:N}}case w.Ripple:{let{getRippleToolbox:R}=await import("@swapkit/toolboxes/ripple"),G=await S({chain:y,derivationPath:_,transport:B}),N=G.getAddress();return{...R({signer:G}),address:N}}case w.Tron:{let{getTronToolbox:R}=await import("@swapkit/toolboxes/tron"),G=await S({chain:y,derivationPath:_,transport:B}),N=await P({chain:y,ledgerClient:G});return{...R({signer:G}),address:N}}case w.Sui:{let{getSuiToolbox:R}=await import("@swapkit/toolboxes/sui"),G=await S({chain:y,derivationPath:_,transport:B}),N=await P({chain:y,ledgerClient:G});return{...R({signer:G}),address:N}}default:throw new x("wallet_ledger_chain_not_supported",{chain:y})}}export{wy as ledgerWallet,Ty as getLedgerExtendedPublicKey,q_ as LEDGER_SUPPORTED_CHAINS};
|
|
1
|
+
import{c as q}from"../chunk-3yr76n9s.js";import{d as C}from"../chunk-n05bv2n5.js";import{Chain as G,derivationPathToString as y_,FeeOption as Z0,filterSupportedChains as DL,getRPCUrl as UL,NetworkDerivationPath as WL,SwapKitError as h,UTXOScriptType as XL,WalletOption as Y_}from"@swapkit/helpers";import{addInputsAndOutputs as FL,assertDerivationIndex as M0,compileMemo as $L,createHDWalletHelpers as CL,getNetworkForChain as j0,getScriptTypeForAddress as ZL,getUTXOAccountIndexFromPath as Q_,getUTXOAccountPath as q_,getUTXOAddressPath as ML,getUtxoApi as jL}from"@swapkit/toolboxes/utxo";import{createWallet as JL,getWalletSupportedChains as YL}from"@swapkit/wallet-core";import{Chain as M,SwapKitError as S0,WalletOption as k0}from"@swapkit/helpers";var m=async({chain:_,ledgerClient:L})=>{if(!L)return"";switch(_){case M.Cosmos:case M.THORChain:return L.connect();case M.Ethereum:case M.BinanceSmartChain:case M.Avalanche:case M.Polygon:case M.Arbitrum:case M.Arc:case M.Berachain:case M.Optimism:case M.Base:case M.Aurora:case M.Gnosis:case M.Monad:case M.XLayer:return L.getAddress();case M.Bitcoin:case M.BitcoinCash:case M.Dash:case M.Dogecoin:case M.Litecoin:case M.Zcash:{let R=L;await R.connect();let f=await R.getAddress();return _===M.BitcoinCash?f.replace("bitcoincash:",""):f}case M.Near:return await L.getAddress();case M.Ripple:return L.getAddress();case M.Tron:return L.getAddress();case M.Sui:return L.connect();default:throw new S0("wallet_chain_not_supported",{chain:_,wallet:k0.LEDGER})}};import{Chain as $,SwapKitError as TL,WalletOption as BL}from"@swapkit/helpers";import{derivationPathToString as m0,NetworkDerivationPath as V0,SwapKitError as c_}from"@swapkit/helpers";import{LedgerErrorCode as W_,NetworkDerivationPath as P0,SwapKitError as X_}from"@swapkit/helpers";import{SwapKitError as I_}from"@swapkit/helpers";var b=85,T_=250;var l={GET_ADDR_SECP256K1:4,GET_VERSION:0,INS_PUBLIC_KEY_SECP256K1:1,SIGN_SECP256K1:2},__={ADD:1,INIT:0,LAST:2},B_={ONLY_RETRIEVE:0,SHOW_ADDRESS_IN_DEVICE:1},g={JSON:0},V={NoError:36864},k_={1:"U2F: Unknown",2:"U2F: Bad request",3:"U2F: Configuration unsupported",4:"U2F: Device Ineligible",5:"U2F: Timeout",14:"Timeout",25600:"Execution Error",26368:"Wrong Length",26626:"Error deriving keys",27010:"Empty Buffer",27011:"Output buffer too small",27012:"Data is invalid",27013:"Conditions not satisfied",27014:"Transaction rejected",27264:"Bad key handle",27392:"Invalid P1/P2",27904:"Instruction not supported",28160:"App does not seem to be open",28416:"Unknown error",28417:"Sign/verify error",36864:"No errors",36865:"Device is busy"};function P(_){if(_ in k_)return k_[_];return`Unknown Status Code: ${_}`}function z0(_){return typeof _==="object"&&_!==null&&!Array.isArray(_)&&!(_ instanceof Date)}function E(_){if(_){if(z0(_)){if(Object.hasOwn(_,"statusCode"))return{error_message:P(_.statusCode),return_code:_.statusCode};if(Object.hasOwn(_,"return_code")&&Object.hasOwn(_,"error_message"))return _}return{error_message:_.toString(),return_code:65535}}return{error_message:_.toString(),return_code:65535}}function D_(_){return _.send(85,l.GET_VERSION,0,0).then((L)=>{let R=L.slice(-2),f=R[0]*256+R[1],N=0;if(L.length>=9)N=(L[5]<<24)+(L[6]<<16)+(L[7]<<8)+(L[8]<<0);return{device_locked:L[4]===1,error_message:P(f),major:L[1],minor:L[2],patch:L[3],return_code:f,target_id:N.toString(16),test_mode:L[0]!==0}},E)}import{SwapKitError as L_}from"@swapkit/helpers";function z_(_){if(_==null||_.length<3)throw new L_("wallet_ledger_invalid_params",{reason:"Path too short"});if(_.length>10)throw new L_("wallet_ledger_invalid_params",{reason:"Path too long"});let L=Buffer.alloc(1+4*_.length);L.writeUInt8(_.length,0);for(let R=0;R<_.length;R+=1){let f=_[R]||0;if(R<3)f|=2147483648;L.writeInt32LE(f,1+R*4)}return L}function U_(_,L,R,f,N=g.JSON){return _.transport.send(b,l.SIGN_SECP256K1,L,N,f,[V.NoError,27012,27264]).then((y)=>{let w=y.slice(-2),O=w[0]*256+w[1],T=P(O);if(O===27264||O===27012)T=`${T} : ${y.slice(0,y.length-2).toString("ascii")}`;let B=null;if(y.length>2)B=y.slice(0,y.length-2);return{error_message:T,return_code:O,signature:B}},E)}function K0(_){if(_.length!==65)throw new L_("wallet_ledger_invalid_params",{reason:"decompressed public key length should be 65 bytes"});let L=_.slice(33,65),R=Buffer.from([2+(L[L.length-1]&1)]);return Buffer.concat([R,_.slice(1,33)])}function K_(_,L){return _.transport.send(b,l.INS_PUBLIC_KEY_SECP256K1,0,0,L,[V.NoError]).then((R)=>{let f=R.slice(-2),N=f[0]*256+f[1],y=Buffer.from(R.slice(0,65));return{compressed_pk:K0(y),error_message:P(N),pk:y,return_code:N}},E)}function P_(_){if(!_||_.length!==5)throw new L_("wallet_ledger_invalid_params",{reason:"Path must be exactly 5 elements"});let L=Buffer.alloc(20);return L.writeUInt32LE(2147483648+_[0],0),L.writeUInt32LE(2147483648+_[1],4),L.writeUInt32LE(2147483648+_[2],8),L.writeUInt32LE(_[3],12),L.writeUInt32LE(_[4],16),L}function m_(_,L,R,f,N=g.JSON){let y=__.ADD;if(L===1)y=__.INIT;if(L===R)y=__.LAST;return U_(_,y,0,f,N)}function V_(_,L){return _.transport.send(b,l.GET_ADDR_SECP256K1,0,0,L,[V.NoError]).then((R)=>{let f=R.slice(-2),N=f[0]*256+f[1];return{compressed_pk:Buffer.from(R.slice(0,33)),error_message:P(N),pk:"OBSOLETE PROPERTY",return_code:N}},E)}class d{transport;versionResponse;constructor(_){if(!_)throw new I_("wallet_ledger_transport_not_defined");this.transport=_}static serializeHRP(_){if(_==null||_.length<3||_.length>83)throw new I_("wallet_ledger_invalid_params",{reason:"Invalid HRP"});let L=Buffer.alloc(1+_.length);return L.writeUInt8(_.length,0),L.write(_,1),L}async serializePath(_){if(this.versionResponse=await D_(this.transport),this.versionResponse.return_code!==V.NoError)throw this.versionResponse;switch(this.versionResponse.major){case 1:return z_(_);case 2:return P_(_);default:return Buffer.alloc(0)}}async signGetChunks(_,L){let R=await this.serializePath(_),f=[];f.push(R);for(let N=0;N<L.length;N+=T_){let y=N+T_;if(N>L.length)y=L.length;f.push(L.slice(N,y))}return f}async getVersion(){try{return this.versionResponse=await D_(this.transport),this.versionResponse}catch(_){return E(_)}}appInfo(){return this.transport.send(176,1,0,0).then((_)=>{let L=_.readUInt16BE(_.length-2),R="",f="",N=0,y=0;if(_[0]!==1)return{error_message:"response format ID not recognized",return_code:36865};let w=_[1];R=_.slice(2,2+w).toString("ascii");let O=2+w,T=_[O];O+=1,f=_.slice(O,O+T).toString("ascii"),O+=T;let B=_[O];return O+=1,N=B,y=_[O],{appName:R,appVersion:f,error_message:P(L),flag_onboarded:(y&4)!==0,flag_pin_validated:(y&128)!==0,flag_recovery:(y&1)!==0,flag_signed_mcu_code:(y&2)!==0,flagLen:N,flagsValue:y,return_code:L}},E)}deviceInfo(){return this.transport.send(224,1,0,0,Buffer.from([]),[V.NoError,28160]).then((_)=>{let L=_.slice(-2),R=L[0]*256+L[1];if(R===28160)return{error_message:"This command is only available in the Dashboard",return_code:R};let f=_.slice(0,4).toString("hex"),N=4,y=_[N];N+=1;let w=_.slice(N,N+y).toString();N+=y;let O=_[N];N+=1;let T=_.slice(N,N+O).toString("hex");N+=O;let B=_[N];N+=1;let U=_.slice(N,N+B);if(U[B-1]===0)U=_.slice(N,N+B-1);let W=U.toString();return{error_message:P(R),flag:T,mcuVersion:W,return_code:R,seVersion:w,targetId:f}},E)}async publicKey(_){try{let L=await this.serializePath(_);switch(this.versionResponse.major){case 1:return K_(this,L);case 2:{let R=Buffer.concat([d.serializeHRP("thor"),L]);return V_(this,R)}default:return{error_message:"App Version is not supported",return_code:25600}}}catch(L){return E(L)}}async getAddressAndPubKey(_,L,R=!1){try{let f=await this.serializePath(_),N=Buffer.concat([d.serializeHRP(L),f]),y=await this.transport.send(b,l.GET_ADDR_SECP256K1,R?B_.SHOW_ADDRESS_IN_DEVICE:B_.ONLY_RETRIEVE,0,N,[V.NoError]),w=Buffer.from(y.slice(0,33)),O=Buffer.from(y.slice(33,-2)).toString(),T=y.readUInt16BE(y.length-2);return{bech32_address:O,compressed_pk:w,error_message:P(T),return_code:T}}catch(f){return E(f)}}showAddressAndPubKey(_,L){return this.getAddressAndPubKey(_,L,!0)}signSendChunk(_,L,R,f=g.JSON){switch(this.versionResponse.major){case 1:return U_(this,_,L,R,f);case 2:return m_(this,_,L,R,f);default:return{error_message:"App Version is not supported",return_code:25600}}}async sign(_,L,R=g.JSON){let f=Buffer.from(L),N=[],y;try{N=await this.signGetChunks(_,f),y=await this.signSendChunk(1,N.length,N[0],R)}catch(O){E(O)}let w={error_message:y.error_message,return_code:y.return_code,signature:null};for(let O=1;O<N.length;O+=1)if(w=await this.signSendChunk(1+O,N.length,N[O],R),w.return_code!==V.NoError)break;return{error_message:w.error_message,return_code:w.return_code,signature:w.signature}}}class n{ledgerTimeout=50000;derivationPath=P0.GAIA;transport;ledgerApp;chain="thor";injectedTransport;constructor(_){if(this.injectedTransport=_,_)this.transport=_}checkOrCreateTransportAndLedger=async(_=!1)=>{if(!_&&this.transport&&this.ledgerApp)return;try{if(!this.transport||_&&!this.injectedTransport)this.transport=this.injectedTransport??await q();switch(this.chain){case"thor":{this.ledgerApp=_||!this.ledgerApp?new d(this.transport):this.ledgerApp;break}case"cosmos":{let R=(await import("@ledgerhq/hw-app-cosmos")).default;this.ledgerApp=_||!this.ledgerApp?new R(this.transport):this.ledgerApp}}return this.ledgerApp}catch(L){throw new X_("wallet_ledger_connection_error",L)}};validateResponse=(_,L)=>{switch(_){case W_.NoError:return;case W_.LockedDevice:throw new X_("wallet_ledger_device_locked",{message:`Ledger is locked: ${L}`});case W_.TC_NotFound:throw new X_("wallet_ledger_device_not_found");default:break}}}class F_ extends n{pubKey=null;derivationPath;constructor(_=V0.GAIA,L){super(L);this.chain="cosmos",this.derivationPath=m0(_)}connect=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{publicKey:_,address:L}=await this.getAddressAndPubKey();return this.pubKey=Buffer.from(_,"hex").toString("base64"),L};getAddressAndPubKey=async()=>{return await this.checkOrCreateTransportAndLedger(!0),await this.ledgerApp.getAddress(this.derivationPath,this.chain)};signTransaction=async(_,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:R,error_message:f,signature:N}=await this.ledgerApp.sign(this.derivationPath,_);if(!this.pubKey)throw new c_("wallet_ledger_pubkey_not_found");return this.validateResponse(R,f),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:N}]};signAmino=async(_,L)=>{await this.checkOrCreateTransportAndLedger(!0);let R=await this.getAccounts();if(R.findIndex((D)=>D.address===_)===-1)throw new c_("wallet_ledger_address_not_found",{address:_});let N=await import("@cosmjs/amino"),y=N.encodeSecp256k1Signature??N.default?.encodeSecp256k1Signature,w=N.serializeSignDoc??N.default?.serializeSignDoc,O=await import("@cosmjs/crypto"),T=O.Secp256k1Signature??O.default?.Secp256k1Signature,B=w(L),U=await this.ledgerApp.sign(this.derivationPath,B);this.validateResponse(U.return_code,U.error_message);let W=T.fromDer(U.signature).toFixedLength();return{signature:y(R[0].pubkey,W),signed:L}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.getAddressAndPubKey();return[{address:_.address,algo:"secp256k1",pubkey:Buffer.from(_.publicKey,"hex")}]}}import{ChainId as Q,derivationPathToString as v0,NetworkDerivationPath as l0,SwapKitError as o}from"@swapkit/helpers";import{AbstractSigner as b0}from"ethers";var v_={apex:"apexp",europa:"flex",nanoS:"nanos",nanoSP:"nanosp",nanoX:"nanox",stax:"stax"};async function l_(_,L=fetch){let R=v_[_];if(!R)return null;let f=`https://crypto-assets-service.api.ledger.com/v1/certificates?output=descriptor&public_key_usage=network&target_device=${R}`,N=await L(f);if(!N.ok)return null;let w=(await N.json())[0]?.descriptor,O=w?.signatures?.prod;if(!(w?.data&&O))return null;return`${w.data}${I0(O)}`}async function b_(_,L){await _.send(176,6,12,0,Buffer.from(L,"hex"))}async function g_(_,L,R=fetch){let f=v_[L];if(!f)return null;let N=`https://crypto-assets-service.api.ledger.com/v1/networks?chain_id=${_}&output=chain_id,descriptors,icons`,y=await R(N);if(!y.ok)return null;let O=(await y.json()).find((U)=>U.chain_id===_),T=O?.descriptors?.[f],B=T?.signatures?.prod;if(!(T?.data&&B))return null;return{data:T.data,icon:O?.icons?.[f],signature:B}}function I0(_){return x_(21,Buffer.from(_,"hex")).toString("hex")}function x_(_,L){return Buffer.concat([Buffer.from([_,L.length]),L])}function c0({data:_,signature:L}){let R=Buffer.concat([Buffer.from(_,"hex"),x_(21,Buffer.from(L,"hex"))]),f=Buffer.alloc(2);return f.writeUInt16BE(R.length,0),Buffer.concat([f,R])}async function $_(_,L,R){for(let f=0;f<R.length;f+=255){let N=f===0?1:0,y=R.subarray(f,f+255);await _.send(224,48,N,L,y)}}async function h_(_,L){let R=c0(L);if(await $_(_,0,R),!L.icon)return{iconAccepted:!1};try{return await $_(_,1,Buffer.from(L.icon,"hex")),{iconAccepted:!0}}catch{return await $_(_,0,R),{iconAccepted:!1}}}var g0=27264,u_=Number(Q.Arc);function x0(_){return _ instanceof Error&&"statusCode"in _&&_.statusCode===g0}function h0(_){return Object.values(_??{}).some((L)=>Array.isArray(L)&&L.length)}function u0(_){if(typeof _==="number")return _;let L=_.startsWith("0x")?_.slice(2):_;return Number.parseInt(L||"0",16)}class A extends b0{chainId=Q.Ethereum;derivationPath="";ledgerApp=null;ledgerTimeout=50000;transport;injectedTransport;arcNetworkRegistered=!1;constructor({provider:_,derivationPath:L=l0.OP,chainId:R=Q.Optimism,transport:f}){super(_);this.chainId=R||Q.Ethereum,this.derivationPath=typeof L==="string"?L:v0(L),this.injectedTransport=f,Object.defineProperty(this,"provider",{enumerable:!0,value:_||null,writable:!1})}connect=(_)=>new A({chainId:this.chainId,derivationPath:this.derivationPath,provider:_,transport:this.transport??this.injectedTransport});checkOrCreateTransportAndLedger=async()=>{await this.createTransportAndLedger()};createTransportAndLedger=async()=>{if(this.ledgerApp)return;this.transport||=this.injectedTransport??await q();let _=(await import("@ledgerhq/hw-app-eth")).default;this.ledgerApp=new _(this.transport)};getAddress=async()=>{let _=await this.getAddressAndPubKey();if(!_)throw new o("wallet_ledger_failed_to_get_address");return _.address};getAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath)};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signMessage=async(_)=>{let{Signature:L}=await import("ethers");await this.createTransportAndLedger();let R=await this.ledgerApp?.signPersonalMessage(this.derivationPath,_);if(!R)throw new o("wallet_ledger_signing_error");return R.r=`0x${R.r}`,R.s=`0x${R.s}`,L.from(R).serialized};sendTransaction=async(_)=>{if(!this.provider)throw new o("wallet_ledger_no_provider");let L=await this.signTransaction(_);return await this.provider.broadcastTransaction(L)};signTypedData=async(_,L,R,f)=>{let{buildEIP712DomainType:N}=await import("@swapkit/toolboxes/evm"),{Signature:y,TypedDataEncoder:w}=await import("ethers");await this.createTransportAndLedger();let{EIP712Domain:O,...T}=L,B=f??w.from(T).primaryType,U;try{U=await this.ledgerApp?.signEIP712Message(this.derivationPath,{domain:_,message:R,primaryType:B,types:{EIP712Domain:N(_),...T}})}catch(W){let D=W instanceof Error&&"statusCode"in W;if(!D||D&&W.statusCode===27013)throw W;let Z=w.hashDomain(_).slice(2),J=w.from(T).hash(R).slice(2);U=await this.ledgerApp?.signEIP712HashedMessage(this.derivationPath,Z,J)}if(!U)throw new o("wallet_ledger_signing_error");return U.r=`0x${U.r}`,U.s=`0x${U.s}`,y.from(U).serialized};signTransaction=async(_)=>{let{Transaction:L}=await import("ethers");await this.createTransportAndLedger();let R=_.nonce??void 0,f=R===void 0?await this.provider?.getTransactionCount(_.from||await this.getAddress()):void 0,N={chainId:_.chainId||this.chainId,data:_.data,gasLimit:_.gasLimit,..._.gasPrice&&{gasPrice:_.gasPrice},...!_.gasPrice&&_.maxFeePerGas&&{maxFeePerGas:_.maxFeePerGas,maxPriorityFeePerGas:_.maxPriorityFeePerGas},nonce:R!==void 0?Number(R.toString()):f,to:_.to?.toString(),type:_.type&&!Number.isNaN(_.type)?_.type:_.maxFeePerGas?2:0,value:_.value},y=L.from(N).unsignedSerialized.slice(2),{ledgerService:w}=await import("@ledgerhq/hw-app-eth"),O=Number(N.chainId),T=O===u_,B=await w.resolveTransaction(y,{},{erc20:!0,externalPlugins:!0}).catch((J)=>{if(!T)throw J;return console.warn("Ledger: could not fetch clear-signing metadata for Arc, signing blind"),null});if(T&&!this.arcNetworkRegistered)await this.registerNetworkOnDevice(O);let U=await this.signWithLedgerApp(y,B,O);if(!U)throw new o("wallet_ledger_signing_error");let{r:W,s:D,v:Z}=U;return L.from({...N,signature:{r:`0x${W}`,s:`0x${D}`,v:u0(Z)}}).serialized};signWithLedgerApp=async(_,L,R)=>{try{return await this.ledgerApp?.signTransaction(this.derivationPath,_,L)}catch(f){if(!(R===u_&&x0(f)&&h0(L)))throw f;return console.warn("Ledger: the app rejected the Arc metadata, signing blind"),await this.ledgerApp?.signTransaction(this.derivationPath,_,null)}};registerNetworkOnDevice=async(_)=>{let L=this.transport?.deviceModel?.id;if(!(this.transport&&L))return;try{let[R,f]=await Promise.all([g_(_,L),l_(L)]);if(!R)return;if(f)await b_(this.transport,f);await h_(this.transport,R),this.arcNetworkRegistered=!0}catch{}}}var d_=(_)=>new A({..._,chainId:Q.Arbitrum}),n_=(_)=>new A({..._,chainId:Q.Arc}),o_=(_)=>new A({..._,chainId:Q.Aurora}),i_=(_)=>new A({..._,chainId:Q.Avalanche}),p_=(_)=>new A({..._,chainId:Q.Base}),t_=(_)=>new A({..._,chainId:Q.Ethereum}),a_=(_)=>new A({..._,chainId:Q.Gnosis}),e_=(_)=>new A({..._,chainId:Q.Optimism}),r_=(_)=>new A({..._,chainId:Q.Polygon}),s_=(_)=>new A({..._,chainId:Q.BinanceSmartChain}),_0=(_)=>new A({..._,chainId:Q.Monad}),L0=(_)=>new A({..._,chainId:Q.XLayer}),R0=(_)=>new A({..._,chainId:Q.Berachain});async function N0(_,L){let R=(await import("@ledgerhq/hw-app-near")).default,{Chain:f,NetworkDerivationPath:N,SwapKitError:y}=await import("@swapkit/helpers"),w=L??await q(),O=new R(w),T=(_||N[f.Near]).join("'/").concat("'"),{address:B,publicKey:U}=await O.getAddress(T);return{getAddress(){return Promise.resolve(B)},async getPublicKey(){let{PublicKey:D}=await import("@near-js/crypto");return D.fromString(`ed25519:${U}`)},signDelegateAction(D){return Promise.reject(new y("wallet_ledger_method_not_supported",{method:"signDelegateAction",wallet:"Ledger"}))},signNep413Message(D,Z,J,j,k){return Promise.reject(new y("wallet_ledger_method_not_supported",{method:"signNep413Message",wallet:"Ledger"}))},async signTransaction(D){let{Signature:Z,SignedTransaction:J}=await import("@near-js/transactions");try{let j=await O.signTransaction(D.encode(),T);if(!j)throw Error("Signature undefined");let k=new Z({data:j,keyType:0}),z=new J({signature:k,transaction:D});return[j,z]}catch(j){throw new y("wallet_ledger_signing_error",{error:j})}}}}import{Chain as d0,derivationPathToString as n0,NetworkDerivationPath as o0,SwapKitError as v}from"@swapkit/helpers";class y0{derivationPath;ledgerApp=null;address=null;publicKey=null;injectedTransport;constructor(_,L){this.derivationPath=typeof _==="string"?_:n0(_||o0[d0.Sui]),this.injectedTransport=L}getLedgerPath(){return this.derivationPath.replace(/^m\//,"").replace(/\/(\d+)\/(\d+)$/,"/$1'/$2'")}async createTransportAndLedger(){if(this.ledgerApp)return;let _=this.injectedTransport??await q(),L=(await import("@ledgerhq/hw-app-sui")).default;this.ledgerApp=new L(_)}async connect(){if(await this.createTransportAndLedger(),!this.ledgerApp)throw new v("wallet_ledger_transport_error");let _=this.getLedgerPath(),L=await this.ledgerApp.getPublicKey(_);if(!L?.publicKey)throw new v("wallet_ledger_failed_to_get_address");return this.publicKey=L.publicKey,this.address=`0x${Buffer.from(L.address).toString("hex")}`,this.address}toSuiAddress(){if(!this.address)throw new v("wallet_ledger_failed_to_get_address");return this.address}async getAddress(){if(this.address)return this.address;return await this.connect()}async signTransaction(_){let L=_ instanceof Uint8Array?_:_.transaction;if(await this.createTransportAndLedger(),!this.ledgerApp)throw new v("wallet_ledger_transport_error");if(!this.publicKey)throw new v("wallet_ledger_failed_to_get_address");try{let R=this.getLedgerPath(),f=new Uint8Array(3+L.length);f[0]=0,f[1]=0,f[2]=0,f.set(L,3);let N=await this.ledgerApp.signTransaction(R,f);if(!N?.signature)throw new v("wallet_ledger_signing_error");let y=this.publicKey.length===33?this.publicKey.slice(1):this.publicKey;if(y.length!==32)throw new v("wallet_ledger_signing_error",{error:"Invalid public key length"});let w=new Uint8Array(97);w[0]=0,w.set(N.signature,1),w.set(y,65);let O=Buffer.from(w).toString("base64");return{bytes:Buffer.from(L).toString("base64"),signature:O}}catch(R){throw new v("wallet_ledger_signing_error",{error:R})}}}var f0=(_,L)=>new y0(_,L);import{base64 as C_}from"@scure/base";import{NetworkDerivationPath as p0,SwapKitError as Z_}from"@swapkit/helpers";import{base64 as i0}from"@scure/base";import{SwapKitError as I}from"@swapkit/helpers";var R_=(_)=>{if(_.length<64)throw new I("wallet_ledger_invalid_signature",{reason:"Too short"});if(_[0]!==48)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected first byte 0x30"});if(_[1]+2!==_.length)throw new I("wallet_ledger_invalid_signature",{reason:"signature length does not match TLV"});if(_[2]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02"});let L=_[3],R=_.slice(4,L+4);if(R.length===33&&R[0]===0)R=R.slice(1,33);else if(R.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"r too long"});while(R.length<32)R.unshift(0);if(_[L+4]!==2)throw new I("wallet_ledger_invalid_signature",{reason:"TLV encoding: expected length type 0x02 for s"});let f=_[L+5];if(4+L+2+f!==_.length)throw new I("wallet_ledger_invalid_signature",{reason:"TLV byte lengths do not match message length"});let N=_.slice(L+6,_.length);if(N.length===33&&N[0]===0)N=N.slice(1,33);else if(N.length===33)throw new I("wallet_ledger_invalid_signature",{reason:"s too long"});while(N.length<32)N.unshift(0);if(R.length!==32||N.length!==32)throw new I("wallet_ledger_invalid_signature",{reason:"must be 32 bytes each"});return i0.encode(Buffer.concat([R,N]))};function t0(_){if(typeof _==="string")return _;let L=_.chain?.toUpperCase(),R=(_.symbol||_.ticker||"").toUpperCase();if(!(L&&R))return R||L||"";if(_.synth)return`${L}/${R}`;return`${L}.${R}`}function a0(_){return{..._,msgs:_.msgs.map((L)=>{if(!L.type.includes("MsgDeposit"))return L;let R=L.value.coins;if(!Array.isArray(R))return L;return{...L,value:{...L.value,coins:R.map((f)=>({...f,asset:t0(f.asset)}))}}})}}class M_ extends n{pubKey=null;derivationPath;constructor(_=p0.THOR,L){super(L);this.chain="thor",this.derivationPath=_}get pubkey(){return this.pubKey}connect=async()=>{await this.checkOrCreateTransportAndLedger();let{compressed_pk:_,bech32_address:L}=await this.getAddressAndPubKey();return this.pubKey=C_.encode(_),L};getAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.ledgerApp.getAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(_.return_code,_.error_message),_};showAddressAndPubKey=async()=>{await this.checkOrCreateTransportAndLedger(!0);let _=await this.ledgerApp.showAddressAndPubKey(this.derivationPath,this.chain);return this.validateResponse(_.return_code,_.error_message),_};signTransaction=async(_,L="0")=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:R,error_message:f,signature:N}=await this.ledgerApp.sign(this.derivationPath,_);if(!this.pubKey)throw new Z_("wallet_ledger_pubkey_not_found");return this.validateResponse(R,f),[{pub_key:{type:"tendermint/PubKeySecp256k1",value:this.pubKey},sequence:L,signature:R_(N)}]};signAmino=async(_,L)=>{await this.checkOrCreateTransportAndLedger(!0);let R=(await this.getAccounts()).find((U)=>U.address===_);if(!R)throw new Z_("wallet_ledger_address_not_found",{address:_});let f=await import("@cosmjs/amino"),N=f.encodeSecp256k1Signature??f.default?.encodeSecp256k1Signature,y=f.serializeSignDoc??f.default?.serializeSignDoc,w=a0(L),{return_code:O,error_message:T,signature:B}=await this.ledgerApp.sign(this.derivationPath,y(w));return this.validateResponse(O,T),{signature:N(R.pubkey,C_.decode(R_(B))),signed:L}};getAccounts=async()=>{await this.checkOrCreateTransportAndLedger(!0);let{bech32_address:_,compressed_pk:L}=await this.getAddressAndPubKey();return this.pubKey=C_.encode(L),[{address:_,algo:"secp256k1",pubkey:L}]};sign=async(_)=>{await this.checkOrCreateTransportAndLedger(!0);let{return_code:L,error_message:R,signature:f}=await this.ledgerApp.sign(this.derivationPath,_);if(!this.pubKey)throw new Z_("wallet_ledger_pubkey_not_found");return this.validateResponse(L,R),R_(f)}}import{derivationPathToString as e0,NetworkDerivationPath as r0,SwapKitError as i}from"@swapkit/helpers";class G0{derivationPath;ledgerApp=null;ledgerTimeout=50000;injectedTransport;constructor(_,L){this.derivationPath=typeof _==="string"?_:e0(_||r0.TRON),this.injectedTransport=L}checkOrCreateTransportAndLedger=async()=>{if(this.ledgerApp)return;await this.createTransportAndLedger()};createTransportAndLedger=async()=>{let _=this.injectedTransport??await q(),L=(await import("@ledgerhq/hw-app-trx")).default;this.ledgerApp=new L(_)};getAddress=async()=>{let _=await this.getAddressAndPubKey();if(!_)throw new i("wallet_ledger_failed_to_get_address");return _.address};getAddressAndPubKey=async()=>{await this.createTransportAndLedger();let _=await this.ledgerApp?.getAddress(this.derivationPath);if(!_)throw new i("wallet_ledger_failed_to_get_address");return{address:_.address,publicKey:_.publicKey}};showAddressAndPubKey=async()=>{return await this.createTransportAndLedger(),this.ledgerApp?.getAddress(this.derivationPath,!0)};signTransaction=async(_)=>{if(await this.createTransportAndLedger(),!this.ledgerApp)throw new i("wallet_ledger_transport_error");try{let L=await this.ledgerApp.signTransaction(this.derivationPath,_.raw_data_hex,[]);if(!L)throw new i("wallet_ledger_signing_error");return{..._,signature:[L]}}catch(L){throw new i("wallet_ledger_signing_error",{error:L})}}}var w0=(_,L)=>new G0(_,L);import{hex as N_}from"@scure/base";import{derivationPathToString as s0,getWalletFormatFor as J_,SwapKitError as j_}from"@swapkit/helpers";var T0=["bitcoin-cash","dash","dogecoin","zcash"],O0=({tx:_,inputUtxos:L,btcApp:R,derivationPath:f,chain:N},y)=>{let w=L.map((Z)=>{return[R.splitTransaction(Z.txHex||"",!T0.includes(N),N==="zcash"),Z.index,void 0,void 0]}),O=N_.encode(_.unsignedTx),T=R.splitTransaction(O,!0),B=R.serializeTransactionOutputs(T).toString("hex"),U=J_(f),W=U!=="legacy",D={additionals:U==="bech32"?["bech32"]:[],associatedKeysets:w.map(()=>f),inputs:w,outputScriptHex:B,segwit:W,useTrustedInputForSegwit:W};return R.createPaymentTransaction({...D,...y})},_L=({tx:_,inputUtxos:L,btcApp:R,derivationPaths:f,chain:N},y)=>{if(f.length!==L.length)throw new j_("wallet_ledger_invalid_params",{message:`Derivation paths count (${f.length}) must match inputs count (${L.length})`});let w=L.map((Z)=>{return[R.splitTransaction(Z.txHex||"",!T0.includes(N),N==="zcash"),Z.index,void 0,void 0]}),O=N_.encode(_.unsignedTx),T=R.splitTransaction(O,!0),B=R.serializeTransactionOutputs(T).toString("hex"),U=J_(f[0]??""),W=U!=="legacy",D={additionals:U==="bech32"?["bech32"]:[],associatedKeysets:f,inputs:w,outputScriptHex:B,segwit:W,useTrustedInputForSegwit:W};return R.createPaymentTransaction({...D,...y})},x=({chain:_,additionalSignParams:L})=>{return(R,f)=>{let N,y=null;async function w(){y||=f??await q();let W=(await import("@ledgerhq/hw-app-btc")).default;return N||=new W({currency:_,transport:y}),N}async function O(){return N||await w()}async function T(){if(!f)await y?.close?.();N=void 0,y=null}let B=typeof R==="string"?R:s0(R),U=J_(B);return{connect:async()=>{await O()},disconnect:T,getAddress:async()=>{let{toCashAddress:W}=await import("@swapkit/toolboxes/utxo"),D=await O(),{bitcoinAddress:Z}=await D.getWalletPublicKey(B,{format:U});if(!Z)throw new j_("wallet_ledger_get_address_error",{message:`Cannot get ${_} address from ledger derivation path: ${B}`});return _==="bitcoin-cash"&&U==="legacy"?W(Z).replace(/(bchtest:|bitcoincash:)/,""):Z},getExtendedPublicKey:async(W="84'/0'/0'",D=76067358)=>{return(await O()).getWalletXpub({path:W,xpubVersion:D})},signPCZT:async(W)=>{if(_!=="zcash")throw new j_("wallet_ledger_chain_not_supported",{message:"PCZT signing is only supported for Zcash"});let D=await O(),{ZcashTransaction:Z,Script:J}=await import("@swapkit/utxo-signer"),j=W.getGlobal(),k=new Z({consensusBranchId:j.consensusBranchId,expiryHeight:j.expiryHeight,lockTime:j.lockTime,version:j.txVersion,versionGroupId:j.versionGroupId}),z=[];for(let X=0;X<W.inputsLength;X++){let F=W.getInput(X);k.addInput({index:F.index,script:new Uint8Array,sequence:F.sequence??4294967295,txid:F.txid,value:F.value}),z.push({hash:N_.encode(new Uint8Array([...F.txid].reverse())),index:F.index,txHex:LL(F,j),value:Number(F.value),witnessUtxo:{script:F.scriptPubkey,value:Number(F.value)}})}for(let X=0;X<W.outputsLength;X++){let F=W.getOutput(X);k.addOutput({amount:F.value,script:F.scriptPubkey})}let u=await O0({btcApp:D,chain:_,derivationPath:B,inputUtxos:z,tx:k},{...L,expiryHeight:(()=>{let X=Buffer.alloc(4);return X.writeUInt32LE(j.expiryHeight),X})(),lockTime:j.lockTime}),p=Z.fromHex(u,{allowUnknownOutputs:!0}),t=W.clone();for(let X=0;X<p.inputsLength;X++){let F=p.getInput(X);if(F.script&&F.script.length>0){let Y=J.decode(F.script);if(Y.length>=2)t.addSignature(X,Y[1],Y[0])}}return t},signTransaction:async(W,D)=>{let Z=await O();return O0({btcApp:Z,chain:_,derivationPath:B,inputUtxos:D,tx:W},L)},signTransactionWithMultiplePaths:async(W,D,Z)=>{let J=await O();return _L({btcApp:J,chain:_,derivationPaths:Z,inputUtxos:D,tx:W},L)}}}};function LL(_,L){let R=[],f=(L.txVersion|2147483648)>>>0;R.push(f&255,f>>8&255,f>>16&255,f>>24&255);let N=L.versionGroupId;R.push(N&255,N>>8&255,N>>16&255,N>>24&255),R.push(0);let y=_.index+1;if(y<253)R.push(y);else R.push(253,y&255,y>>8&255);for(let T=0;T<_.index;T++)R.push(0,0,0,0,0,0,0,0),R.push(0);let w=_.value;R.push(Number(w&0xffn),Number(w>>8n&0xffn),Number(w>>16n&0xffn),Number(w>>24n&0xffn),Number(w>>32n&0xffn),Number(w>>40n&0xffn),Number(w>>48n&0xffn),Number(w>>56n&0xffn));let O=_.scriptPubkey;if(O.length<253)R.push(O.length);else R.push(253,O.length&255,O.length>>8&255);for(let T of O)R.push(T);return R.push(L.lockTime&255,L.lockTime>>8&255,L.lockTime>>16&255,L.lockTime>>24&255),R.push(L.expiryHeight&255,L.expiryHeight>>8&255,L.expiryHeight>>16&255,L.expiryHeight>>24&255),R.push(0,0,0,0,0,0,0,0),R.push(0),R.push(0),R.push(0),N_.encode(new Uint8Array(R))}var B0=x({chain:"bitcoin"}),D0=x({chain:"litecoin"}),U0=x({additionalSignParams:{additionals:["abc"],segwit:!1,sigHashType:65},chain:"bitcoin-cash"}),W0=x({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dogecoin"}),X0=x({additionalSignParams:{additionals:[],segwit:!1,useTrustedInputForSegwit:!1},chain:"dash"}),F0=x({additionalSignParams:{additionals:["zcash","sapling"],expiryHeight:(()=>{let _=Buffer.alloc(4);return _.writeUInt32LE(0),_})(),lockTime:0,segwit:!1,useTrustedInputForSegwit:!1},chain:"zcash"});import RL from"@ledgerhq/hw-app-xrp";import{Chain as NL,derivationPathToString as yL,NetworkDerivationPath as fL}from"@swapkit/helpers";import{encode as $0}from"ripple-binary-codec";var GL=2147483648;function wL(_){let L={};for(let R in _)if(_[R]!==null&&_[R]!==void 0)L[R]=_[R];return L}function OL(_){return new RL(_)}var C0=async(_,L)=>{let R=yL(_||fL[NL.Ripple]),f=L??await q(),N=OL(f),{address:y,publicKey:w}=await N.getAddress(R);async function O(T){let{hashes:B}=await import("xrpl"),W={...wL(T),Flags:T.Flags||GL,SigningPubKey:w.toUpperCase()},D=$0(W),Z=await N.signTransaction(R,D),J=$0({...W,TxnSignature:Z});return{hash:B.hashSignedTx(J),tx_blob:J}}return{getAddress:()=>y,signTransaction:O}};var S=async({chain:_,derivationPath:L,transport:R})=>{let{match:f}=await import("ts-pattern");return f(_).returnType().with($.THORChain,()=>Promise.resolve(new M_(L,R))).with($.Cosmos,()=>Promise.resolve(new F_(L,R))).with($.Bitcoin,()=>Promise.resolve(B0(L,R))).with($.BitcoinCash,()=>Promise.resolve(U0(L,R))).with($.Dash,()=>Promise.resolve(X0(L,R))).with($.Dogecoin,()=>Promise.resolve(W0(L,R))).with($.Litecoin,()=>Promise.resolve(D0(L,R))).with($.Zcash,()=>Promise.resolve(F0(L,R))).with($.Ripple,()=>Promise.resolve(C0(L,R))).with($.Tron,()=>Promise.resolve(w0(L,R))).with($.Sui,()=>Promise.resolve(f0(L,R))).with($.Near,()=>{return Promise.resolve(N0(L,R))}).with($.Arbitrum,$.Arc,$.Aurora,$.Avalanche,$.Berachain,$.BinanceSmartChain,$.Ethereum,$.Gnosis,$.Monad,$.Optimism,$.Polygon,$.Base,$.XLayer,async()=>{let{getProvider:N}=await import("@swapkit/toolboxes/evm"),y={derivationPath:L,provider:await N(_),transport:R};return f(_).with($.BinanceSmartChain,()=>s_(y)).with($.Avalanche,()=>i_(y)).with($.Arbitrum,()=>d_(y)).with($.Arc,()=>n_(y)).with($.Berachain,()=>R0(y)).with($.Optimism,()=>e_(y)).with($.Polygon,()=>r_(y)).with($.Base,()=>p_(y)).with($.Aurora,()=>o_(y)).with($.Gnosis,()=>a_(y)).with($.Monad,()=>_0(y)).with($.XLayer,()=>L0(y)).otherwise(()=>t_(y))}).otherwise(()=>{throw new TL("wallet_chain_not_supported",{chain:_,wallet:BL.LEDGER})})};var QL=JL({connect:({addChain:_,supportedChains:L,walletType:R})=>async function(N,y,{address:w,transport:O}={}){let[T]=DL({chains:N,supportedChains:L,walletType:R});if(!T)return!1;let B=y??WL[T],U=await HL({address:w,chain:T,derivationPath:B,transport:O});return _({...U,chain:T,walletType:Y_.LEDGER}),!0},directSigningSupport:{[G.Arbitrum]:!0,[G.Arc]:!0,[G.Aurora]:!0,[G.Avalanche]:!0,[G.Base]:!0,[G.Berachain]:!0,[G.BinanceSmartChain]:!0,[G.Ethereum]:!0,[G.Gnosis]:!0,[G.Monad]:!0,[G.Bitcoin]:!0,[G.BitcoinCash]:!0,[G.Cosmos]:!0,[G.Dash]:!0,[G.Dogecoin]:!0,[G.Litecoin]:!0,[G.Near]:!0,[G.Optimism]:!0,[G.Polygon]:!0,[G.Ripple]:!0,[G.Sui]:!0,[G.THORChain]:!0,[G.Tron]:!0,[G.XLayer]:!0},getExtendedPublicKey:AL,name:"connectLedger",supportedChains:[G.Arbitrum,G.Arc,G.Aurora,G.Avalanche,G.Base,G.Berachain,G.BinanceSmartChain,G.Bitcoin,G.BitcoinCash,G.Cosmos,G.Dash,G.Dogecoin,G.Ethereum,G.Gnosis,G.Litecoin,G.Monad,G.Near,G.Optimism,G.Polygon,G.Ripple,G.Sui,G.THORChain,G.XLayer,G.Tron,G.Zcash],walletType:Y_.LEDGER}),bR=YL(QL);function qL(_,L="t"){if(!_?.includes("=:"))return _;let R=_.includes(`:${L}:`)?_.split(`:${L}:`)[0]:_;return R?.substring(0,R.lastIndexOf(":"))}async function AL(_,L,{accountIndex:R}={}){if(![G.BitcoinCash,G.Bitcoin,G.Dash,G.Dogecoin,G.Litecoin,G.Zcash].includes(_))throw new h("wallet_chain_not_supported",{chain:_,wallet:Y_.LEDGER});let f=_,N=await S({chain:f,derivationPath:L});if(!N.getExtendedPublicKey)return;let y=q_({accountIndex:R,chain:f,derivationPath:L}),w=y_(y),O=_===G.Bitcoin||_===G.Litecoin?w:w.replace(/^m\//,""),T=j0(f).bip32.public;try{let B=await N.getExtendedPublicKey(O,T);return{accountIndex:Q_(y),path:w,xpub:B}}finally{await N.disconnect?.()}}async function HL({address:_,chain:L,derivationPath:R,transport:f}){switch(L){case G.BitcoinCash:case G.Bitcoin:case G.Dash:case G.Dogecoin:case G.Litecoin:case G.Zcash:{let k=function(X={}){return j(X)},{getUtxoToolbox:N}=await import("@swapkit/toolboxes/utxo"),y=L,w=await S({chain:L,derivationPath:R,transport:f}),O=_??await m({chain:L,ledgerClient:w}),T=ZL(O,y),B,U,W;if(L===G.Bitcoin){let{BitcoinPsbtLedger:X}=await import("../chunk-egtwbe6q.js"),F=X(R,f);U=T===XL.P2SH_P2WPKH?await F.getPublicKey():void 0,B={getAddress:F.getAddress,publicKey:U,signTransaction:F.signTransaction}}else if(L===G.BitcoinCash||L===G.Dogecoin||L===G.Dash||L===G.Litecoin){let{createLegacyPsbtSigner:X,signLegacyPsbtTransaction:F}=await import("../chunk-bwf31zxr.js");B=X({address:O,chain:y,legacyClient:w}),W=async(Y)=>{let H=await F({chain:y,legacyClient:w,tx:Y});return D.broadcastTx(H)}}let D=B?await N(y,{scriptType:T,signer:B}):N(y,{scriptType:T}),Z=W??D.signAndBroadcastTransaction,J=async(X)=>{let F=X.feeRate||(await D.getFeeRates())[Z0.Average],Y=[G.Bitcoin].includes(L)?X.memo:qL(X.memo),{tx:H,inputs:c}=await D.createTransaction({...X,feeRate:F,fetchTxHex:!0,memo:Y,publicKey:X.publicKey??U,sender:O}),K=await w.signTransaction(H,c);return await D.broadcastTx(K)};async function j({accountIndex:X}={}){if(!w.getExtendedPublicKey)return;let F=q_({accountIndex:X,chain:y,derivationPath:R}),Y=y_(F),H=L===G.Bitcoin||L===G.Litecoin?Y:Y.replace(/^m\//,""),c=j0(y).bip32.public,K=await w.getExtendedPublicKey(H,c);return{accountIndex:Q_(F),path:Y,xpub:K}}async function z({accountIndex:X,index:F,change:Y=!1}){try{let H=ML({accountIndex:X,chain:y,change:Y,derivationPath:R,index:F}),c=await S({chain:y,derivationPath:H,transport:f}),K=await m({chain:y,ledgerClient:c});return{accountIndex:Q_(H),address:K,change:Y,index:F,path:y_(H),pubkey:""}}catch{return}}async function u({accountIndex:X,count:F,startIndex:Y=0,change:H=!1}){return M0("count",F),M0("startIndex",Y),(await Promise.all(Array.from({length:F},(K,a)=>z({accountIndex:X,change:H,index:Y+a})))).filter((K)=>!!K)}let p=CL({chain:y,deriveAddress:z,getBalance:D.getBalance,getUtxos:(X)=>jL(y).getUtxos({address:X,fetchTxHex:!0})});async function t({utxos:X,recipient:F,assetValue:Y,memo:H,feeRate:c,feeOptionKey:K,changeAddress:a}){if(!X.length)throw new h("wallet_ledger_invalid_params",{message:"No UTXOs provided for multi-address transfer"});let J0=c||(await D.getFeeRates())[K||Z0.Fast],f_=H?$L(H):null,A_=[{address:F,value:Y.getBaseValue("number")}];if(f_)A_.push({script:f_,value:0});let Y0=X.map(({hash:r,index:s,value:G_,txHex:w_,witnessUtxo:O_})=>({hash:r,index:s,txHex:w_,value:G_,witnessUtxo:O_})),{inputs:e,outputs:H_}=D.accumulative({chain:y,feeRate:J0,inputs:Y0,outputs:A_});if(!(e&&H_))throw new h("wallet_ledger_connection_error",{message:"Insufficient balance for multi-address transfer"});let{Transaction:Q0}=await import("@swapkit/utxo-signer"),E_=new Q0({allowLegacyWitnessUtxo:!0,version:1}),q0=a||X[0]?.address||F;FL({chain:y,compiledMemo:f_,inputs:e,outputs:H_,sender:q0,tx:E_});let A0=q_({chain:y,derivationPath:R}),H0=e.map((r)=>{let s=X.find((S_)=>S_.hash===r.hash&&S_.index===r.index),G_=s?.derivationIndex??0,w_=s?.isChange??!1,O_=[...A0,Number(w_),G_];return y_(O_)});if(!w.signTransactionWithMultiplePaths)throw new h("wallet_ledger_method_not_supported",{method:"signTransactionWithMultiplePaths"});let E0=await w.signTransactionWithMultiplePaths(E_,e,H0);return D.broadcastTx(E0)}return{...D,...p,address:O,deriveAddressAtIndex:z,deriveAddresses:u,getExtendedPublicKey:k,getExtendedPublicKeyInfo:j,signAndBroadcastTransaction:Z,transfer:J,transferFromMultipleAddresses:t}}case G.Ethereum:case G.Avalanche:case G.Arbitrum:case G.Arc:case G.Berachain:case G.Optimism:case G.Polygon:case G.BinanceSmartChain:case G.Base:case G.Aurora:case G.Gnosis:case G.Monad:case G.XLayer:{let{getEvmToolboxAsync:N}=await import("@swapkit/toolboxes/evm"),y=await S({chain:L,derivationPath:R,transport:f}),w=await m({chain:L,ledgerClient:y});return{...await N(L,{signer:y}),address:w}}case G.Cosmos:{let{createSigningStargateClient:N,getDefaultChainFee:y,getMsgSendDenom:w,getCosmosToolbox:O}=await import("@swapkit/toolboxes/cosmos"),T=await S({chain:L,derivationPath:R,transport:f}),B=await m({chain:L,ledgerClient:T});return{...await O(G.Cosmos,{signer:T}),address:B,transfer:async({assetValue:D,recipient:Z,memo:J})=>{if(!D)throw new h("wallet_ledger_invalid_asset");let j={amount:[{amount:D.getBaseValue("string"),denom:w(`u${D.symbol}`).toLowerCase()}],fromAddress:B,toAddress:Z},k=await UL(L),z=await N(k,T,"0.007uatom"),{transactionHash:u}=await z.signAndBroadcast(B,[{typeUrl:"/cosmos.bank.v1beta1.MsgSend",value:j}],y(G.Cosmos),J);return u}}}case G.THORChain:{let N=await S({chain:L,derivationPath:R,transport:f}),{getCosmosToolbox:y}=await import("@swapkit/toolboxes/cosmos"),w=y(L,{signer:N}),O=await m({chain:L,ledgerClient:N}),{sign:T}=N;return{...w,address:O,signMessage:T}}case G.Near:{let{getNearToolbox:N}=await import("@swapkit/toolboxes/near"),y=await S({chain:L,derivationPath:R,transport:f}),w=await y.getAddress();return{...N({signer:y}),address:w}}case G.Ripple:{let{getRippleToolbox:N}=await import("@swapkit/toolboxes/ripple"),y=await S({chain:L,derivationPath:R,transport:f}),w=y.getAddress();return{...N({signer:y}),address:w}}case G.Tron:{let{getTronToolbox:N}=await import("@swapkit/toolboxes/tron"),y=await S({chain:L,derivationPath:R,transport:f}),w=await m({chain:L,ledgerClient:y});return{...N({signer:y}),address:w}}case G.Sui:{let{getSuiToolbox:N}=await import("@swapkit/toolboxes/sui"),y=await S({chain:L,derivationPath:R,transport:f}),w=await m({chain:L,ledgerClient:y});return{...N({signer:y}),address:w}}default:throw new h("wallet_ledger_chain_not_supported",{chain:L})}}export{QL as ledgerWallet,AL as getLedgerExtendedPublicKey,bR as LEDGER_SUPPORTED_CHAINS};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=4FBDCA7A0E5C984C64756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|