@swapkit/wallet-hardware 4.9.30 → 4.9.32

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.
@@ -1,4 +1,4 @@
1
- var Tj={};Fj(Tj,{trezorWallet:()=>Vj,normalizeTrezorSignature:()=>Lj,normalizeTrezorExtendedPublicKey:()=>a,getTrezorExtendedPublicKey:()=>Nj,TREZOR_SUPPORTED_CHAINS:()=>gj});module.exports=Dj(Tj);var i=require("@scure/bip32"),j=require("@swapkit/helpers"),S=require("@swapkit/toolboxes/utxo"),f=require("@swapkit/utxo-signer"),o=require("@swapkit/wallet-core"),Ej=new Set(["auto","iframe","popup","suite-desktop","suite-web"]),Mj=new Set(["BridgeTransport","WebUsbTransport","NodeUsbTransport"]),Uj="auto",d={appName:"SwapKit",appUrl:"https://swapkit.dev",email:"support@swapkit.dev"},Xj=["WebUsbTransport"],p={keepSession:!0},r=new Map,x,_j=[f.NETWORKS.bitcoin.bip32,f.NETWORKS.bitcoinCash.bip32,f.NETWORKS.dash.bip32,f.NETWORKS.dogecoin.bip32,f.NETWORKS.litecoin.bip32];async function Hj(){r.clear();let G=(async()=>{try{await(await import("@trezor/connect-web")).default.dispose()}catch{}})();if(x=G,await G,x===G)x=void 0}function Yj(G){return typeof G==="string"&&Ej.has(G)?G:void 0}function Zj(G){if(!Array.isArray(G))return;let q=G.filter((J)=>typeof J==="string"&&Mj.has(J));return q.length>0?q:void 0}function c(G,q){return typeof G==="string"&&G.trim()?G:q}function $j(){return typeof globalThis.location<"u"&&globalThis.location.origin?globalThis.location.origin:d.appUrl}async function Rj(){let G=(await import("@trezor/connect-web")).default,q=j.SKConfig.get("integrations").trezor,{connectSrc:J,coreMode:U,debug:X,interactionTimeout:Y,lazyLoad:Q,pendingTransportEvent:L,popup:$,transportReconnect:N,transports:z,...V}=q??{},K={...V,appName:c(q?.appName,d.appName),appUrl:c(q?.appUrl,$j()),email:c(q?.email,d.email)},v=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),Z=Yj(U)??Uj,k=Zj(z)??Xj;if(x)await x;if(v)await G.dispose();return await G.init({connectSrc:J,coreMode:Z,debug:X,interactionTimeout:Y,lazyLoad:Q??!1,manifest:K,pendingTransportEvent:L,popup:$??!0,transportReconnect:N,transports:k}),{coreMode:Z,isLocalhost:v,popup:$??!0,TrezorConnect:G}}function a(G,q){let J=S.getNetworkForChain(q).bip32,U=[J,..._j.filter((Y)=>Y.public!==J.public||Y.private!==J.private)],X;for(let Y of U)try{let Q=i.HDKey.fromExtendedKey(G,Y);if(!(Q.publicKey&&Q.chainCode))throw Error("Extended key is missing public key data");return new i.HDKey({chainCode:Q.chainCode,depth:Q.depth,index:Q.index,parentFingerprint:Q.parentFingerprint,publicKey:Q.publicKey,versions:J}).publicExtendedKey}catch(Q){X=Q}throw X instanceof Error?X:Error("Unable to parse Trezor extended public key")}function Bj(G,q){if(!G)return;try{return a(G,q)}catch{return G}}function qj(G){if(G.length<2||G[0]!==106)return null;let q=G[1];if(q===void 0||G.length<2+q)return null;return Buffer.from(G.slice(2,2+q)).toString("hex")}function wj(G){switch(G[0]){case 84:return{input:"SPENDWITNESS",output:"PAYTOWITNESS"};case 49:return{input:"SPENDP2SHWITNESS",output:"PAYTOP2SHWITNESS"};case 44:return{input:"SPENDADDRESS",output:"PAYTOADDRESS"};default:return null}}function l(G){return G.map((q,J)=>J<3?(q|2147483648)>>>0:q)}function Sj(G){return Array.isArray(G)&&G[0]instanceof Uint8Array&&typeof G[1]==="object"&&G[1]!==null&&typeof G[1].fingerprint==="number"&&Array.isArray(G[1].path)}function kj(G){if(!Array.isArray(G.bip32Derivation))return;let[q]=G.bip32Derivation;return Sj(q)?q:void 0}function Jj(G){if(G.witnessUtxo?.amount!==void 0)return G.witnessUtxo.amount.toString();let q=G.index!==void 0?G.nonWitnessUtxo?.outputs?.[G.index]:void 0;if(q?.amount!==void 0)return q.amount.toString();return}function Lj(G,q){let J=Buffer.from(G,"hex"),U=J[1]!==void 0?J[1]+2:void 0;if(U!==void 0&&J.length===U)return new Uint8Array([...J,q===j.Chain.BitcoinCash?f.BCHSigHash.ALL:1]);return new Uint8Array(J)}function Kj(G,q,J){let U=[];for(let X=0;X<G.inputsLength;X++){let Y=G.getInput(X);U.push({address_n:q,amount:Y.value.toString(),prev_hash:J.encode(Y.txid),prev_index:Y.index,script_type:"SPENDADDRESS"})}return U}async function Aj(G,q,J,U){let X=[];for(let Y=0;Y<G.outputsLength;Y++){let Q=G.getOutput(Y),L=Q.scriptPubkey;if(Q.value===0n&&L?.length>0&&L[0]===106){let z=qj(L);if(z){X.push({amount:"0",op_return_data:z,script_type:"PAYTOOPRETURN"});continue}throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:U,error:"Malformed OP_RETURN output cannot be signed"}})}let $=await zj(L);if(!$&&Q.value>0n)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:U,error:"Unable to decode output address from scriptPubkey"}});if($===J)X.push({address_n:q,amount:Q.value.toString(),script_type:"PAYTOADDRESS"});else X.push({address:$,amount:Q.value.toString(),script_type:"PAYTOADDRESS"})}return X}async function zj(G){try{let{OutScript:q,Address:J}=await import("@swapkit/utxo-signer"),U=q.decode(G);if(U.type==="pkh"||U.type==="pk")return J(f.NETWORKS.zcash).encode(U)}catch{}return}async function Pj(G,q){let{ZcashTransaction:J,Script:U}=await import("@swapkit/utxo-signer"),X=J.fromHex(G,{allowUnknownOutputs:!0}),Y=q.clone();for(let Q=0;Q<X.inputsLength;Q++){let $=X.getInput(Q).script;if($&&$.length>0){let N=U.decode($);if(N.length>=2)Y.addSignature(Q,N[1],N[0])}}return Y}function Cj(G,q,J,U){let X=[];for(let Y=0;Y<G.inputsLength;Y++){let Q=G.getInput(Y),L=q[Y];X.push({address_n:J,amount:L?.value?.toString()||Q.value?.toString()||"0",prev_hash:Q.txid?U.encode(Q.txid):"",prev_index:Q.index??0,script_type:"SPENDADDRESS"})}return X}function bj(G,q,J,U){let X=[];for(let Y=0;Y<G.outputsLength;Y++){let Q=G.getOutput(Y),L=G.getOutputAddress(Y,f.NETWORKS.zcash),$=Q.script;if(Q.amount===0n&&$?.length>0&&$[0]===106){let V=qj($);if(V){X.push({amount:"0",op_return_data:V,script_type:"PAYTOOPRETURN"});continue}continue}if(!L&&(Q.amount??0n)>0n)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:U,error:"Unable to decode output address"}});let z=L===J||!L?{address_n:q}:{address:L};X.push({...z,amount:Q.amount?.toString()||"0",script_type:"PAYTOADDRESS"})}return X}function s(G,q,J,U,X,Y,Q,L,$){let N=[];for(let z=0;z<G.outputsLength;z++){let V=G.getOutput(z),K=G.getOutputAddress(z,q);if(!K){let P=V.script?qj(V.script):null;if(P!==null||X){N.push({amount:"0",op_return_data:P??Buffer.from(X).toString("hex"),script_type:"PAYTOOPRETURN"});continue}throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Y,error:"Unable to decode output address from scriptPubkey"}})}if(V.amount===void 0)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Y,error:"Output amount is missing"}});let v=Y===j.Chain.BitcoinCash,Z=v?L(K):K,k=v?$(Z)===$(U):Z===U;N.push(k?{address_n:J,amount:V.amount.toString(),script_type:Q.output}:{address:Z,amount:V.amount.toString(),script_type:"PAYTOADDRESS"})}return N}function jj(G){return G===j.Chain.Bitcoin||G===j.Chain.Litecoin}function vj(G){return G===j.Chain.BitcoinCash||G===j.Chain.Dash||G===j.Chain.Dogecoin}function Qj(G,q){if(G!==j.Chain.Dash)return;let J=new Map;for(let U of q){if(!U.txHex)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:G,error:`Missing previous transaction hex for ${U.hash}:${U.index}`}});J.set(U.hash,{details:{},hex:U.txHex,txid:U.hash})}return[...J.values()]}async function mj({address:G,chain:q,derivationPath:J}){switch(q){case j.Chain.Arbitrum:case j.Chain.Aurora:case j.Chain.Avalanche:case j.Chain.Base:case j.Chain.Berachain:case j.Chain.BinanceSmartChain:case j.Chain.Ethereum:case j.Chain.Gnosis:case j.Chain.Monad:case j.Chain.Optimism:case j.Chain.Polygon:case j.Chain.XLayer:{let{getProvider:U,getEvmToolboxAsync:X}=await import("@swapkit/toolboxes/evm"),{getEVMSigner:Y}=await import("../chunk-a2mrvqfy.js"),Q=await U(q),L=await Y({chain:q,derivationPath:J,provider:Q}),$=await L.getAddress();return{...await X(q,{provider:Q,signer:L}),address:$}}case j.Chain.Zcash:{let{getUtxoToolbox:U}=await import("@swapkit/toolboxes/utxo"),X=j.derivationPathToString(J),Q=G??await(async()=>{let Z=(await import("@trezor/connect-web")).default,{success:k,payload:P}=await Z.getAddress({coin:"zcash",path:X});if(!k)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:q,error:P.error||"Unknown error"}});return P.address})(),L=async(Z)=>{let k=(await import("@trezor/connect-web")).default,{hex:P}=await import("@scure/base"),I=l(J),m=Z.getGlobal(),g=Kj(Z,I,P),T=await Aj(Z,I,Q,q),h=await k.signTransaction({branchId:m.consensusBranchId,coin:"zcash",expiry:m.expiryHeight,inputs:g,locktime:m.lockTime,outputs:T,overwintered:!0,version:m.txVersion,versionGroupId:m.versionGroupId});if(!h.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,error:h.payload.error}});return{serializedTx:h.payload.serializedTx,signedPczt:await Pj(h.payload.serializedTx,Z)}},$=async(Z)=>{let{ZcashTransaction:k}=await import("@swapkit/utxo-signer");return k.fromHex(Z,{allowUnknownOutputs:!0})},N=async(Z)=>{let k=(await import("@trezor/connect-web")).default,{hex:P}=await import("@scure/base"),I=l(J),m=Cj(Z,[],I,P),g=bj(Z,I,Q,q),T=await k.signTransaction({branchId:Z.consensusBranchId,coin:"zcash",expiry:0,inputs:m,locktime:0,outputs:g,overwintered:!0,version:4,versionGroupId:f.ZcashVersionGroupId.SAPLING});if(T.success)return{serializedTx:T.payload.serializedTx,signedTx:await $(T.payload.serializedTx)};throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,error:T.payload.error}})},z={getAddress:async()=>Q,signPCZT:async(Z)=>{return(await L(Z)).signedPczt},signTransaction:async(Z)=>{if("toPCZT"in Z){let{serializedTx:k}=await L(Z.toPCZT());return $(k)}if("getGlobal"in Z){let{serializedTx:k}=await L(Z);return $(k)}return(await N(Z)).signedTx}},V=U(j.Chain.Zcash,{signer:z}),K=async(Z)=>{if("toPCZT"in Z){let{serializedTx:P}=await L(Z.toPCZT());return V.broadcastTx(P)}if("getGlobal"in Z){let{serializedTx:P}=await L(Z);return V.broadcastTx(P)}let{serializedTx:k}=await N(Z);return V.broadcastTx(k)},v=async({recipient:Z,feeOptionKey:k,feeRate:P,...I})=>{if(!(Q&&Z))throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{address:Q,recipient:Z,wallet:j.WalletOption.TREZOR}});let m=P||(await V.getFeeRates())[k||j.FeeOption.Fast],{tx:g}=await V.createTransaction({...I,feeRate:m,fetchTxHex:!1,recipient:Z,sender:Q}),{serializedTx:T}=await N(g);return V.broadcastTx(T)};return{...V,address:Q,signAndBroadcastTransaction:K,signPCZT:z.signPCZT,transfer:v}}case j.Chain.Bitcoin:case j.Chain.BitcoinCash:case j.Chain.Dash:case j.Chain.Dogecoin:case j.Chain.Litecoin:{let t=function(B={}){return u(B)},{toCashAddress:U,getUtxoToolbox:X,stripPrefix:Y}=await import("@swapkit/toolboxes/utxo"),Q=q,L=wj(J);if(!L)throw new j.SwapKitError({errorKey:"wallet_trezor_derivation_path_not_supported",info:{derivationPath:J}});let $=L,N=q.toLowerCase(),V=G??await(async(B=J)=>{let _=(await import("@trezor/connect-web")).default,H=j.derivationPathToString(B),{success:D,payload:E}=await _.getAddress({coin:N,...p,path:H,showOnTrezor:!1});if(!D)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:q,error:E.error||"Unknown error"}});if(q===j.Chain.BitcoinCash)return Y(E.address);return E.address})(),K=X(q),v=async(B,_,H="")=>{let D=(await import("@trezor/connect-web")).default,E=l(J),F=S.getNetworkForChain(q),C=s(B,F,E,V,H,q,$,U,Y),A=_.map(({hash:w,index:W,value:M})=>({address_n:E,amount:M,prev_hash:w,prev_index:W,script_type:$.input})),O=await D.signTransaction({coin:N,inputs:A,outputs:C,refTxs:Qj(q,_)});if(O.success)return O.payload.serializedTx;let R=O.payload;throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,code:R?.code??"unknown",error:R?.error??"unknown",payload:R}})},Z=async(B)=>{let _=(await import("@trezor/connect-web")).default,{hex:H}=await import("@scure/base"),D=l(J),E=S.getNetworkForChain(q),F;async function C(){if(!F){let W=await u(),b=i.HDKey.fromExtendedKey(W.xpub,E.bip32).derive(`m/${Number(J[3]??0)}/${Number(J[4]??0)}`);if(!b.publicKey)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:q,error:"Unable to derive Trezor leaf public key from account xpub"}});F=b.publicKey}return[F,{fingerprint:0,path:D}]}let A=[],O=[];for(let W=0;W<B.inputsLength;W++){let M=B.getInput(W),b=kj(M),y=b??await C(),e=Jj(M);if(!M.txid||M.index===void 0||!e)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,error:`Input ${W} is missing prevout data required by Trezor`}});if(A[W]=y[0],!b)B.updateInput(W,{bip32Derivation:[y]});O.push({address_n:y[1].path,amount:e,prev_hash:H.encode(M.txid),prev_index:M.index,script_type:$.input,...M.sequence!==void 0?{sequence:M.sequence}:{}})}let R=s(B,E,D,V,"",q,$,U,Y),w=await _.signTransaction({coin:N,...p,inputs:O,locktime:B.lockTime,outputs:R,version:B.version});if(!w.success){let W=w.payload;throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,code:W?.code??"unknown",error:W?.error??"unknown",payload:W}})}return w.payload.signatures.forEach((W,M)=>{let b=A[M];if(!(W&&b))return;B.updateInput(M,{partialSig:[[b,Lj(W,q)]]})}),B},k=async(B)=>{let _=(await import("@trezor/connect-web")).default,{hex:H}=await import("@scure/base"),D=l(J),E=S.getNetworkForChain(q),F=[];for(let R=0;R<B.inputsLength;R++){let w=B.getInput(R),W=Jj(w);if(!w.txid||w.index===void 0||!W)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,error:`Input ${R} is missing prevout data required by Trezor`}});F.push({address_n:D,amount:W,prev_hash:H.encode(w.txid),prev_index:w.index,script_type:$.input,...w.sequence!==void 0?{sequence:w.sequence}:{}})}let C=s(B,E,D,V,"",q,$,U,Y),A=await _.signTransaction({coin:N,inputs:F,locktime:B.lockTime,outputs:C,version:B.version});if(A.success)return A.payload.serializedTx;let O=A.payload;throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,code:O?.code??"unknown",error:O?.error??"unknown",payload:O}})},P=async(B,_,H="")=>{let D=(await import("@trezor/connect-web")).default,E=S.getNetworkForChain(q),F=l(J.slice(0,3)),C=s(B,E,F,V,H,q,$,U,Y),A=_.map(({hash:R,index:w,value:W,derivationIndex:M,isChange:b})=>{let y=b?1:0;return{address_n:[...F,y,M],amount:W,prev_hash:R,prev_index:w,script_type:$.input}}),O=await D.signTransaction({coin:N,inputs:A,outputs:C,refTxs:Qj(q,_)});if(O.success)return O.payload.serializedTx;throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,error:O.payload.error}})},I=async({utxos:B,recipient:_,assetValue:H,memo:D,feeRate:E,feeOptionKey:F})=>{let C=X(q),A=E||(await C.getFeeRates())[F||j.FeeOption.Fast],{tx:O,inputs:R}=await C.createTransaction({assetValue:H,feeRate:A,fetchTxHex:q===j.Chain.Dash,memo:D,recipient:_,sender:V}),w=R.map((M)=>{let b=B.find((y)=>y.hash===M.hash&&y.index===M.index);return{...M,derivationIndex:b?.derivationIndex??0,isChange:b?.isChange??!1,txHex:b?.txHex}}),W=await P(O,w,D);return C.broadcastTx(W)},m=async({recipient:B,feeOptionKey:_,feeRate:H,memo:D,...E})=>{if(!(V&&B))throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{address:V,memo:D,recipient:B,wallet:j.WalletOption.TREZOR}});let F=X(q),C=H||(await F.getFeeRates())[_||j.FeeOption.Fast],A=F.createTransaction,{tx:O,inputs:R}=await A({...E,feeRate:C,fetchTxHex:q===j.Chain.Dash,memo:D,recipient:B,sender:V}),w=await v(O,R,D);return await F.broadcastTx(w)},g=jj(q)?await X(Q,{signer:{getAddress:async()=>V,signTransaction:Z}}):K,T=vj(q)?async(B)=>K.broadcastTx(await k(B)):g.signAndBroadcastTransaction,h=jj(q)?g.signTransaction:v,n=jj(q)?g.transfer:m;async function u({accountIndex:B}={}){let _=(await import("@trezor/connect-web")).default,H=S.getUTXOAccountPath({accountIndex:B,chain:Q,derivationPath:J}),D=j.derivationPathToString(H),E=`${q}:${D}`,F=r.get(E);if(F)return F;let C=await _.getPublicKey({coin:N,path:D}),{success:A,payload:O}=C;if(!A)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:q,error:O.error||"Unknown error"}});let R=a(O.xpub,Q),w=Bj(O.xpubSegwit,Q),W={accountIndex:S.getUTXOAccountIndexFromPath(H),chainCode:O.chainCode,depth:O.depth,fingerprint:O.fingerprint,path:O.serializedPath,publicKey:O.publicKey,xpub:R,xpubSegwit:w};return r.set(E,W),W}async function Gj({accountIndex:B,index:_,change:H=!1}){S.assertDerivationIndex("index",_);let D=(await import("@trezor/connect-web")).default,E=S.getUTXOAccountPath({accountIndex:B,chain:Q,derivationPath:J}),F=`${j.derivationPathToString(E)}/${Number(H)}/${_}`,{success:C,payload:A}=await D.getAddress({coin:N,...p,path:F,showOnTrezor:!1});if(!C)return;let O=A.address;if(q===j.Chain.BitcoinCash)O=(await X(q)).stripPrefix(A.address);let R=await D.getPublicKey({coin:N,...p,path:F,scriptType:$.input,showOnTrezor:!1}),w=R.success?R.payload.publicKey:"";return{accountIndex:S.getUTXOAccountIndexFromPath(E),address:O,change:H,index:_,path:F,pubkey:w}}async function Wj({accountIndex:B,count:_,startIndex:H=0,change:D=!1}){S.assertDerivationIndex("count",_),S.assertDerivationIndex("startIndex",H);let E=(await import("@trezor/connect-web")).default,F=S.getUTXOAccountPath({accountIndex:B,chain:Q,derivationPath:J}),C=j.derivationPathToString(F),A=Array.from({length:_},(W,M)=>({coin:N,path:`${C}/${Number(D)}/${H+M}`,showOnTrezor:!1})),{success:O,payload:R}=await E.getAddress({...p,bundle:A});if(!O||!Array.isArray(R))return[];return await Promise.all(R.map(async(W,M)=>{let b=W.address;if(q===j.Chain.BitcoinCash)b=(await X(q)).stripPrefix(W.address);return{accountIndex:S.getUTXOAccountIndexFromPath(F),address:b,change:D,index:H+M,path:`${C}/${Number(D)}/${H+M}`,pubkey:""}}))}let Oj=S.createHDWalletHelpers({chain:q,deriveAddress:Gj,getBalance:g.getBalance,getUtxos:(B)=>S.getUtxoApi(q).getUtxos({address:B,fetchTxHex:!0})});return{...g,...Oj,address:V,deriveAddressAtIndex:Gj,deriveAddresses:Wj,getExtendedPublicKey:t,getExtendedPublicKeyInfo:u,signAndBroadcastTransaction:T,signTransaction:h,signTransactionWithMultipleInputs:P,transfer:n,transferFromMultipleAddresses:I}}default:throw new j.SwapKitError({errorKey:"wallet_chain_not_supported",info:{chain:q,wallet:j.WalletOption.TREZOR}})}}async function Nj(G,q,{accountIndex:J}={}){if(![j.Chain.BitcoinCash,j.Chain.Bitcoin,j.Chain.Dash,j.Chain.Dogecoin,j.Chain.Litecoin,j.Chain.Zcash].includes(G))throw new j.SwapKitError({errorKey:"wallet_chain_not_supported",info:{chain:G,wallet:j.WalletOption.TREZOR}});let{TrezorConnect:U}=await Rj(),X=G,Y=q??j.NetworkDerivationPath[G],Q=G===j.Chain.Zcash?"zcash":G.toLowerCase(),L=S.getUTXOAccountPath({accountIndex:J,chain:X,derivationPath:Y}),$=j.derivationPathToString(L),N=`${G}:${$}`,z=r.get(N);if(z)return z;let{success:V,payload:K}=await U.getPublicKey({coin:Q,path:$,showOnTrezor:!0});if(!V)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:G,error:K.error||"Unknown error"}});let v={accountIndex:S.getUTXOAccountIndexFromPath(L),chainCode:K.chainCode,depth:K.depth,fingerprint:K.fingerprint,path:K.serializedPath,publicKey:K.publicKey,xpub:a(K.xpub,X),xpubSegwit:Bj(K.xpubSegwit,X)};return r.set(N,v),v}var Vj=o.createWallet({connect:({addChain:G,supportedChains:q,walletType:J})=>async function(X,Y,{address:Q}={}){let[L]=j.filterSupportedChains({chains:X,supportedChains:q,walletType:J});if(!L)throw new j.SwapKitError({errorKey:"wallet_chain_not_supported",info:{chain:L,wallet:j.WalletOption.TREZOR}});let $=(await import("@trezor/connect-web")).default,N=j.SKConfig.get("integrations").trezor,{connectSrc:z,coreMode:V,debug:K,interactionTimeout:v,lazyLoad:Z,pendingTransportEvent:k,popup:P,transportReconnect:I,transports:m,...g}=N??{},T={...g,appName:c(N?.appName,d.appName),appUrl:c(N?.appUrl,$j()),email:c(N?.email,d.email)},h=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),n=Yj(V)??Uj,u=Zj(m)??Xj;if(x)await x;if(h)await $.dispose();await $.init({connectSrc:z,coreMode:n,debug:K,interactionTimeout:v,lazyLoad:Z??!1,manifest:T,pendingTransportEvent:k,popup:P??!0,transportReconnect:I,transports:u});let t=await mj({address:Q,chain:L,derivationPath:Y});return G({...t,chain:L,disconnect:Hj,walletType:J}),!0},directSigningSupport:{[j.Chain.Arbitrum]:!0,[j.Chain.Aurora]:!0,[j.Chain.Avalanche]:!0,[j.Chain.Base]:!0,[j.Chain.Berachain]:!0,[j.Chain.BinanceSmartChain]:!0,[j.Chain.Bitcoin]:!0,[j.Chain.BitcoinCash]:!0,[j.Chain.Dash]:!0,[j.Chain.Ethereum]:!0,[j.Chain.Gnosis]:!0,[j.Chain.Dogecoin]:!0,[j.Chain.Litecoin]:!0,[j.Chain.Monad]:!0,[j.Chain.Optimism]:!0,[j.Chain.Polygon]:!0,[j.Chain.XLayer]:!0,[j.Chain.Zcash]:!0},getExtendedPublicKey:Nj,name:"connectTrezor",supportedChains:[j.Chain.Arbitrum,j.Chain.Aurora,j.Chain.Avalanche,j.Chain.Base,j.Chain.Berachain,j.Chain.BinanceSmartChain,j.Chain.Bitcoin,j.Chain.BitcoinCash,j.Chain.Dash,j.Chain.Dogecoin,j.Chain.Ethereum,j.Chain.Gnosis,j.Chain.Litecoin,j.Chain.Monad,j.Chain.Optimism,j.Chain.Polygon,j.Chain.XLayer,j.Chain.Zcash],walletType:j.WalletOption.TREZOR}),gj=o.getWalletSupportedChains(Vj);
1
+ var Kj=Object.create;var{getPrototypeOf:wj,defineProperty:d,getOwnPropertyNames:Yj,getOwnPropertyDescriptor:zj}=Object,Zj=Object.prototype.hasOwnProperty;function $j(j){return this[j]}var Sj,Cj,ej=(j,J,U)=>{var Y=j!=null&&typeof j==="object";if(Y){var Z=J?Sj??=new WeakMap:Cj??=new WeakMap,X=Z.get(j);if(X)return X}U=j!=null?Kj(wj(j)):{};let Q=J||!j||!j.__esModule?d(U,"default",{value:j,enumerable:!0}):U;for(let $ of Yj(j))if(!Zj.call(Q,$))d(Q,$,{get:$j.bind(j,$),enumerable:!0});if(Y)Z.set(j,Q);return Q},bj=(j)=>{var J=(Xj??=new WeakMap).get(j),U;if(J)return J;if(J=d({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function"){for(var Y of Yj(j))if(!Zj.call(J,Y))d(J,Y,{get:$j.bind(j,Y),enumerable:!(U=zj(j,Y))||U.enumerable})}return Xj.set(j,J),J},Xj;var fj=(j)=>j;function Ij(j,J){this[j]=fj.bind(null,J)}var Bj=(j,J)=>{for(var U in J)d(j,U,{get:J[U],enumerable:!0,configurable:!0,set:Ij.bind(J,U)})};var vj=(j,J)=>()=>(j&&(J=j(j=0)),J);var Vj={};Bj(Vj,{getEVMSigner:()=>Tj});async function Tj({chain:j,derivationPath:J,provider:U}){let{AbstractSigner:Y}=await import("ethers");class Z extends Y{address;chain;derivationPath;provider;constructor({chain:X,derivationPath:Q,provider:$}){super($);this.address="",this.chain=X,this.derivationPath=Q,this.provider=$}getAddress=async()=>{if(!this.address){let Q=await(await import("@trezor/connect-web")).default.ethereumGetAddress({path:f.derivationPathToString(this.derivationPath),showOnTrezor:!0});if(!Q.success)throw new f.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{...Q,chain:this.chain,derivationPath:this.derivationPath}});this.address=Q.payload.address}return this.address};signMessage=async(X)=>{let $=await(await import("@trezor/connect-web")).default.ethereumSignMessage({message:X,path:f.derivationPathToString(this.derivationPath)});if(!$.success)throw new f.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...$,chain:this.chain,derivationPath:this.derivationPath,message:X}});return $.payload.signature};signTypedData=async(X,Q,$,V)=>{let W=(await import("@trezor/connect-web")).default,{buildEIP712DomainType:_}=await import("@swapkit/toolboxes/evm"),{TypedDataEncoder:N}=await import("ethers"),{EIP712Domain:H,...C}=Q,B=V??N.from(C).primaryType,D=_(X),F={domain:X,message:$,primaryType:B,types:{EIP712Domain:D,...C}},v=await W.ethereumSignTypedData({data:F,metamask_v4_compat:!0,path:f.derivationPathToString(this.derivationPath)});if(!v.success)throw new f.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,error:v.payload.error}});return v.payload.signature.startsWith("0x")?v.payload.signature:`0x${v.payload.signature}`};signTransaction=async({to:X,gasLimit:Q,value:$,data:V,nonce:W,maxFeePerGas:_,maxPriorityFeePerGas:N,gasPrice:H})=>{if(!X)throw new f.SwapKitError({errorKey:"wallet_missing_params",info:{to:X}});if(!Q)throw new f.SwapKitError({errorKey:"wallet_missing_params",info:{gasLimit:Q}});let C=_&&N;if(C&&!_)throw new f.SwapKitError({errorKey:"wallet_missing_params",info:{maxFeePerGas:_}});if(C&&!N)throw new f.SwapKitError({errorKey:"wallet_missing_params",info:{maxPriorityFeePerGas:N}});if(!(C||H))throw new f.SwapKitError({errorKey:"wallet_missing_params",info:{gasPrice:H}});let B=(await import("@trezor/connect-web")).default,{toHexString:D}=await import("@swapkit/toolboxes/evm"),F=C?{maxFeePerGas:D(BigInt(_?.toString()||0)),maxPriorityFeePerGas:D(BigInt(N?.toString()||0))}:H&&{gasPrice:D(BigInt(H?.toString()||0))}||{gasPrice:"0x0"},v=D(BigInt(W||await this.provider.getTransactionCount(await this.getAddress(),"pending"))),P={chainId:Number.parseInt(f.ChainToChainId[this.chain],10),data:V?.toString()||"0x",gasLimit:D(BigInt(Q?.toString()||0)),nonce:v,to:X.toString(),value:D(BigInt($?.toString()||0)),...F},{success:m,payload:T}=await B.ethereumSignTransaction({path:f.derivationPathToString(this.derivationPath),transaction:P});if(!m)throw new f.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...T,chain:this.chain,derivationPath:this.derivationPath}});let h=T.serializedTx?T.serializedTx.startsWith("0x")?T.serializedTx:`0x${T.serializedTx}`:void 0;if(!h)throw new f.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,derivationPath:this.derivationPath}});return h};connect=(X)=>{if(!X)throw new f.SwapKitError({errorKey:"wallet_provider_not_found",info:{chain:this.chain,derivationPath:this.derivationPath,wallet:f.WalletOption.TREZOR}});return new Z({chain:this.chain,derivationPath:this.derivationPath,provider:X})}}return new Z({chain:j,derivationPath:J,provider:U})}var f;var Nj=vj(()=>{f=require("@swapkit/helpers")});var tj={};Bj(tj,{trezorWallet:()=>Aj,normalizeTrezorSignature:()=>Gj,normalizeTrezorExtendedPublicKey:()=>t,getTrezorExtendedPublicKey:()=>kj,TREZOR_SUPPORTED_CHAINS:()=>aj});module.exports=bj(tj);var n=require("@scure/bip32"),q=require("@swapkit/helpers"),S=require("@swapkit/toolboxes/utxo"),y=require("@swapkit/utxo-signer"),a=require("@swapkit/wallet-core"),gj=new Set(["auto","iframe","popup","suite-desktop","suite-web"]),Pj=new Set(["BridgeTransport","WebUsbTransport","NodeUsbTransport"]),Mj="auto",o={appName:"SwapKit",appUrl:"https://swapkit.dev",email:"support@swapkit.dev"},Dj=["WebUsbTransport"],s={keepSession:!0},i=new Map,l,mj=[y.NETWORKS.bitcoin.bip32,y.NETWORKS.bitcoinCash.bip32,y.NETWORKS.dash.bip32,y.NETWORKS.dogecoin.bip32,y.NETWORKS.litecoin.bip32];async function yj(){i.clear();let j=(async()=>{try{await(await import("@trezor/connect-web")).default.dispose()}catch{}})();if(l=j,await j,l===j)l=void 0}function Lj(j){return typeof j==="string"&&gj.has(j)?j:void 0}function Rj(j){if(!Array.isArray(j))return;let J=j.filter((U)=>typeof U==="string"&&Pj.has(U));return J.length>0?J:void 0}function c(j,J){return typeof j==="string"&&j.trim()?j:J}function _j(){return typeof globalThis.location<"u"&&globalThis.location.origin?globalThis.location.origin:o.appUrl}async function hj(){let j=(await import("@trezor/connect-web")).default,J=q.SKConfig.get("integrations").trezor,{connectSrc:U,coreMode:Y,debug:Z,interactionTimeout:X,lazyLoad:Q,pendingTransportEvent:$,popup:V,transportReconnect:W,transports:_,...N}=J??{},H={...N,appName:c(J?.appName,o.appName),appUrl:c(J?.appUrl,_j()),email:c(J?.email,o.email)},C=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),B=Lj(Y)??Mj,D=Rj(_)??Dj;if(l)await l;if(C)await j.dispose();return await j.init({connectSrc:U,coreMode:B,debug:Z,interactionTimeout:X,lazyLoad:Q??!1,manifest:H,pendingTransportEvent:$,popup:V??!0,transportReconnect:W,transports:D}),{coreMode:B,isLocalhost:C,popup:V??!0,TrezorConnect:j}}function t(j,J){let U=S.getNetworkForChain(J).bip32,Y=[U,...mj.filter((X)=>X.public!==U.public||X.private!==U.private)],Z;for(let X of Y)try{let Q=n.HDKey.fromExtendedKey(j,X);if(!(Q.publicKey&&Q.chainCode))throw Error("Extended key is missing public key data");return new n.HDKey({chainCode:Q.chainCode,depth:Q.depth,index:Q.index,parentFingerprint:Q.parentFingerprint,publicKey:Q.publicKey,versions:U}).publicExtendedKey}catch(Q){Z=Q}throw Z instanceof Error?Z:Error("Unable to parse Trezor extended public key")}function Hj(j,J){if(!j)return;try{return t(j,J)}catch{return j}}function Qj(j){if(j.length<2||j[0]!==106)return null;let J=j[1];if(J===void 0||j.length<2+J)return null;return Buffer.from(j.slice(2,2+J)).toString("hex")}function xj(j){switch(j[0]){case 84:return{input:"SPENDWITNESS",output:"PAYTOWITNESS"};case 49:return{input:"SPENDP2SHWITNESS",output:"PAYTOP2SHWITNESS"};case 44:return{input:"SPENDADDRESS",output:"PAYTOADDRESS"};default:return null}}function u(j){return j.map((J,U)=>U<3?(J|2147483648)>>>0:J)}function lj(j){return Array.isArray(j)&&j[0]instanceof Uint8Array&&typeof j[1]==="object"&&j[1]!==null&&typeof j[1].fingerprint==="number"&&Array.isArray(j[1].path)}function uj(j){if(!Array.isArray(j.bip32Derivation))return;let[J]=j.bip32Derivation;return lj(J)?J:void 0}function Wj(j){if(j.witnessUtxo?.amount!==void 0)return j.witnessUtxo.amount.toString();let J=j.index!==void 0?j.nonWitnessUtxo?.outputs?.[j.index]:void 0;if(J?.amount!==void 0)return J.amount.toString();return}function Gj(j,J){let U=Buffer.from(j,"hex"),Y=U[1]!==void 0?U[1]+2:void 0;if(Y!==void 0&&U.length===Y)return new Uint8Array([...U,J===q.Chain.BitcoinCash?y.BCHSigHash.ALL:1]);return new Uint8Array(U)}function cj(j,J,U){let Y=[];for(let Z=0;Z<j.inputsLength;Z++){let X=j.getInput(Z);Y.push({address_n:J,amount:X.value.toString(),prev_hash:U.encode(X.txid),prev_index:X.index,script_type:"SPENDADDRESS"})}return Y}async function pj(j,J,U,Y){let Z=[];for(let X=0;X<j.outputsLength;X++){let Q=j.getOutput(X),$=Q.scriptPubkey;if(Q.value===0n&&$?.length>0&&$[0]===106){let _=Qj($);if(_){Z.push({amount:"0",op_return_data:_,script_type:"PAYTOOPRETURN"});continue}throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Y,error:"Malformed OP_RETURN output cannot be signed"}})}let V=await dj($);if(!V&&Q.value>0n)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Y,error:"Unable to decode output address from scriptPubkey"}});if(V===U)Z.push({address_n:J,amount:Q.value.toString(),script_type:"PAYTOADDRESS"});else Z.push({address:V,amount:Q.value.toString(),script_type:"PAYTOADDRESS"})}return Z}async function dj(j){try{let{OutScript:J,Address:U}=await import("@swapkit/utxo-signer"),Y=J.decode(j);if(Y.type==="pkh"||Y.type==="pk")return U(y.NETWORKS.zcash).encode(Y)}catch{}return}async function sj(j,J){let{ZcashTransaction:U,Script:Y}=await import("@swapkit/utxo-signer"),Z=U.fromHex(j,{allowUnknownOutputs:!0}),X=J.clone();for(let Q=0;Q<Z.inputsLength;Q++){let V=Z.getInput(Q).script;if(V&&V.length>0){let W=Y.decode(V);if(W.length>=2)X.addSignature(Q,W[1],W[0])}}return X}function oj(j,J,U,Y){let Z=[];for(let X=0;X<j.inputsLength;X++){let Q=j.getInput(X),$=J[X];Z.push({address_n:U,amount:$?.value?.toString()||Q.value?.toString()||"0",prev_hash:Q.txid?Y.encode(Q.txid):"",prev_index:Q.index??0,script_type:"SPENDADDRESS"})}return Z}function ij(j,J,U,Y){let Z=[];for(let X=0;X<j.outputsLength;X++){let Q=j.getOutput(X),$=j.getOutputAddress(X,y.NETWORKS.zcash),V=Q.script;if(Q.amount===0n&&V?.length>0&&V[0]===106){let N=Qj(V);if(N){Z.push({amount:"0",op_return_data:N,script_type:"PAYTOOPRETURN"});continue}continue}if(!$&&(Q.amount??0n)>0n)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Y,error:"Unable to decode output address"}});let _=$===U||!$?{address_n:J}:{address:$};Z.push({..._,amount:Q.amount?.toString()||"0",script_type:"PAYTOADDRESS"})}return Z}function r(j,J,U,Y,Z,X,Q,$,V){let W=[];for(let _=0;_<j.outputsLength;_++){let N=j.getOutput(_),H=j.getOutputAddress(_,J);if(!H){let F=N.script?Qj(N.script):null;if(F!==null||Z){W.push({amount:"0",op_return_data:F??Buffer.from(Z).toString("hex"),script_type:"PAYTOOPRETURN"});continue}throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:X,error:"Unable to decode output address from scriptPubkey"}})}if(N.amount===void 0)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:X,error:"Output amount is missing"}});let C=X===q.Chain.BitcoinCash,B=C?$(H):H,D=C?V(B)===V(Y):B===Y;W.push(D?{address_n:U,amount:N.amount.toString(),script_type:Q.output}:{address:B,amount:N.amount.toString(),script_type:"PAYTOADDRESS"})}return W}function Jj(j){return j===q.Chain.Bitcoin||j===q.Chain.Litecoin}function rj(j){return j===q.Chain.BitcoinCash||j===q.Chain.Dash||j===q.Chain.Dogecoin}function Oj(j,J){if(j!==q.Chain.Dash)return;let U=new Map;for(let Y of J){if(!Y.txHex)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:`Missing previous transaction hex for ${Y.hash}:${Y.index}`}});U.set(Y.hash,{details:{},hex:Y.txHex,txid:Y.hash})}return[...U.values()]}async function nj({address:j,chain:J,derivationPath:U}){switch(J){case q.Chain.Arbitrum:case q.Chain.Aurora:case q.Chain.Avalanche:case q.Chain.Base:case q.Chain.Berachain:case q.Chain.BinanceSmartChain:case q.Chain.Ethereum:case q.Chain.Gnosis:case q.Chain.Monad:case q.Chain.Optimism:case q.Chain.Polygon:case q.Chain.XLayer:{let{getProvider:Y,getEvmToolboxAsync:Z}=await import("@swapkit/toolboxes/evm"),{getEVMSigner:X}=await Promise.resolve().then(() => (Nj(),Vj)),Q=await Y(J),$=await X({chain:J,derivationPath:U,provider:Q}),V=await $.getAddress();return{...await Z(J,{provider:Q,signer:$}),address:V}}case q.Chain.Zcash:{let{getUtxoToolbox:Y}=await import("@swapkit/toolboxes/utxo"),Z=q.derivationPathToString(U),Q=j??await(async()=>{let B=(await import("@trezor/connect-web")).default,{success:D,payload:F}=await B.getAddress({coin:"zcash",path:Z});if(!D)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:J,error:F.error||"Unknown error"}});return F.address})(),$=async(B)=>{let D=(await import("@trezor/connect-web")).default,{hex:F}=await import("@scure/base"),v=u(U),P=B.getGlobal(),m=cj(B,v,F),T=await pj(B,v,Q,J),h=await D.signTransaction({branchId:P.consensusBranchId,coin:"zcash",expiry:P.expiryHeight,inputs:m,locktime:P.lockTime,outputs:T,overwintered:!0,version:P.txVersion,versionGroupId:P.versionGroupId});if(!h.success)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,error:h.payload.error}});return{serializedTx:h.payload.serializedTx,signedPczt:await sj(h.payload.serializedTx,B)}},V=async(B)=>{let{ZcashTransaction:D}=await import("@swapkit/utxo-signer");return D.fromHex(B,{allowUnknownOutputs:!0})},W=async(B)=>{let D=(await import("@trezor/connect-web")).default,{hex:F}=await import("@scure/base"),v=u(U),P=oj(B,[],v,F),m=ij(B,v,Q,J),T=await D.signTransaction({branchId:B.consensusBranchId,coin:"zcash",expiry:0,inputs:P,locktime:0,outputs:m,overwintered:!0,version:4,versionGroupId:y.ZcashVersionGroupId.SAPLING});if(T.success)return{serializedTx:T.payload.serializedTx,signedTx:await V(T.payload.serializedTx)};throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,error:T.payload.error}})},_={getAddress:async()=>Q,signPCZT:async(B)=>{return(await $(B)).signedPczt},signTransaction:async(B)=>{if("toPCZT"in B){let{serializedTx:D}=await $(B.toPCZT());return V(D)}if("getGlobal"in B){let{serializedTx:D}=await $(B);return V(D)}return(await W(B)).signedTx}},N=Y(q.Chain.Zcash,{signer:_}),H=async(B)=>{if("toPCZT"in B){let{serializedTx:F}=await $(B.toPCZT());return N.broadcastTx(F)}if("getGlobal"in B){let{serializedTx:F}=await $(B);return N.broadcastTx(F)}let{serializedTx:D}=await W(B);return N.broadcastTx(D)},C=async({recipient:B,feeOptionKey:D,feeRate:F,...v})=>{if(!(Q&&B))throw new q.SwapKitError({errorKey:"wallet_missing_params",info:{address:Q,recipient:B,wallet:q.WalletOption.TREZOR}});let P=F||(await N.getFeeRates())[D||q.FeeOption.Fast],{tx:m}=await N.createTransaction({...v,feeRate:P,fetchTxHex:!1,recipient:B,sender:Q}),{serializedTx:T}=await W(m);return N.broadcastTx(T)};return{...N,address:Q,signAndBroadcastTransaction:H,signPCZT:_.signPCZT,transfer:C}}case q.Chain.Bitcoin:case q.Chain.BitcoinCash:case q.Chain.Dash:case q.Chain.Dogecoin:case q.Chain.Litecoin:{let jj=function(O={}){return p(O)},{toCashAddress:Y,getUtxoToolbox:Z,stripPrefix:X}=await import("@swapkit/toolboxes/utxo"),Q=J,$=xj(U);if(!$)throw new q.SwapKitError({errorKey:"wallet_trezor_derivation_path_not_supported",info:{derivationPath:U}});let V=$,W=J.toLowerCase(),N=j??await(async(O=U)=>{let E=(await import("@trezor/connect-web")).default,K=q.derivationPathToString(O),{success:R,payload:k}=await E.getAddress({coin:W,...s,path:K,showOnTrezor:!1});if(!R)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:J,error:k.error||"Unknown error"}});if(J===q.Chain.BitcoinCash)return X(k.address);return k.address})(),H=Z(J),C=async(O,E,K="")=>{let R=(await import("@trezor/connect-web")).default,k=u(U),G=S.getNetworkForChain(J),I=r(O,G,k,N,K,J,V,Y,X),b=E.map(({hash:z,index:M,value:A})=>({address_n:k,amount:A,prev_hash:z,prev_index:M,script_type:V.input})),L=await R.signTransaction({coin:W,inputs:b,outputs:I,refTxs:Oj(J,E)});if(L.success)return L.payload.serializedTx;let w=L.payload;throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,code:w?.code??"unknown",error:w?.error??"unknown",payload:w}})},B=async(O)=>{let E=(await import("@trezor/connect-web")).default,{hex:K}=await import("@scure/base"),R=u(U),k=S.getNetworkForChain(J),G;async function I(){if(!G){let M=await p(),g=n.HDKey.fromExtendedKey(M.xpub,k.bip32).derive(`m/${Number(U[3]??0)}/${Number(U[4]??0)}`);if(!g.publicKey)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:J,error:"Unable to derive Trezor leaf public key from account xpub"}});G=g.publicKey}return[G,{fingerprint:0,path:R}]}let b=[],L=[];for(let M=0;M<O.inputsLength;M++){let A=O.getInput(M),g=uj(A),x=g??await I(),qj=Wj(A);if(!A.txid||A.index===void 0||!qj)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,error:`Input ${M} is missing prevout data required by Trezor`}});if(b[M]=x[0],!g)O.updateInput(M,{bip32Derivation:[x]});L.push({address_n:x[1].path,amount:qj,prev_hash:K.encode(A.txid),prev_index:A.index,script_type:V.input,...A.sequence!==void 0?{sequence:A.sequence}:{}})}let w=r(O,k,R,N,"",J,V,Y,X),z=await E.signTransaction({coin:W,...s,inputs:L,locktime:O.lockTime,outputs:w,version:O.version});if(!z.success){let M=z.payload;throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,code:M?.code??"unknown",error:M?.error??"unknown",payload:M}})}return z.payload.signatures.forEach((M,A)=>{let g=b[A];if(!(M&&g))return;O.updateInput(A,{partialSig:[[g,Gj(M,J)]]})}),O},D=async(O)=>{let E=(await import("@trezor/connect-web")).default,{hex:K}=await import("@scure/base"),R=u(U),k=S.getNetworkForChain(J),G=[];for(let w=0;w<O.inputsLength;w++){let z=O.getInput(w),M=Wj(z);if(!z.txid||z.index===void 0||!M)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,error:`Input ${w} is missing prevout data required by Trezor`}});G.push({address_n:R,amount:M,prev_hash:K.encode(z.txid),prev_index:z.index,script_type:V.input,...z.sequence!==void 0?{sequence:z.sequence}:{}})}let I=r(O,k,R,N,"",J,V,Y,X),b=await E.signTransaction({coin:W,inputs:G,locktime:O.lockTime,outputs:I,version:O.version});if(b.success)return b.payload.serializedTx;let L=b.payload;throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,code:L?.code??"unknown",error:L?.error??"unknown",payload:L}})},F=async(O,E,K="")=>{let R=(await import("@trezor/connect-web")).default,k=S.getNetworkForChain(J),G=u(U.slice(0,3)),I=r(O,k,G,N,K,J,V,Y,X),b=E.map(({hash:w,index:z,value:M,derivationIndex:A,isChange:g})=>{let x=g?1:0;return{address_n:[...G,x,A],amount:M,prev_hash:w,prev_index:z,script_type:V.input}}),L=await R.signTransaction({coin:W,inputs:b,outputs:I,refTxs:Oj(J,E)});if(L.success)return L.payload.serializedTx;throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:J,error:L.payload.error}})},v=async({utxos:O,recipient:E,assetValue:K,memo:R,feeRate:k,feeOptionKey:G})=>{let I=Z(J),b=k||(await I.getFeeRates())[G||q.FeeOption.Fast],{tx:L,inputs:w}=await I.createTransaction({assetValue:K,feeRate:b,fetchTxHex:J===q.Chain.Dash,memo:R,recipient:E,sender:N}),z=w.map((A)=>{let g=O.find((x)=>x.hash===A.hash&&x.index===A.index);return{...A,derivationIndex:g?.derivationIndex??0,isChange:g?.isChange??!1,txHex:g?.txHex}}),M=await F(L,z,R);return I.broadcastTx(M)},P=async({recipient:O,feeOptionKey:E,feeRate:K,memo:R,...k})=>{if(!(N&&O))throw new q.SwapKitError({errorKey:"wallet_missing_params",info:{address:N,memo:R,recipient:O,wallet:q.WalletOption.TREZOR}});let G=Z(J),I=K||(await G.getFeeRates())[E||q.FeeOption.Fast],b=G.createTransaction,{tx:L,inputs:w}=await b({...k,feeRate:I,fetchTxHex:J===q.Chain.Dash,memo:R,recipient:O,sender:N}),z=await C(L,w,R);return await G.broadcastTx(z)},m=Jj(J)?await Z(Q,{signer:{getAddress:async()=>N,signTransaction:B}}):H,T=rj(J)?async(O)=>H.broadcastTx(await D(O)):m.signAndBroadcastTransaction,h=Jj(J)?m.signTransaction:C,e=Jj(J)?m.transfer:P;async function p({accountIndex:O}={}){let E=(await import("@trezor/connect-web")).default,K=S.getUTXOAccountPath({accountIndex:O,chain:Q,derivationPath:U}),R=q.derivationPathToString(K),k=`${J}:${R}`,G=i.get(k);if(G)return G;let I=await E.getPublicKey({coin:W,path:R}),{success:b,payload:L}=I;if(!b)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:J,error:L.error||"Unknown error"}});let w=t(L.xpub,Q),z=Hj(L.xpubSegwit,Q),M={accountIndex:S.getUTXOAccountIndexFromPath(K),chainCode:L.chainCode,depth:L.depth,fingerprint:L.fingerprint,path:L.serializedPath,publicKey:L.publicKey,xpub:w,xpubSegwit:z};return i.set(k,M),M}async function Uj({accountIndex:O,index:E,change:K=!1}){S.assertDerivationIndex("index",E);let R=(await import("@trezor/connect-web")).default,k=S.getUTXOAccountPath({accountIndex:O,chain:Q,derivationPath:U}),G=`${q.derivationPathToString(k)}/${Number(K)}/${E}`,{success:I,payload:b}=await R.getAddress({coin:W,...s,path:G,showOnTrezor:!1});if(!I)return;let L=b.address;if(J===q.Chain.BitcoinCash)L=(await Z(J)).stripPrefix(b.address);let w=await R.getPublicKey({coin:W,...s,path:G,scriptType:V.input,showOnTrezor:!1}),z=w.success?w.payload.publicKey:"";return{accountIndex:S.getUTXOAccountIndexFromPath(k),address:L,change:K,index:E,path:G,pubkey:z}}async function Fj({accountIndex:O,count:E,startIndex:K=0,change:R=!1}){S.assertDerivationIndex("count",E),S.assertDerivationIndex("startIndex",K);let k=(await import("@trezor/connect-web")).default,G=S.getUTXOAccountPath({accountIndex:O,chain:Q,derivationPath:U}),I=q.derivationPathToString(G),b=Array.from({length:E},(M,A)=>({coin:W,path:`${I}/${Number(R)}/${K+A}`,showOnTrezor:!1})),{success:L,payload:w}=await k.getAddress({...s,bundle:b});if(!L||!Array.isArray(w))return[];return await Promise.all(w.map(async(M,A)=>{let g=M.address;if(J===q.Chain.BitcoinCash)g=(await Z(J)).stripPrefix(M.address);return{accountIndex:S.getUTXOAccountIndexFromPath(G),address:g,change:R,index:K+A,path:`${I}/${Number(R)}/${K+A}`,pubkey:""}}))}let Ej=S.createHDWalletHelpers({chain:J,deriveAddress:Uj,getBalance:m.getBalance,getUtxos:(O)=>S.getUtxoApi(J).getUtxos({address:O,fetchTxHex:!0})});return{...m,...Ej,address:N,deriveAddressAtIndex:Uj,deriveAddresses:Fj,getExtendedPublicKey:jj,getExtendedPublicKeyInfo:p,signAndBroadcastTransaction:T,signTransaction:h,signTransactionWithMultipleInputs:F,transfer:e,transferFromMultipleAddresses:v}}default:throw new q.SwapKitError({errorKey:"wallet_chain_not_supported",info:{chain:J,wallet:q.WalletOption.TREZOR}})}}async function kj(j,J,{accountIndex:U}={}){if(![q.Chain.BitcoinCash,q.Chain.Bitcoin,q.Chain.Dash,q.Chain.Dogecoin,q.Chain.Litecoin,q.Chain.Zcash].includes(j))throw new q.SwapKitError({errorKey:"wallet_chain_not_supported",info:{chain:j,wallet:q.WalletOption.TREZOR}});let{TrezorConnect:Y}=await hj(),Z=j,X=J??q.NetworkDerivationPath[j],Q=j===q.Chain.Zcash?"zcash":j.toLowerCase(),$=S.getUTXOAccountPath({accountIndex:U,chain:Z,derivationPath:X}),V=q.derivationPathToString($),W=`${j}:${V}`,_=i.get(W);if(_)return _;let{success:N,payload:H}=await Y.getPublicKey({coin:Q,path:V,showOnTrezor:!0});if(!N)throw new q.SwapKitError({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:j,error:H.error||"Unknown error"}});let C={accountIndex:S.getUTXOAccountIndexFromPath($),chainCode:H.chainCode,depth:H.depth,fingerprint:H.fingerprint,path:H.serializedPath,publicKey:H.publicKey,xpub:t(H.xpub,Z),xpubSegwit:Hj(H.xpubSegwit,Z)};return i.set(W,C),C}var Aj=a.createWallet({connect:({addChain:j,supportedChains:J,walletType:U})=>async function(Z,X,{address:Q}={}){let[$]=q.filterSupportedChains({chains:Z,supportedChains:J,walletType:U});if(!$)throw new q.SwapKitError({errorKey:"wallet_chain_not_supported",info:{chain:$,wallet:q.WalletOption.TREZOR}});let V=(await import("@trezor/connect-web")).default,W=q.SKConfig.get("integrations").trezor,{connectSrc:_,coreMode:N,debug:H,interactionTimeout:C,lazyLoad:B,pendingTransportEvent:D,popup:F,transportReconnect:v,transports:P,...m}=W??{},T={...m,appName:c(W?.appName,o.appName),appUrl:c(W?.appUrl,_j()),email:c(W?.email,o.email)},h=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),e=Lj(N)??Mj,p=Rj(P)??Dj;if(l)await l;if(h)await V.dispose();await V.init({connectSrc:_,coreMode:e,debug:H,interactionTimeout:C,lazyLoad:B??!1,manifest:T,pendingTransportEvent:D,popup:F??!0,transportReconnect:v,transports:p});let jj=await nj({address:Q,chain:$,derivationPath:X});return j({...jj,chain:$,disconnect:yj,walletType:U}),!0},directSigningSupport:{[q.Chain.Arbitrum]:!0,[q.Chain.Aurora]:!0,[q.Chain.Avalanche]:!0,[q.Chain.Base]:!0,[q.Chain.Berachain]:!0,[q.Chain.BinanceSmartChain]:!0,[q.Chain.Bitcoin]:!0,[q.Chain.BitcoinCash]:!0,[q.Chain.Dash]:!0,[q.Chain.Ethereum]:!0,[q.Chain.Gnosis]:!0,[q.Chain.Dogecoin]:!0,[q.Chain.Litecoin]:!0,[q.Chain.Monad]:!0,[q.Chain.Optimism]:!0,[q.Chain.Polygon]:!0,[q.Chain.XLayer]:!0,[q.Chain.Zcash]:!0},getExtendedPublicKey:kj,name:"connectTrezor",supportedChains:[q.Chain.Arbitrum,q.Chain.Aurora,q.Chain.Avalanche,q.Chain.Base,q.Chain.Berachain,q.Chain.BinanceSmartChain,q.Chain.Bitcoin,q.Chain.BitcoinCash,q.Chain.Dash,q.Chain.Dogecoin,q.Chain.Ethereum,q.Chain.Gnosis,q.Chain.Litecoin,q.Chain.Monad,q.Chain.Optimism,q.Chain.Polygon,q.Chain.XLayer,q.Chain.Zcash],walletType:q.WalletOption.TREZOR}),aj=a.getWalletSupportedChains(Aj);
2
2
 
3
- //# debugId=BFFE42105FB01EE064756E2164756E21
3
+ //# debugId=E3E8F2C0CA8EAA1564756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/trezor/index.ts"],
3
+ "sources": ["../src/trezor/evmSigner.ts", "../src/trezor/index.ts"],
4
4
  "sourcesContent": [
5
+ "import {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n derivationPathToString,\n SwapKitError,\n WalletOption,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest, TypedDataDomain, TypedDataField } from \"ethers\";\n\ntype TrezorEVMSignerParams = {\n chain: Chain;\n derivationPath: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n};\n\nexport async function getEVMSigner({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n const { AbstractSigner } = await import(\"ethers\");\n\n class TrezorSigner extends AbstractSigner {\n address: string;\n chain: Chain;\n derivationPath: DerivationPathArray;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n super(provider);\n\n this.address = \"\";\n this.chain = chain;\n this.derivationPath = derivationPath;\n this.provider = provider;\n }\n\n getAddress = async () => {\n if (!this.address) {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n\n const result = await TrezorConnect.ethereumGetAddress({\n path: derivationPathToString(this.derivationPath),\n showOnTrezor: true,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n this.address = result.payload.address;\n }\n\n return this.address;\n };\n\n signMessage = async (message: string) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n\n const result = await TrezorConnect.ethereumSignMessage({\n message,\n path: derivationPathToString(this.derivationPath),\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath, message },\n });\n }\n\n return result.payload.signature;\n };\n\n signTypedData = async (\n domain: TypedDataDomain,\n types: Record<string, TypedDataField[]>,\n value: Record<string, unknown>,\n explicitPrimaryType?: string,\n ) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { buildEIP712DomainType } = await import(\"@swapkit/toolboxes/evm\");\n const { TypedDataEncoder } = await import(\"ethers\");\n\n const { EIP712Domain: _, ...filteredTypes } = types;\n const primaryType = explicitPrimaryType ?? TypedDataEncoder.from(filteredTypes).primaryType;\n const domainTypes = buildEIP712DomainType(domain);\n\n const data = {\n domain: domain as Record<string, unknown>,\n message: value,\n primaryType,\n types: { EIP712Domain: domainTypes, ...filteredTypes },\n };\n\n const result = await TrezorConnect.ethereumSignTypedData({\n data: data as Parameters<typeof TrezorConnect.ethereumSignTypedData>[0][\"data\"],\n metamask_v4_compat: true,\n path: derivationPathToString(this.derivationPath),\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, error: result.payload.error },\n });\n }\n\n return result.payload.signature.startsWith(\"0x\") ? result.payload.signature : `0x${result.payload.signature}`;\n };\n\n signTransaction = async ({\n to,\n gasLimit,\n value,\n data,\n nonce,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: any: refactor\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { to } });\n if (!gasLimit) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasLimit } });\n\n const isEIP1559 = maxFeePerGas && maxPriorityFeePerGas;\n\n if (isEIP1559 && !maxFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxFeePerGas } });\n }\n if (isEIP1559 && !maxPriorityFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxPriorityFeePerGas } });\n }\n if (!(isEIP1559 || gasPrice)) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasPrice } });\n }\n\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n\n const additionalFields = isEIP1559\n ? {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || 0)),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || 0)),\n }\n : (gasPrice && { gasPrice: toHexString(BigInt(gasPrice?.toString() || 0)) }) || { gasPrice: \"0x0\" };\n\n const hexifiedNonce = toHexString(\n BigInt(nonce || (await this.provider.getTransactionCount(await this.getAddress(), \"pending\"))),\n );\n\n const formattedTx = {\n chainId: Number.parseInt(ChainToChainId[this.chain], 10),\n data: data?.toString() || \"0x\",\n gasLimit: toHexString(BigInt(gasLimit?.toString() || 0)),\n nonce: hexifiedNonce,\n to: to.toString(),\n value: toHexString(BigInt(value?.toString() || 0)),\n ...additionalFields,\n };\n\n const { success, payload } = await TrezorConnect.ethereumSignTransaction({\n path: derivationPathToString(this.derivationPath),\n transaction: formattedTx,\n });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...payload, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n const serializedTx = payload.serializedTx\n ? payload.serializedTx.startsWith(\"0x\")\n ? payload.serializedTx\n : `0x${payload.serializedTx}`\n : undefined;\n\n if (!serializedTx) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return serializedTx;\n };\n\n connect = (provider: Provider | null) => {\n if (!provider) {\n throw new SwapKitError({\n errorKey: \"wallet_provider_not_found\",\n info: { chain: this.chain, derivationPath: this.derivationPath, wallet: WalletOption.TREZOR },\n });\n }\n\n return new TrezorSigner({ chain: this.chain, derivationPath: this.derivationPath, provider });\n };\n }\n\n return new TrezorSigner({ chain, derivationPath, provider });\n}\n",
5
6
  "import { HDKey, type Versions } from \"@scure/bip32\";\nimport {\n Chain,\n type DerivationPathArray,\n derivationPathToString,\n FeeOption,\n filterSupportedChains,\n type GenericTransferParams,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n type UTXOChain,\n WalletOption,\n} from \"@swapkit/helpers\";\nimport {\n assertDerivationIndex,\n createHDWalletHelpers,\n getNetworkForChain,\n getUTXOAccountIndexFromPath,\n getUTXOAccountPath,\n getUtxoApi,\n type UTXOToolboxes,\n type UTXOType,\n} from \"@swapkit/toolboxes/utxo\";\nimport type { BTCNetwork, PCZT, Transaction, ZcashPSBT, ZcashTransaction } from \"@swapkit/utxo-signer\";\nimport { BCHSigHash, NETWORKS, ZcashVersionGroupId } from \"@swapkit/utxo-signer\";\nimport { createWallet, getWalletSupportedChains, type HardwareExtendedPublicKeyInfo } from \"@swapkit/wallet-core\";\n\ntype TrezorBip32Derivation = [Uint8Array, { fingerprint: number; path: number[] }];\ntype TrezorCoreMode = \"auto\" | \"iframe\" | \"popup\" | \"suite-desktop\" | \"suite-web\";\ntype TrezorTransport = \"BridgeTransport\" | \"WebUsbTransport\" | \"NodeUsbTransport\";\ntype ConnectTrezorOptions = { address?: string };\ntype TrezorAccountRefTransaction = { details: Record<string, never>; hex: string; txid: string };\ntype ZcashSignableTransaction = PCZT | ZcashPSBT | ZcashTransaction;\ntype TrezorExtendedPublicKeyInfo = {\n accountIndex: number;\n chainCode?: string;\n depth?: number;\n fingerprint?: number;\n path: string;\n publicKey?: string;\n xpub: string;\n xpubSegwit?: string;\n};\n\nconst TREZOR_CORE_MODES = new Set<TrezorCoreMode>([\"auto\", \"iframe\", \"popup\", \"suite-desktop\", \"suite-web\"]);\nconst TREZOR_TRANSPORTS = new Set<TrezorTransport>([\"BridgeTransport\", \"WebUsbTransport\", \"NodeUsbTransport\"]);\nconst DEFAULT_TREZOR_CORE_MODE: TrezorCoreMode = \"auto\";\nconst DEFAULT_TREZOR_MANIFEST = { appName: \"SwapKit\", appUrl: \"https://swapkit.dev\", email: \"support@swapkit.dev\" };\nconst DEFAULT_TREZOR_TRANSPORTS = [\"WebUsbTransport\" as const];\nconst TREZOR_KEEP_SESSION_PARAMS = { keepSession: true } as const;\nconst trezorXpubCache = new Map<string, TrezorExtendedPublicKeyInfo>();\nlet trezorSessionDispose: Promise<void> | undefined;\nconst EXTENDED_KEY_VERSION_CANDIDATES = [\n NETWORKS.bitcoin.bip32,\n NETWORKS.bitcoinCash.bip32,\n NETWORKS.dash.bip32,\n NETWORKS.dogecoin.bip32,\n NETWORKS.litecoin.bip32,\n];\n\nasync function disconnectTrezorSession() {\n trezorXpubCache.clear();\n\n const dispose = (async () => {\n try {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n await TrezorConnect.dispose();\n } catch {\n // Ignore stale or already-disposed sessions.\n }\n })();\n\n trezorSessionDispose = dispose;\n await dispose;\n\n if (trezorSessionDispose === dispose) {\n trezorSessionDispose = undefined;\n }\n}\n\nfunction normalizeTrezorCoreMode(coreMode: unknown): TrezorCoreMode | undefined {\n return typeof coreMode === \"string\" && TREZOR_CORE_MODES.has(coreMode as TrezorCoreMode)\n ? (coreMode as TrezorCoreMode)\n : undefined;\n}\n\nfunction normalizeTrezorTransports(transports: unknown): TrezorTransport[] | undefined {\n if (!Array.isArray(transports)) return undefined;\n\n const normalized = transports.filter(\n (transport): transport is TrezorTransport =>\n typeof transport === \"string\" && TREZOR_TRANSPORTS.has(transport as TrezorTransport),\n );\n\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction getTrezorManifestValue(value: unknown, fallback: string) {\n return typeof value === \"string\" && value.trim() ? value : fallback;\n}\n\nfunction getDefaultTrezorAppUrl() {\n return typeof globalThis.location !== \"undefined\" && globalThis.location.origin\n ? globalThis.location.origin\n : DEFAULT_TREZOR_MANIFEST.appUrl;\n}\n\nasync function initTrezorConnect() {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n\n const trezorConfig = SKConfig.get(\"integrations\").trezor as Record<string, unknown> | undefined;\n const {\n connectSrc,\n coreMode,\n debug,\n interactionTimeout,\n lazyLoad,\n pendingTransportEvent,\n popup,\n transportReconnect,\n transports,\n ...manifestConfig\n } = trezorConfig ?? {};\n const manifest = {\n ...manifestConfig,\n appName: getTrezorManifestValue(trezorConfig?.appName, DEFAULT_TREZOR_MANIFEST.appName),\n appUrl: getTrezorManifestValue(trezorConfig?.appUrl, getDefaultTrezorAppUrl()),\n email: getTrezorManifestValue(trezorConfig?.email, DEFAULT_TREZOR_MANIFEST.email),\n };\n const isLocalhost =\n typeof globalThis.location !== \"undefined\" && [\"localhost\", \"127.0.0.1\"].includes(globalThis.location.hostname);\n const resolvedCoreMode = normalizeTrezorCoreMode(coreMode) ?? DEFAULT_TREZOR_CORE_MODE;\n const resolvedTransports = normalizeTrezorTransports(transports) ?? DEFAULT_TREZOR_TRANSPORTS;\n\n if (trezorSessionDispose) {\n await trezorSessionDispose;\n }\n\n if (isLocalhost) {\n await TrezorConnect.dispose();\n }\n\n await TrezorConnect.init({\n connectSrc: connectSrc as string | undefined,\n coreMode: resolvedCoreMode,\n debug: debug as boolean | undefined,\n interactionTimeout: interactionTimeout as number | undefined,\n lazyLoad: (lazyLoad as boolean | undefined) ?? false,\n manifest,\n pendingTransportEvent: pendingTransportEvent as boolean | undefined,\n popup: (popup as boolean | undefined) ?? true,\n transportReconnect: transportReconnect as boolean | undefined,\n transports: resolvedTransports,\n });\n\n return { coreMode: resolvedCoreMode, isLocalhost, popup: (popup as boolean | undefined) ?? true, TrezorConnect };\n}\n\nexport function normalizeTrezorExtendedPublicKey(xpub: string, chain: UTXOChain) {\n const targetVersions = getNetworkForChain(chain).bip32;\n const candidates = [\n targetVersions,\n ...EXTENDED_KEY_VERSION_CANDIDATES.filter(\n (versions) => versions.public !== targetVersions.public || versions.private !== targetVersions.private,\n ),\n ];\n let lastError: unknown;\n\n for (const versions of candidates) {\n try {\n const key = HDKey.fromExtendedKey(xpub, versions as Versions);\n if (!(key.publicKey && key.chainCode)) throw new Error(\"Extended key is missing public key data\");\n\n return new HDKey({\n chainCode: key.chainCode,\n depth: key.depth,\n index: key.index,\n parentFingerprint: key.parentFingerprint,\n publicKey: key.publicKey,\n versions: targetVersions,\n }).publicExtendedKey;\n } catch (error) {\n lastError = error;\n }\n }\n\n throw lastError instanceof Error ? lastError : new Error(\"Unable to parse Trezor extended public key\");\n}\n\nfunction tryNormalizeTrezorExtendedPublicKey(xpub: string | undefined, chain: UTXOChain) {\n if (!xpub) return undefined;\n\n try {\n return normalizeTrezorExtendedPublicKey(xpub, chain);\n } catch {\n return xpub;\n }\n}\n\nfunction decodeOpReturnData(script: Uint8Array): string | null {\n if (script.length < 2 || script[0] !== 0x6a) return null;\n const dataLen = script[1];\n if (dataLen === undefined || script.length < 2 + dataLen) return null;\n return Buffer.from(script.slice(2, 2 + dataLen)).toString(\"hex\");\n}\n\nfunction getScriptType(derivationPath: DerivationPathArray) {\n switch (derivationPath[0]) {\n case 84:\n return { input: \"SPENDWITNESS\", output: \"PAYTOWITNESS\" } as const;\n case 49:\n return { input: \"SPENDP2SHWITNESS\", output: \"PAYTOP2SHWITNESS\" } as const;\n case 44:\n return { input: \"SPENDADDRESS\", output: \"PAYTOADDRESS\" } as const;\n default:\n return null;\n }\n}\n\nfunction hardenDerivationPath(derivationPath: DerivationPathArray): number[] {\n return derivationPath.map((pathElement, index) =>\n index < 3 ? ((pathElement as number) | 0x80000000) >>> 0 : (pathElement as number),\n );\n}\n\nfunction isTrezorBip32Derivation(value: unknown): value is TrezorBip32Derivation {\n return (\n Array.isArray(value) &&\n value[0] instanceof Uint8Array &&\n typeof value[1] === \"object\" &&\n value[1] !== null &&\n typeof (value[1] as { fingerprint?: unknown }).fingerprint === \"number\" &&\n Array.isArray((value[1] as { path?: unknown }).path)\n );\n}\n\nfunction getFirstBip32Derivation(input: { bip32Derivation?: unknown }): TrezorBip32Derivation | undefined {\n if (!Array.isArray(input.bip32Derivation)) return undefined;\n const [firstDerivation] = input.bip32Derivation;\n\n return isTrezorBip32Derivation(firstDerivation) ? firstDerivation : undefined;\n}\n\nfunction getPrevoutAmount(input: {\n index?: number;\n nonWitnessUtxo?: { outputs?: Array<{ amount?: bigint | number }> };\n witnessUtxo?: { amount?: bigint | number };\n}) {\n if (input.witnessUtxo?.amount !== undefined) return input.witnessUtxo.amount.toString();\n\n const prevout = input.index !== undefined ? input.nonWitnessUtxo?.outputs?.[input.index] : undefined;\n if (prevout?.amount !== undefined) return prevout.amount.toString();\n\n return undefined;\n}\n\nexport function normalizeTrezorSignature(signatureHex: string, chain: Chain) {\n const signature = Buffer.from(signatureHex, \"hex\");\n const derLength = signature[1] !== undefined ? signature[1] + 2 : undefined;\n\n if (derLength !== undefined && signature.length === derLength) {\n return new Uint8Array([...signature, chain === Chain.BitcoinCash ? BCHSigHash.ALL : 0x01]);\n }\n\n return new Uint8Array(signature);\n}\n\nfunction buildPCZTInputsForTrezor(\n pczt: PCZT,\n address_n: number[],\n hexEncode: { encode: (data: Uint8Array) => string },\n) {\n const inputs = [];\n for (let i = 0; i < pczt.inputsLength; i++) {\n const input = pczt.getInput(i);\n inputs.push({\n address_n,\n amount: input.value.toString(),\n prev_hash: hexEncode.encode(input.txid),\n prev_index: input.index,\n script_type: \"SPENDADDRESS\" as const,\n });\n }\n return inputs;\n}\n\nasync function buildPCZTOutputsForTrezor(pczt: PCZT, address_n: number[], myAddress: string, chain: Chain) {\n const outputs = [];\n for (let i = 0; i < pczt.outputsLength; i++) {\n const output = pczt.getOutput(i);\n const script = output.scriptPubkey;\n\n if (output.value === 0n && script?.length > 0 && script[0] === 0x6a) {\n const opReturnData = decodeOpReturnData(script);\n if (opReturnData) {\n outputs.push({ amount: \"0\", op_return_data: opReturnData, script_type: \"PAYTOOPRETURN\" as const });\n continue;\n }\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: \"Malformed OP_RETURN output cannot be signed\" },\n });\n }\n\n const outputAddress = await decodeOutputAddress(script);\n\n if (!outputAddress && output.value > 0n) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: \"Unable to decode output address from scriptPubkey\" },\n });\n }\n\n const isChangeAddress = outputAddress === myAddress;\n\n if (isChangeAddress) {\n outputs.push({ address_n, amount: output.value.toString(), script_type: \"PAYTOADDRESS\" as const });\n } else {\n outputs.push({ address: outputAddress, amount: output.value.toString(), script_type: \"PAYTOADDRESS\" as const });\n }\n }\n return outputs;\n}\n\nasync function decodeOutputAddress(script: Uint8Array): Promise<string | undefined> {\n try {\n const { OutScript, Address } = await import(\"@swapkit/utxo-signer\");\n const decoded = OutScript.decode(script);\n if (decoded.type === \"pkh\" || decoded.type === \"pk\") {\n return Address(NETWORKS.zcash).encode(decoded);\n }\n } catch {\n // ignore decode errors\n }\n return undefined;\n}\n\nasync function extractSignaturesFromSignedTx(signedTxHex: string, pczt: PCZT): Promise<PCZT> {\n const { ZcashTransaction: ZcashTx, Script } = await import(\"@swapkit/utxo-signer\");\n const signedTx = ZcashTx.fromHex(signedTxHex, { allowUnknownOutputs: true });\n const signedPczt = pczt.clone();\n\n for (let i = 0; i < signedTx.inputsLength; i++) {\n const signedInput = signedTx.getInput(i);\n const script = signedInput.script;\n if (script && script.length > 0) {\n const scriptParts = Script.decode(script);\n if (scriptParts.length >= 2) {\n signedPczt.addSignature(i, scriptParts[1] as Uint8Array, scriptParts[0] as Uint8Array);\n }\n }\n }\n return signedPczt;\n}\n\nfunction buildZcashTxInputsForTrezor(\n tx: ZcashTransaction,\n utxoInputs: UTXOType[],\n address_n: number[],\n hexEncode: { encode: (data: Uint8Array) => string },\n) {\n const inputs = [];\n for (let i = 0; i < tx.inputsLength; i++) {\n const input = tx.getInput(i);\n const utxoInfo = utxoInputs[i];\n inputs.push({\n address_n,\n amount: utxoInfo?.value?.toString() || input.value?.toString() || \"0\",\n prev_hash: input.txid ? hexEncode.encode(input.txid) : \"\",\n prev_index: input.index ?? 0,\n script_type: \"SPENDADDRESS\" as const,\n });\n }\n return inputs;\n}\n\nfunction buildZcashTxOutputsForTrezor(tx: ZcashTransaction, address_n: number[], myAddress: string, chain: Chain) {\n const outputs = [];\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const outputAddress = tx.getOutputAddress(i, NETWORKS.zcash);\n const script = output.script;\n\n if (output.amount === 0n && script?.length > 0 && script[0] === 0x6a) {\n const opReturnData = decodeOpReturnData(script);\n if (opReturnData) {\n outputs.push({ amount: \"0\", op_return_data: opReturnData, script_type: \"PAYTOOPRETURN\" as const });\n continue;\n }\n continue;\n }\n\n if (!outputAddress && (output.amount ?? 0n) > 0n) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: \"Unable to decode output address\" },\n });\n }\n\n const isChangeAddress = outputAddress === myAddress;\n const outputParam = isChangeAddress || !outputAddress ? { address_n } : { address: outputAddress };\n outputs.push({ ...outputParam, amount: output.amount?.toString() || \"0\", script_type: \"PAYTOADDRESS\" as const });\n }\n return outputs;\n}\n\nfunction buildUtxoOutputsForTrezor(\n tx: Transaction,\n network: BTCNetwork,\n address_n: number[],\n myAddress: string,\n memo: string,\n chain: Chain,\n scriptType: { input: string; output: string },\n toCashAddress: (addr: string) => string,\n stripPrefix: (addr: string) => string,\n) {\n const outputs: any[] = [];\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const outputAddress = tx.getOutputAddress(i, network);\n\n if (!outputAddress) {\n const opReturnData = output.script ? decodeOpReturnData(output.script) : null;\n if (opReturnData !== null || memo) {\n outputs.push({\n amount: \"0\",\n op_return_data: opReturnData ?? Buffer.from(memo).toString(\"hex\"),\n script_type: \"PAYTOOPRETURN\",\n });\n continue;\n }\n\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: \"Unable to decode output address from scriptPubkey\" },\n });\n }\n\n if (output.amount === undefined) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: \"Output amount is missing\" },\n });\n }\n\n const isBch = chain === Chain.BitcoinCash;\n const cashAddrWithPrefix = isBch ? toCashAddress(outputAddress) : outputAddress;\n const isChangeAddress = isBch\n ? stripPrefix(cashAddrWithPrefix) === stripPrefix(myAddress)\n : cashAddrWithPrefix === myAddress;\n\n outputs.push(\n isChangeAddress\n ? { address_n, amount: output.amount.toString(), script_type: scriptType.output }\n : { address: cashAddrWithPrefix, amount: output.amount.toString(), script_type: \"PAYTOADDRESS\" },\n );\n }\n return outputs;\n}\n\nfunction shouldUseTrezorPsbtSigner(chain: Chain) {\n return chain === Chain.Bitcoin || chain === Chain.Litecoin;\n}\n\nfunction shouldUseTrezorSerializedSigner(chain: Chain) {\n return chain === Chain.BitcoinCash || chain === Chain.Dash || chain === Chain.Dogecoin;\n}\n\nfunction buildTrezorRefTxs(chain: Chain, inputs: UTXOType[]): TrezorAccountRefTransaction[] | undefined {\n if (chain !== Chain.Dash) return undefined;\n\n const refs = new Map<string, TrezorAccountRefTransaction>();\n\n for (const input of inputs) {\n if (!input.txHex) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: `Missing previous transaction hex for ${input.hash}:${input.index}` },\n });\n }\n\n refs.set(input.hash, { details: {}, hex: input.txHex, txid: input.hash });\n }\n\n return [...refs.values()];\n}\n\nasync function getTrezorWallet<T extends Chain>({\n address: providedAddress,\n chain,\n derivationPath,\n}: {\n address?: string;\n chain: T;\n derivationPath: DerivationPathArray;\n}) {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Aurora:\n case Chain.Avalanche:\n case Chain.Base:\n case Chain.Berachain:\n case Chain.BinanceSmartChain:\n case Chain.Ethereum:\n case Chain.Gnosis:\n case Chain.Monad:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.XLayer: {\n const { getProvider, getEvmToolboxAsync } = await import(\"@swapkit/toolboxes/evm\");\n const { getEVMSigner } = await import(\"./evmSigner\");\n\n const provider = await getProvider(chain);\n const signer = await getEVMSigner({ chain, derivationPath, provider });\n const address = await signer.getAddress();\n const toolbox = await getEvmToolboxAsync(chain, { provider, signer });\n\n return { ...toolbox, address };\n }\n\n case Chain.Zcash: {\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n\n const derivationPathStr = derivationPathToString(derivationPath);\n\n const getAddress = async () => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { success, payload } = await TrezorConnect.getAddress({ coin: \"zcash\", path: derivationPathStr });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { chain, error: (payload as { error: string; code?: string }).error || \"Unknown error\" },\n });\n }\n\n return payload.address;\n };\n\n const address = providedAddress ?? (await getAddress());\n\n const signPCZTWithSerializedTx = async (pczt: PCZT) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { hex: hexEncode } = await import(\"@scure/base\");\n const address_n = hardenDerivationPath(derivationPath);\n const global = pczt.getGlobal();\n\n const inputs = buildPCZTInputsForTrezor(pczt, address_n, hexEncode);\n const outputs = await buildPCZTOutputsForTrezor(pczt, address_n, address, chain);\n const result = await TrezorConnect.signTransaction({\n branchId: global.consensusBranchId,\n coin: \"zcash\",\n expiry: global.expiryHeight,\n inputs,\n locktime: global.lockTime,\n outputs: outputs as any,\n overwintered: true,\n version: global.txVersion,\n versionGroupId: global.versionGroupId,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: (result.payload as { error: string; code?: string }).error },\n });\n }\n\n return {\n serializedTx: result.payload.serializedTx,\n signedPczt: await extractSignaturesFromSignedTx(result.payload.serializedTx, pczt),\n };\n };\n\n const parseSignedZcashTransaction = async (signedTxHex: string) => {\n const { ZcashTransaction: ZcashTx } = await import(\"@swapkit/utxo-signer\");\n return ZcashTx.fromHex(signedTxHex, { allowUnknownOutputs: true });\n };\n\n const signZcashTransactionWithSerializedTx = async (tx: ZcashTransaction) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { hex: hexEncode } = await import(\"@scure/base\");\n const address_n = hardenDerivationPath(derivationPath);\n\n const inputs = buildZcashTxInputsForTrezor(tx, [], address_n, hexEncode);\n const outputs = buildZcashTxOutputsForTrezor(tx, address_n, address, chain);\n\n const result = await TrezorConnect.signTransaction({\n branchId: tx.consensusBranchId,\n coin: \"zcash\",\n expiry: 0,\n inputs,\n locktime: 0,\n outputs: outputs as any,\n overwintered: true,\n version: 4,\n versionGroupId: ZcashVersionGroupId.SAPLING,\n });\n\n if (result.success) {\n return {\n serializedTx: result.payload.serializedTx,\n signedTx: await parseSignedZcashTransaction(result.payload.serializedTx),\n };\n }\n\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: (result.payload as { error: string; code?: string }).error },\n });\n };\n\n const signer = {\n getAddress: async () => address,\n\n signPCZT: async (pczt: PCZT): Promise<PCZT> => {\n return (await signPCZTWithSerializedTx(pczt)).signedPczt;\n },\n\n signTransaction: async (tx: ZcashSignableTransaction): Promise<ZcashTransaction> => {\n if (\"toPCZT\" in tx) {\n const { serializedTx } = await signPCZTWithSerializedTx(tx.toPCZT());\n return parseSignedZcashTransaction(serializedTx);\n }\n\n if (\"getGlobal\" in tx) {\n const { serializedTx } = await signPCZTWithSerializedTx(tx);\n return parseSignedZcashTransaction(serializedTx);\n }\n\n return (await signZcashTransactionWithSerializedTx(tx)).signedTx;\n },\n };\n\n const toolbox = getUtxoToolbox(Chain.Zcash, { signer });\n\n const signAndBroadcastTransaction = async (tx: ZcashSignableTransaction) => {\n if (\"toPCZT\" in tx) {\n const { serializedTx } = await signPCZTWithSerializedTx(tx.toPCZT());\n return toolbox.broadcastTx(serializedTx);\n }\n\n if (\"getGlobal\" in tx) {\n const { serializedTx } = await signPCZTWithSerializedTx(tx);\n return toolbox.broadcastTx(serializedTx);\n }\n\n const { serializedTx } = await signZcashTransactionWithSerializedTx(tx);\n return toolbox.broadcastTx(serializedTx);\n };\n\n const transfer = async ({ recipient, feeOptionKey, feeRate: paramFeeRate, ...rest }: GenericTransferParams) => {\n if (!(address && recipient)) {\n throw new SwapKitError({\n errorKey: \"wallet_missing_params\",\n info: { address, recipient, wallet: WalletOption.TREZOR },\n });\n }\n\n const feeRate = paramFeeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast];\n const { tx } = await toolbox.createTransaction({\n ...rest,\n feeRate,\n fetchTxHex: false,\n recipient,\n sender: address,\n });\n const { serializedTx } = await signZcashTransactionWithSerializedTx(tx);\n\n return toolbox.broadcastTx(serializedTx);\n };\n\n return { ...toolbox, address, signAndBroadcastTransaction, signPCZT: signer.signPCZT, transfer };\n }\n\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.Litecoin: {\n const { toCashAddress, getUtxoToolbox, stripPrefix } = await import(\"@swapkit/toolboxes/utxo\");\n const utxoChain = chain as UTXOChain;\n const scriptType = getScriptType(derivationPath);\n\n if (!scriptType) {\n throw new SwapKitError({ errorKey: \"wallet_trezor_derivation_path_not_supported\", info: { derivationPath } });\n }\n\n const resolvedScriptType = scriptType;\n const coin = chain.toLowerCase();\n\n const getAddress = async (path: DerivationPathArray = derivationPath) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const pathString = derivationPathToString(path);\n const { success, payload } = await TrezorConnect.getAddress({\n coin,\n ...TREZOR_KEEP_SESSION_PARAMS,\n path: pathString,\n showOnTrezor: false,\n });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { chain, error: (payload as { error: string; code?: string }).error || \"Unknown error\" },\n });\n }\n\n if (chain === Chain.BitcoinCash) {\n return stripPrefix(payload.address);\n }\n\n return payload.address;\n };\n\n const address = providedAddress ?? (await getAddress());\n const baseToolbox = getUtxoToolbox(chain);\n\n const signTransaction = async (tx: Transaction, inputs: UTXOType[], memo = \"\") => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const address_n = hardenDerivationPath(derivationPath);\n const network = getNetworkForChain(chain as UTXOChain);\n\n const outputs = buildUtxoOutputsForTrezor(\n tx,\n network,\n address_n,\n address,\n memo,\n chain,\n resolvedScriptType,\n toCashAddress,\n stripPrefix,\n );\n\n const trezorInputs = inputs.map(({ hash, index, value }) => ({\n address_n,\n amount: value,\n prev_hash: hash,\n prev_index: index,\n script_type: resolvedScriptType.input,\n }));\n\n const result = await TrezorConnect.signTransaction({\n coin,\n inputs: trezorInputs,\n outputs,\n refTxs: buildTrezorRefTxs(chain, inputs) as never,\n });\n\n if (result.success) {\n return result.payload.serializedTx;\n }\n\n const payload = result.payload as { error?: string; code?: string };\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, code: payload?.code ?? \"unknown\", error: payload?.error ?? \"unknown\", payload },\n });\n };\n\n const signPsbtTransaction = async (tx: Transaction): Promise<Transaction> => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { hex: hexEncode } = await import(\"@scure/base\");\n const address_n = hardenDerivationPath(derivationPath);\n const network = getNetworkForChain(chain as UTXOChain);\n let fallbackPublicKey: Uint8Array | undefined;\n\n async function getFallbackDerivation(): Promise<TrezorBip32Derivation> {\n if (!fallbackPublicKey) {\n const accountInfo = await getExtendedPublicKeyInfo();\n const accountKey = HDKey.fromExtendedKey(accountInfo.xpub, network.bip32);\n const leaf = accountKey.derive(`m/${Number(derivationPath[3] ?? 0)}/${Number(derivationPath[4] ?? 0)}`);\n\n if (!leaf.publicKey) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_public_key\",\n info: { chain, error: \"Unable to derive Trezor leaf public key from account xpub\" },\n });\n }\n\n fallbackPublicKey = leaf.publicKey;\n }\n\n return [fallbackPublicKey, { fingerprint: 0, path: address_n }];\n }\n\n const signerPubkeys: Uint8Array[] = [];\n const trezorInputs = [];\n\n for (let inputIndex = 0; inputIndex < tx.inputsLength; inputIndex++) {\n const input = tx.getInput(inputIndex);\n const existingDerivation = getFirstBip32Derivation(input);\n const derivation = existingDerivation ?? (await getFallbackDerivation());\n const amount = getPrevoutAmount(input);\n\n if (!input.txid || input.index === undefined || !amount) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: `Input ${inputIndex} is missing prevout data required by Trezor` },\n });\n }\n\n signerPubkeys[inputIndex] = derivation[0];\n\n if (!existingDerivation) {\n tx.updateInput(inputIndex, { bip32Derivation: [derivation] });\n }\n\n trezorInputs.push({\n address_n: derivation[1].path,\n amount,\n prev_hash: hexEncode.encode(input.txid),\n prev_index: input.index,\n script_type: resolvedScriptType.input,\n ...(input.sequence !== undefined ? { sequence: input.sequence } : {}),\n });\n }\n\n const outputs = buildUtxoOutputsForTrezor(\n tx,\n network,\n address_n,\n address,\n \"\",\n chain,\n resolvedScriptType,\n toCashAddress,\n stripPrefix,\n );\n\n const result = await TrezorConnect.signTransaction({\n coin,\n ...TREZOR_KEEP_SESSION_PARAMS,\n inputs: trezorInputs,\n locktime: tx.lockTime,\n outputs,\n version: tx.version,\n });\n\n if (!result.success) {\n const payload = result.payload as { error?: string; code?: string };\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, code: payload?.code ?? \"unknown\", error: payload?.error ?? \"unknown\", payload },\n });\n }\n\n result.payload.signatures.forEach((signatureHex, inputIndex) => {\n const pubkey = signerPubkeys[inputIndex];\n if (!(signatureHex && pubkey)) return;\n\n tx.updateInput(inputIndex, { partialSig: [[pubkey, normalizeTrezorSignature(signatureHex, chain)]] });\n });\n\n return tx;\n };\n\n const signSerializedTransaction = async (tx: Transaction) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { hex: hexEncode } = await import(\"@scure/base\");\n const address_n = hardenDerivationPath(derivationPath);\n const network = getNetworkForChain(chain as UTXOChain);\n\n const trezorInputs = [];\n for (let inputIndex = 0; inputIndex < tx.inputsLength; inputIndex++) {\n const input = tx.getInput(inputIndex);\n const amount = getPrevoutAmount(input);\n\n if (!input.txid || input.index === undefined || !amount) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: `Input ${inputIndex} is missing prevout data required by Trezor` },\n });\n }\n\n trezorInputs.push({\n address_n,\n amount,\n prev_hash: hexEncode.encode(input.txid),\n prev_index: input.index,\n script_type: resolvedScriptType.input,\n ...(input.sequence !== undefined ? { sequence: input.sequence } : {}),\n });\n }\n\n const outputs = buildUtxoOutputsForTrezor(\n tx,\n network,\n address_n,\n address,\n \"\",\n chain,\n resolvedScriptType,\n toCashAddress,\n stripPrefix,\n );\n\n const result = await TrezorConnect.signTransaction({\n coin,\n inputs: trezorInputs,\n locktime: tx.lockTime,\n outputs,\n version: tx.version,\n });\n\n if (result.success) {\n return result.payload.serializedTx;\n }\n\n const payload = result.payload as { error?: string; code?: string };\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, code: payload?.code ?? \"unknown\", error: payload?.error ?? \"unknown\", payload },\n });\n };\n\n const signTransactionWithMultipleInputs = async (\n tx: Transaction,\n inputs: Array<{\n derivationIndex: number;\n hash: string;\n index: number;\n isChange: boolean;\n txHex?: string;\n value: number;\n }>,\n memo = \"\",\n ) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const network = getNetworkForChain(chain as UTXOChain);\n const baseAddressN = hardenDerivationPath(derivationPath.slice(0, 3) as DerivationPathArray);\n\n const outputs = buildUtxoOutputsForTrezor(\n tx,\n network,\n baseAddressN,\n address,\n memo,\n chain,\n resolvedScriptType,\n toCashAddress,\n stripPrefix,\n );\n\n const trezorInputs = inputs.map(({ hash, index: inputIndex, value, derivationIndex, isChange }) => {\n const changePath = isChange ? 1 : 0;\n const inputAddressN = [...baseAddressN, changePath, derivationIndex];\n return {\n address_n: inputAddressN,\n amount: value,\n prev_hash: hash,\n prev_index: inputIndex,\n script_type: resolvedScriptType.input,\n };\n });\n\n const result = await TrezorConnect.signTransaction({\n coin,\n inputs: trezorInputs,\n outputs,\n refTxs: buildTrezorRefTxs(chain, inputs) as never,\n });\n\n if (result.success) {\n return result.payload.serializedTx;\n }\n\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain, error: (result.payload as { error: string; code?: string }).error },\n });\n };\n\n const transferFromMultipleAddresses = async ({\n utxos,\n recipient,\n assetValue,\n memo,\n feeRate,\n feeOptionKey,\n }: {\n utxos: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n address: string;\n }>;\n recipient: string;\n assetValue: { getBaseValue: (unit: string) => number; chain: string };\n memo?: string;\n feeRate?: number;\n feeOptionKey?: (typeof FeeOption)[keyof typeof FeeOption];\n }) => {\n const toolbox = getUtxoToolbox(chain);\n const txFeeRate = feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast];\n\n const { tx, inputs: selectedInputs } = await toolbox.createTransaction({\n assetValue: assetValue as any,\n feeRate: txFeeRate,\n fetchTxHex: chain === Chain.Dash,\n memo,\n recipient,\n sender: address,\n });\n\n const inputsWithDerivation = selectedInputs.map((input: { hash: string; index: number; value: number }) => {\n const utxoInfo = utxos.find((u) => u.hash === input.hash && u.index === input.index);\n return {\n ...input,\n derivationIndex: utxoInfo?.derivationIndex ?? 0,\n isChange: utxoInfo?.isChange ?? false,\n txHex: utxoInfo?.txHex,\n };\n });\n\n const signedTxHex = await signTransactionWithMultipleInputs(tx as Transaction, inputsWithDerivation, memo);\n return toolbox.broadcastTx(signedTxHex);\n };\n\n const transfer = async ({\n recipient,\n feeOptionKey,\n feeRate: paramFeeRate,\n memo,\n ...rest\n }: GenericTransferParams) => {\n if (!(address && recipient)) {\n throw new SwapKitError({\n errorKey: \"wallet_missing_params\",\n info: { address, memo, recipient, wallet: WalletOption.TREZOR },\n });\n }\n\n const toolbox = getUtxoToolbox(chain);\n\n const feeRate = paramFeeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast];\n\n const createTxMethod = (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs } = await createTxMethod({\n ...rest,\n feeRate,\n fetchTxHex: chain === Chain.Dash,\n memo,\n recipient,\n sender: address,\n });\n\n const signedTxHex = await signTransaction(tx, inputs, memo);\n const txHash = await toolbox.broadcastTx(signedTxHex);\n\n return txHash;\n };\n\n const toolbox = shouldUseTrezorPsbtSigner(chain)\n ? await getUtxoToolbox(utxoChain, {\n signer: { getAddress: async () => address, signTransaction: signPsbtTransaction },\n })\n : baseToolbox;\n\n const signAndBroadcastTransaction = shouldUseTrezorSerializedSigner(chain)\n ? async (tx: Transaction) => baseToolbox.broadcastTx(await signSerializedTransaction(tx))\n : toolbox.signAndBroadcastTransaction;\n const walletSignTransaction = shouldUseTrezorPsbtSigner(chain) ? toolbox.signTransaction : signTransaction;\n const walletTransfer = shouldUseTrezorPsbtSigner(chain) ? toolbox.transfer : transfer;\n\n async function getExtendedPublicKeyInfo({ accountIndex }: { accountIndex?: number } = {}) {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const resolvedAccountPath = getUTXOAccountPath({ accountIndex, chain: utxoChain, derivationPath });\n const path = derivationPathToString(resolvedAccountPath);\n const cacheKey = `${chain}:${path}`;\n const cached = trezorXpubCache.get(cacheKey);\n if (cached) return cached;\n\n const result = await TrezorConnect.getPublicKey({ coin, path });\n const { success, payload } = result;\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_public_key\",\n info: { chain, error: (payload as { error: string; code?: string }).error || \"Unknown error\" },\n });\n }\n\n const xpub = normalizeTrezorExtendedPublicKey(payload.xpub, utxoChain);\n const xpubSegwit = tryNormalizeTrezorExtendedPublicKey(payload.xpubSegwit, utxoChain);\n const info = {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n chainCode: payload.chainCode,\n depth: payload.depth,\n fingerprint: payload.fingerprint,\n path: payload.serializedPath,\n publicKey: payload.publicKey,\n xpub,\n xpubSegwit,\n };\n\n trezorXpubCache.set(cacheKey, info);\n return info;\n }\n\n function getExtendedPublicKey(params: { accountIndex?: number } = {}) {\n return getExtendedPublicKeyInfo(params);\n }\n\n async function deriveAddressAtIndex({\n accountIndex,\n index,\n change = false,\n }: {\n accountIndex?: number;\n index: number;\n change?: boolean;\n }) {\n assertDerivationIndex(\"index\", index);\n\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const resolvedAccountPath = getUTXOAccountPath({ accountIndex, chain: utxoChain, derivationPath });\n const fullPath = `${derivationPathToString(resolvedAccountPath)}/${Number(change)}/${index}`;\n\n const { success, payload } = await TrezorConnect.getAddress({\n coin,\n ...TREZOR_KEEP_SESSION_PARAMS,\n path: fullPath,\n showOnTrezor: false,\n });\n\n if (!success) {\n return undefined;\n }\n\n let finalAddress = payload.address;\n if (chain === Chain.BitcoinCash) {\n const bchToolbox = await getUtxoToolbox(chain as typeof Chain.BitcoinCash);\n finalAddress = bchToolbox.stripPrefix(payload.address);\n }\n\n const pubKeyResult = await TrezorConnect.getPublicKey({\n coin,\n ...TREZOR_KEEP_SESSION_PARAMS,\n path: fullPath,\n scriptType: resolvedScriptType.input,\n showOnTrezor: false,\n });\n const pubkey = pubKeyResult.success ? pubKeyResult.payload.publicKey : \"\";\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n address: finalAddress,\n change,\n index,\n path: fullPath,\n pubkey,\n };\n }\n\n async function deriveAddressesBatch({\n accountIndex,\n count,\n startIndex = 0,\n change = false,\n }: {\n accountIndex?: number;\n count: number;\n startIndex?: number;\n change?: boolean;\n }) {\n assertDerivationIndex(\"count\", count);\n assertDerivationIndex(\"startIndex\", startIndex);\n\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const resolvedAccountPath = getUTXOAccountPath({ accountIndex, chain: utxoChain, derivationPath });\n const accountPath = derivationPathToString(resolvedAccountPath);\n\n const paths = Array.from({ length: count }, (_, i) => ({\n coin,\n path: `${accountPath}/${Number(change)}/${startIndex + i}`,\n showOnTrezor: false,\n }));\n\n const { success, payload } = await TrezorConnect.getAddress({ ...TREZOR_KEEP_SESSION_PARAMS, bundle: paths });\n\n if (!success || !Array.isArray(payload)) {\n return [];\n }\n\n const addresses = await Promise.all(\n payload.map(async (result, i) => {\n let finalAddress = result.address;\n if (chain === Chain.BitcoinCash) {\n const bchToolbox = await getUtxoToolbox(chain as typeof Chain.BitcoinCash);\n finalAddress = bchToolbox.stripPrefix(result.address);\n }\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n address: finalAddress,\n change,\n index: startIndex + i,\n path: `${accountPath}/${Number(change)}/${startIndex + i}`,\n pubkey: \"\",\n };\n }),\n );\n\n return addresses;\n }\n\n const hdHelpers = createHDWalletHelpers({\n chain,\n deriveAddress: deriveAddressAtIndex,\n getBalance: toolbox.getBalance,\n getUtxos: (addr: string) => getUtxoApi(chain).getUtxos({ address: addr, fetchTxHex: true }),\n });\n\n return {\n ...toolbox,\n ...hdHelpers,\n address,\n deriveAddressAtIndex,\n deriveAddresses: deriveAddressesBatch,\n getExtendedPublicKey,\n getExtendedPublicKeyInfo,\n signAndBroadcastTransaction,\n signTransaction: walletSignTransaction,\n signTransactionWithMultipleInputs,\n transfer: walletTransfer,\n transferFromMultipleAddresses,\n };\n }\n\n default:\n throw new SwapKitError({ errorKey: \"wallet_chain_not_supported\", info: { chain, wallet: WalletOption.TREZOR } });\n }\n}\n\nexport async function getTrezorExtendedPublicKey(\n chain: Chain,\n derivationPath?: DerivationPathArray,\n { accountIndex }: { accountIndex?: number } = {},\n): Promise<HardwareExtendedPublicKeyInfo | undefined> {\n if (![Chain.BitcoinCash, Chain.Bitcoin, Chain.Dash, Chain.Dogecoin, Chain.Litecoin, Chain.Zcash].includes(chain)) {\n throw new SwapKitError({ errorKey: \"wallet_chain_not_supported\", info: { chain, wallet: WalletOption.TREZOR } });\n }\n\n const { TrezorConnect } = await initTrezorConnect();\n const utxoChain = chain as UTXOChain;\n const resolvedDerivationPath = derivationPath ?? (NetworkDerivationPath[chain] as DerivationPathArray);\n const coin = chain === Chain.Zcash ? \"zcash\" : chain.toLowerCase();\n\n const resolvedAccountPath = getUTXOAccountPath({\n accountIndex,\n chain: utxoChain,\n derivationPath: resolvedDerivationPath,\n });\n const path = derivationPathToString(resolvedAccountPath);\n const cacheKey = `${chain}:${path}`;\n const cached = trezorXpubCache.get(cacheKey);\n if (cached) return cached;\n\n const { success, payload } = await TrezorConnect.getPublicKey({ coin, path, showOnTrezor: true });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_public_key\",\n info: { chain, error: (payload as { error: string; code?: string }).error || \"Unknown error\" },\n });\n }\n\n const info = {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n chainCode: payload.chainCode,\n depth: payload.depth,\n fingerprint: payload.fingerprint,\n path: payload.serializedPath,\n publicKey: payload.publicKey,\n xpub: normalizeTrezorExtendedPublicKey(payload.xpub, utxoChain),\n xpubSegwit: tryNormalizeTrezorExtendedPublicKey(payload.xpubSegwit, utxoChain),\n };\n\n trezorXpubCache.set(cacheKey, info);\n return info;\n}\n\nexport const trezorWallet = createWallet({\n connect: ({ addChain, supportedChains, walletType }) =>\n async function connectTrezor(\n chains: Chain[],\n derivationPath: DerivationPathArray,\n { address }: ConnectTrezorOptions = {},\n ) {\n const [chain] = filterSupportedChains({ chains, supportedChains, walletType });\n if (!chain) {\n throw new SwapKitError({\n errorKey: \"wallet_chain_not_supported\",\n info: { chain, wallet: WalletOption.TREZOR },\n });\n }\n\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n\n const trezorConfig = SKConfig.get(\"integrations\").trezor as Record<string, unknown> | undefined;\n const {\n connectSrc,\n coreMode,\n debug,\n interactionTimeout,\n lazyLoad,\n pendingTransportEvent,\n popup,\n transportReconnect,\n transports,\n ...manifestConfig\n } = trezorConfig ?? {};\n const manifest = {\n ...manifestConfig,\n appName: getTrezorManifestValue(trezorConfig?.appName, DEFAULT_TREZOR_MANIFEST.appName),\n appUrl: getTrezorManifestValue(trezorConfig?.appUrl, getDefaultTrezorAppUrl()),\n email: getTrezorManifestValue(trezorConfig?.email, DEFAULT_TREZOR_MANIFEST.email),\n };\n const isLocalhost =\n typeof globalThis.location !== \"undefined\" && [\"localhost\", \"127.0.0.1\"].includes(globalThis.location.hostname);\n const resolvedCoreMode = normalizeTrezorCoreMode(coreMode) ?? DEFAULT_TREZOR_CORE_MODE;\n const resolvedTransports = normalizeTrezorTransports(transports) ?? DEFAULT_TREZOR_TRANSPORTS;\n\n if (trezorSessionDispose) {\n await trezorSessionDispose;\n }\n\n if (isLocalhost) {\n await TrezorConnect.dispose();\n }\n\n await TrezorConnect.init({\n connectSrc: connectSrc as string | undefined,\n coreMode: resolvedCoreMode,\n debug: debug as boolean | undefined,\n interactionTimeout: interactionTimeout as number | undefined,\n lazyLoad: (lazyLoad as boolean | undefined) ?? false,\n manifest,\n pendingTransportEvent: pendingTransportEvent as boolean | undefined,\n popup: (popup as boolean | undefined) ?? true,\n transportReconnect: transportReconnect as boolean | undefined,\n transports: resolvedTransports,\n });\n\n const wallet = await getTrezorWallet({ address, chain, derivationPath });\n\n addChain({ ...wallet, chain, disconnect: disconnectTrezorSession, walletType });\n\n return true;\n },\n directSigningSupport: {\n [Chain.Arbitrum]: true,\n [Chain.Aurora]: true,\n [Chain.Avalanche]: true,\n [Chain.Base]: true,\n [Chain.Berachain]: true,\n [Chain.BinanceSmartChain]: true,\n [Chain.Bitcoin]: true,\n [Chain.BitcoinCash]: true,\n [Chain.Dash]: true,\n [Chain.Ethereum]: true,\n [Chain.Gnosis]: true,\n [Chain.Dogecoin]: true,\n [Chain.Litecoin]: true,\n [Chain.Monad]: true,\n [Chain.Optimism]: true,\n [Chain.Polygon]: true,\n [Chain.XLayer]: true,\n [Chain.Zcash]: true,\n },\n getExtendedPublicKey: getTrezorExtendedPublicKey,\n name: \"connectTrezor\",\n supportedChains: [\n Chain.Arbitrum,\n Chain.Aurora,\n Chain.Avalanche,\n Chain.Base,\n Chain.Berachain,\n Chain.BinanceSmartChain,\n Chain.Bitcoin,\n Chain.BitcoinCash,\n Chain.Dash,\n Chain.Dogecoin,\n Chain.Ethereum,\n Chain.Gnosis,\n Chain.Litecoin,\n Chain.Monad,\n Chain.Optimism,\n Chain.Polygon,\n Chain.XLayer,\n Chain.Zcash,\n ],\n walletType: WalletOption.TREZOR,\n});\n\nexport const TREZOR_SUPPORTED_CHAINS = getWalletSupportedChains(trezorWallet);\n"
6
7
  ],
7
- "mappings": "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",
8
- "debugId": "BFFE42105FB01EE064756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "E3E8F2C0CA8EAA1564756E2164756E21",
9
10
  "names": []
10
11
  }
@@ -12,7 +12,7 @@ export declare const rippleWalletMethods: ({ sdk, derivationPath, }: {
12
12
  tx_blob: string;
13
13
  hash: string;
14
14
  }>;
15
- createTransaction: ({ assetValue, recipient, memo, sender, sweep, destinationTag, extendBySeconds, }: {
15
+ createTransaction: ({ assetValue, recipient, memo, sender, sweep, destinationTag, extendBySeconds, sequence, fee, lastLedgerSequence, }: {
16
16
  assetValue: import("@swapkit/helpers").AssetValue;
17
17
  recipient: string;
18
18
  sender?: string;
@@ -20,6 +20,9 @@ export declare const rippleWalletMethods: ({ sdk, derivationPath, }: {
20
20
  sweep?: boolean;
21
21
  destinationTag?: number;
22
22
  extendBySeconds?: number;
23
+ sequence?: number;
24
+ fee?: string;
25
+ lastLedgerSequence?: number;
23
26
  }) => Promise<import("xrpl").Payment>;
24
27
  disconnect: () => void;
25
28
  estimateTransactionFee: () => Promise<import("@swapkit/helpers").AssetValue>;
@@ -1 +1 @@
1
- {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../src/keepkey/chains/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,mBAAmB,GAAU,0BAGvC;IACD,GAAG,EAAE,UAAU,CAAC;IAChB,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;;;gDAqB0D,qBAAqB;;;;;;;;;cAuBnE,CAAC;YAAsB,CAAC;aAC/B,CAAN;sBACgB,CAAC;uBACM,CAAC;;;;6BAQpB,CAAH;2BAA+D,CAAC;;eAEc,CAAC;;;;;;;;;;;;EAa/E,CAAC"}
1
+ {"version":3,"file":"ripple.d.ts","sourceRoot":"","sources":["../../../../src/keepkey/chains/ripple.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAGL,KAAK,mBAAmB,EAExB,KAAK,qBAAqB,EAC3B,MAAM,kBAAkB,CAAC;AAI1B,eAAO,MAAM,mBAAmB,GAAU,0BAGvC;IACD,GAAG,EAAE,UAAU,CAAC;IAChB,cAAc,CAAC,EAAE,mBAAmB,CAAC;CACtC;;;gDAqB0D,qBAAqB;;;;;;;;;cAuBhC,CAAC;YACvC,CAAC;aACM,CAAC;sBACM,CAAC;uBACJ,CAAC;gBAOlB,CAFJ;WACoB,CAAC;0BACW,CAAC;;;;6BAI1B,CAAC;2BAA+D,CAAC;;eAGrD,CAAA;;;;;;;;;;;;EAQlB,CAAC"}
package/package.json CHANGED
@@ -22,10 +22,10 @@
22
22
  "@near-js/transactions": "~2.5.0",
23
23
  "@scure/base": "2.2.0",
24
24
  "@scure/bip32": "2.2.0",
25
- "@swapkit/helpers": "^4.20.1",
26
- "@swapkit/toolboxes": "^4.28.0",
27
- "@swapkit/utxo-signer": "^2.3.0",
28
- "@swapkit/wallet-core": "^4.3.19",
25
+ "@swapkit/helpers": "^5.0.2",
26
+ "@swapkit/toolboxes": "^5.1.1",
27
+ "@swapkit/utxo-signer": "^3.0.0",
28
+ "@swapkit/wallet-core": "^5.0.0",
29
29
  "@trezor/connect-web": "~9.7.3",
30
30
  "cosmjs-types": "~0.10.1",
31
31
  "ethers": "^6.14.0",
@@ -109,5 +109,5 @@
109
109
  "type-check:go": "tsgo"
110
110
  },
111
111
  "type": "module",
112
- "version": "4.9.30"
112
+ "version": "4.9.32"
113
113
  }
@@ -418,7 +418,7 @@ async function getWalletMethods({
418
418
  }
419
419
 
420
420
  case Chain.Cosmos: {
421
- const { createSigningStargateClient, getMsgSendDenom, getCosmosToolbox } = await import(
421
+ const { createSigningStargateClient, getDefaultChainFee, getMsgSendDenom, getCosmosToolbox } = await import(
422
422
  "@swapkit/toolboxes/cosmos"
423
423
  );
424
424
  const signer = await getLedgerClient({ chain, derivationPath, transport });
@@ -445,7 +445,7 @@ async function getWalletMethods({
445
445
  const { transactionHash } = await signingClient.signAndBroadcast(
446
446
  address,
447
447
  [{ typeUrl: "/cosmos.bank.v1beta1.MsgSend", value: sendCoinsMessage }],
448
- 2,
448
+ getDefaultChainFee(Chain.Cosmos),
449
449
  memo,
450
450
  );
451
451
 
@@ -1,4 +0,0 @@
1
- var B=require("@swapkit/helpers"),M=2147483648,U;((j)=>{j.BTC="Bitcoin";j.BCH="BitcoinCash";j.DOGE="Dogecoin";j.LTC="Litecoin";j.DASH="Dash";j.XRP="Ripple"})(U||={});function V(F){if(F==="m/")return!0;return/^m(((\/[0-9]+h)+|(\/[0-9]+H)+|(\/[0-9]+')*)((\/[0-9]+)*))$/.test(F)}function W(F){let q=F;if(!V(q))throw new B.SwapKitError("wallet_keepkey_invalid_params",{reason:`Not a bip32 path: '${q}'`});if(/^m\//i.test(q))q=q.slice(2);let z=q.split("/");if(z.length===1&&z[0]==="")return[];let G=Array(z.length);for(let v=0;v<z.length;v++){let J=z[v];if(J){let j=/(\d+)([hH']?)/.exec(J);if(j===null)throw new B.SwapKitError("wallet_keepkey_invalid_params",{reason:"Invalid input"});let[,Q="",I=""]=j;if(G[v]=Number.parseInt(Q,10),G[v]>=M)throw new B.SwapKitError("wallet_keepkey_invalid_params",{reason:"Invalid child index"});if(I==="h"||I==="H"||I==="'")G[v]+=M;else if(I.length>0)throw new B.SwapKitError("wallet_keepkey_invalid_params",{reason:"Invalid modifier"})}}return G}
2
-
3
- //# debugId=682EE082A700FC4764756E2164756E21
4
- //# sourceMappingURL=chunk-6y08dbf9.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/keepkey/coins.ts"],
4
- "sourcesContent": [
5
- "/*\n KeepKey Specific bip32 path conventions\n*/\n\nimport { SwapKitError } from \"@swapkit/helpers\";\n\nconst HARDENED = 0x80000000;\n\nexport enum ChainToKeepKeyName {\n BTC = \"Bitcoin\",\n BCH = \"BitcoinCash\",\n DOGE = \"Dogecoin\",\n LTC = \"Litecoin\",\n DASH = \"Dash\",\n XRP = \"Ripple\",\n}\n\nexport function addressNListToBIP32(address: number[]) {\n return `m/${address.map((num) => (num >= HARDENED ? `${num - HARDENED}'` : num)).join(\"/\")}`;\n}\n\nexport function bip32Like(path: string) {\n if (path === \"m/\") return true;\n\n return /^m(((\\/[0-9]+h)+|(\\/[0-9]+H)+|(\\/[0-9]+')*)((\\/[0-9]+)*))$/.test(path);\n}\n\nexport function bip32ToAddressNList(initPath: string): number[] {\n let path = initPath;\n\n if (!bip32Like(path)) {\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: `Not a bip32 path: '${path}'` });\n }\n\n if (/^m\\//i.test(path)) {\n path = path.slice(2);\n }\n const segments = path.split(\"/\");\n\n if (segments.length === 1 && segments[0] === \"\") return [];\n\n const ret = new Array(segments.length);\n\n for (let i = 0; i < segments.length; i++) {\n // TODO: Check for better way instead of exec\n const segment = segments[i];\n if (segment) {\n const tmp = /(\\d+)([hH']?)/.exec(segment);\n if (tmp === null) throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Invalid input\" });\n\n const [, num = \"\", modifier = \"\"] = tmp;\n\n ret[i] = Number.parseInt(num, 10);\n\n if (ret[i] >= HARDENED)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Invalid child index\" });\n\n if (modifier === \"h\" || modifier === \"H\" || modifier === \"'\") {\n ret[i] += HARDENED;\n } else if (modifier.length > 0) {\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Invalid modifier\" });\n }\n }\n }\n\n return ret;\n}\n"
6
- ],
7
- "mappings": "AAI6B,IAA7B,8BAEM,EAAW,WAEL,GAAL,CAAK,IAAL,CACL,MAAM,UACN,MAAM,cACN,OAAO,WACP,MAAM,WACN,OAAO,OACP,MAAM,WANI,QAaL,SAAS,CAAS,CAAC,EAAc,CACtC,GAAI,IAAS,KAAM,MAAO,GAE1B,MAAO,6DAA6D,KAAK,CAAI,EAGxE,SAAS,CAAmB,CAAC,EAA4B,CAC9D,IAAI,EAAO,EAEX,GAAI,CAAC,EAAU,CAAI,EACjB,MAAM,IAAI,eAAa,gCAAiC,CAAE,OAAQ,sBAAsB,IAAQ,CAAC,EAGnG,GAAI,QAAQ,KAAK,CAAI,EACnB,EAAO,EAAK,MAAM,CAAC,EAErB,IAAM,EAAW,EAAK,MAAM,GAAG,EAE/B,GAAI,EAAS,SAAW,GAAK,EAAS,KAAO,GAAI,MAAO,CAAC,EAEzD,IAAM,EAAU,MAAM,EAAS,MAAM,EAErC,QAAS,EAAI,EAAG,EAAI,EAAS,OAAQ,IAAK,CAExC,IAAM,EAAU,EAAS,GACzB,GAAI,EAAS,CACX,IAAM,EAAM,gBAAgB,KAAK,CAAO,EACxC,GAAI,IAAQ,KAAM,MAAM,IAAI,eAAa,gCAAiC,CAAE,OAAQ,eAAgB,CAAC,EAErG,KAAS,EAAM,GAAI,EAAW,IAAM,EAIpC,GAFA,EAAI,GAAK,OAAO,SAAS,EAAK,EAAE,EAE5B,EAAI,IAAM,EACZ,MAAM,IAAI,eAAa,gCAAiC,CAAE,OAAQ,qBAAsB,CAAC,EAE3F,GAAI,IAAa,KAAO,IAAa,KAAO,IAAa,IACvD,EAAI,IAAM,EACL,QAAI,EAAS,OAAS,EAC3B,MAAM,IAAI,eAAa,gCAAiC,CAAE,OAAQ,kBAAmB,CAAC,GAK5F,OAAO",
8
- "debugId": "682EE082A700FC4764756E2164756E21",
9
- "names": []
10
- }
@@ -1,4 +0,0 @@
1
- var j=require("@swapkit/helpers"),O=require("@swapkit/toolboxes/ripple");var C=async({sdk:F,derivationPath:G})=>{let I=G?j.derivationPathToString(G):`${j.DerivationPath[j.Chain.Ripple]}/0`,{address:q}=await F.address.xrpGetAddress({address_n:E(I)}),z=await O.getRippleToolbox({signer:{getAddress:()=>Promise.resolve(q),signTransaction:()=>{throw Error("signTransaction not supported via toolbox")}}});return{...z,address:q,getAddress:()=>q,transfer:async({recipient:J,assetValue:Q,memo:y})=>{let f=await z.createTransaction({assetValue:Q,memo:y,recipient:J,sender:q}),U={type:"auth/StdTx",value:{fee:{amount:[{amount:"1000",denom:"drop"}],gas:"28000"},memo:y&&y.length>0?y:"",msg:[{type:"ripple-sdk/MsgSend",value:{amount:[{amount:f.Amount,denom:"drop"}],from_address:q,to_address:J}}],signatures:null}},W={addressNList:E(I),flags:f.Flags===0?void 0:f.Flags,lastLedgerSequence:f.LastLedgerSequence?.toString(),payment:{amount:f.Amount,destination:f.Destination,destinationTag:(f.DestinationTag??"0").toString()},sequence:(f.Sequence??0).toString(),tx:U},K=JSON.parse(await F.xrp.xrpSignTransaction(W)),M=K.tx_blob??K.value?.signatures?.[0]?.serializedTx;if(!M)throw Error("KeepKey XRP sign failed");let X=Buffer.from(M,"base64").toString("hex");return z.broadcastTransaction(X)}}};
2
-
3
- //# debugId=BFF14828A8D3441764756E2164756E21
4
- //# sourceMappingURL=chunk-8sth2w05.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/keepkey/chains/ripple.ts"],
4
- "sourcesContent": [
5
- "import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericTransferParams,\n} from \"@swapkit/helpers\";\nimport { getRippleToolbox } from \"@swapkit/toolboxes/ripple\";\nimport { bip32ToAddressNList } from \"../coins\";\n\nexport const rippleWalletMethods = async ({\n sdk,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n derivationPath?: DerivationPathArray;\n}) => {\n // Derivation path handling (default to standard XRP 44'/144'/0'/0/0)\n const derivationPathString = derivationPath\n ? derivationPathToString(derivationPath)\n : `${DerivationPath[Chain.Ripple]}/0`;\n\n // Fetch address from KeepKey\n const { address } = await (sdk as any).address.xrpGetAddress({\n address_n: bip32ToAddressNList(derivationPathString),\n });\n\n // Inject minimal signer so toolbox's address helpers work\n const signer = {\n getAddress: () => Promise.resolve(address),\n signTransaction: () => {\n throw new Error(\"signTransaction not supported via toolbox\");\n },\n };\n\n const toolbox = await getRippleToolbox({ signer });\n\n const transfer = async ({ recipient, assetValue, memo }: GenericTransferParams) => {\n // Build XRPL Payment tx using toolbox helper\n const tx = await toolbox.createTransaction({ assetValue, memo, recipient, sender: address });\n\n // Convert toolbox Payment tx into KeepKey StdTx wrapper (KeepKey-specific format)\n const stdTx = {\n type: \"auth/StdTx\",\n value: {\n fee: { amount: [{ amount: \"1000\", denom: \"drop\" }], gas: \"28000\" },\n memo: memo && memo.length > 0 ? memo : \"\",\n msg: [\n {\n type: \"ripple-sdk/MsgSend\",\n value: { amount: [{ amount: tx.Amount, denom: \"drop\" }], from_address: address, to_address: recipient },\n },\n ],\n signatures: null,\n },\n };\n\n const unsignedTx = {\n addressNList: bip32ToAddressNList(derivationPathString),\n flags: tx.Flags === 0 ? undefined : tx.Flags,\n lastLedgerSequence: tx.LastLedgerSequence?.toString(),\n payment: {\n amount: tx.Amount,\n destination: tx.Destination,\n destinationTag: (tx.DestinationTag ?? \"0\").toString(),\n },\n sequence: (tx.Sequence ?? 0).toString(),\n tx: stdTx,\n } as any;\n\n // Sign with KeepKey\n const responseSign = JSON.parse(await (sdk as any).xrp.xrpSignTransaction(unsignedTx));\n\n // keepkey-sdk may return either { tx_blob } or StdTx with Base64 serializedTx\n const txBlob: string | undefined =\n (responseSign as any).tx_blob ?? (responseSign as any).value?.signatures?.[0]?.serializedTx;\n if (!txBlob) throw new Error(\"KeepKey XRP sign failed\");\n\n const buffer = Buffer.from(txBlob, \"base64\");\n const txBlobHex = buffer.toString(\"hex\");\n\n // Broadcast signed tx via toolbox\n return toolbox.broadcastTransaction(txBlobHex);\n };\n\n return { ...toolbox, address, getAddress: () => address, transfer };\n};\n"
6
- ],
7
- "mappings": "AAOO,IANP,8BAOA,uCAGO,IAAM,EAAsB,OACjC,MACA,oBAII,CAEJ,IAAM,EAAuB,EACzB,yBAAuB,CAAc,EACrC,GAAG,iBAAe,QAAM,aAGpB,WAAY,MAAO,EAAY,QAAQ,cAAc,CAC3D,UAAW,EAAoB,CAAoB,CACrD,CAAC,EAUK,EAAU,MAAM,mBAAiB,CAAE,OAP1B,CACb,WAAY,IAAM,QAAQ,QAAQ,CAAO,EACzC,gBAAiB,IAAM,CACrB,MAAU,MAAM,2CAA2C,EAE/D,CAEgD,CAAC,EAkDjD,MAAO,IAAK,EAAS,UAAS,WAAY,IAAM,EAAS,SAhDxC,OAAS,YAAW,aAAY,UAAkC,CAEjF,IAAM,EAAK,MAAM,EAAQ,kBAAkB,CAAE,aAAY,OAAM,YAAW,OAAQ,CAAQ,CAAC,EAGrF,EAAQ,CACZ,KAAM,aACN,MAAO,CACL,IAAK,CAAE,OAAQ,CAAC,CAAE,OAAQ,OAAQ,MAAO,MAAO,CAAC,EAAG,IAAK,OAAQ,EACjE,KAAM,GAAQ,EAAK,OAAS,EAAI,EAAO,GACvC,IAAK,CACH,CACE,KAAM,qBACN,MAAO,CAAE,OAAQ,CAAC,CAAE,OAAQ,EAAG,OAAQ,MAAO,MAAO,CAAC,EAAG,aAAc,EAAS,WAAY,CAAU,CACxG,CACF,EACA,WAAY,IACd,CACF,EAEM,EAAa,CACjB,aAAc,EAAoB,CAAoB,EACtD,MAAO,EAAG,QAAU,EAAI,OAAY,EAAG,MACvC,mBAAoB,EAAG,oBAAoB,SAAS,EACpD,QAAS,CACP,OAAQ,EAAG,OACX,YAAa,EAAG,YAChB,gBAAiB,EAAG,gBAAkB,KAAK,SAAS,CACtD,EACA,UAAW,EAAG,UAAY,GAAG,SAAS,EACtC,GAAI,CACN,EAGM,EAAe,KAAK,MAAM,MAAO,EAAY,IAAI,mBAAmB,CAAU,CAAC,EAG/E,EACH,EAAqB,SAAY,EAAqB,OAAO,aAAa,IAAI,aACjF,GAAI,CAAC,EAAQ,MAAU,MAAM,yBAAyB,EAGtD,IAAM,EADS,OAAO,KAAK,EAAQ,QAAQ,EAClB,SAAS,KAAK,EAGvC,OAAO,EAAQ,qBAAqB,CAAS,EAGmB",
8
- "debugId": "BFF14828A8D3441764756E2164756E21",
9
- "names": []
10
- }
@@ -1,4 +0,0 @@
1
- var j=require("@swapkit/helpers");async function I({chain:D,derivationPath:k,provider:_}){let{AbstractSigner:f}=await import("ethers");class Z extends f{address;chain;derivationPath;provider;constructor({chain:q,derivationPath:B,provider:J}){super(J);this.address="",this.chain=q,this.derivationPath=B,this.provider=J}getAddress=async()=>{if(!this.address){let B=await(await import("@trezor/connect-web")).default.ethereumGetAddress({path:j.derivationPathToString(this.derivationPath),showOnTrezor:!0});if(!B.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_get_address",info:{...B,chain:this.chain,derivationPath:this.derivationPath}});this.address=B.payload.address}return this.address};signMessage=async(q)=>{let J=await(await import("@trezor/connect-web")).default.ethereumSignMessage({message:q,path:j.derivationPathToString(this.derivationPath)});if(!J.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...J,chain:this.chain,derivationPath:this.derivationPath,message:q}});return J.payload.signature};signTypedData=async(q,B,J,$)=>{let A=(await import("@trezor/connect-web")).default,{buildEIP712DomainType:U}=await import("@swapkit/toolboxes/evm"),{TypedDataEncoder:V}=await import("ethers"),{EIP712Domain:X,...Q}=B,N=$??V.from(Q).primaryType,M=U(q),O={domain:q,message:J,primaryType:N,types:{EIP712Domain:M,...Q}},R=await A.ethereumSignTypedData({data:O,metamask_v4_compat:!0,path:j.derivationPathToString(this.derivationPath)});if(!R.success)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,error:R.payload.error}});return R.payload.signature.startsWith("0x")?R.payload.signature:`0x${R.payload.signature}`};signTransaction=async({to:q,gasLimit:B,value:J,data:$,nonce:A,maxFeePerGas:U,maxPriorityFeePerGas:V,gasPrice:X})=>{if(!q)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{to:q}});if(!B)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{gasLimit:B}});let Q=U&&V;if(Q&&!U)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{maxFeePerGas:U}});if(Q&&!V)throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{maxPriorityFeePerGas:V}});if(!(Q||X))throw new j.SwapKitError({errorKey:"wallet_missing_params",info:{gasPrice:X}});let N=(await import("@trezor/connect-web")).default,{toHexString:M}=await import("@swapkit/toolboxes/evm"),O=Q?{maxFeePerGas:M(BigInt(U?.toString()||0)),maxPriorityFeePerGas:M(BigInt(V?.toString()||0))}:X&&{gasPrice:M(BigInt(X?.toString()||0))}||{gasPrice:"0x0"},R=M(BigInt(A||await this.provider.getTransactionCount(await this.getAddress(),"pending"))),C={chainId:Number.parseInt(j.ChainToChainId[this.chain],10),data:$?.toString()||"0x",gasLimit:M(BigInt(B?.toString()||0)),nonce:R,to:q.toString(),value:M(BigInt(J?.toString()||0)),...O},{success:H,payload:Y}=await N.ethereumSignTransaction({path:j.derivationPathToString(this.derivationPath),transaction:C});if(!H)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{...Y,chain:this.chain,derivationPath:this.derivationPath}});let W=Y.serializedTx?Y.serializedTx.startsWith("0x")?Y.serializedTx:`0x${Y.serializedTx}`:void 0;if(!W)throw new j.SwapKitError({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:this.chain,derivationPath:this.derivationPath}});return W};connect=(q)=>{if(!q)throw new j.SwapKitError({errorKey:"wallet_provider_not_found",info:{chain:this.chain,derivationPath:this.derivationPath,wallet:j.WalletOption.TREZOR}});return new Z({chain:this.chain,derivationPath:this.derivationPath,provider:q})}}return new Z({chain:D,derivationPath:k,provider:_})}
2
-
3
- //# debugId=0D0364578BE6FD1664756E2164756E21
4
- //# sourceMappingURL=chunk-a2mrvqfy.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/trezor/evmSigner.ts"],
4
- "sourcesContent": [
5
- "import {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n derivationPathToString,\n SwapKitError,\n WalletOption,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest, TypedDataDomain, TypedDataField } from \"ethers\";\n\ntype TrezorEVMSignerParams = {\n chain: Chain;\n derivationPath: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n};\n\nexport async function getEVMSigner({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n const { AbstractSigner } = await import(\"ethers\");\n\n class TrezorSigner extends AbstractSigner {\n address: string;\n chain: Chain;\n derivationPath: DerivationPathArray;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ chain, derivationPath, provider }: TrezorEVMSignerParams) {\n super(provider);\n\n this.address = \"\";\n this.chain = chain;\n this.derivationPath = derivationPath;\n this.provider = provider;\n }\n\n getAddress = async () => {\n if (!this.address) {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n\n const result = await TrezorConnect.ethereumGetAddress({\n path: derivationPathToString(this.derivationPath),\n showOnTrezor: true,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n this.address = result.payload.address;\n }\n\n return this.address;\n };\n\n signMessage = async (message: string) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n\n const result = await TrezorConnect.ethereumSignMessage({\n message,\n path: derivationPathToString(this.derivationPath),\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...result, chain: this.chain, derivationPath: this.derivationPath, message },\n });\n }\n\n return result.payload.signature;\n };\n\n signTypedData = async (\n domain: TypedDataDomain,\n types: Record<string, TypedDataField[]>,\n value: Record<string, unknown>,\n explicitPrimaryType?: string,\n ) => {\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { buildEIP712DomainType } = await import(\"@swapkit/toolboxes/evm\");\n const { TypedDataEncoder } = await import(\"ethers\");\n\n const { EIP712Domain: _, ...filteredTypes } = types;\n const primaryType = explicitPrimaryType ?? TypedDataEncoder.from(filteredTypes).primaryType;\n const domainTypes = buildEIP712DomainType(domain);\n\n const data = {\n domain: domain as Record<string, unknown>,\n message: value,\n primaryType,\n types: { EIP712Domain: domainTypes, ...filteredTypes },\n };\n\n const result = await TrezorConnect.ethereumSignTypedData({\n data: data as Parameters<typeof TrezorConnect.ethereumSignTypedData>[0][\"data\"],\n metamask_v4_compat: true,\n path: derivationPathToString(this.derivationPath),\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, error: result.payload.error },\n });\n }\n\n return result.payload.signature.startsWith(\"0x\") ? result.payload.signature : `0x${result.payload.signature}`;\n };\n\n signTransaction = async ({\n to,\n gasLimit,\n value,\n data,\n nonce,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: any: refactor\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { to } });\n if (!gasLimit) throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasLimit } });\n\n const isEIP1559 = maxFeePerGas && maxPriorityFeePerGas;\n\n if (isEIP1559 && !maxFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxFeePerGas } });\n }\n if (isEIP1559 && !maxPriorityFeePerGas) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { maxPriorityFeePerGas } });\n }\n if (!(isEIP1559 || gasPrice)) {\n throw new SwapKitError({ errorKey: \"wallet_missing_params\", info: { gasPrice } });\n }\n\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n\n const additionalFields = isEIP1559\n ? {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || 0)),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || 0)),\n }\n : (gasPrice && { gasPrice: toHexString(BigInt(gasPrice?.toString() || 0)) }) || { gasPrice: \"0x0\" };\n\n const hexifiedNonce = toHexString(\n BigInt(nonce || (await this.provider.getTransactionCount(await this.getAddress(), \"pending\"))),\n );\n\n const formattedTx = {\n chainId: Number.parseInt(ChainToChainId[this.chain], 10),\n data: data?.toString() || \"0x\",\n gasLimit: toHexString(BigInt(gasLimit?.toString() || 0)),\n nonce: hexifiedNonce,\n to: to.toString(),\n value: toHexString(BigInt(value?.toString() || 0)),\n ...additionalFields,\n };\n\n const { success, payload } = await TrezorConnect.ethereumSignTransaction({\n path: derivationPathToString(this.derivationPath),\n transaction: formattedTx,\n });\n\n if (!success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { ...payload, chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n const serializedTx = payload.serializedTx\n ? payload.serializedTx.startsWith(\"0x\")\n ? payload.serializedTx\n : `0x${payload.serializedTx}`\n : undefined;\n\n if (!serializedTx) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: this.chain, derivationPath: this.derivationPath },\n });\n }\n\n return serializedTx;\n };\n\n connect = (provider: Provider | null) => {\n if (!provider) {\n throw new SwapKitError({\n errorKey: \"wallet_provider_not_found\",\n info: { chain: this.chain, derivationPath: this.derivationPath, wallet: WalletOption.TREZOR },\n });\n }\n\n return new TrezorSigner({ chain: this.chain, derivationPath: this.derivationPath, provider });\n };\n }\n\n return new TrezorSigner({ chain, derivationPath, provider });\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "0D0364578BE6FD1664756E2164756E21",
9
- "names": []
10
- }
@@ -1,4 +0,0 @@
1
- var C=require("@scure/base"),F=require("@scure/bip32"),R=require("@swapkit/helpers");function b(G){switch(G){case"bech32":return"wpkh(@0/**)";case"p2sh":return"sh(wpkh(@0/**))";case"legacy":return"pkh(@0/**)";default:return"wpkh(@0/**)"}}function P(G){return typeof G==="string"?G:R.derivationPathToString(G)}function X(G){return G.replace(/^m\//,"").replace(/^\/+/,"")}function x(G){return G.replace(/^m\//,"").split("/").filter(Boolean).map((Q)=>{let V=Q.endsWith("'"),Y=Number.parseInt(V?Q.slice(0,-1):Q,10);return V?(Y|2147483648)>>>0:Y})}function g(G,Q){let V=G.getInput(Q);return Boolean(V.bip32Derivation?.length)}var S=({chain:G})=>{return(Q,V)=>{let Y,H;async function $(){if(!Y){let q=V??await k(),{AppClient:J}=await import("ledger-bitcoin");Y=new J(q)}return Y}async function L(){if(!H)H=await(await $()).getMasterFingerprint();return H}let j=X(Q?P(Q):"84'/0'/0'/0/0"),w=j.split("/").filter(Boolean),N=w.slice(0,3).join("/"),E=w.slice(3),K=Number(E[0]??0),B=Number(E[1]??0),T=R.getWalletFormatFor(`m/${j}`),I=b(T),z,O;async function U(){let q=await $(),J=await L();if(!z)z=await q.getExtendedPubkey(`m/${N}`);let{DefaultWalletPolicy:M}=await import("ledger-bitcoin"),W=new M(I,`[${J}/${N}]${z}`);return{app:q,fpr:J,policy:W,xpub:z}}async function v(){if(!O){let{xpub:q}=await U(),M=F.HDKey.fromExtendedKey(q).derive(`m/${K}/${B}`);if(!M.publicKey)throw new R.SwapKitError("wallet_ledger_get_address_error",{message:`Cannot derive leaf pubkey for ${G}`});O=M.publicKey}return O}return{connect:async()=>{await $()},getAddress:async()=>{let{app:q,policy:J}=await U(),M=await q.getWalletAddress(J,null,K,B,!1);if(!M)throw new R.SwapKitError("wallet_ledger_get_address_error",{message:`Cannot get ${G} address from ledger derivation path: ${j}`});return M},getExtendedPublicKey:async(q=`m/${N}`)=>{return(await $()).getExtendedPubkey(`m/${X(q)}`)},signTransaction:async(q)=>{let{app:J,policy:M,fpr:W}=await U(),A=Number.parseInt(W,16)>>>0,f=x(j),D=Array.from({length:q.inputsLength},(Z,_)=>_).filter((Z)=>!g(q,Z));if(D.length>0){let Z=await v();for(let _ of D)q.updateInput(_,{bip32Derivation:[[Z,{fingerprint:A,path:f}]]})}let y=C.base64.encode(q.toPSBT(0)),m=await J.signPsbt(y,M,null);for(let[Z,_]of m)q.updateInput(Z,{partialSig:[[new Uint8Array(_.pubkey),new Uint8Array(_.signature)]]});return q}}}},l=S({chain:"bitcoin"}),s=S({chain:"litecoin"});
2
-
3
- //# debugId=DFDE7024C4D5117764756E2164756E21
4
- //# sourceMappingURL=chunk-emhkygmy.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/ledger/clients/utxo-psbt.ts"],
4
- "sourcesContent": [
5
- "import type Transport from \"@ledgerhq/hw-transport\";\nimport { base64 } from \"@scure/base\";\nimport { HDKey } from \"@scure/bip32\";\nimport { type DerivationPathArray, derivationPathToString, getWalletFormatFor, SwapKitError } from \"@swapkit/helpers\";\nimport type { Transaction } from \"@swapkit/utxo-signer\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\ntype SupportedCoin = \"bitcoin\" | \"litecoin\";\n\ntype DefaultDescriptorTemplate = \"wpkh(@0/**)\" | \"tr(@0/**)\" | \"sh(wpkh(@0/**))\" | \"pkh(@0/**)\";\n\nfunction templateForFormat(format: ReturnType<typeof getWalletFormatFor>): DefaultDescriptorTemplate {\n switch (format) {\n case \"bech32\":\n return \"wpkh(@0/**)\";\n case \"p2sh\":\n return \"sh(wpkh(@0/**))\";\n case \"legacy\":\n return \"pkh(@0/**)\";\n default:\n return \"wpkh(@0/**)\";\n }\n}\n\nfunction pathToString(path: DerivationPathArray | string): string {\n return typeof path === \"string\" ? path : derivationPathToString(path);\n}\n\nfunction normalizeLedgerPath(path: string): string {\n return path.replace(/^m\\//, \"\").replace(/^\\/+/, \"\");\n}\n\nfunction pathToNumberArray(path: string): number[] {\n return path\n .replace(/^m\\//, \"\")\n .split(\"/\")\n .filter(Boolean)\n .map((p) => {\n const hardened = p.endsWith(\"'\");\n const num = Number.parseInt(hardened ? p.slice(0, -1) : p, 10);\n return hardened ? (num | 0x80000000) >>> 0 : num;\n });\n}\n\nfunction hasBip32Derivation(tx: Transaction, inputIndex: number) {\n const input = tx.getInput(inputIndex) as { bip32Derivation?: Array<unknown> };\n\n return Boolean(input.bip32Derivation?.length);\n}\n\nconst BaseLedgerPsbtUTXO = ({ chain }: { chain: SupportedCoin }) => {\n return (derivationPathArray?: DerivationPathArray | string, injectedTransport?: Transport) => {\n // Per-call state — each BitcoinPsbtLedger/LitecoinPsbtLedger invocation has its own\n // AppClient and master fingerprint so different consumers (e.g. concurrent MCP\n // sessions on different devices) cannot inherit each other's ledger bindings or xpub.\n let appClient: import(\"ledger-bitcoin\").AppClient | undefined;\n let masterFingerprint: string | undefined;\n\n async function getAppClient() {\n if (!appClient) {\n const transport = injectedTransport ?? (await getLedgerTransport());\n const { AppClient } = await import(\"ledger-bitcoin\");\n appClient = new AppClient(transport);\n }\n return appClient;\n }\n\n async function getFingerprint() {\n if (!masterFingerprint) {\n const app = await getAppClient();\n masterFingerprint = await app.getMasterFingerprint();\n }\n return masterFingerprint;\n }\n\n // Single-address account: change == index == 0 by default.\n const derivationPath = normalizeLedgerPath(\n derivationPathArray ? pathToString(derivationPathArray) : \"84'/0'/0'/0/0\",\n );\n const pathSegments = derivationPath.split(\"/\").filter(Boolean);\n const accountPath = pathSegments.slice(0, 3).join(\"/\");\n const leafSegments = pathSegments.slice(3);\n const change = Number(leafSegments[0] ?? 0);\n const addressIndex = Number(leafSegments[1] ?? 0);\n // getWalletFormatFor expects an m/-prefixed path (it reads the purpose\n // from the second segment); derivationPath is normalized without it.\n const format = getWalletFormatFor(`m/${derivationPath}`);\n const template = templateForFormat(format);\n\n let cachedAccountXpub: string | undefined;\n let cachedLeafPubkey: Uint8Array | undefined;\n\n async function buildPolicy() {\n const app = await getAppClient();\n const fpr = await getFingerprint();\n if (!cachedAccountXpub) {\n cachedAccountXpub = await app.getExtendedPubkey(`m/${accountPath}`);\n }\n const { DefaultWalletPolicy } = await import(\"ledger-bitcoin\");\n const policy = new DefaultWalletPolicy(template, `[${fpr}/${accountPath}]${cachedAccountXpub}`);\n return { app, fpr, policy, xpub: cachedAccountXpub };\n }\n\n async function getLeafPubkey() {\n if (!cachedLeafPubkey) {\n const { xpub } = await buildPolicy();\n const accountKey = HDKey.fromExtendedKey(xpub);\n const leaf = accountKey.derive(`m/${change}/${addressIndex}`);\n if (!leaf.publicKey) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot derive leaf pubkey for ${chain}`,\n });\n }\n cachedLeafPubkey = leaf.publicKey;\n }\n return cachedLeafPubkey;\n }\n\n return {\n connect: async () => {\n await getAppClient();\n },\n getAddress: async () => {\n const { app, policy } = await buildPolicy();\n const address = await app.getWalletAddress(policy, null, change, addressIndex, false);\n if (!address) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot get ${chain} address from ledger derivation path: ${derivationPath}`,\n });\n }\n return address;\n },\n getExtendedPublicKey: async (path = `m/${accountPath}`) => {\n const app = await getAppClient();\n return app.getExtendedPubkey(`m/${normalizeLedgerPath(path)}`);\n },\n signTransaction: async (tx: Transaction): Promise<Transaction> => {\n const { app, policy, fpr } = await buildPolicy();\n const fingerprintBE = Number.parseInt(fpr, 16) >>> 0;\n const pathNumbers = pathToNumberArray(derivationPath);\n const missingDerivationIndexes = Array.from({ length: tx.inputsLength }, (_, inputIndex) => inputIndex).filter(\n (inputIndex) => !hasBip32Derivation(tx, inputIndex),\n );\n\n if (missingDerivationIndexes.length > 0) {\n const leafPubkey = await getLeafPubkey();\n\n // Fallback for PSBTs that do not include per-input HD key origins.\n for (const inputIndex of missingDerivationIndexes) {\n tx.updateInput(inputIndex, {\n bip32Derivation: [[leafPubkey, { fingerprint: fingerprintBE, path: pathNumbers }]],\n });\n }\n }\n\n const psbtB64 = base64.encode(tx.toPSBT(0));\n const sigs = await app.signPsbt(psbtB64, policy, null);\n\n for (const [idx, partial] of sigs) {\n tx.updateInput(idx, { partialSig: [[new Uint8Array(partial.pubkey), new Uint8Array(partial.signature)]] });\n }\n\n return tx;\n },\n };\n };\n};\n\nexport const BitcoinPsbtLedger = BaseLedgerPsbtUTXO({ chain: \"bitcoin\" });\nexport const LitecoinPsbtLedger = BaseLedgerPsbtUTXO({ chain: \"litecoin\" });\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "DFDE7024C4D5117764756E2164756E21",
9
- "names": []
10
- }