@swapkit/wallet-hardware 5.0.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/THIRD_PARTY_LICENSES.md +2344 -0
  2. package/dist/chunk-09e51wma.js +4 -0
  3. package/dist/chunk-09e51wma.js.map +167 -0
  4. package/dist/chunk-0arpsm5f.js +4 -0
  5. package/dist/chunk-0arpsm5f.js.map +10 -0
  6. package/dist/chunk-1amf58aq.js +4 -0
  7. package/dist/{chunk-vwv6z2mk.js.map → chunk-1amf58aq.js.map} +2 -2
  8. package/dist/chunk-3t17wpjg.js +17 -0
  9. package/dist/chunk-3t17wpjg.js.map +29 -0
  10. package/dist/chunk-5c7b7z2d.js +4 -0
  11. package/dist/{chunk-9gy0xve4.js.map → chunk-5c7b7z2d.js.map} +2 -2
  12. package/dist/chunk-5p3ttw6y.js +4 -0
  13. package/dist/{chunk-n05bv2n5.js.map → chunk-5p3ttw6y.js.map} +1 -1
  14. package/dist/chunk-dptbnkzm.js +64 -0
  15. package/dist/chunk-dptbnkzm.js.map +260 -0
  16. package/dist/chunk-ds2m83jp.js +5 -0
  17. package/dist/chunk-ds2m83jp.js.map +11 -0
  18. package/dist/chunk-eenx3cv6.js +4 -0
  19. package/dist/chunk-eenx3cv6.js.map +33 -0
  20. package/dist/chunk-gr3eswf1.js +4 -0
  21. package/dist/chunk-gr3eswf1.js.map +73 -0
  22. package/dist/{chunk-7fsaymh4.js → chunk-hg71hp4m.js} +3 -3
  23. package/dist/{chunk-7fsaymh4.js.map → chunk-hg71hp4m.js.map} +1 -1
  24. package/dist/chunk-jewm2ag3.js +5 -0
  25. package/dist/chunk-jewm2ag3.js.map +10 -0
  26. package/dist/chunk-jzrytcrf.js +4 -0
  27. package/dist/chunk-jzrytcrf.js.map +12 -0
  28. package/dist/chunk-k3thje6a.js +4 -0
  29. package/dist/chunk-k3thje6a.js.map +9 -0
  30. package/dist/chunk-nhva847d.js +5 -0
  31. package/dist/chunk-nhva847d.js.map +9 -0
  32. package/dist/chunk-tm47brht.js +4 -0
  33. package/dist/chunk-tm47brht.js.map +140 -0
  34. package/dist/chunk-xmvg4cds.js +4 -0
  35. package/dist/chunk-xmvg4cds.js.map +127 -0
  36. package/dist/chunk-xx7cwpzq.js +4 -0
  37. package/dist/chunk-xx7cwpzq.js.map +9 -0
  38. package/dist/chunk-yrxe491r.js +20 -0
  39. package/dist/chunk-yrxe491r.js.map +17 -0
  40. package/dist/index.cjs +2 -2
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/keepkey/index.cjs +2 -2
  43. package/dist/keepkey/index.cjs.map +2 -2
  44. package/dist/keepkey/index.js +2 -2
  45. package/dist/keepkey/index.js.map +2 -2
  46. package/dist/ledger/index.cjs +90 -2
  47. package/dist/ledger/index.cjs.map +830 -23
  48. package/dist/ledger/index.js +2 -2
  49. package/dist/ledger/index.js.map +21 -19
  50. package/dist/trezor/index.cjs +2 -2
  51. package/dist/trezor/index.cjs.map +5 -4
  52. package/dist/trezor/index.js +2 -2
  53. package/dist/trezor/index.js.map +3 -3
  54. package/dist/types/helpers/psbt.d.ts +9 -0
  55. package/dist/types/helpers/psbt.d.ts.map +1 -0
  56. package/dist/types/ledger/clients/bitcoin.d.ts +36 -0
  57. package/dist/types/ledger/clients/bitcoin.d.ts.map +1 -0
  58. package/dist/types/ledger/clients/cosmos.d.ts +38 -10
  59. package/dist/types/ledger/clients/cosmos.d.ts.map +1 -1
  60. package/dist/types/ledger/clients/evm.d.ts +37 -46
  61. package/dist/types/ledger/clients/evm.d.ts.map +1 -1
  62. package/dist/types/ledger/clients/near.d.ts +5 -2
  63. package/dist/types/ledger/clients/near.d.ts.map +1 -1
  64. package/dist/types/ledger/clients/sui.d.ts +8 -12
  65. package/dist/types/ledger/clients/sui.d.ts.map +1 -1
  66. package/dist/types/ledger/clients/thorchain/index.d.ts +34 -8
  67. package/dist/types/ledger/clients/thorchain/index.d.ts.map +1 -1
  68. package/dist/types/ledger/clients/thorchain/protocol.d.ts +58 -0
  69. package/dist/types/ledger/clients/thorchain/protocol.d.ts.map +1 -0
  70. package/dist/types/ledger/clients/tron.d.ts +11 -8
  71. package/dist/types/ledger/clients/tron.d.ts.map +1 -1
  72. package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts +3 -2
  73. package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts.map +1 -1
  74. package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts +18 -0
  75. package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts.map +1 -0
  76. package/dist/types/ledger/clients/utxo.d.ts +10 -13
  77. package/dist/types/ledger/clients/utxo.d.ts.map +1 -1
  78. package/dist/types/ledger/clients/xrp.d.ts +4 -1
  79. package/dist/types/ledger/clients/xrp.d.ts.map +1 -1
  80. package/dist/types/ledger/clients/zcash.d.ts +53 -0
  81. package/dist/types/ledger/clients/zcash.d.ts.map +1 -0
  82. package/dist/types/ledger/helpers/dmk.d.ts +24 -0
  83. package/dist/types/ledger/helpers/dmk.d.ts.map +1 -0
  84. package/dist/types/ledger/helpers/executeDeviceAction.d.ts +34 -0
  85. package/dist/types/ledger/helpers/executeDeviceAction.d.ts.map +1 -0
  86. package/dist/types/ledger/helpers/getLedgerAddress.d.ts +1 -1
  87. package/dist/types/ledger/helpers/getLedgerAddress.d.ts.map +1 -1
  88. package/dist/types/ledger/helpers/getLedgerClient.d.ts +10 -3
  89. package/dist/types/ledger/helpers/getLedgerClient.d.ts.map +1 -1
  90. package/dist/types/ledger/helpers/index.d.ts +2 -1
  91. package/dist/types/ledger/helpers/index.d.ts.map +1 -1
  92. package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts +26 -0
  93. package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts.map +1 -0
  94. package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts +13 -0
  95. package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts.map +1 -0
  96. package/dist/types/ledger/helpers/lowS.d.ts +6 -0
  97. package/dist/types/ledger/helpers/lowS.d.ts.map +1 -0
  98. package/dist/types/ledger/helpers/rawTx.d.ts +2 -0
  99. package/dist/types/ledger/helpers/rawTx.d.ts.map +1 -0
  100. package/dist/types/ledger/index.d.ts +19 -7
  101. package/dist/types/ledger/index.d.ts.map +1 -1
  102. package/dist/types/ledger/types.d.ts +6 -10
  103. package/dist/types/ledger/types.d.ts.map +1 -1
  104. package/dist/types/trezor/index.d.ts +2 -2
  105. package/dist/types/trezor/index.d.ts.map +1 -1
  106. package/package.json +36 -36
  107. package/src/helpers/psbt.ts +26 -0
  108. package/src/ledger/clients/bitcoin.ts +575 -0
  109. package/src/ledger/clients/cosmos.ts +180 -51
  110. package/src/ledger/clients/evm.ts +238 -195
  111. package/src/ledger/clients/near.ts +43 -13
  112. package/src/ledger/clients/sui.ts +55 -68
  113. package/src/ledger/clients/thorchain/index.ts +210 -86
  114. package/src/ledger/clients/thorchain/protocol.ts +166 -0
  115. package/src/ledger/clients/tron.ts +49 -37
  116. package/src/ledger/clients/utxo-legacy-adapter.ts +35 -32
  117. package/src/ledger/clients/utxo-legacy-outputs.ts +122 -0
  118. package/src/ledger/clients/utxo.ts +108 -206
  119. package/src/ledger/clients/xrp.ts +39 -23
  120. package/src/ledger/clients/zcash.ts +440 -0
  121. package/src/ledger/helpers/dmk.ts +231 -0
  122. package/src/ledger/helpers/executeDeviceAction.ts +201 -0
  123. package/src/ledger/helpers/getLedgerClient.ts +101 -72
  124. package/src/ledger/helpers/index.ts +6 -1
  125. package/src/ledger/helpers/ledgerJsDmkBridge.ts +109 -0
  126. package/src/ledger/helpers/ledgerJsDmkTransport.ts +88 -0
  127. package/src/ledger/helpers/lowS.ts +30 -0
  128. package/src/ledger/helpers/rawTx.ts +12 -0
  129. package/src/ledger/index.ts +564 -369
  130. package/src/ledger/types.ts +15 -10
  131. package/src/trezor/index.ts +117 -25
  132. package/dist/chunk-3yr76n9s.js +0 -5
  133. package/dist/chunk-3yr76n9s.js.map +0 -10
  134. package/dist/chunk-9gy0xve4.js +0 -4
  135. package/dist/chunk-bwf31zxr.js +0 -4
  136. package/dist/chunk-bwf31zxr.js.map +0 -10
  137. package/dist/chunk-egtwbe6q.js +0 -4
  138. package/dist/chunk-egtwbe6q.js.map +0 -10
  139. package/dist/chunk-n05bv2n5.js +0 -5
  140. package/dist/chunk-vwv6z2mk.js +0 -4
  141. package/dist/types/ledger/clients/thorchain/common.d.ts +0 -28
  142. package/dist/types/ledger/clients/thorchain/common.d.ts.map +0 -1
  143. package/dist/types/ledger/clients/thorchain/helpers.d.ts +0 -7
  144. package/dist/types/ledger/clients/thorchain/helpers.d.ts.map +0 -1
  145. package/dist/types/ledger/clients/thorchain/lib.d.ts +0 -22
  146. package/dist/types/ledger/clients/thorchain/lib.d.ts.map +0 -1
  147. package/dist/types/ledger/clients/thorchain/utils.d.ts +0 -2
  148. package/dist/types/ledger/clients/thorchain/utils.d.ts.map +0 -1
  149. package/dist/types/ledger/clients/utxo-psbt.d.ts +0 -18
  150. package/dist/types/ledger/clients/utxo-psbt.d.ts.map +0 -1
  151. package/dist/types/ledger/cosmosTypes.d.ts +0 -40
  152. package/dist/types/ledger/cosmosTypes.d.ts.map +0 -1
  153. package/dist/types/ledger/helpers/getLedgerTransport.d.ts +0 -3
  154. package/dist/types/ledger/helpers/getLedgerTransport.d.ts.map +0 -1
  155. package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts +0 -14
  156. package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts.map +0 -1
  157. package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts +0 -14
  158. package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts.map +0 -1
  159. package/src/ledger/clients/thorchain/common.ts +0 -93
  160. package/src/ledger/clients/thorchain/helpers.ts +0 -120
  161. package/src/ledger/clients/thorchain/lib.ts +0 -258
  162. package/src/ledger/clients/thorchain/utils.ts +0 -69
  163. package/src/ledger/clients/utxo-psbt.ts +0 -172
  164. package/src/ledger/cosmosTypes.ts +0 -98
  165. package/src/ledger/helpers/getLedgerTransport.ts +0 -102
  166. package/src/ledger/helpers/ledgerNetworkInfo.ts +0 -127
  167. package/src/ledger/interfaces/CosmosLedgerInterface.ts +0 -67
@@ -1,4 +1,4 @@
1
- import{d as E}from"../chunk-n05bv2n5.js";import{HDKey as Xj}from"@scure/bip32";import{Chain as B,derivationPathToString as c,FeeOption as Gj,filterSupportedChains as Rj,NetworkDerivationPath as wj,SKConfig as Vj,SwapKitError as H,UTXOScriptType as Jj,WalletOption as d}from"@swapkit/helpers";import{assertDerivationIndex as Qj,createHDWalletHelpers as kj,getNetworkForChain as i,getUTXOAccountIndexFromPath as t,getUTXOAccountPath as e,getUtxoApi as Aj}from"@swapkit/toolboxes/utxo";import{BCHSigHash as Kj,NETWORKS as x,ZcashVersionGroupId as zj}from"@swapkit/utxo-signer";import{createWallet as Cj,getWalletSupportedChains as Pj}from"@swapkit/wallet-core";var vj=new Set(["auto","iframe","popup","suite-desktop","suite-web"]),Tj=new Set(["BridgeTransport","WebUsbTransport","NodeUsbTransport"]),Wj="auto",o={appName:"SwapKit",appUrl:"https://swapkit.dev",email:"support@swapkit.dev"},Oj=["WebUsbTransport"],s={keepSession:!0},a=new Map,l,bj=[x.bitcoin.bip32,x.bitcoinCash.bip32,x.dash.bip32,x.dogecoin.bip32,x.litecoin.bip32];async function fj(){a.clear();let q=(async()=>{try{await(await import("@trezor/connect-web")).default.dispose()}catch{}})();if(l=q,await q,l===q)l=void 0}function Sj(q){return typeof q==="string"&&vj.has(q)?q:void 0}function Dj(q){if(!Array.isArray(q))return;let j=q.filter((G)=>typeof G==="string"&&Tj.has(G));return j.length>0?j:void 0}function u(q,j){return typeof q==="string"&&q.trim()?q:j}function Fj(){return typeof globalThis.location<"u"&&globalThis.location.origin?globalThis.location.origin:o.appUrl}async function mj(){let q=(await import("@trezor/connect-web")).default,j=Vj.get("integrations").trezor,{connectSrc:G,coreMode:Q,debug:U,interactionTimeout:X,lazyLoad:J,pendingTransportEvent:L,popup:Z,transportReconnect:W,transports:O,...K}=j??{},S={...K,appName:u(j?.appName,o.appName),appUrl:u(j?.appUrl,Fj()),email:u(j?.email,o.email)},f=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),Y=Sj(Q)??Wj,z=Dj(O)??Oj;if(l)await l;if(f)await q.dispose();return await q.init({connectSrc:G,coreMode:Y,debug:U,interactionTimeout:X,lazyLoad:J??!1,manifest:S,pendingTransportEvent:L,popup:Z??!0,transportReconnect:W,transports:z}),{coreMode:Y,isLocalhost:f,popup:Z??!0,TrezorConnect:q}}function Yj(q,j){let G=i(j).bip32,Q=[G,...bj.filter((X)=>X.public!==G.public||X.private!==G.private)],U;for(let X of Q)try{let J=Xj.fromExtendedKey(q,X);if(!(J.publicKey&&J.chainCode))throw Error("Extended key is missing public key data");return new Xj({chainCode:J.chainCode,depth:J.depth,index:J.index,parentFingerprint:J.parentFingerprint,publicKey:J.publicKey,versions:G}).publicExtendedKey}catch(J){U=J}throw U instanceof Error?U:Error("Unable to parse Trezor extended public key")}function Mj(q,j){if(!q)return;try{return Yj(q,j)}catch{return q}}function Zj(q){if(q.length<2||q[0]!==106)return null;let j=q[1];if(j===void 0||q.length<2+j)return null;return Buffer.from(q.slice(2,2+j)).toString("hex")}function gj(q){switch(q[0]){case 84:return{input:"SPENDWITNESS",output:"PAYTOWITNESS",utxo:Jj.P2WPKH};case 49:return{input:"SPENDP2SHWITNESS",output:"PAYTOP2SHWITNESS",utxo:Jj.P2SH_P2WPKH};case 44:return{input:"SPENDADDRESS",output:"PAYTOADDRESS",utxo:Jj.P2PKH};default:return null}}function p(q){return q.map((j,G)=>G<3?(j|2147483648)>>>0:j)}function Ij(q){return Array.isArray(q)&&q[0]instanceof Uint8Array&&typeof q[1]==="object"&&q[1]!==null&&typeof q[1].fingerprint==="number"&&Array.isArray(q[1].path)}function yj(q){if(!Array.isArray(q.bip32Derivation))return;let[j]=q.bip32Derivation;return Ij(j)?j:void 0}function Lj(q){if(q.witnessUtxo?.amount!==void 0)return q.witnessUtxo.amount.toString();let j=q.index!==void 0?q.nonWitnessUtxo?.outputs?.[q.index]:void 0;if(j?.amount!==void 0)return j.amount.toString();return}function hj(q,j){let G=Buffer.from(q,"hex"),Q=G[1]!==void 0?G[1]+2:void 0;if(Q!==void 0&&G.length===Q)return new Uint8Array([...G,j===B.BitcoinCash?Kj.ALL:1]);return new Uint8Array(G)}function xj(q,j,G){let Q=[];for(let U=0;U<q.inputsLength;U++){let X=q.getInput(U);Q.push({address_n:j,amount:X.value.toString(),prev_hash:G.encode(X.txid),prev_index:X.index,script_type:"SPENDADDRESS"})}return Q}async function lj(q,j,G,Q){let U=[];for(let X=0;X<q.outputsLength;X++){let J=q.getOutput(X),L=J.scriptPubkey;if(J.value===0n&&L?.length>0&&L[0]===106){let O=Zj(L);if(O){U.push({amount:"0",op_return_data:O,script_type:"PAYTOOPRETURN"});continue}throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Q,error:"Malformed OP_RETURN output cannot be signed"}})}let Z=await pj(L);if(!Z&&J.value>0n)throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Q,error:"Unable to decode output address from scriptPubkey"}});if(Z===G)U.push({address_n:j,amount:J.value.toString(),script_type:"PAYTOADDRESS"});else U.push({address:Z,amount:J.value.toString(),script_type:"PAYTOADDRESS"})}return U}async function pj(q){try{let{OutScript:j,Address:G}=await import("@swapkit/utxo-signer"),Q=j.decode(q);if(Q.type==="pkh"||Q.type==="pk")return G(x.zcash).encode(Q)}catch{}return}async function cj(q,j){let{ZcashTransaction:G,Script:Q}=await import("@swapkit/utxo-signer"),U=G.fromHex(q,{allowUnknownOutputs:!0}),X=j.clone();for(let J=0;J<U.inputsLength;J++){let Z=U.getInput(J).script;if(Z&&Z.length>0){let W=Q.decode(Z);if(W.length>=2)X.addSignature(J,W[1],W[0])}}return X}function dj(q,j,G,Q){let U=[];for(let X=0;X<q.inputsLength;X++){let J=q.getInput(X),L=j[X];U.push({address_n:G,amount:L?.value?.toString()||J.value?.toString()||"0",prev_hash:J.txid?Q.encode(J.txid):"",prev_index:J.index??0,script_type:"SPENDADDRESS"})}return U}function uj(q,j,G,Q){let U=[];for(let X=0;X<q.outputsLength;X++){let J=q.getOutput(X),L=q.getOutputAddress(X,x.zcash),Z=J.script;if(J.amount===0n&&Z?.length>0&&Z[0]===106){let K=Zj(Z);if(K){U.push({amount:"0",op_return_data:K,script_type:"PAYTOOPRETURN"});continue}continue}if(!L&&(J.amount??0n)>0n)throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Q,error:"Unable to decode output address"}});let O=L===G||!L?{address_n:j}:{address:L};U.push({...O,amount:J.amount?.toString()||"0",script_type:"PAYTOADDRESS"})}return U}function n(q,j,G,Q,U,X,J,L,Z){let W=[];for(let O=0;O<q.outputsLength;O++){let K=q.getOutput(O),S=q.getOutputAddress(O,j);if(!S){let v=K.script?Zj(K.script):null;if(v!==null||U){W.push({amount:"0",op_return_data:v??Buffer.from(U).toString("hex"),script_type:"PAYTOOPRETURN"});continue}throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:X,error:"Unable to decode output address from scriptPubkey"}})}if(K.amount===void 0)throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:X,error:"Output amount is missing"}});let f=X===B.BitcoinCash,Y=f?L(S):S,z=f?Z(Y)===Z(Q):Y===Q;W.push(z?{address_n:G,amount:K.amount.toString(),script_type:J.output}:{address:Y,amount:K.amount.toString(),script_type:"PAYTOADDRESS"})}return W}function Uj(q){return q===B.Bitcoin||q===B.Litecoin}function rj(q){return q===B.BitcoinCash||q===B.Dash||q===B.Dogecoin}function Nj(q,j){if(q!==B.Dash)return;let G=new Map;for(let Q of j){if(!Q.txHex)throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,error:`Missing previous transaction hex for ${Q.hash}:${Q.index}`}});G.set(Q.hash,{details:{},hex:Q.txHex,txid:Q.hash})}return[...G.values()]}async function sj({address:q,chain:j,derivationPath:G}){switch(j){case B.Arbitrum:case B.Arc:case B.Aurora:case B.Avalanche:case B.Base:case B.Berachain:case B.BinanceSmartChain:case B.Ethereum:case B.Gnosis:case B.Monad:case B.Optimism:case B.Polygon:case B.XLayer:{let{getProvider:Q,getEvmToolboxAsync:U}=await import("@swapkit/toolboxes/evm"),{getEVMSigner:X}=await import("../chunk-9gy0xve4.js"),J=await Q(j),L=await X({chain:j,derivationPath:G,provider:J}),Z=await L.getAddress();return{...await U(j,{provider:J,signer:L}),address:Z}}case B.Zcash:{let{getUtxoToolbox:Q}=await import("@swapkit/toolboxes/utxo"),U=c(G),J=q??await(async()=>{let Y=(await import("@trezor/connect-web")).default,{success:z,payload:v}=await Y.getAddress({coin:"zcash",path:U});if(!z)throw new H({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:j,error:v.error||"Unknown error"}});return v.address})(),L=async(Y)=>{let z=(await import("@trezor/connect-web")).default,{hex:v}=await import("@scure/base"),g=p(G),m=Y.getGlobal(),I=xj(Y,g,v),b=await lj(Y,g,J,j),h=await z.signTransaction({branchId:m.consensusBranchId,coin:"zcash",expiry:m.expiryHeight,inputs:I,locktime:m.lockTime,outputs:b,overwintered:!0,version:m.txVersion,versionGroupId:m.versionGroupId});if(!h.success)throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:h.payload.error}});return{serializedTx:h.payload.serializedTx,signedPczt:await cj(h.payload.serializedTx,Y)}},Z=async(Y)=>{let{ZcashTransaction:z}=await import("@swapkit/utxo-signer");return z.fromHex(Y,{allowUnknownOutputs:!0})},W=async(Y)=>{let z=(await import("@trezor/connect-web")).default,{hex:v}=await import("@scure/base"),g=p(G),m=dj(Y,[],g,v),I=uj(Y,g,J,j),b=await z.signTransaction({branchId:Y.consensusBranchId,coin:"zcash",expiry:0,inputs:m,locktime:0,outputs:I,overwintered:!0,version:4,versionGroupId:zj.SAPLING});if(b.success)return{serializedTx:b.payload.serializedTx,signedTx:await Z(b.payload.serializedTx)};throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:b.payload.error}})},O={getAddress:async()=>J,signPCZT:async(Y)=>{return(await L(Y)).signedPczt},signTransaction:async(Y)=>{if("toPCZT"in Y){let{serializedTx:z}=await L(Y.toPCZT());return Z(z)}if("getGlobal"in Y){let{serializedTx:z}=await L(Y);return Z(z)}return(await W(Y)).signedTx}},K=Q(B.Zcash,{signer:O}),S=async(Y)=>{if("toPCZT"in Y){let{serializedTx:v}=await L(Y.toPCZT());return K.broadcastTx(v)}if("getGlobal"in Y){let{serializedTx:v}=await L(Y);return K.broadcastTx(v)}let{serializedTx:z}=await W(Y);return K.broadcastTx(z)},f=async({recipient:Y,feeOptionKey:z,feeRate:v,...g})=>{if(!(J&&Y))throw new H({errorKey:"wallet_missing_params",info:{address:J,recipient:Y,wallet:d.TREZOR}});let m=v||(await K.getFeeRates())[z||Gj.Fast],{tx:I}=await K.createTransaction({...g,feeRate:m,fetchTxHex:!1,recipient:Y,sender:J}),{serializedTx:b}=await W(I);return K.broadcastTx(b)};return{...K,address:J,signAndBroadcastTransaction:S,signPCZT:O.signPCZT,transfer:f}}case B.Bitcoin:case B.BitcoinCash:case B.Dash:case B.Dogecoin:case B.Litecoin:{let _j=function($={}){return r($)},{toCashAddress:Q,getUtxoToolbox:U,stripPrefix:X}=await import("@swapkit/toolboxes/utxo"),J=j,L=gj(G);if(!L)throw new H({errorKey:"wallet_trezor_derivation_path_not_supported",info:{derivationPath:G}});let Z=L,W={scriptType:L.utxo},O=j.toLowerCase(),S=q??await(async($=G)=>{let R=(await import("@trezor/connect-web")).default,w=c($),{success:D,payload:M}=await R.getAddress({coin:O,...s,path:w,showOnTrezor:!1});if(!D)throw new H({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:j,error:M.error||"Unknown error"}});if(j===B.BitcoinCash)return X(M.address);return M.address})(),f=U(j,W),Y=async($,R,w="")=>{let D=(await import("@trezor/connect-web")).default,M=p(G),F=i(j),P=n($,F,M,S,w,j,Z,Q,X),C=R.map(({hash:A,index:N,value:_})=>({address_n:M,amount:_,prev_hash:A,prev_index:N,script_type:Z.input})),V=await D.signTransaction({coin:O,inputs:C,outputs:P,refTxs:Nj(j,R)});if(V.success)return V.payload.serializedTx;let k=V.payload;throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,code:k?.code??"unknown",error:k?.error??"unknown",payload:k}})},z=async($)=>{let R=(await import("@trezor/connect-web")).default,{hex:w}=await import("@scure/base"),D=p(G),M=i(j),F;async function P(){if(!F){let N=await r(),T=Xj.fromExtendedKey(N.xpub,M.bip32).derive(`m/${Number(G[3]??0)}/${Number(G[4]??0)}`);if(!T.publicKey)throw new H({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:j,error:"Unable to derive Trezor leaf public key from account xpub"}});F=T.publicKey}return[F,{fingerprint:0,path:D}]}let C=[],V=[];for(let N=0;N<$.inputsLength;N++){let _=$.getInput(N),T=yj(_),y=T??await P(),Bj=Lj(_);if(!_.txid||_.index===void 0||!Bj)throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:`Input ${N} is missing prevout data required by Trezor`}});if(C[N]=y[0],!T)$.updateInput(N,{bip32Derivation:[y]});V.push({address_n:y[1].path,amount:Bj,prev_hash:w.encode(_.txid),prev_index:_.index,script_type:Z.input,..._.sequence!==void 0?{sequence:_.sequence}:{}})}let k=n($,M,D,S,"",j,Z,Q,X),A=await R.signTransaction({coin:O,...s,inputs:V,locktime:$.lockTime,outputs:k,version:$.version});if(!A.success){let N=A.payload;throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,code:N?.code??"unknown",error:N?.error??"unknown",payload:N}})}return A.payload.signatures.forEach((N,_)=>{let T=C[_];if(!(N&&T))return;$.updateInput(_,{partialSig:[[T,hj(N,j)]]})}),$},v=async($)=>{let R=(await import("@trezor/connect-web")).default,{hex:w}=await import("@scure/base"),D=p(G),M=i(j),F=[];for(let k=0;k<$.inputsLength;k++){let A=$.getInput(k),N=Lj(A);if(!A.txid||A.index===void 0||!N)throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:`Input ${k} is missing prevout data required by Trezor`}});F.push({address_n:D,amount:N,prev_hash:w.encode(A.txid),prev_index:A.index,script_type:Z.input,...A.sequence!==void 0?{sequence:A.sequence}:{}})}let P=n($,M,D,S,"",j,Z,Q,X),C=await R.signTransaction({coin:O,inputs:F,locktime:$.lockTime,outputs:P,version:$.version});if(C.success)return C.payload.serializedTx;let V=C.payload;throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,code:V?.code??"unknown",error:V?.error??"unknown",payload:V}})},g=async($,R,w="")=>{let D=(await import("@trezor/connect-web")).default,M=i(j),F=p(G.slice(0,3)),P=n($,M,F,S,w,j,Z,Q,X),C=R.map(({hash:k,index:A,value:N,derivationIndex:_,isChange:T})=>{let y=T?1:0;return{address_n:[...F,y,_],amount:N,prev_hash:k,prev_index:A,script_type:Z.input}}),V=await D.signTransaction({coin:O,inputs:C,outputs:P,refTxs:Nj(j,R)});if(V.success)return V.payload.serializedTx;throw new H({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:V.payload.error}})},m=async({utxos:$,recipient:R,assetValue:w,memo:D,feeRate:M,feeOptionKey:F})=>{let P=U(j,W),C=M||(await P.getFeeRates())[F||Gj.Fast],{tx:V,inputs:k}=await P.createTransaction({assetValue:w,feeRate:C,fetchTxHex:j===B.Dash,memo:D,recipient:R,sender:S}),A=k.map((_)=>{let T=$.find((y)=>y.hash===_.hash&&y.index===_.index);return{..._,derivationIndex:T?.derivationIndex??0,isChange:T?.isChange??!1,txHex:T?.txHex}}),N=await g(V,A,D);return P.broadcastTx(N)},I=async({recipient:$,feeOptionKey:R,feeRate:w,memo:D,...M})=>{if(!(S&&$))throw new H({errorKey:"wallet_missing_params",info:{address:S,memo:D,recipient:$,wallet:d.TREZOR}});let F=U(j,W),P=w||(await F.getFeeRates())[R||Gj.Fast],C=F.createTransaction,{tx:V,inputs:k}=await C({...M,feeRate:P,fetchTxHex:j===B.Dash,memo:D,recipient:$,sender:S}),A=await Y(V,k,D);return await F.broadcastTx(A)},b=Uj(j)?await U(J,{...W,signer:{getAddress:async()=>S,signTransaction:z}}):f,h=rj(j)?async($)=>f.broadcastTx(await v($)):b.signAndBroadcastTransaction,jj=Uj(j)?b.signTransaction:Y,qj=Uj(j)?b.transfer:I;async function r({accountIndex:$}={}){let R=(await import("@trezor/connect-web")).default,w=e({accountIndex:$,chain:J,derivationPath:G}),D=c(w),M=`${j}:${D}`,F=a.get(M);if(F)return F;let P=await R.getPublicKey({coin:O,path:D}),{success:C,payload:V}=P;if(!C)throw new H({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:j,error:V.error||"Unknown error"}});let k=Yj(V.xpub,J),A=Mj(V.xpubSegwit,J),N={accountIndex:t(w),chainCode:V.chainCode,depth:V.depth,fingerprint:V.fingerprint,path:V.serializedPath,publicKey:V.publicKey,xpub:k,xpubSegwit:A};return a.set(M,N),N}async function $j({accountIndex:$,index:R,change:w=!1}){Qj("index",R);let D=(await import("@trezor/connect-web")).default,M=e({accountIndex:$,chain:J,derivationPath:G}),F=`${c(M)}/${Number(w)}/${R}`,{success:P,payload:C}=await D.getAddress({coin:O,...s,path:F,showOnTrezor:!1});if(!P)return;let V=C.address;if(j===B.BitcoinCash)V=(await U(j)).stripPrefix(C.address);let k=await D.getPublicKey({coin:O,...s,path:F,scriptType:Z.input,showOnTrezor:!1}),A=k.success?k.payload.publicKey:"";return{accountIndex:t(M),address:V,change:w,index:R,path:F,pubkey:A}}async function Ej({accountIndex:$,count:R,startIndex:w=0,change:D=!1}){Qj("count",R),Qj("startIndex",w);let M=(await import("@trezor/connect-web")).default,F=e({accountIndex:$,chain:J,derivationPath:G}),P=c(F),C=Array.from({length:R},(N,_)=>({coin:O,path:`${P}/${Number(D)}/${w+_}`,showOnTrezor:!1})),{success:V,payload:k}=await M.getAddress({...s,bundle:C});if(!V||!Array.isArray(k))return[];return await Promise.all(k.map(async(N,_)=>{let T=N.address;if(j===B.BitcoinCash)T=(await U(j)).stripPrefix(N.address);return{accountIndex:t(F),address:T,change:D,index:w+_,path:`${P}/${Number(D)}/${w+_}`,pubkey:""}}))}let Hj=kj({chain:j,deriveAddress:$j,getBalance:b.getBalance,getUtxos:($)=>Aj(j).getUtxos({address:$,fetchTxHex:!0})});return{...b,...Hj,address:S,deriveAddressAtIndex:$j,deriveAddresses:Ej,getExtendedPublicKey:_j,getExtendedPublicKeyInfo:r,signAndBroadcastTransaction:h,signTransaction:jj,signTransactionWithMultipleInputs:g,transfer:qj,transferFromMultipleAddresses:m}}default:throw new H({errorKey:"wallet_chain_not_supported",info:{chain:j,wallet:d.TREZOR}})}}async function ij(q,j,{accountIndex:G}={}){if(![B.BitcoinCash,B.Bitcoin,B.Dash,B.Dogecoin,B.Litecoin,B.Zcash].includes(q))throw new H({errorKey:"wallet_chain_not_supported",info:{chain:q,wallet:d.TREZOR}});let{TrezorConnect:Q}=await mj(),U=q,X=j??wj[q],J=q===B.Zcash?"zcash":q.toLowerCase(),L=e({accountIndex:G,chain:U,derivationPath:X}),Z=c(L),W=`${q}:${Z}`,O=a.get(W);if(O)return O;let{success:K,payload:S}=await Q.getPublicKey({coin:J,path:Z,showOnTrezor:!0});if(!K)throw new H({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:q,error:S.error||"Unknown error"}});let f={accountIndex:t(L),chainCode:S.chainCode,depth:S.depth,fingerprint:S.fingerprint,path:S.serializedPath,publicKey:S.publicKey,xpub:Yj(S.xpub,U),xpubSegwit:Mj(S.xpubSegwit,U)};return a.set(W,f),f}var oj=Cj({connect:({addChain:q,supportedChains:j,walletType:G})=>async function(U,X,{address:J}={}){let[L]=Rj({chains:U,supportedChains:j,walletType:G});if(!L)throw new H({errorKey:"wallet_chain_not_supported",info:{chain:L,wallet:d.TREZOR}});let Z=(await import("@trezor/connect-web")).default,W=Vj.get("integrations").trezor,{connectSrc:O,coreMode:K,debug:S,interactionTimeout:f,lazyLoad:Y,pendingTransportEvent:z,popup:v,transportReconnect:g,transports:m,...I}=W??{},b={...I,appName:u(W?.appName,o.appName),appUrl:u(W?.appUrl,Fj()),email:u(W?.email,o.email)},h=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),jj=Sj(K)??Wj,qj=Dj(m)??Oj;if(l)await l;if(h)await Z.dispose();await Z.init({connectSrc:O,coreMode:jj,debug:S,interactionTimeout:f,lazyLoad:Y??!1,manifest:b,pendingTransportEvent:z,popup:v??!0,transportReconnect:g,transports:qj});let r=await sj({address:J,chain:L,derivationPath:X});return q({...r,chain:L,disconnect:fj,walletType:G}),!0},directSigningSupport:{[B.Arbitrum]:!0,[B.Arc]:!0,[B.Aurora]:!0,[B.Avalanche]:!0,[B.Base]:!0,[B.Berachain]:!0,[B.BinanceSmartChain]:!0,[B.Bitcoin]:!0,[B.BitcoinCash]:!0,[B.Dash]:!0,[B.Ethereum]:!0,[B.Gnosis]:!0,[B.Dogecoin]:!0,[B.Litecoin]:!0,[B.Monad]:!0,[B.Optimism]:!0,[B.Polygon]:!0,[B.XLayer]:!0,[B.Zcash]:!0},getExtendedPublicKey:ij,name:"connectTrezor",supportedChains:[B.Arbitrum,B.Arc,B.Aurora,B.Avalanche,B.Base,B.Berachain,B.BinanceSmartChain,B.Bitcoin,B.BitcoinCash,B.Dash,B.Dogecoin,B.Ethereum,B.Gnosis,B.Litecoin,B.Monad,B.Optimism,B.Polygon,B.XLayer,B.Zcash],walletType:d.TREZOR}),qq=Pj(oj);export{oj as trezorWallet,hj as normalizeTrezorSignature,Yj as normalizeTrezorExtendedPublicKey,ij as getTrezorExtendedPublicKey,qq as TREZOR_SUPPORTED_CHAINS};
1
+ import{Ia as Dj}from"../chunk-jewm2ag3.js";import{$d as F}from"../chunk-nhva847d.js";import{hex as Nj}from"@scure/base";import{HDKey as Yj}from"@scure/bip32";import{Chain as B,derivationPathToString as p,FeeOption as Qj,filterSupportedChains as zj,NetworkDerivationPath as Cj,SKConfig as Mj,SwapKitError as E,UTXOScriptType as a,WalletOption as r}from"@swapkit/helpers";import{assertDerivationIndex as Uj,createHDWalletHelpers as Pj,getNetworkForChain as s,getUTXOAccountIndexFromPath as jj,getUTXOAccountPath as qj,getUtxoApi as vj}from"@swapkit/toolboxes/utxo";import{createWallet as Tj,getWalletSupportedChains as fj}from"@swapkit/wallet-core";var bj=new Set(["auto","iframe","popup","suite-desktop","suite-web"]),mj=new Set(["BridgeTransport","WebUsbTransport","NodeUsbTransport"]),_j="auto",n={appName:"SwapKit",appUrl:"https://swapkit.dev",email:"support@swapkit.dev"},Fj=["WebUsbTransport"],i={keepSession:!0},gj=65,t=new Map,c,Ij=[B.Bitcoin,B.BitcoinCash,B.Dash,B.Dogecoin,B.Litecoin].map((q)=>s(q).bip32);async function yj(){t.clear();let q=(async()=>{try{await(await import("@trezor/connect-web")).default.dispose()}catch{}})();if(c=q,await q,c===q)c=void 0}function Ej(q){return typeof q==="string"&&bj.has(q)?q:void 0}function Hj(q){if(!Array.isArray(q))return;let j=q.filter((J)=>typeof J==="string"&&mj.has(J));return j.length>0?j:void 0}function u(q,j){return typeof q==="string"&&q.trim()?q:j}function Oj(){return typeof globalThis.location<"u"&&globalThis.location.origin?globalThis.location.origin:n.appUrl}async function hj(){let q=(await import("@trezor/connect-web")).default,j=Mj.get("integrations").trezor,{connectSrc:J,coreMode:X,debug:Q,interactionTimeout:U,lazyLoad:G,pendingTransportEvent:Y,popup:L,transportReconnect:S,transports:K,...W}=j??{},z={...W,appName:u(j?.appName,n.appName),appUrl:u(j?.appUrl,Oj()),email:u(j?.email,n.email)},k=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),Z=Ej(X)??_j,R=Hj(K)??Fj;if(c)await c;if(k)await q.dispose();return await q.init({connectSrc:J,coreMode:Z,debug:Q,interactionTimeout:U,lazyLoad:G??!1,manifest:z,pendingTransportEvent:Y,popup:L??!0,transportReconnect:S,transports:R}),{coreMode:Z,isLocalhost:k,popup:L??!0,TrezorConnect:q}}function Zj(q,j){let J=s(j).bip32,X=[J,...Ij.filter((U)=>U.public!==J.public||U.private!==J.private)],Q;for(let U of X)try{let G=Yj.fromExtendedKey(q,U);if(!(G.publicKey&&G.chainCode))throw Error("Extended key is missing public key data");return new Yj({chainCode:G.chainCode,depth:G.depth,index:G.index,parentFingerprint:G.parentFingerprint,publicKey:G.publicKey,versions:J}).publicExtendedKey}catch(G){Q=G}throw Q instanceof Error?Q:Error("Unable to parse Trezor extended public key")}function Rj(q,j){if(!q)return;try{return Zj(q,j)}catch{return q}}function $j(q){if(q.length<2||q[0]!==106)return null;let j=q[1];if(j===void 0||q.length<2+j)return null;return Buffer.from(q.slice(2,2+j)).toString("hex")}function lj(q,j){switch(j[0]){case 86:return q===B.Bitcoin?{input:"SPENDTAPROOT",output:"PAYTOTAPROOT",utxo:a.P2TR}:null;case 84:return{input:"SPENDWITNESS",output:"PAYTOWITNESS",utxo:a.P2WPKH};case 49:return{input:"SPENDP2SHWITNESS",output:"PAYTOP2SHWITNESS",utxo:a.P2SH_P2WPKH};case 44:return{input:"SPENDADDRESS",output:"PAYTOADDRESS",utxo:a.P2PKH};default:return null}}function d(q){return q.map((j,J)=>J<3?(j|2147483648)>>>0:j)}function xj(q){return Array.isArray(q)&&q[0]instanceof Uint8Array&&typeof q[1]==="object"&&q[1]!==null&&typeof q[1].fingerprint==="number"&&Array.isArray(q[1].path)}function cj(q){if(!Array.isArray(q.bip32Derivation))return;let[j]=q.bip32Derivation;return xj(j)?j:void 0}function dj(q){if(!(Array.isArray(q)&&q[0]instanceof Uint8Array))return!1;let j=q[1];return Array.isArray(j?.hashes)&&Array.isArray(j?.der?.path)}function pj(q,j){let J=Array.isArray(q.tapBip32Derivation)?q.tapBip32Derivation:[];if(J.length===0)return;let{tapInternalKey:X}=q,Q=J.filter((Y)=>dj(Y)&&Y[1].hashes.length===0&&(!X||Nj.encode(Y[0])===Nj.encode(X))),[U,G]=Q[0]??[];if(Q.length!==1||!(U&&G))throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:B.Bitcoin,error:`Input ${j} has no single taproot key-path origin to sign with`}});return{path:G.der.path,xOnlyKey:U}}function Wj(q){if(q.witnessUtxo?.amount!==void 0)return q.witnessUtxo.amount.toString();let j=q.index!==void 0?q.nonWitnessUtxo?.outputs?.[q.index]:void 0;if(j?.amount!==void 0)return j.amount.toString();return}function sj(q,j){let J=Buffer.from(q,"hex"),X=J[1]!==void 0?J[1]+2:void 0;if(X!==void 0&&J.length===X)return new Uint8Array([...J,j===B.BitcoinCash?gj:1]);return new Uint8Array(J)}function rj(q,j,J){let X=[];for(let Q=0;Q<q.inputsLength;Q++){let U=q.getInput(Q);X.push({address_n:j,amount:U.value.toString(),prev_hash:J.encode(U.txid),prev_index:U.index,script_type:"SPENDADDRESS"})}return X}async function uj(q,j,J,X){let Q=[];for(let U=0;U<q.outputsLength;U++){let G=q.getOutput(U),Y=G.scriptPubkey;if(G.value===0n&&Y?.length>0&&Y[0]===106){let K=$j(Y);if(K){Q.push({amount:"0",op_return_data:K,script_type:"PAYTOOPRETURN"});continue}throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:X,error:"Malformed OP_RETURN output cannot be signed"}})}let L=await oj(Y);if(!L&&G.value>0n)throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:X,error:"Unable to decode output address from scriptPubkey"}});if(L===J)Q.push({address_n:j,amount:G.value.toString(),script_type:"PAYTOADDRESS"});else Q.push({address:L,amount:G.value.toString(),script_type:"PAYTOADDRESS"})}return Q}async function oj(q){try{let{OutScript:j,Address:J,NETWORKS:X}=await import("@swapkit/utxo-signer"),Q=j.decode(q);if(Q.type==="pkh"||Q.type==="pk")return J(X.zcash).encode(Q)}catch{}return}async function ij(q,j){let{ZcashTransaction:J,Script:X}=await import("@swapkit/utxo-signer"),Q=J.fromHex(q,{allowUnknownOutputs:!0}),U=j.clone();for(let G=0;G<Q.inputsLength;G++){let L=Q.getInput(G).script;if(L&&L.length>0){let S=X.decode(L);if(S.length>=2)U.addSignature(G,S[1],S[0])}}return U}function aj(q,j,J,X){let Q=[];for(let U=0;U<q.inputsLength;U++){let G=q.getInput(U),Y=j[U];Q.push({address_n:J,amount:Y?.value?.toString()||G.value?.toString()||"0",prev_hash:G.txid?X.encode(G.txid):"",prev_index:G.index??0,script_type:"SPENDADDRESS"})}return Q}function nj({addressN:q,chain:j,myAddress:J,network:X,tx:Q}){let U=[];for(let G=0;G<Q.outputsLength;G++){let Y=Q.getOutput(G),L=Q.getOutputAddress(G,X),S=Y.script;if(Y.amount===0n&&S?.length>0&&S[0]===106){let z=$j(S);if(z){U.push({amount:"0",op_return_data:z,script_type:"PAYTOOPRETURN"});continue}continue}if(!L&&(Y.amount??0n)>0n)throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:"Unable to decode output address"}});let W=L===J||!L?{address_n:q}:{address:L};U.push({...W,amount:Y.amount?.toString()||"0",script_type:"PAYTOADDRESS"})}return U}function e(q,j,J,X,Q,U,G,Y,L){let S=[];for(let K=0;K<q.outputsLength;K++){let W=q.getOutput(K),z=q.getOutputAddress(K,j);if(!z){let f=W.script?$j(W.script):null;if(f!==null||Q){S.push({amount:"0",op_return_data:f??Buffer.from(Q).toString("hex"),script_type:"PAYTOOPRETURN"});continue}throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:U,error:"Unable to decode output address from scriptPubkey"}})}if(W.amount===void 0)throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:U,error:"Output amount is missing"}});let k=U===B.BitcoinCash,Z=k?Y(z):z,R=k?L(Z)===L(X):Z===X;S.push(R?{address_n:J,amount:W.amount.toString(),script_type:G.output}:{address:Z,amount:W.amount.toString(),script_type:"PAYTOADDRESS"})}return S}function Xj(q){return q===B.Bitcoin||q===B.Litecoin}function tj(q){return q===B.BitcoinCash||q===B.Dash||q===B.Dogecoin}function Sj(q,j){if(q!==B.Dash)return;let J=new Map;for(let X of j){if(!X.txHex)throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:q,error:`Missing previous transaction hex for ${X.hash}:${X.index}`}});J.set(X.hash,{details:{},hex:X.txHex,txid:X.hash})}return[...J.values()]}async function ej({address:q,chain:j,derivationPath:J}){switch(j){case B.Arbitrum:case B.Arc:case B.Aurora:case B.Avalanche:case B.Base:case B.Berachain:case B.BinanceSmartChain:case B.Ethereum:case B.Gnosis:case B.Hyperevm:case B.Monad:case B.Optimism:case B.Polygon:case B.Robinhood:case B.XLayer:{let{getProvider:X,getEvmToolboxAsync:Q}=await import("@swapkit/toolboxes/evm"),{getEVMSigner:U}=await import("../chunk-5c7b7z2d.js"),G=await X(j),Y=await U({chain:j,derivationPath:J,provider:G}),L=await Y.getAddress();return{...await Q(j,{provider:G,signer:Y}),address:L}}case B.Zcash:{let{getUtxoToolbox:X}=await import("@swapkit/toolboxes/utxo"),Q=p(J),G=q??await(async()=>{let Z=(await import("@trezor/connect-web")).default,{success:R,payload:f}=await Z.getAddress({coin:"zcash",path:Q});if(!R)throw new E({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:j,error:f.error||"Unknown error"}});return f.address})(),Y=async(Z)=>{let R=(await import("@trezor/connect-web")).default,{hex:f}=await import("@scure/base"),I=d(J),m=Z.getGlobal(),y=rj(Z,I,f),h=await uj(Z,I,G,j),g=await R.signTransaction({branchId:m.consensusBranchId,coin:"zcash",expiry:m.expiryHeight,inputs:y,locktime:m.lockTime,outputs:h,overwintered:!0,version:m.txVersion,versionGroupId:m.versionGroupId});if(!g.success)throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:g.payload.error}});return{serializedTx:g.payload.serializedTx,signedPczt:await ij(g.payload.serializedTx,Z)}},L=async(Z)=>{let{ZcashTransaction:R}=await import("@swapkit/utxo-signer");return R.fromHex(Z,{allowUnknownOutputs:!0})},S=async(Z)=>{let R=(await import("@trezor/connect-web")).default,{hex:f}=await import("@scure/base"),{NETWORKS:I,ZcashVersionGroupId:m}=await import("@swapkit/utxo-signer"),y=d(J),h=aj(Z,[],y,f),g=nj({addressN:y,chain:j,myAddress:G,network:I.zcash,tx:Z}),l=await R.signTransaction({branchId:Z.consensusBranchId,coin:"zcash",expiry:0,inputs:h,locktime:0,outputs:g,overwintered:!0,version:4,versionGroupId:m.SAPLING});if(l.success)return{serializedTx:l.payload.serializedTx,signedTx:await L(l.payload.serializedTx)};throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:l.payload.error}})},K={getAddress:async()=>G,signPCZT:async(Z)=>{return(await Y(Z)).signedPczt},signTransaction:async(Z)=>{if("toPCZT"in Z){let{serializedTx:R}=await Y(Z.toPCZT());return L(R)}if("getGlobal"in Z){let{serializedTx:R}=await Y(Z);return L(R)}return(await S(Z)).signedTx}},W=X(B.Zcash,{signer:K}),z=async(Z)=>{if("toPCZT"in Z){let{serializedTx:f}=await Y(Z.toPCZT());return W.broadcastTx(f)}if("getGlobal"in Z){let{serializedTx:f}=await Y(Z);return W.broadcastTx(f)}let{serializedTx:R}=await S(Z);return W.broadcastTx(R)},k=async({recipient:Z,feeOptionKey:R,feeRate:f,...I})=>{if(!(G&&Z))throw new E({errorKey:"wallet_missing_params",info:{address:G,recipient:Z,wallet:r.TREZOR}});let m=f||(await W.getFeeRates())[R||Qj.Fast],{tx:y}=await W.createTransaction({...I,feeRate:m,fetchTxHex:!1,recipient:Z,sender:G}),{serializedTx:h}=await S(y);return W.broadcastTx(h)};return{...W,address:G,signAndBroadcastTransaction:z,signPCZT:K.signPCZT,transfer:k}}case B.Bitcoin:case B.BitcoinCash:case B.Dash:case B.Dogecoin:case B.Litecoin:{let wj=function($={}){return Jj($)},{toCashAddress:X,getUtxoToolbox:Q,stripPrefix:U}=await import("@swapkit/toolboxes/utxo"),G=j,Y=lj(j,J);if(!Y)throw new E({errorKey:"wallet_trezor_derivation_path_not_supported",info:{derivationPath:J}});let L=Y,S=Y.utxo===a.P2TR,K={scriptType:Y.utxo},W=j.toLowerCase(),k=q??await(async($=J)=>{let w=(await import("@trezor/connect-web")).default,H=p($),{success:D,payload:O}=await w.getAddress({coin:W,...i,path:H,showOnTrezor:!1});if(!D)throw new E({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:j,error:O.error||"Unknown error"}});if(j===B.BitcoinCash)return U(O.address);return O.address})(),Z=Q(j,K),R=async($,w,H="")=>{let D=(await import("@trezor/connect-web")).default,O=d(J),M=s(j),P=e($,M,O,k,H,j,L,X,U),v=w.map(({hash:C,index:T,value:V})=>({address_n:O,amount:V,prev_hash:C,prev_index:T,script_type:L.input})),N=await D.signTransaction({coin:W,inputs:v,outputs:P,refTxs:Sj(j,w)});if(N.success)return N.payload.serializedTx;let A=N.payload;throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,code:A?.code??"unknown",error:A?.error??"unknown",payload:A}})},f=async($)=>{let w=(await import("@trezor/connect-web")).default,{hex:H}=await import("@scure/base"),D=d(J),O=s(j),M;async function P(){if(!M){let V=await Jj(),b=Yj.fromExtendedKey(V.xpub,O.bip32).derive(`m/${Number(J[3]??0)}/${Number(J[4]??0)}`);if(!b.publicKey)throw new E({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:j,error:"Unable to derive Trezor leaf public key from account xpub"}});M=b.publicKey}return[M,{fingerprint:0,path:D}]}let v=[],N=[];async function A(V,_){if(S){let o=pj(_,V);if(!o){let[kj,{path:Vj}]=await P();o={path:Vj,xOnlyKey:kj.slice(1)},$.updateInput(V,{tapBip32Derivation:[[o.xOnlyKey,{der:{fingerprint:0,path:Vj},hashes:[]}]]})}if(!_.tapInternalKey)$.updateInput(V,{tapInternalKey:o.xOnlyKey});return o.path}let b=cj(_),x=b??await P();if(v[V]=x[0],!b)$.updateInput(V,{bip32Derivation:[x]});return await Dj({chain:G,indexes:[V],publicKey:x[0],tx:$}),x[1].path}for(let V=0;V<$.inputsLength;V++){let _=$.getInput(V),b=Wj(_);if(!_.txid||_.index===void 0||!b)throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:`Input ${V} is missing prevout data required by Trezor`}});let x=await A(V,_);N.push({address_n:x,amount:b,prev_hash:H.encode(_.txid),prev_index:_.index,script_type:L.input,..._.sequence!==void 0?{sequence:_.sequence}:{}})}let C=e($,O,D,k,"",j,L,X,U),T=await w.signTransaction({coin:W,...i,inputs:N,locktime:$.lockTime,outputs:C,version:$.version});if(!T.success){let V=T.payload;throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,code:V?.code??"unknown",error:V?.error??"unknown",payload:V}})}return T.payload.signatures.forEach((V,_)=>{if(!V)return;if(S){$.updateInput(_,{tapKeySig:H.decode(V)});return}let b=v[_];if(!b)return;$.updateInput(_,{partialSig:[[b,sj(V,j)]]})}),$},I=async($)=>{let w=(await import("@trezor/connect-web")).default,{hex:H}=await import("@scure/base"),D=d(J),O=s(j),M=[];for(let A=0;A<$.inputsLength;A++){let C=$.getInput(A),T=Wj(C);if(!C.txid||C.index===void 0||!T)throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:`Input ${A} is missing prevout data required by Trezor`}});M.push({address_n:D,amount:T,prev_hash:H.encode(C.txid),prev_index:C.index,script_type:L.input,...C.sequence!==void 0?{sequence:C.sequence}:{}})}let P=e($,O,D,k,"",j,L,X,U),v=await w.signTransaction({coin:W,inputs:M,locktime:$.lockTime,outputs:P,version:$.version});if(v.success)return v.payload.serializedTx;let N=v.payload;throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,code:N?.code??"unknown",error:N?.error??"unknown",payload:N}})},m=async($,w,H="")=>{let D=(await import("@trezor/connect-web")).default,O=s(j),M=d(J.slice(0,3)),P=e($,O,M,k,H,j,L,X,U),v=w.map(({hash:A,index:C,value:T,derivationIndex:V,isChange:_})=>{let b=_?1:0;return{address_n:[...M,b,V],amount:T,prev_hash:A,prev_index:C,script_type:L.input}}),N=await D.signTransaction({coin:W,inputs:v,outputs:P,refTxs:Sj(j,w)});if(N.success)return N.payload.serializedTx;throw new E({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:j,error:N.payload.error}})},y=async({utxos:$,recipient:w,assetValue:H,memo:D,feeRate:O,feeOptionKey:M})=>{let P=Q(j,K),v=O||(await P.getFeeRates())[M||Qj.Fast],{tx:N,inputs:A}=await P.createTransaction({assetValue:H,feeRate:v,fetchTxHex:j===B.Dash,memo:D,recipient:w,sender:k}),C=A.map((V)=>{let _=$.find((b)=>b.hash===V.hash&&b.index===V.index);return{...V,derivationIndex:_?.derivationIndex??0,isChange:_?.isChange??!1,txHex:_?.txHex}}),T=await m(N,C,D);return P.broadcastTx(T)},h=async({recipient:$,feeOptionKey:w,feeRate:H,memo:D,...O})=>{if(!(k&&$))throw new E({errorKey:"wallet_missing_params",info:{address:k,memo:D,recipient:$,wallet:r.TREZOR}});let M=Q(j,K),P=H||(await M.getFeeRates())[w||Qj.Fast],v=M.createTransaction,{tx:N,inputs:A}=await v({...O,feeRate:P,fetchTxHex:j===B.Dash,memo:D,recipient:$,sender:k}),C=await R(N,A,D);return await M.broadcastTx(C)},g=Xj(j)?await Q(G,{...K,signer:{getAddress:async()=>k,signTransaction:f}}):Z,l=tj(j)?async($)=>Z.broadcastTx(await I($)):g.signAndBroadcastTransaction,Bj=Xj(j)?g.signTransaction:R,Gj=Xj(j)?g.transfer:h;async function Jj({accountIndex:$}={}){let w=(await import("@trezor/connect-web")).default,H=qj({accountIndex:$,chain:G,derivationPath:J}),D=p(H),O=`${j}:${D}`,M=t.get(O);if(M)return M;let P=await w.getPublicKey({coin:W,path:D}),{success:v,payload:N}=P;if(!v)throw new E({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:j,error:N.error||"Unknown error"}});let A=Zj(N.xpub,G),C=Rj(N.xpubSegwit,G),T={accountIndex:jj(H),chainCode:N.chainCode,depth:N.depth,fingerprint:N.fingerprint,path:N.serializedPath,publicKey:N.publicKey,xpub:A,xpubSegwit:C};return t.set(O,T),T}async function Lj({accountIndex:$,index:w,change:H=!1}){Uj("index",w);let D=(await import("@trezor/connect-web")).default,O=qj({accountIndex:$,chain:G,derivationPath:J}),M=`${p(O)}/${Number(H)}/${w}`,{success:P,payload:v}=await D.getAddress({coin:W,...i,path:M,showOnTrezor:!1});if(!P)return;let N=v.address;if(j===B.BitcoinCash)N=(await Q(j)).stripPrefix(v.address);let A=await D.getPublicKey({coin:W,...i,path:M,scriptType:L.input,showOnTrezor:!1}),C=A.success?A.payload.publicKey:"";return{accountIndex:jj(O),address:N,change:H,index:w,path:M,pubkey:C}}async function Aj({accountIndex:$,count:w,startIndex:H=0,change:D=!1}){Uj("count",w),Uj("startIndex",H);let O=(await import("@trezor/connect-web")).default,M=qj({accountIndex:$,chain:G,derivationPath:J}),P=p(M),v=Array.from({length:w},(T,V)=>({coin:W,path:`${P}/${Number(D)}/${H+V}`,showOnTrezor:!1})),{success:N,payload:A}=await O.getAddress({...i,bundle:v});if(!N||!Array.isArray(A))return[];return await Promise.all(A.map(async(T,V)=>{let _=T.address;if(j===B.BitcoinCash)_=(await Q(j)).stripPrefix(T.address);return{accountIndex:jj(M),address:_,change:D,index:H+V,path:`${P}/${Number(D)}/${H+V}`,pubkey:""}}))}let Kj=Pj({chain:j,deriveAddress:Lj,getBalance:g.getBalance,getUtxos:($)=>vj(j).getUtxos({address:$,fetchTxHex:!0})});return{...g,...Kj,address:k,deriveAddressAtIndex:Lj,deriveAddresses:Aj,getExtendedPublicKey:wj,getExtendedPublicKeyInfo:Jj,signAndBroadcastTransaction:l,signTransaction:Bj,signTransactionWithMultipleInputs:m,transfer:Gj,transferFromMultipleAddresses:y}}default:throw new E({errorKey:"wallet_chain_not_supported",info:{chain:j,wallet:r.TREZOR}})}}async function jq(q,j,{accountIndex:J}={}){if(![B.BitcoinCash,B.Bitcoin,B.Dash,B.Dogecoin,B.Litecoin,B.Zcash].includes(q))throw new E({errorKey:"wallet_chain_not_supported",info:{chain:q,wallet:r.TREZOR}});let{TrezorConnect:X}=await hj(),Q=q,U=j??Cj[q],G=q===B.Zcash?"zcash":q.toLowerCase(),Y=qj({accountIndex:J,chain:Q,derivationPath:U}),L=p(Y),S=`${q}:${L}`,K=t.get(S);if(K)return K;let{success:W,payload:z}=await X.getPublicKey({coin:G,path:L,showOnTrezor:!0});if(!W)throw new E({errorKey:"wallet_trezor_failed_to_get_public_key",info:{chain:q,error:z.error||"Unknown error"}});let k={accountIndex:jj(Y),chainCode:z.chainCode,depth:z.depth,fingerprint:z.fingerprint,path:z.serializedPath,publicKey:z.publicKey,xpub:Zj(z.xpub,Q),xpubSegwit:Rj(z.xpubSegwit,Q)};return t.set(S,k),k}var qq=Tj({connect:({addChain:q,supportedChains:j,walletType:J})=>async function(Q,U,{address:G}={}){let[Y]=zj({chains:Q,supportedChains:j,walletType:J});if(!Y)throw new E({errorKey:"wallet_chain_not_supported",info:{chain:Y,wallet:r.TREZOR}});let L=(await import("@trezor/connect-web")).default,S=Mj.get("integrations").trezor,{connectSrc:K,coreMode:W,debug:z,interactionTimeout:k,lazyLoad:Z,pendingTransportEvent:R,popup:f,transportReconnect:I,transports:m,...y}=S??{},h={...y,appName:u(S?.appName,n.appName),appUrl:u(S?.appUrl,Oj()),email:u(S?.email,n.email)},g=typeof globalThis.location<"u"&&["localhost","127.0.0.1"].includes(globalThis.location.hostname),l=Ej(W)??_j,Bj=Hj(m)??Fj;if(c)await c;if(g)await L.dispose();await L.init({connectSrc:K,coreMode:l,debug:z,interactionTimeout:k,lazyLoad:Z??!1,manifest:h,pendingTransportEvent:R,popup:f??!0,transportReconnect:I,transports:Bj});let Gj=await ej({address:G,chain:Y,derivationPath:U});return q({...Gj,chain:Y,disconnect:yj,walletType:J}),!0},directSigningSupport:{[B.Arbitrum]:!0,[B.Arc]:!0,[B.Aurora]:!0,[B.Avalanche]:!0,[B.Base]:!0,[B.Berachain]:!0,[B.BinanceSmartChain]:!0,[B.Bitcoin]:!0,[B.BitcoinCash]:!0,[B.Dash]:!0,[B.Ethereum]:!0,[B.Gnosis]:!0,[B.Dogecoin]:!0,[B.Hyperevm]:!0,[B.Litecoin]:!0,[B.Monad]:!0,[B.Optimism]:!0,[B.Polygon]:!0,[B.Robinhood]:!0,[B.XLayer]:!0,[B.Zcash]:!0},getExtendedPublicKey:jq,name:"connectTrezor",supportedChains:[B.Arbitrum,B.Arc,B.Aurora,B.Avalanche,B.Base,B.Berachain,B.BinanceSmartChain,B.Bitcoin,B.BitcoinCash,B.Dash,B.Dogecoin,B.Ethereum,B.Gnosis,B.Hyperevm,B.Litecoin,B.Monad,B.Optimism,B.Polygon,B.Robinhood,B.XLayer,B.Zcash],walletType:r.TREZOR}),Yq=fj(qq);export{qq as trezorWallet,sj as normalizeTrezorSignature,Zj as normalizeTrezorExtendedPublicKey,jq as getTrezorExtendedPublicKey,Yq as TREZOR_SUPPORTED_CHAINS};
2
2
 
3
- //# debugId=E90F648EAB284B8164756E2164756E21
3
+ //# debugId=D21FE113F2233AFD64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/trezor/index.ts"],
4
4
  "sourcesContent": [
5
- "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 UTXOScriptType,\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\", utxo: UTXOScriptType.P2WPKH } as const;\n case 49:\n return { input: \"SPENDP2SHWITNESS\", output: \"PAYTOP2SHWITNESS\", utxo: UTXOScriptType.P2SH_P2WPKH } as const;\n case 44:\n return { input: \"SPENDADDRESS\", output: \"PAYTOADDRESS\", utxo: UTXOScriptType.P2PKH } 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.Arc:\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 toolboxParams = { scriptType: scriptType.utxo };\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, toolboxParams);\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 unknown 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, toolboxParams);\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, toolboxParams);\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 ...toolboxParams,\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.Arc]: 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.Arc,\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"
5
+ "import { hex } from \"@scure/base\";\nimport { 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 UTXOScriptType,\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 { createWallet, getWalletSupportedChains, type HardwareExtendedPublicKeyInfo } from \"@swapkit/wallet-core\";\n\nimport { applyMissingSpendingMetadata } from \"../helpers/psbt\";\n\ntype TrezorBip32Derivation = [Uint8Array, { fingerprint: number; path: number[] }];\ntype TrezorTapBip32Derivation = [Uint8Array, { der: { fingerprint: number; path: number[] }; hashes: Uint8Array[] }];\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 BITCOIN_CASH_SIGHASH_ALL = 0x41;\nconst trezorXpubCache = new Map<string, TrezorExtendedPublicKeyInfo>();\nlet trezorSessionDispose: Promise<void> | undefined;\nconst EXTENDED_KEY_VERSION_CANDIDATES = (\n [Chain.Bitcoin, Chain.BitcoinCash, Chain.Dash, Chain.Dogecoin, Chain.Litecoin] as const satisfies readonly UTXOChain[]\n).map((chain) => getNetworkForChain(chain).bip32);\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(chain: Chain, derivationPath: DerivationPathArray) {\n switch (derivationPath[0]) {\n case 86:\n return chain === Chain.Bitcoin\n ? ({ input: \"SPENDTAPROOT\", output: \"PAYTOTAPROOT\", utxo: UTXOScriptType.P2TR } as const)\n : null;\n case 84:\n return { input: \"SPENDWITNESS\", output: \"PAYTOWITNESS\", utxo: UTXOScriptType.P2WPKH } as const;\n case 49:\n return { input: \"SPENDP2SHWITNESS\", output: \"PAYTOP2SHWITNESS\", utxo: UTXOScriptType.P2SH_P2WPKH } as const;\n case 44:\n return { input: \"SPENDADDRESS\", output: \"PAYTOADDRESS\", utxo: UTXOScriptType.P2PKH } 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 isTrezorTapBip32Derivation(value: unknown): value is TrezorTapBip32Derivation {\n if (!(Array.isArray(value) && value[0] instanceof Uint8Array)) return false;\n const origin = value[1] as { der?: { path?: unknown }; hashes?: unknown } | undefined;\n\n return Array.isArray(origin?.hashes) && Array.isArray(origin?.der?.path);\n}\n\n// Key-path origins carry no leaf hashes; take the one for the internal key, or the only one when it is unset.\nfunction selectTapKeyOrigin(input: { tapBip32Derivation?: unknown; tapInternalKey?: Uint8Array }, inputIndex: number) {\n const origins = Array.isArray(input.tapBip32Derivation) ? input.tapBip32Derivation : [];\n if (origins.length === 0) return undefined;\n\n const { tapInternalKey } = input;\n const keyPathOrigins = origins.filter(\n (origin): origin is TrezorTapBip32Derivation =>\n isTrezorTapBip32Derivation(origin) &&\n origin[1].hashes.length === 0 &&\n (!tapInternalKey || hex.encode(origin[0]) === hex.encode(tapInternalKey)),\n );\n const [xOnlyKey, origin] = keyPathOrigins[0] ?? [];\n\n if (keyPathOrigins.length !== 1 || !(xOnlyKey && origin)) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: Chain.Bitcoin, error: `Input ${inputIndex} has no single taproot key-path origin to sign with` },\n });\n }\n\n return { path: origin.der.path, xOnlyKey };\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 ? BITCOIN_CASH_SIGHASH_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, NETWORKS } = 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({\n addressN,\n chain,\n myAddress,\n network,\n tx,\n}: {\n addressN: number[];\n chain: Chain;\n myAddress: string;\n network: BTCNetwork;\n tx: ZcashTransaction;\n}) {\n const outputs = [];\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const outputAddress = tx.getOutputAddress(i, network);\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: addressN } : { 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.Arc:\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.Hyperevm:\n case Chain.Monad:\n case Chain.Optimism:\n case Chain.Polygon:\n case Chain.Robinhood:\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 { NETWORKS, ZcashVersionGroupId } = await import(\"@swapkit/utxo-signer\");\n const address_n = hardenDerivationPath(derivationPath);\n\n const inputs = buildZcashTxInputsForTrezor(tx, [], address_n, hexEncode);\n const outputs = buildZcashTxOutputsForTrezor({\n addressN: address_n,\n chain,\n myAddress: address,\n network: NETWORKS.zcash,\n tx,\n });\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(chain, 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 isTaproot = scriptType.utxo === UTXOScriptType.P2TR;\n const toolboxParams = { scriptType: scriptType.utxo };\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, toolboxParams);\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 async function prepareInputForSigning(inputIndex: number, input: ReturnType<Transaction[\"getInput\"]>) {\n if (isTaproot) {\n let keyOrigin = selectTapKeyOrigin(input, inputIndex);\n\n if (!keyOrigin) {\n const [publicKey, { path }] = await getFallbackDerivation();\n keyOrigin = { path, xOnlyKey: publicKey.slice(1) };\n tx.updateInput(inputIndex, {\n tapBip32Derivation: [[keyOrigin.xOnlyKey, { der: { fingerprint: 0, path }, hashes: [] }]],\n });\n }\n\n // A BIP86 key-path input's internal key is the x-only key its origin names.\n if (!input.tapInternalKey) tx.updateInput(inputIndex, { tapInternalKey: keyOrigin.xOnlyKey });\n return keyOrigin.path;\n }\n\n const existingDerivation = getFirstBip32Derivation(input);\n const derivation = existingDerivation ?? (await getFallbackDerivation());\n signerPubkeys[inputIndex] = derivation[0];\n\n if (!existingDerivation) {\n tx.updateInput(inputIndex, { bip32Derivation: [derivation] });\n }\n\n await applyMissingSpendingMetadata({ chain: utxoChain, indexes: [inputIndex], publicKey: derivation[0], tx });\n return derivation[1].path;\n }\n\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 const inputAddressN = await prepareInputForSigning(inputIndex, input);\n\n trezorInputs.push({\n address_n: inputAddressN,\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 if (!signatureHex) return;\n\n // Taproot key-path signatures are Schnorr, not DER, and finalize from tapKeySig.\n if (isTaproot) {\n tx.updateInput(inputIndex, { tapKeySig: hexEncode.decode(signatureHex) });\n return;\n }\n\n const pubkey = signerPubkeys[inputIndex];\n if (!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 unknown 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, toolboxParams);\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, toolboxParams);\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 ...toolboxParams,\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.Arc]: 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.Hyperevm]: true,\n [Chain.Litecoin]: true,\n [Chain.Monad]: true,\n [Chain.Optimism]: true,\n [Chain.Polygon]: true,\n [Chain.Robinhood]: true,\n [Chain.XLayer]: true,\n [Chain.Zcash]: true,\n },\n getExtendedPublicKey: getTrezorExtendedPublicKey,\n name: \"connectTrezor\",\n supportedChains: [\n Chain.Arbitrum,\n Chain.Arc,\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.Hyperevm,\n Chain.Litecoin,\n Chain.Monad,\n Chain.Optimism,\n Chain.Polygon,\n Chain.Robinhood,\n Chain.XLayer,\n Chain.Zcash,\n ],\n walletType: WalletOption.TREZOR,\n});\n\nexport const TREZOR_SUPPORTED_CHAINS = getWalletSupportedChains(trezorWallet);\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "E90F648EAB284B8164756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "D21FE113F2233AFD64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,9 @@
1
+ import type { UTXOChain } from "@swapkit/helpers";
2
+ import type { Transaction } from "@swapkit/utxo-signer";
3
+ export declare function applyMissingSpendingMetadata({ chain, indexes, publicKey, tx, }: {
4
+ chain: UTXOChain;
5
+ indexes?: number[];
6
+ publicKey: Uint8Array;
7
+ tx: Transaction;
8
+ }): Promise<void>;
9
+ //# sourceMappingURL=psbt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbt.d.ts","sourceRoot":"","sources":["../../../src/helpers/psbt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,wBAAsB,4BAA4B,CAAC,EACjD,KAAK,EACL,OAAO,EACP,SAAS,EACT,EAAE,GACH,EAAE;IACD,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,SAAS,EAAE,UAAU,CAAC;IACtB,EAAE,EAAE,WAAW,CAAC;CACjB,iBAYA"}
@@ -0,0 +1,36 @@
1
+ import type Transport from "@ledgerhq/hw-transport";
2
+ import { type DerivationPathArray } from "@swapkit/helpers";
3
+ import type { UTXOType } from "@swapkit/toolboxes/utxo";
4
+ import type { Transaction } from "@swapkit/utxo-signer";
5
+ import type { LedgerDMKSession } from "../helpers/dmk";
6
+ import { type LedgerDeviceActionStateHandler } from "../helpers/executeDeviceAction";
7
+ interface BitcoinLedgerParams {
8
+ derivationPath?: DerivationPathArray | string;
9
+ dmkSession?: LedgerDMKSession;
10
+ onDeviceActionState?: LedgerDeviceActionStateHandler;
11
+ transport?: Transport;
12
+ }
13
+ interface GetExtendedPublicKeyParams {
14
+ checkOnDevice?: boolean;
15
+ path?: string;
16
+ }
17
+ interface SignBitcoinTransactionParams {
18
+ inputUtxos?: UTXOType[];
19
+ tx: Transaction;
20
+ }
21
+ interface SignBitcoinTransactionWithMultiplePathsParams extends SignBitcoinTransactionParams {
22
+ derivationPaths: string[];
23
+ }
24
+ export declare function BitcoinLedger({ derivationPath, dmkSession, onDeviceActionState, transport, }?: BitcoinLedgerParams): {
25
+ connect: () => Promise<void>;
26
+ disconnect: () => Promise<void | undefined>;
27
+ getAddress: () => Promise<string>;
28
+ getExtendedPublicKey: ({ checkOnDevice, path, }?: GetExtendedPublicKeyParams) => Promise<string>;
29
+ getPublicKey: () => Promise<Uint8Array<ArrayBufferLike>>;
30
+ showAddressAndPubKey: () => Promise<import("@ledgerhq/device-signer-kit-bitcoin/api/model/Wallet.js").WalletAddress>;
31
+ signTransaction: (tx: Transaction) => Promise<Transaction>;
32
+ signTransactionHex: ({ tx, inputUtxos }: SignBitcoinTransactionParams) => Promise<string>;
33
+ signTransactionWithMultiplePaths: ({ derivationPaths, inputUtxos, tx, }: SignBitcoinTransactionWithMultiplePathsParams) => Promise<string>;
34
+ };
35
+ export {};
36
+ //# sourceMappingURL=bitcoin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoin.d.ts","sourceRoot":"","sources":["../../../../src/ledger/clients/bitcoin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AAGpD,OAAO,EAEL,KAAK,mBAAmB,EAIzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAA6B,KAAK,8BAA8B,EAAE,MAAM,gCAAgC,CAAC;AAKhH,UAAU,mBAAmB;IAC3B,cAAc,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAC9C,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,mBAAmB,CAAC,EAAE,8BAA8B,CAAC;IACrD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,UAAU,0BAA0B;IAClC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,4BAA4B;IACpC,UAAU,CAAC,EAAE,QAAQ,EAAE,CAAC;IACxB,EAAE,EAAE,WAAW,CAAC;CACjB;AAED,UAAU,6CAA8C,SAAQ,4BAA4B;IAC1F,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AA6LD,wBAAgB,aAAa,CAAC,EAC5B,cAA0C,EAC1C,UAAU,EACV,mBAAmB,EACnB,SAAS,GACV,GAAE,mBAAwB;;;;sDAwRpB,0BAA0B;;;0BA2BD,WAAW;6CA/DO,4BAA4B;6EA8EvE,6CAA6C;EAgBnD"}
@@ -1,21 +1,49 @@
1
1
  import type Transport from "@ledgerhq/hw-transport";
2
2
  import { type DerivationPathArray } from "@swapkit/helpers";
3
- import { CosmosLedgerInterface } from "../interfaces/CosmosLedgerInterface";
4
- export declare class CosmosLedger extends CosmosLedgerInterface {
3
+ import type { OfflineAminoSigner } from "@swapkit/toolboxes/cosmos";
4
+ import type { LedgerDMKSession } from "../helpers/dmk";
5
+ import { type LedgerDeviceActionStateHandler } from "../helpers/executeDeviceAction";
6
+ interface CosmosLedgerParams {
7
+ derivationPath?: DerivationPathArray | string;
8
+ dmkSession?: LedgerDMKSession;
9
+ onDeviceActionState?: LedgerDeviceActionStateHandler;
10
+ transport?: Transport;
11
+ }
12
+ interface CosmosAddressAndPublicKey {
13
+ address: string;
14
+ publicKey: string;
15
+ }
16
+ export declare class CosmosLedger {
17
+ readonly chain = "cosmos";
18
+ readonly derivationPath: string;
19
+ private readonly onDeviceActionState?;
20
+ private readonly transport?;
21
+ private legacyAppPromise?;
5
22
  private pubKey;
6
- derivationPath: string;
7
- constructor(derivationPath?: DerivationPathArray, transport?: Transport);
8
- connect: () => Promise<any>;
9
- getAddressAndPubKey: () => Promise<any>;
10
- signTransaction: (rawTx: string, sequence?: string) => Promise<{
23
+ private readonly getSessionSigner;
24
+ constructor({ derivationPath, dmkSession, onDeviceActionState, transport, }?: CosmosLedgerParams);
25
+ private getSigner;
26
+ private getLegacyApp;
27
+ private runLegacyOperation;
28
+ private signBytes;
29
+ connect(): Promise<string>;
30
+ disconnect(): Promise<void>;
31
+ getAddressAndPubKey(): Promise<CosmosAddressAndPublicKey>;
32
+ showAddressAndPubKey(): Promise<CosmosAddressAndPublicKey>;
33
+ signTransaction(rawTx: string | Uint8Array, sequence?: string): Promise<{
11
34
  pub_key: {
12
35
  type: string;
13
36
  value: string;
14
37
  };
15
38
  sequence: string;
16
- signature: any;
39
+ signature: Uint8Array<ArrayBufferLike>;
40
+ }[]>;
41
+ signAmino(signerAddress: string, signDoc: Parameters<OfflineAminoSigner["signAmino"]>[1]): ReturnType<OfflineAminoSigner["signAmino"]>;
42
+ getAccounts(): Promise<{
43
+ address: string;
44
+ algo: "secp256k1";
45
+ pubkey: Uint8Array<ArrayBufferLike>;
17
46
  }[]>;
18
- signAmino: (signerAddress: string, signDoc: any) => Promise<any>;
19
- getAccounts: () => Promise<any[]>;
20
47
  }
48
+ export {};
21
49
  //# sourceMappingURL=cosmos.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../src/ledger/clients/cosmos.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAE5E,qBAAa,YAAa,SAAQ,qBAAqB;IACrD,OAAO,CAAC,MAAM,CAAuB;IAErC,cAAc,EAAE,MAAM,CAAC;gBAEX,cAAc,GAAE,mBAAgD,EAAE,SAAS,CAAC,EAAE,SAAS;IAMnG,OAAO,qBAOL;IAEF,mBAAmB,qBAMjB;IAEF,eAAe,GAAU,OAAO,MAAM,EAAE,iBAAc;;;;;;;SAUpD;IAEF,SAAS,GAAU,eAAe,MAAM,EAAE,SAAS,GAAG,KAAG,OAAO,CAAC,GAAG,CAAC,CAyBnE;IAEF,WAAW,uBAOT;CACH"}
1
+ {"version":3,"file":"cosmos.d.ts","sourceRoot":"","sources":["../../../../src/ledger/clients/cosmos.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,SAAS,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EACL,KAAK,mBAAmB,EAIzB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAEL,KAAK,8BAA8B,EAGpC,MAAM,gCAAgC,CAAC;AAGxC,UAAU,kBAAkB;IAC1B,cAAc,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC;IAC9C,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,mBAAmB,CAAC,EAAE,8BAA8B,CAAC;IACrD,SAAS,CAAC,EAAE,SAAS,CAAC;CACvB;AAED,UAAU,yBAAyB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAgCD,qBAAa,YAAY;IACvB,QAAQ,CAAC,KAAK,YAAY;IAC1B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAiC;IACtE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAY;IACvC,OAAO,CAAC,gBAAgB,CAAC,CAA2B;IACpD,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA8B;gBAEnD,EACV,cAA2C,EAC3C,UAAU,EACV,mBAAmB,EACnB,SAAS,GACV,GAAE,kBAAuB;IAa1B,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,YAAY;YAaN,kBAAkB;YASlB,SAAS;IAoBjB,OAAO;IASP,UAAU;IAEV,mBAAmB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAczD,oBAAoB,IAAI,OAAO,CAAC,yBAAyB,CAAC;IAc1D,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,QAAQ,SAAM;;;;;;;;IAW1D,SAAS,CACb,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,GACtD,UAAU,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;IAYxC,WAAW;;;;;CAIlB"}