@swapkit/wallet-hardware 6.1.1 → 6.3.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 (112) hide show
  1. package/dist/THIRD_PARTY_LICENSES.md +4 -4
  2. package/dist/{chunk-jzrytcrf.js → chunk-0k1b2ddn.js} +3 -3
  3. package/dist/{chunk-jzrytcrf.js.map → chunk-0k1b2ddn.js.map} +2 -2
  4. package/dist/{chunk-jewm2ag3.js → chunk-2tzsz8f3.js} +4 -4
  5. package/dist/{chunk-jewm2ag3.js.map → chunk-2tzsz8f3.js.map} +1 -1
  6. package/dist/{chunk-yrxe491r.js → chunk-410fpx61.js} +4 -4
  7. package/dist/{chunk-yrxe491r.js.map → chunk-410fpx61.js.map} +1 -1
  8. package/dist/chunk-8mkdjmw2.js +4 -0
  9. package/dist/chunk-8mkdjmw2.js.map +10 -0
  10. package/dist/{chunk-xmvg4cds.js → chunk-96p7njae.js} +3 -3
  11. package/dist/{chunk-xmvg4cds.js.map → chunk-96p7njae.js.map} +2 -2
  12. package/dist/chunk-97nsp4z6.js +5 -0
  13. package/dist/chunk-97nsp4z6.js.map +10 -0
  14. package/dist/{chunk-nhva847d.js → chunk-9a9gn4pb.js} +3 -3
  15. package/dist/{chunk-5p3ttw6y.js.map → chunk-9a9gn4pb.js.map} +1 -1
  16. package/dist/chunk-a39rm9nv.js +4 -0
  17. package/dist/{chunk-gr3eswf1.js.map → chunk-a39rm9nv.js.map} +5 -5
  18. package/dist/chunk-c8mwf9cn.js +4 -0
  19. package/dist/{chunk-k3thje6a.js.map → chunk-c8mwf9cn.js.map} +1 -1
  20. package/dist/{chunk-ds2m83jp.js → chunk-dhhmywmb.js} +4 -4
  21. package/dist/{chunk-ds2m83jp.js.map → chunk-dhhmywmb.js.map} +1 -1
  22. package/dist/{chunk-eenx3cv6.js → chunk-dsa641rq.js} +3 -3
  23. package/dist/{chunk-eenx3cv6.js.map → chunk-dsa641rq.js.map} +2 -2
  24. package/dist/{chunk-0arpsm5f.js → chunk-grj9nvte.js} +3 -3
  25. package/dist/{chunk-0arpsm5f.js.map → chunk-grj9nvte.js.map} +1 -1
  26. package/dist/{chunk-hg71hp4m.js → chunk-napm4102.js} +3 -3
  27. package/dist/{chunk-hg71hp4m.js.map → chunk-napm4102.js.map} +1 -1
  28. package/dist/{chunk-k3thje6a.js → chunk-nb08g045.js} +3 -3
  29. package/dist/{chunk-nhva847d.js.map → chunk-nb08g045.js.map} +1 -1
  30. package/dist/chunk-npe2r2ge.js +4 -0
  31. package/dist/{chunk-xx7cwpzq.js.map → chunk-npe2r2ge.js.map} +1 -1
  32. package/dist/chunk-p9mwkgye.js +4 -0
  33. package/dist/{chunk-09e51wma.js.map → chunk-p9mwkgye.js.map} +14 -12
  34. package/dist/{chunk-wfbg89d3.js → chunk-qjp8j8e5.js} +3 -3
  35. package/dist/{chunk-wfbg89d3.js.map → chunk-qjp8j8e5.js.map} +1 -1
  36. package/dist/{chunk-xn0fnag5.js → chunk-r1fk1sx9.js} +3 -3
  37. package/dist/{chunk-xn0fnag5.js.map → chunk-r1fk1sx9.js.map} +1 -1
  38. package/dist/{chunk-1amf58aq.js → chunk-ta7bqmy3.js} +3 -3
  39. package/dist/{chunk-1amf58aq.js.map → chunk-ta7bqmy3.js.map} +1 -1
  40. package/dist/{chunk-3t17wpjg.js → chunk-tgvgr630.js} +3 -3
  41. package/dist/{chunk-3t17wpjg.js.map → chunk-tgvgr630.js.map} +2 -2
  42. package/dist/chunk-v8x9ptxs.js +4 -0
  43. package/dist/chunk-v8x9ptxs.js.map +10 -0
  44. package/dist/{chunk-dptbnkzm.js → chunk-wm89desc.js} +20 -20
  45. package/dist/{chunk-dptbnkzm.js.map → chunk-wm89desc.js.map} +12 -10
  46. package/dist/{chunk-5c7b7z2d.js → chunk-wtyhjt5e.js} +3 -3
  47. package/dist/{chunk-5c7b7z2d.js.map → chunk-wtyhjt5e.js.map} +1 -1
  48. package/dist/{chunk-tm47brht.js → chunk-xskdbz15.js} +3 -3
  49. package/dist/{chunk-tm47brht.js.map → chunk-xskdbz15.js.map} +2 -2
  50. package/dist/{chunk-8m2sn76p.js → chunk-ytjqb1sd.js} +3 -3
  51. package/dist/{chunk-8m2sn76p.js.map → chunk-ytjqb1sd.js.map} +1 -1
  52. package/dist/{chunk-3h1f3hyp.js → chunk-zbesf7sy.js} +3 -3
  53. package/dist/{chunk-3h1f3hyp.js.map → chunk-zbesf7sy.js.map} +1 -1
  54. package/dist/keepkey/index.cjs +2 -2
  55. package/dist/keepkey/index.cjs.map +3 -3
  56. package/dist/keepkey/index.js +2 -2
  57. package/dist/keepkey/index.js.map +3 -3
  58. package/dist/ledger/index.cjs +30 -30
  59. package/dist/ledger/index.cjs.map +35 -27
  60. package/dist/ledger/index.js +2 -2
  61. package/dist/ledger/index.js.map +11 -8
  62. package/dist/trezor/index.cjs +2 -2
  63. package/dist/trezor/index.cjs.map +7 -5
  64. package/dist/trezor/index.js +2 -2
  65. package/dist/trezor/index.js.map +3 -3
  66. package/dist/types/helpers/cardano.d.ts +35 -0
  67. package/dist/types/helpers/cardano.d.ts.map +1 -0
  68. package/dist/types/keepkey/index.d.ts +1 -0
  69. package/dist/types/keepkey/index.d.ts.map +1 -1
  70. package/dist/types/ledger/clients/cardano.d.ts +24 -0
  71. package/dist/types/ledger/clients/cardano.d.ts.map +1 -0
  72. package/dist/types/ledger/clients/evm.d.ts +1 -0
  73. package/dist/types/ledger/clients/evm.d.ts.map +1 -1
  74. package/dist/types/ledger/clients/stellar.d.ts +13 -0
  75. package/dist/types/ledger/clients/stellar.d.ts.map +1 -0
  76. package/dist/types/ledger/clients/ton.d.ts +13 -0
  77. package/dist/types/ledger/clients/ton.d.ts.map +1 -0
  78. package/dist/types/ledger/clients/zcash.d.ts.map +1 -1
  79. package/dist/types/ledger/helpers/getLedgerAddress.d.ts.map +1 -1
  80. package/dist/types/ledger/helpers/getLedgerClient.d.ts +8 -1
  81. package/dist/types/ledger/helpers/getLedgerClient.d.ts.map +1 -1
  82. package/dist/types/ledger/index.d.ts +3 -2
  83. package/dist/types/ledger/index.d.ts.map +1 -1
  84. package/dist/types/ledger/types.d.ts +2 -2
  85. package/dist/types/ledger/types.d.ts.map +1 -1
  86. package/dist/types/trezor/cardanoSigner.d.ts.map +1 -1
  87. package/dist/types/trezor/hypercoreSigner.d.ts +22 -0
  88. package/dist/types/trezor/hypercoreSigner.d.ts.map +1 -0
  89. package/dist/types/trezor/index.d.ts +3 -2
  90. package/dist/types/trezor/index.d.ts.map +1 -1
  91. package/dist/types/trezor/stellarSigner.d.ts +1 -1
  92. package/package.json +25 -13
  93. package/src/helpers/cardano.ts +112 -0
  94. package/src/keepkey/index.ts +14 -14
  95. package/src/ledger/clients/cardano.ts +204 -0
  96. package/src/ledger/clients/evm.ts +4 -0
  97. package/src/ledger/clients/stellar.ts +83 -0
  98. package/src/ledger/clients/ton.ts +282 -0
  99. package/src/ledger/clients/zcash.ts +16 -6
  100. package/src/ledger/helpers/getLedgerAddress.ts +16 -0
  101. package/src/ledger/helpers/getLedgerClient.ts +13 -0
  102. package/src/ledger/index.ts +102 -30
  103. package/src/ledger/types.ts +2 -0
  104. package/src/trezor/cardanoSigner.ts +24 -80
  105. package/src/trezor/hypercoreSigner.ts +96 -0
  106. package/src/trezor/index.ts +153 -75
  107. package/dist/chunk-09e51wma.js +0 -4
  108. package/dist/chunk-5p3ttw6y.js +0 -4
  109. package/dist/chunk-gr3eswf1.js +0 -4
  110. package/dist/chunk-qjq7gvyx.js +0 -4
  111. package/dist/chunk-qjq7gvyx.js.map +0 -10
  112. package/dist/chunk-xx7cwpzq.js +0 -4
@@ -1,4 +0,0 @@
1
- import{Aa as tX}from"./chunk-yrxe491r.js";import{Jb as ZJ,Kd as XW,La as z2,Lb as vW,Na as L,Nb as K,Oa as bQ,Ob as j,Pa as wq,Pb as U,Qb as D,Rb as Pq,Sb as E,Tb as IW,Ub as x,Vb as jJ,Wb as Dq,Xb as QJ,Yb as qJ,jd as $,kd as O,lc as KX,ld as v,md as GX,vb as S}from"./chunk-dptbnkzm.js";import{Wd as fJ}from"./chunk-nhva847d.js";var cz=fJ(z2(),1);var b={Config:Symbol.for("config"),OriginToken:Symbol.for("originToken"),ContextModuleLoggerFactory:Symbol.for("contextModuleLoggerFactory")};var IJ=(q)=>new v(({bind:Q})=>{Q(b.Config).toConstantValue(q)});class Jq extends Error{kind;constructor(q,Q){super(Q),this.name="AccountOwnershipError",this.kind=q}}var B={NetworkClient:Symbol.for("networkClient")};var{defineProperty:OX,getOwnPropertyDescriptor:FX}=Object,bX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?FX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&OX(Q,J,X),X},MJ=(q,Q)=>(J,W)=>Q(J,W,q),kq=class{constructor(q,Q){this.config=q,this.http=Q}async getDescriptor({publicKey:q,address:Q,challenge:J,network:W}){try{let X=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${q}/${Q}`,{params:{challenge:J,network:W}});return X?this.isAccountOwnershipDto(X)?j({signedDescriptor:X.signedDescriptor,keyId:X.keyId,keyUsage:X.keyUsage}):K(new Jq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):K(new Jq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(X){return K(this.classifyError(X))}}classifyError(q){if(this.hasNumericStatus(q)){let Q=q.status,J=this.extractErrorMessage(q);return this.classifyFromStatus(Q,J)}return new Jq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}classifyFromStatus(q,Q){return q>=400&&q<500?new Jq("verification_failed",Q):new Jq("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${q}: ${Q}`)}hasNumericStatus(q){return typeof q=="object"&&q!==null&&"status"in q&&typeof q.status=="number"}extractErrorMessage(q){let Q=this.extractResponseBodyMessage(q);return Q!==null?Q:typeof q=="object"&&q!==null&&("message"in q)&&typeof q.message=="string"&&q.message.length>0?q.message:typeof q=="string"?q:"Unknown error"}extractResponseBodyMessage(q){if(typeof q!="object"||q===null||!("responseBody"in q)||typeof q.responseBody!="string")return null;let Q=q.responseBody;if(Q.length===0)return null;try{let J=JSON.parse(Q);if(typeof J=="object"&&J!==null&&"message"in J&&typeof J.message=="string"&&J.message.length>0)return J.message}catch{}return Q}isAccountOwnershipDto(q){return typeof q=="object"&&q!==null&&"signedDescriptor"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.signedDescriptor=="string"&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"}};kq=bX([O(),MJ(0,$(b.Config)),MJ(1,$(B.NetworkClient))],kq);var Wq={AccountOwnershipDataSource:Symbol.for("AccountOwnershipDataSource"),AccountOwnershipContextLoader:Symbol.for("AccountOwnershipContextLoader")};var H={PkiCertificateDataSource:Symbol.for("PkiCertificateDataSource"),PkiCertificateLoader:Symbol.for("PkiCertificateLoader")};var G=((q)=>(q.ERROR="error",q.CONCORDIUM_ACCOUNT_OWNERSHIP="concordiumAccountOwnership",q.ETHEREUM_TOKEN="ethereumToken",q.ETHEREUM_NFT="ethereumNft",q.ETHEREUM_TRUSTED_NAME="ethereumTrustedName",q.ETHEREUM_PLUGIN="ethereumPlugin",q.ETHEREUM_EXTERNAL_PLUGIN="ethereumExternalPlugin",q.ETHEREUM_TRANSACTION_INFO="ethereumTransactionInfo",q.ETHEREUM_PROXY_INFO="ethereumProxyInfo",q.ETHEREUM_ENUM="ethereumEnum",q.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION="ethereumTransactionFieldDescription",q.ETHEREUM_TRANSACTION_CHECK="ethereumTransactionCheck",q.ETHEREUM_DYNAMIC_NETWORK="ethereumDynamicNetwork",q.ETHEREUM_DYNAMIC_NETWORK_ICON="ethereumDynamicNetworkIcon",q.ETHEREUM_SAFE="ethereumSafe",q.ETHEREUM_SIGNER="ethereumSigner",q.ETHEREUM_GATED_SIGNING="ethereumGatedSigning",q.SOLANA_TOKEN="solanaToken",q.SOLANA_LIFI="solanaLifi",q.SOLANA_TRUSTED_NAME="solanaTrustedName",q.SOLANA_BASIC_TRUSTED_NAME="solanaBasicTrustedName",q.SOLANA_TRANSACTION_CHECK="solanaTransactionCheck",q.SOLANA_INSTRUCTION_INFO="solanaInstructionInfo",q.SOLANA_ENUM_VARIANT="solanaEnumVariant",q.SOLANA_TOKEN_INFO="solanaTokenInfo",q.SOLANA_TOKEN_ACCOUNT_STATE="solanaTokenAccountState",q.SOLANA_ALT_RESOLUTION="solanaAltResolution",q.TRON_TOKEN="tronToken",q))(G||{});var{defineProperty:NX,getOwnPropertyDescriptor:zX}=Object,jX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?zX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&NX(Q,J,X),X},wJ=(q,Q)=>(J,W)=>Q(J,W,q),vX=[G.CONCORDIUM_ACCOUNT_OWNERSHIP],xq=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return vX.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"publicKey"in q&&typeof q.publicKey=="string"&&q.publicKey.length>0&&"address"in q&&typeof q.address=="string"&&q.address.length>0&&"network"in q&&(q.network==="mainnet"||q.network==="testnet")&&"deviceModelId"in q&&q.deviceModelId!==void 0&&"challenge"in q&&typeof q.challenge=="string"&&q.challenge.length>0}async load({publicKey:q,address:Q,network:J,deviceModelId:W,challenge:X}){return(await this._dataSource.getDescriptor({publicKey:q,address:Q,challenge:X,network:J})).caseOf({Left:(Y)=>Promise.resolve([{type:G.ERROR,error:Y}]),Right:async(Y)=>[{type:G.CONCORDIUM_ACCOUNT_OWNERSHIP,payload:Y.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:Y.keyId,keyUsage:Y.keyUsage,targetDevice:W})}]})}};xq=jX([O(),wJ(0,$(Wq.AccountOwnershipDataSource)),wJ(1,$(H.PkiCertificateLoader))],xq);var LJ=()=>new v(({bind:q})=>{q(Wq.AccountOwnershipDataSource).to(kq),q(Wq.AccountOwnershipContextLoader).to(xq)});var a=((q)=>(q[q.TOKEN=G.ETHEREUM_TOKEN]="TOKEN",q[q.NFT=G.ETHEREUM_NFT]="NFT",q[q.TRUSTED_NAME=G.ETHEREUM_TRUSTED_NAME]="TRUSTED_NAME",q[q.ENUM=G.ETHEREUM_ENUM]="ENUM",q.CALLDATA="calldata",q))(a||{}),BX={TOKEN:G.ETHEREUM_TOKEN,NFT:G.ETHEREUM_NFT,TRUSTED_NAME:G.ETHEREUM_TRUSTED_NAME,PLUGIN:G.ETHEREUM_PLUGIN,EXTERNAL_PLUGIN:G.ETHEREUM_EXTERNAL_PLUGIN,TRANSACTION_INFO:G.ETHEREUM_TRANSACTION_INFO,PROXY_INFO:G.ETHEREUM_PROXY_INFO,ENUM:G.ETHEREUM_ENUM,TRANSACTION_FIELD_DESCRIPTION:G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,TRANSACTION_CHECK:G.ETHEREUM_TRANSACTION_CHECK,DYNAMIC_NETWORK:G.ETHEREUM_DYNAMIC_NETWORK,DYNAMIC_NETWORK_ICON:G.ETHEREUM_DYNAMIC_NETWORK_ICON,SAFE:G.ETHEREUM_SAFE,SIGNER:G.ETHEREUM_SIGNER,GATED_SIGNING:G.ETHEREUM_GATED_SIGNING},HX=new Set(Object.values(BX));function c2(q){return HX.has(q.type)}var k=((q)=>(q.Test="test",q.PersoV2="persov2",q.LedgerRootV3="ledger_root_v3",q.PluginSelectorKey="plugin_selector_key",q.NftMetadataKey="nft_metadata_key",q.TokenMetadataKey="token_metadata_key",q.PartnerMetadataKey="partner_metadata_key",q.Erc20MetadataKey="erc20_metadata_key",q.DomainMetadataKey="domain_metadata_key",q.CalCalldataKey="cal_calldata_key",q.CalTrustedNameKey="cal_trusted_name_key",q.CalNetwork="cal_network",q.CalGatedSigning="cal_gated_signing",q.SwapTemplateKey="swap_template_key",q))(k||{});var P=((q)=>(q.GenuineCheck="genuine_check",q.ExchangePayload="exchange_payload",q.NftMeta="nft_meta",q.TrustedName="trusted_name",q.BackupProvider="backup_provider",q.ProtectOrchestrator="protect_orchestrator",q.PluginMeta="plugin_meta",q.CoinMeta="coin_meta",q.SeedIdAuth="seed_id_auth",q.TxSimulationSigner="tx_simu_signer",q.Calldata="calldata",q.Network="network",q.LESMultisig="les_multisig",q.GatedSigning="gated_signing",q.SwapTemplate="swap_template",q))(P||{});var Xq="15",tQ="81ff";class T{static hexToBytes(q){let Q=q.startsWith("0x")||q.startsWith("0X")?q.slice(2):q;if(Q.length===0)throw Error("HexStringUtils.hexToBytes: empty hex string");if(Q.length%2!==0)throw Error(`HexStringUtils.hexToBytes: odd-length hex string (${Q.length})`);if(!/^[0-9a-fA-F]+$/.test(Q))throw Error("HexStringUtils.hexToBytes: non-hex characters");let J=new Uint8Array(Q.length/2);for(let W=0;W<J.length;W++)J[W]=Number.parseInt(Q.slice(W*2,W*2+2),16);return J}static stringToHex(q){let Q="";for(let J=0;J<q.length;J++){let W=q.charCodeAt(J).toString(16);Q+=W.padStart(2,"0")}return Q}static appendSignatureToPayload(q,Q,J){Q.length%2!==0&&(Q="0"+Q);let W=(Q.length/2).toString(16);return W.length%2!==0&&(W="0"+W),`${q}${J}${W}${Q}`}}var{defineProperty:DX,getOwnPropertyDescriptor:PX}=Object,UX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?PX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&DX(Q,J,X),X},eQ=(q,Q)=>(J,W)=>Q(J,W,q),Iq=class{constructor(q,Q,J,W){this.config=q,this._certificateLoader=Q,this.endpoint=J,this.http=W}async getCalldataDescriptors({chainId:q,address:Q,selector:J,deviceModelId:W}){let X;try{X=await this.http.get(`${this.config.cal.url}/${this.endpoint}`,{params:{output:"descriptors_calldata",chain_id:q,contracts:Q,contract_address:Q,ref:`branch:${this.config.cal.branch}`}})}catch(Y){return K(Error(`[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: ${Y}`))}if(!Array.isArray(X))return K(Error("[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array"));if(X.length===0)return K(Error(`[ContextModule] HttpCalldataDescriptorDataSource: No data for contract ${Q} and selector ${J}`));for(let Y of X){Q=Q.toLowerCase(),J=`0x${J.slice(2).toLowerCase()}`;let Z=Y.descriptors_calldata?.[Q]?.[J];if(!Z||!this.isCalldataDescriptorV1(Z,this.config.cal.mode))continue;let N=Z.transaction_info.descriptor.data,z=Z.transaction_info.descriptor.signatures[this.config.cal.mode],F={targetDevice:W,keyUsage:P.Calldata,keyId:k.CalCalldataKey},V=await this._certificateLoader.loadCertificate(F),_={type:G.ETHEREUM_TRANSACTION_INFO,payload:T.appendSignatureToPayload(N,z,tQ),certificate:V},R=[];for(let[M,I]of Object.entries(Z.enums))for(let[m,{data:C,signatures:u}]of Object.entries(I))R.push({type:G.ETHEREUM_ENUM,id:Number(M),value:Number(m),payload:T.appendSignatureToPayload(C,u[this.config.cal.mode],tQ),certificate:V});let w=Z.fields.map((M)=>({type:G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,payload:M.descriptor,reference:this.getReference(M.param)}));return j([_,...R,...w])}return K(Error(`[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract ${Q} and selector ${J}`))}getReference(q){if(q.type==="TOKEN_AMOUNT"&&q.token!==void 0&&q.token.type==="path")return{type:a.TOKEN,valuePath:this.toGenericPath(q.token.binary_path)};if(q.type==="TOKEN_AMOUNT"&&q.token!==void 0&&q.token.type==="constant")return{type:a.TOKEN,value:q.token.value};if(q.type==="NFT"&&q.collection.type==="path")return{type:a.NFT,valuePath:this.toGenericPath(q.collection.binary_path)};if(q.type==="NFT"&&q.collection.type==="constant")return{type:a.NFT,value:q.collection.value};if(q.type==="TRUSTED_NAME"&&q.value.type==="path")return{type:a.TRUSTED_NAME,valuePath:this.toGenericPath(q.value.binary_path),types:q.types,sources:q.sources};if(q.type==="ENUM"&&q.value.type==="path")return{type:a.ENUM,valuePath:this.toGenericPath(q.value.binary_path),id:q.id};if(q.type==="CALLDATA"&&q.value.type==="path"&&q.callee.type==="path")return{type:a.CALLDATA,valuePath:this.toGenericPath(q.value.binary_path),callee:this.toGenericPath(q.callee.binary_path),selector:q.selector?.type==="path"?this.toGenericPath(q.selector.binary_path):void 0,amount:q.amount?.type==="path"?this.toGenericPath(q.amount.binary_path):void 0,spender:q.spender?.type==="path"?this.toGenericPath(q.spender.binary_path):void 0,chainId:q.chainId?.type==="path"?this.toGenericPath(q.chainId.binary_path):void 0}}toGenericPath(q){return q.type==="CONTAINER"?q.value:q.elements.map((Q)=>{if(Q.type==="ARRAY"){let{weight:J,...W}=Q;return{itemSize:J,...W}}else if(Q.type==="LEAF"){let{leaf_type:J,...W}=Q;return{leafType:J,...W}}return Q})}isCalldataDescriptorV1(q,Q){return typeof q=="object"&&q.type==="calldata"&&q.version==="v1"&&this.isTransactionInfoV1(q.transaction_info,Q)&&this.isEnumV1(q.enums,Q)&&Array.isArray(q.fields)&&q.fields.every((J)=>this.isFieldV1(J))}isTransactionInfoV1(q,Q){return typeof q=="object"&&typeof q.descriptor=="object"&&typeof q.descriptor.data=="string"&&typeof q.descriptor.signatures=="object"&&typeof q.descriptor.signatures[Q]=="string"}isEnumV1(q,Q){return typeof q=="object"&&Object.entries(q).every(([J,W])=>typeof J=="string"&&typeof W=="object"&&Object.entries(W).every(([X,Y])=>typeof X=="string"&&typeof Y=="object"&&typeof Y.data=="string"&&Y.signatures!==void 0&&this.isCalldataSignatures(Y.signatures,Q)))}isCalldataSignatures(q,Q){return typeof q=="object"&&typeof q[Q]=="string"}isFieldV1(q){return typeof q=="object"&&typeof q.descriptor=="string"&&typeof q.param=="object"&&typeof q.param.value=="object"&&this.isDescriptorValueV1(q.param.value)&&(q.param.type==="RAW"||q.param.type==="AMOUNT"||q.param.type==="DATETIME"||q.param.type==="DURATION"||q.param.type==="UNIT"||q.param.type==="ENUM"||q.param.type==="NFT"&&this.isDescriptorValueV1(q.param.collection)||q.param.type==="TOKEN_AMOUNT"&&(q.param.token===void 0||this.isDescriptorValueV1(q.param.token))||q.param.type==="TRUSTED_NAME"&&Array.isArray(q.param.types)&&Array.isArray(q.param.sources)&&q.param.types.every((Q)=>typeof Q=="string")&&q.param.sources.every((Q)=>typeof Q=="string")||q.param.type==="CALLDATA"&&this.isDescriptorValueV1(q.param.value)&&this.isDescriptorValueV1(q.param.callee)&&(q.param.selector===void 0||this.isDescriptorValueV1(q.param.selector))&&(q.param.amount===void 0||this.isDescriptorValueV1(q.param.amount))&&(q.param.spender===void 0||this.isDescriptorValueV1(q.param.spender))&&(q.param.chainId===void 0||this.isDescriptorValueV1(q.param.chainId)))}isDescriptorValueV1(q){return typeof q=="object"&&typeof q.type_family=="string"&&["UINT","INT","UFIXED","FIXED","ADDRESS","BOOL","BYTES","STRING"].includes(q.type_family)&&(typeof q.type_size>"u"||typeof q.type_size=="number")&&(q.type==="path"&&this.isCalldataDescriptorValueBinaryPathV1(q)||q.type==="constant"&&this.isCalldataDescriptorValueConstantV1(q))}isCalldataDescriptorValueConstantV1(q){return typeof q=="object"&&q.type==="constant"&&typeof q.value=="string"}isCalldataDescriptorValueBinaryPathV1(q){return typeof q=="object"&&(q.type==="path"&&q.binary_path.type==="CONTAINER"&&["FROM","TO","VALUE"].includes(q.binary_path.value)||q.binary_path.type==="DATA"&&Array.isArray(q.binary_path.elements)&&q.binary_path.elements.every((Q)=>this.isPathElementV1(Q)))}isPathElementV1(q){return typeof q=="object"&&(q.type==="REF"||q.type==="TUPLE"&&typeof q.offset=="number"||q.type==="ARRAY"&&typeof q.weight=="number"&&(typeof q.start>"u"||typeof q.start=="number")&&(typeof q.end>"u"||typeof q.end=="number")||q.type==="LEAF"&&typeof q.leaf_type=="string"&&["ARRAY_LEAF","TUPLE_LEAF","STATIC_LEAF","DYNAMIC_LEAF"].includes(q.leaf_type)||q.type==="SLICE"&&(typeof q.start>"u"||typeof q.start=="number")&&(typeof q.end>"u"||typeof q.end=="number"))}};Iq=UX([O(),eQ(0,$(b.Config)),eQ(1,$(H.PkiCertificateLoader)),eQ(3,$(B.NetworkClient))],Iq);var o={CalldataContextLoader:Symbol.for("CalldataContextLoader"),DappCalldataDescriptorDataSource:Symbol.for("DappCalldataDescriptorDataSource"),TokenCalldataDescriptorDataSource:Symbol.for("TokenCalldataDescriptorDataSource")};var h={ProxyDataSource:Symbol.for("ProxyDataSource"),ProxyContextFieldLoader:Symbol.for("ProxyContextFieldLoader")};var{defineProperty:_X,getOwnPropertyDescriptor:RX}=Object,IX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?RX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&_X(Q,J,X),X},Tq=(q,Q)=>(J,W)=>Q(J,W,q),MX=[G.ETHEREUM_TRANSACTION_INFO,G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,G.ETHEREUM_PROXY_INFO,G.ETHEREUM_ENUM],Aq=class{constructor(q,Q,J,W){this.dappDataSource=q,this.tokenDataSource=Q,this.proxyDataSource=J,this.logger=W("CalldataContextLoader")}logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"data"in q&&"selector"in q&&"chainId"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.data)&&L(q.selector)&&q.selector!=="0x"&&MX.every((J)=>Q.includes(J))}async load(q){let{to:Q,data:J,selector:W,chainId:X,deviceModelId:Y}=q,Z={address:Q,chainId:X,selector:W,deviceModelId:Y,data:J},N=(await this._getContexts(Z,this.dappDataSource).alt(this._getContexts(Z,this.tokenDataSource)).alt(this._getContextsWithProxy(Z,this.dappDataSource)).run()).caseOf({Just:(z)=>z,Nothing:()=>[{type:G.ERROR,error:Error("[ContextModule] CalldataContextLoader: No calldata contexts found")}]});return this.logger.debug("load result",{data:{result:N}}),N}_getContexts({address:q,chainId:Q,selector:J,deviceModelId:W},X){return qJ(async({liftMaybe:Y})=>{let Z=await X.getCalldataDescriptors({deviceModelId:W,address:q,chainId:Q,selector:J});return Y(Z.toMaybe().filter((N)=>N.length>0))})}_getContextsWithProxy({address:q,chainId:Q,selector:J,deviceModelId:W,data:X},Y){return qJ(async({liftMaybe:Z})=>{let N=await this.proxyDataSource.getProxyImplementationAddress({calldata:X,proxyAddress:q,chainId:Q,challenge:""});return Z(N.toMaybe())}).map(({implementationAddress:Z})=>{let N={address:Z,chainId:Q,selector:J,deviceModelId:W,data:X};return this._getContexts(N,Y).map((z)=>[{type:G.ETHEREUM_PROXY_INFO,payload:"0x"},...z])}).join()}};Aq=IX([O(),Tq(0,$(o.DappCalldataDescriptorDataSource)),Tq(1,$(o.TokenCalldataDescriptorDataSource)),Tq(2,$(h.ProxyDataSource)),Tq(3,$(b.ContextModuleLoggerFactory))],Aq);var EJ=()=>new v(({bind:q})=>{q(o.DappCalldataDescriptorDataSource).toDynamicValue((Q)=>new Iq(Q.get(b.Config),Q.get(H.PkiCertificateLoader),"dapps",Q.get(B.NetworkClient))),q(o.TokenCalldataDescriptorDataSource).toDynamicValue((Q)=>new Iq(Q.get(b.Config),Q.get(H.PkiCertificateLoader),"tokens",Q.get(B.NetworkClient))),q(o.CalldataContextLoader).to(Aq)});var{defineProperty:wX,getOwnPropertyDescriptor:LX}=Object,EX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?LX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&wX(Q,J,X),X},SJ=(q,Q)=>(J,W)=>Q(J,W,q),SX={nanos:S.NANO_S,nanosp:S.NANO_SP,nanox:S.NANO_X,stax:S.STAX,flex:S.FLEX,apexp:S.APEX},fq=class{constructor(q,Q){this.config=q,this.http=Q}async getDynamicNetworkConfiguration(q){let Q;try{Q=await this.http.get(`${this.config.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:q}})}catch(X){return K(X instanceof Error?Error(X.message):Error("Failed to fetch network configuration"))}let J=Q?.[0];if(!J)return K(Error(`Network configuration not found for chain ID: ${q}`));if(!this.isValidNetworkData(J))return K(Error(`Invalid network configuration response for chain ID: ${q}`));let W=this.transformToNetworkConfiguration(J);return j(W)}isValidNetworkData(q){if(!q||typeof q!="object")return!1;let Q=q;if(typeof Q.id!="string"||!Q.descriptors||typeof Q.descriptors!="object")return!1;for(let J of Object.values(Q.descriptors))if(!this.isValidDescriptor(J))return!1;return!(Q.icons&&typeof Q.icons!="object")}isValidDescriptor(q){if(!q||typeof q!="object")return!1;let Q=q;if(typeof Q.data!="string"||typeof Q.descriptorType!="string"||typeof Q.descriptorVersion!="string"||!Q.signatures||typeof Q.signatures!="object")return!1;let J=Q.signatures;return!(typeof J.prod!="string"||typeof J.test!="string")}transformToNetworkConfiguration(q){let Q=Object.entries(q.descriptors).reduce((J,[W,X])=>{let Y=SX[W.toLowerCase()];return Y===void 0||(J[Y]={descriptorType:X.descriptorType,descriptorVersion:X.descriptorVersion,data:X.data,signatures:X.signatures,icon:q.icons?.[W]}),J},{});return{id:q.id,descriptors:Q}}};fq=EX([O(),SJ(0,$(b.Config)),SJ(1,$(B.NetworkClient))],fq);var Yq={DynamicNetworkDataSource:Symbol("DynamicNetworkDataSource"),DynamicNetworkContextLoader:Symbol("DynamicNetworkContextLoader")};var{defineProperty:kX,getOwnPropertyDescriptor:xX}=Object,TX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?xX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&kX(Q,J,X),X},hq=(q,Q)=>(J,W)=>Q(J,W,q),AX="15",fX=[G.ETHEREUM_DYNAMIC_NETWORK,G.ETHEREUM_DYNAMIC_NETWORK_ICON],Cq=class{_networkDataSource;_config;_certificateLoader;logger;constructor(q,Q,J,W){this._networkDataSource=q,this._config=Q,this._certificateLoader=J,this.logger=W("DynamicNetworkContextLoader")}canHandle(q,Q){return typeof q=="object"&&q!==null&&"chainId"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S&&typeof q.chainId=="number"&&fX.every((J)=>Q.includes(J))}async load(q){let{chainId:Q,deviceModelId:J}=q,W=await this._networkDataSource.getDynamicNetworkConfiguration(Q),X=await this._certificateLoader.loadCertificate({keyId:k.CalNetwork,keyUsage:P.Network,targetDevice:J}),Y=W.caseOf({Left:()=>[],Right:(Z)=>{let N=[],z=Z.descriptors[J];if(!z)return[];let F=z.signatures[this._config.cal.mode];if(!F)return[];let V=T.appendSignatureToPayload(z.data,F,AX);return N.push({type:G.ETHEREUM_DYNAMIC_NETWORK,payload:V,certificate:X}),z.icon&&N.push({type:G.ETHEREUM_DYNAMIC_NETWORK_ICON,payload:z.icon}),N}});return this.logger.debug("load result",{data:{result:Y}}),Y}};Cq=TX([O(),hq(0,$(Yq.DynamicNetworkDataSource)),hq(1,$(b.Config)),hq(2,$(H.PkiCertificateLoader)),hq(3,$(b.ContextModuleLoggerFactory))],Cq);var kJ=()=>new v(({bind:q})=>{q(Yq.DynamicNetworkDataSource).to(fq),q(Yq.DynamicNetworkContextLoader).to(Cq)});var{defineProperty:hX,getOwnPropertyDescriptor:CX}=Object,yX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?CX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&hX(Q,J,X),X},xJ=(q,Q)=>(J,W)=>Q(J,W,q),yq=class{constructor(q,Q){this.config=q,this.http=Q}async getDappInfos({chainId:q,address:Q,selector:J}){try{let W=await this.http.get(`${this.config.cal.url}/dapps`,{params:{output:"b2c,b2c_signatures,abis",chain_id:q,contracts:Q}});if(!W[0])return j(void 0);Q=Q.toLowerCase(),J=`0x${J.slice(2).toLowerCase()}`;let{erc20OfInterest:X,method:Y,plugin:Z}=W[0].b2c?.contracts?.find((V)=>V.address===Q)?.selectors?.[J]||{},{signature:N,serialized_data:z}=W[0].b2c_signatures?.[Q]?.[J]||{};if(!X||!Y||!Z||!N||!z)return j(void 0);let F=W[0].abis?.[Q];return F?j({selectorDetails:{method:Y,plugin:Z,erc20OfInterest:X,signature:N,serializedData:z},abi:F}):j(void 0)}catch{return K(Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))}}};yq=yX([O(),xJ(0,$(b.Config)),xJ(1,$(B.NetworkClient))],yq);var Zq={ExternalPluginDataSource:Symbol.for("ExternalPluginDataSource"),ExternalPluginContextLoader:Symbol.for("ExternalPluginContextLoader")};import{Interface as pX}from"ethers";var A={TokenDataSource:Symbol.for("TokenDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader"),TokenContextFieldLoader:Symbol.for("TokenContextFieldLoader")};var n={AbiDecoderDataSource:Symbol.for("AbiDecoderDataSource"),CommandDecoderDataSource:Symbol.for("CommandDecoderDataSource"),UniswapContextLoader:Symbol.for("UniswapContextLoader")};var{defineProperty:gX,getOwnPropertyDescriptor:mX}=Object,uX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?mX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&gX(Q,J,X),X},gq=(q,Q)=>(J,W)=>Q(J,W,q),lX=[G.ETHEREUM_EXTERNAL_PLUGIN,G.ETHEREUM_TOKEN],mq=class{constructor(q,Q,J,W){this._externalPluginDataSource=q,this._tokenDataSource=Q,this._uniswapLoader=J,this._customPluginLoaders={Uniswap:this._uniswapLoader},this.logger=W("ExternalPluginContextLoader")}_customPluginLoaders;logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"data"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.data)&&q.data!=="0x"&&L(q.selector)&&q.selector!=="0x"&&lX.every((J)=>Q.includes(J))}async load(q){let{to:Q,data:J,selector:W,chainId:X}=q,Y=await this._externalPluginDataSource.getDappInfos({address:Q,chainId:X,selector:W}),Z=await QJ(async({liftEither:N})=>{let z=await N(Y);if(!z)return[];let F={type:G.ETHEREUM_EXTERNAL_PLUGIN,payload:z.selectorDetails.serializedData.concat(z.selectorDetails.signature)},V=this._customPluginLoaders[z.selectorDetails.plugin];if(V!==void 0&&V.canHandle(q,[G.ETHEREUM_TOKEN])){let M=await V.load(q);return[F,...M]}let _=this.getDecodedCallData(z.abi,z.selectorDetails.method,J);if(_.isLeft())return[{type:G.ERROR,error:_.extract()},F];let R=_.extract(),w=z.selectorDetails.erc20OfInterest.map(async(M)=>this.getTokenPayload(q,M,R));return[...(await Promise.all(w)).map((M)=>M.caseOf({Left:(I)=>({type:G.ERROR,error:I}),Right:(I)=>({type:G.ETHEREUM_TOKEN,payload:I})})),F]}).caseOf({Left:(N)=>[{type:G.ERROR,error:N}],Right:(N)=>N});return this.logger.debug("load result",{data:{result:Z}}),Z}getTokenPayload(q,Q,J){let W=this.getAddressFromPath(Q,J);return QJ(({fromPromise:X})=>X(this._tokenDataSource.getTokenInfosPayload({address:W,chainId:q.chainId})))}getDecodedCallData(q,Q,J){try{let W=new pX(q);return j(W.decodeFunctionData(Q,J))}catch{return K(Error("[ContextModule] ExternalPluginContextLoader: Unable to parse abi"))}}getAddressFromPath(q,Q){let J=Q;for(let W of q.split("."))W==="-1"?J=J[J.length-1]:J=J[W];if(!L(J))throw Error("[ContextModule] ExternalPluginContextLoader: Unable to get address");return J}};mq=uX([O(),gq(0,$(Zq.ExternalPluginDataSource)),gq(1,$(A.TokenDataSource)),gq(2,$(n.UniswapContextLoader)),gq(3,$(b.ContextModuleLoggerFactory))],mq);var TJ=()=>new v(({bind:q})=>{q(Zq.ExternalPluginDataSource).to(yq),q(Zq.ExternalPluginContextLoader).to(mq)});var{defineProperty:cX,getOwnPropertyDescriptor:dX}=Object,sX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?dX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&cX(Q,J,X),X},AJ=(q,Q)=>(J,W)=>Q(J,W,q),uq=class{constructor(q,Q){this.config=q,this.http=Q}async getGatedDescriptor({contractAddress:q,selector:Q,chainId:J}){let W;try{W=await this.http.get(`${this.config.cal.url}/gated_dapps`,{params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors,app,category",contracts:q,chain_id:J}})}catch(N){return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${N}`))}if(!this.isGatedDappsDto(W))return K(Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));let X=q.toLowerCase(),Y=Q.startsWith("0x")?Q.slice(2).toLowerCase():Q.toLowerCase(),Z=`0x${Y}`;for(let N of W){let z=N.gated_descriptors?.[X];if(!z)continue;let F=z[Y]??z[Z]??z[Q];if(F?.descriptor)return j({signedDescriptor:T.appendSignatureToPayload(F.descriptor,F.signatures[this.config.cal.mode],Xq)})}return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${q} and selector ${Q}`))}async getGatedDescriptorForTypedData({contractAddress:q,schemaHash:Q,chainId:J}){let W;try{W=await this.http.get(`${this.config.cal.url}/gated_dapps`,{params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors",contracts:q,chain_id:J}})}catch(Z){return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${Z}`))}if(!this.isGatedDappsDto(W))return K(Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));let X=q.toLowerCase(),Y=Q.toLowerCase();for(let Z of W){let N=Z.gated_descriptors?.[X];if(!N)continue;let z=N[Y];if(z?.descriptor)return j({signedDescriptor:T.appendSignatureToPayload(z.descriptor,z.signatures[this.config.cal.mode],Xq)})}return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${q} and schema hash ${Q}`))}isGatedDappsDto(q){if(!Array.isArray(q)||q.length===0)return!1;for(let Q of q)if(!this.isGatedDappsResponseItemDto(Q))return!1;return!0}isGatedDappsResponseItemDto(q){if(!q||typeof q!="object")return!1;let Q=q;if(!Q.gated_descriptors||typeof Q.gated_descriptors!="object")return!1;let J=Q.gated_descriptors;for(let W of Object.values(J)){if(typeof W!="object"||W===null)return!1;for(let X of Object.values(W))if(!this.isGatedDescriptorEntryDto(X))return!1}return!0}isGatedDescriptorEntryDto(q){if(!q||typeof q!="object")return!1;let Q=q;if(typeof Q.network!="string"||typeof Q.chain_id!="number"||typeof Q.address!="string"||typeof Q.selector!="string"||typeof Q.version!="string"||typeof Q.descriptor!="string")return!1;if(Q.signatures!==void 0){if(typeof Q.signatures!="object"||Q.signatures===null)return!1;let J=Q.signatures;for(let W of Object.values(J))if(typeof W!="string")return!1}return!0}};uq=sX([O(),AJ(0,$(b.Config)),AJ(1,$(B.NetworkClient))],uq);var d={GatedDescriptorDataSource:Symbol.for("GatedDescriptorDataSource"),GatedSigningContextLoader:Symbol.for("GatedSigningContextLoader"),GatedSigningTypedDataContextLoader:Symbol.for("GatedSigningTypedDataContextLoader")};var{defineProperty:iX,getOwnPropertyDescriptor:nX}=Object,aX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?nX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&iX(Q,J,X),X},pq=(q,Q)=>(J,W)=>Q(J,W,q),oX=[G.ETHEREUM_GATED_SIGNING];function rX(q){let Q=q.toLowerCase();return Q.startsWith("0x")?Q:`0x${Q}`}var lq=class{constructor(q,Q,J,W){this._dataSource=q,this._certificateLoader=Q,this._proxyDataSource=J,this.logger=W("GatedSigningContextLoader")}logger;canHandle(q,Q){return oX.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"to"in q&&L(q.to)&&q.to!=="0x"&&"selector"in q&&L(q.selector)&&"chainId"in q&&typeof q.chainId=="number"&&"deviceModelId"in q&&q.deviceModelId!==void 0}async load({to:q,selector:Q,chainId:J,deviceModelId:W}){let X=await this._dataSource.getGatedDescriptor({contractAddress:q,selector:Q,chainId:J});if(X.isRight()){let{signedDescriptor:M}=X.unsafeCoerce(),I=await this._loadGatedCertificate(W);return this.logger.debug("load result",{data:{path:"direct",to:q,selector:Q,chainId:J,contextTypes:[G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_GATED_SIGNING,payload:M,certificate:I}]}let Y=X.extract(),Z={type:G.ERROR,error:Y},N=await this._proxyDataSource.getProxyImplementationAddress({proxyAddress:q,chainId:J,challenge:"",calldata:"0x"});if(N.isLeft()){let M=N.extract();return this.logger.warn("No gated descriptor found and proxy resolution failed",{data:{to:q,selector:Q,chainId:J,directError:Y.message,proxyError:M.message}}),[Z]}let z=N.unsafeCoerce(),F=rX(z.implementationAddress),V=await this._dataSource.getGatedDescriptor({contractAddress:F,selector:Q,chainId:J});if(V.isLeft()){let M=V.extract();return this.logger.warn("No gated descriptor found for proxy implementation address",{data:{to:q,implementationAddress:F,selector:Q,chainId:J,directError:Y.message,implError:M.message}}),[Z]}let{signedDescriptor:_}=V.unsafeCoerce(),[R,w]=await Promise.all([this._certificateLoader.loadCertificate({keyId:z.keyId,keyUsage:z.keyUsage,targetDevice:W}),this._loadGatedCertificate(W)]);return this.logger.debug("load result",{data:{path:"proxy",to:q,implementationAddress:F,selector:Q,chainId:J,contextTypes:[G.ETHEREUM_PROXY_INFO,G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_PROXY_INFO,payload:z.signedDescriptor,certificate:R},{type:G.ETHEREUM_GATED_SIGNING,payload:_,certificate:w}]}_loadGatedCertificate(q){return this._certificateLoader.loadCertificate({keyId:k.CalGatedSigning,keyUsage:P.GatedSigning,targetDevice:q})}};lq=aX([O(),pq(0,$(d.GatedDescriptorDataSource)),pq(1,$(H.PkiCertificateLoader)),pq(2,$(h.ProxyDataSource)),pq(3,$(b.ContextModuleLoggerFactory))],lq);var hJ=fJ(tX(),1);function eX(q){return Object.fromEntries(Object.entries(q).sort(([Q],[J])=>Q.localeCompare(J)).map(([Q,J])=>[Q,J.map((W)=>({name:W.name,type:W.type}))]))}function cq(q){let Q=eX(q),J=JSON.stringify(Q);return hJ.default(J).toString()}var{defineProperty:qY,getOwnPropertyDescriptor:QY}=Object,JY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?QY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&qY(Q,J,X),X},dq=(q,Q)=>(J,W)=>Q(J,W,q),WY="0x0000000000000000000000000000000000000000",XY=[G.ETHEREUM_GATED_SIGNING];function YY(q){if(!q||typeof q!="object")return!1;let Q=q;if(!Q.types||typeof Q.types!="object"||Array.isArray(Q.types))return!1;let J=Q.types;for(let W of Object.keys(J)){if(typeof W!="string")return!1;let X=J[W];if(!Array.isArray(X))return!1;for(let Y of X)if(!Y||typeof Y!="object"||typeof Y.name!="string"||typeof Y.type!="string")return!1}return!0}var sq=class{constructor(q,Q,J,W){this._dataSource=q,this._certificateLoader=Q,this._proxyDataSource=J,this.logger=W("GatedSigningTypedDataContextLoader")}logger;canHandle(q,Q){return XY.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"data"in q&&YY(q.data)&&"chainId"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0&&"challenge"in q&&typeof q.challenge=="string"}async load({data:q,chainId:Q,deviceModelId:J,challenge:W}){let X=q.domain?.verifyingContract?.toLowerCase()??WY,Y=X.startsWith("0x")?X:`0x${X}`,Z=cq(q.types),N=await this._dataSource.getGatedDescriptorForTypedData({contractAddress:Y,schemaHash:Z,chainId:Q});if(N.isRight()){let{signedDescriptor:C}=N.unsafeCoerce(),u=await this._certificateLoader.loadCertificate({keyId:k.CalGatedSigning,keyUsage:P.GatedSigning,targetDevice:J});return this.logger.debug("load result",{data:{path:"direct",verifyingContract:Y,schemaHash:Z,chainId:Q,contextTypes:[G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_GATED_SIGNING,payload:C,certificate:u}]}let z=N.caseOf({Left:(C)=>C,Right:()=>Error("unreachable")}),F=await this._proxyDataSource.getProxyImplementationAddress({proxyAddress:Y,chainId:Q,challenge:W,calldata:"0x"});if(F.isLeft()){let C=F.extract();return this.logger.warn("Direct gated descriptor lookup failed and proxy resolution failed",{data:{verifyingContract:Y,schemaHash:Z,chainId:Q,directError:z.message,proxyError:C.message}}),[{type:G.ERROR,error:z}]}let V=F.unsafeCoerce(),_=V.implementationAddress.toLowerCase(),R=_.startsWith("0x")?_:`0x${_}`,w=await this._dataSource.getGatedDescriptorForTypedData({contractAddress:R,schemaHash:Z,chainId:Q});if(w.isLeft()){let C=w.extract();return this.logger.warn("No gated descriptor found for proxy implementation address",{data:{verifyingContract:Y,implementationAddress:R,schemaHash:Z,chainId:Q,directError:z.message,implError:C.message}}),[{type:G.ERROR,error:z}]}let{signedDescriptor:M}=w.unsafeCoerce(),[I,m]=await Promise.all([this._certificateLoader.loadCertificate({keyId:V.keyId,keyUsage:V.keyUsage,targetDevice:J}),this._certificateLoader.loadCertificate({keyId:k.CalGatedSigning,keyUsage:P.GatedSigning,targetDevice:J})]);return this.logger.debug("load result",{data:{path:"proxy",verifyingContract:Y,implementationAddress:R,schemaHash:Z,chainId:Q,contextTypes:[G.ETHEREUM_PROXY_INFO,G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_PROXY_INFO,payload:V.signedDescriptor,certificate:I},{type:G.ETHEREUM_GATED_SIGNING,payload:M,certificate:m}]}};sq=JY([O(),dq(0,$(d.GatedDescriptorDataSource)),dq(1,$(H.PkiCertificateLoader)),dq(2,$(h.ProxyDataSource)),dq(3,$(b.ContextModuleLoggerFactory))],sq);var CJ=()=>new v(({bind:q})=>{q(d.GatedDescriptorDataSource).to(uq),q(d.GatedSigningContextLoader).to(lq),q(d.GatedSigningTypedDataContextLoader).to(sq)});var{defineProperty:ZY,getOwnPropertyDescriptor:$Y}=Object,GY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?$Y(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&ZY(Q,J,X),X},yJ=(q,Q)=>(J,W)=>Q(J,W,q),iq=class{constructor(q,Q){this.config=q,this.http=Q}async getSetPluginPayload({chainId:q,address:Q,selector:J}){try{let W=await this.http.get(`${this.config.metadataServiceDomain.url}/v1/ethereum/${q}/contracts/${Q}/plugin-selector/${J}`);return W.payload?j(W.payload):K(Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}catch{return K(Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}}async getNftInfosPayload({chainId:q,address:Q}){try{let J=await this.http.get(`${this.config.metadataServiceDomain.url}/v1/ethereum/${q}/contracts/${Q}`);return J.payload?j(J.payload):K(Error("[ContextModule] HttpNftDataSource: no nft metadata"))}catch{return K(Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}}};iq=GY([O(),yJ(0,$(b.Config)),yJ(1,$(B.NetworkClient))],iq);var s={NftDataSource:Symbol.for("NftDataSource"),NftContextLoader:Symbol.for("NftContextLoader"),NftContextFieldLoader:Symbol.for("NftContextFieldLoader")};var{defineProperty:VY,getOwnPropertyDescriptor:KY}=Object,OY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?KY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&VY(Q,J,X),X},FY=(q,Q)=>(J,W)=>Q(J,W,q),nq=class{constructor(q){this._dataSource=q}canHandle(q,Q){return Q===G.ETHEREUM_NFT&&typeof q=="object"&&q!==null&&"chainId"in q&&"address"in q}async loadField(q){return(await this._dataSource.getNftInfosPayload({address:q.address,chainId:q.chainId})).caseOf({Left:(Q)=>({type:G.ERROR,error:Q}),Right:(Q)=>({type:G.ETHEREUM_NFT,payload:Q})})}};nq=OY([O(),FY(0,$(s.NftDataSource))],nq);var{defineProperty:bY,getOwnPropertyDescriptor:NY}=Object,zY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?NY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&bY(Q,J,X),X},gJ=(q,Q)=>(J,W)=>Q(J,W,q),mJ=((q)=>(q.Approve="0x095ea7b3",q.SetApprovalForAll="0xa22cb465",q.TransferFrom="0x23b872dd",q.SafeTransferFrom="0x42842e0e",q.SafeTransferFromWithData="0xb88d4fde",q))(mJ||{}),uJ=((q)=>(q.SetApprovalForAll="0xa22cb465",q.SafeTransferFrom="0xf242432a",q.SafeBatchTransferFrom="0x2eb2c2d6",q))(uJ||{}),jY=[...Object.values(mJ),...Object.values(uJ)],vY=[G.ETHEREUM_PLUGIN,G.ETHEREUM_NFT],aq=class{_dataSource;logger;constructor(q,Q){this._dataSource=q,this.logger=Q("NftContextLoader")}canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.selector)&&this.isSelectorSupported(q.selector)&&vY.every((J)=>Q.includes(J))}async load(q){let Q=[],{to:J,selector:W,chainId:X}=q,Y=(await this._dataSource.getSetPluginPayload({chainId:X,address:J,selector:W})).caseOf({Left:(N)=>({type:G.ERROR,error:N}),Right:(N)=>({type:G.ETHEREUM_PLUGIN,payload:N})});if(Y.type===G.ERROR)return this.logger.debug("load result",{data:{result:[Y]}}),[Y];Q.push(Y);let Z=(await this._dataSource.getNftInfosPayload({chainId:X,address:J})).caseOf({Left:(N)=>({type:G.ERROR,error:N}),Right:(N)=>({type:G.ETHEREUM_NFT,payload:N})});return Z.type===G.ERROR?(this.logger.debug("load result",{data:{result:[Z]}}),[Z]):(Q.push(Z),this.logger.debug("load result",{data:{result:Q}}),Q)}isSelectorSupported(q){return Object.values(jY).includes(q)}};aq=zY([O(),gJ(0,$(s.NftDataSource)),gJ(1,$(b.ContextModuleLoggerFactory))],aq);var pJ=()=>new v(({bind:q})=>{q(s.NftDataSource).to(iq),q(s.NftContextLoader).to(aq),q(s.NftContextFieldLoader).to(nq)});var{defineProperty:BY,getOwnPropertyDescriptor:HY}=Object,DY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?HY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&BY(Q,J,X),X},lJ=(q,Q)=>(J,W)=>Q(J,W,q),oq=class{constructor(q,Q){this.config=q,this.http=Q}async getProxyImplementationAddress({proxyAddress:q,chainId:Q,challenge:J,calldata:W}){let X;try{X=await this.http.post(`${this.config.metadataServiceDomain.url}/v2/ethereum/${Q}/contract/proxy/delegate`,{proxy:q,data:W,challenge:J})}catch{return K(Error("[ContextModule] HttpProxyDataSource: Failed to fetch delegate proxy"))}return X?this.isProxyDelegateCallDto(X)?X.addresses[0]?j({implementationAddress:X.addresses[0],signedDescriptor:X.signedDescriptor,keyId:k.DomainMetadataKey,keyUsage:P.TrustedName}):K(Error(`[ContextModule] HttpProxyDataSource: No implementation address found for proxy ${q} on chain ${Q}`)):K(Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${q} on chain ${Q}`)):K(Error(`[ContextModule] HttpProxyDataSource: No data received for proxy ${q} on chain ${Q}`))}isProxyDelegateCallDto(q){return typeof q=="object"&&q!==null&&"addresses"in q&&"signedDescriptor"in q&&Array.isArray(q.addresses)&&q.addresses.every((Q)=>typeof Q=="string")&&typeof q.signedDescriptor=="string"}};oq=DY([O(),lJ(0,$(b.Config)),lJ(1,$(B.NetworkClient))],oq);var{defineProperty:PY,getOwnPropertyDescriptor:UY}=Object,_Y=(q,Q,J,W)=>{for(var X=W>1?void 0:W?UY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&PY(Q,J,X),X},cJ=(q,Q)=>(J,W)=>Q(J,W,q),rq=class{constructor(q,Q){this.config=q,this.http=Q}async getProxyImplementationAddress({proxyAddress:q,chainId:Q,challenge:J}){let W;try{W=await this.http.get(`${this.config.metadataServiceDomain.url}/v3/ethereum/${Q}/contract/proxy/${q}`,{params:{challenge:J,resolver:"SAFE_GATEWAY"}})}catch{return K(Error("[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation"))}return W?this.isSafeProxyImplementationAddressDto(W)?j({implementationAddress:W.implementationAddress,signedDescriptor:W.signedDescriptor,keyId:W.keyId,keyUsage:W.keyUsage}):K(Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${q} on chain ${Q}`)):K(Error(`[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${q} on chain ${Q}`))}isSafeProxyImplementationAddressDto(q){return typeof q=="object"&&q!==null&&"proxyAddress"in q&&"implementationAddress"in q&&"standard"in q&&"signedDescriptor"in q&&"providedBy"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.proxyAddress=="string"&&typeof q.implementationAddress=="string"&&typeof q.standard=="string"&&typeof q.signedDescriptor=="string"&&typeof q.providedBy=="string"&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"}};rq=_Y([O(),cJ(0,$(b.Config)),cJ(1,$(B.NetworkClient))],rq);var{defineProperty:RY,getOwnPropertyDescriptor:IY}=Object,MY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?IY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&RY(Q,J,X),X},dJ=(q,Q)=>(J,W)=>Q(J,W,q),tq=class{constructor(q,Q){this._proxyDataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q===G.ETHEREUM_PROXY_INFO&&typeof q=="object"&&q!==null&&"chainId"in q&&"proxyAddress"in q&&"calldata"in q&&"challenge"in q&&"deviceModelId"in q}async loadField(q){return(await this._proxyDataSource.getProxyImplementationAddress({calldata:q.calldata,proxyAddress:q.proxyAddress,chainId:q.chainId,challenge:q.challenge})).caseOf({Left:(Q)=>Promise.resolve({type:G.ERROR,error:Q}),Right:async({signedDescriptor:Q,keyId:J,keyUsage:W})=>{let X=await this._certificateLoader.loadCertificate({keyId:J,keyUsage:W,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_PROXY_INFO,payload:Q,certificate:X}}})}};tq=MY([O(),dJ(0,$(h.ProxyDataSource)),dJ(1,$(H.PkiCertificateLoader))],tq);var sJ=(q)=>new v(({bind:Q})=>{q?.proxy==="safe"?Q(h.ProxyDataSource).to(rq):Q(h.ProxyDataSource).to(oq),Q(h.ProxyContextFieldLoader).to(tq)});var{defineProperty:wY,getOwnPropertyDescriptor:LY}=Object,EY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?LY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&wY(Q,J,X),X},iJ=(q,Q)=>(J,W)=>Q(J,W,q),eq=class{constructor(q,Q){this.config=q,this.http=Q}async getDescriptors({safeContractAddress:q,chainId:Q,challenge:J}){try{let W=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/ethereum/${Q}/safe/account/${q}`,{params:{challenge:J}});return W?this.isSafeAccountDto(W)?j({account:{signedDescriptor:W.accountDescriptor.signedDescriptor,keyId:W.accountDescriptor.keyId,keyUsage:W.accountDescriptor.keyUsage},signers:{signedDescriptor:W.signersDescriptor.signedDescriptor,keyId:W.signersDescriptor.keyId,keyUsage:W.signersDescriptor.keyUsage}}):K(Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")):K(Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response"))}catch{return K(Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors"))}}isSafeAccountDto(q){return typeof q=="object"&&q!==null&&"accountDescriptor"in q&&"signersDescriptor"in q&&typeof q.accountDescriptor=="object"&&typeof q.signersDescriptor=="object"&&this.isSafeDescriptorDto(q.accountDescriptor)&&this.isSafeDescriptorDto(q.signersDescriptor)}isSafeDescriptorDto(q){return typeof q=="object"&&q!==null&&"signedDescriptor"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.signedDescriptor=="string"&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"}};eq=EY([iJ(0,$(b.Config)),iJ(1,$(B.NetworkClient))],eq);var $q={SafeAddressDataSource:Symbol.for("SafeAddressDataSource"),SafeAddressLoader:Symbol.for("SafeAddressLoader")};var{defineProperty:SY,getOwnPropertyDescriptor:kY}=Object,xY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?kY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&SY(Q,J,X),X},nJ=(q,Q)=>(J,W)=>Q(J,W,q),TY=[G.ETHEREUM_SAFE,G.ETHEREUM_SIGNER],qQ=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q.every((J)=>TY.includes(J))&&typeof q=="object"&&q!==null&&"safeContractAddress"in q&&L(q.safeContractAddress)&&q.safeContractAddress!=="0x"&&"chainId"in q&&typeof q.chainId=="number"&&"deviceModelId"in q&&q.deviceModelId!==void 0&&"challenge"in q&&typeof q.challenge=="string"&&q.challenge.length>0}async load({safeContractAddress:q,chainId:Q,deviceModelId:J,challenge:W}){return(await this._dataSource.getDescriptors({safeContractAddress:q,chainId:Q,challenge:W})).caseOf({Left:(X)=>Promise.resolve([{type:G.ERROR,error:X}]),Right:async({account:X,signers:Y})=>[{type:G.ETHEREUM_SAFE,payload:X.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:X.keyId,keyUsage:X.keyUsage,targetDevice:J})},{type:G.ETHEREUM_SIGNER,payload:Y.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:Y.keyId,keyUsage:Y.keyUsage,targetDevice:J})}]})}};qQ=xY([O(),nJ(0,$($q.SafeAddressDataSource)),nJ(1,$(H.PkiCertificateLoader))],qQ);var aJ=()=>new v(({bind:q})=>{q($q.SafeAddressDataSource).to(eq),q($q.SafeAddressLoader).to(qQ)});var{defineProperty:AY,getOwnPropertyDescriptor:fY}=Object,hY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?fY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&AY(Q,J,X),X},oJ=(q,Q)=>(J,W)=>Q(J,W,q),QQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfosPayload({chainId:q,address:Q}){try{let J=(await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:Q,chain_id:q,output:"descriptor",ref:`branch:${this.config.cal.branch}`}}))?.[0];if(!J||!J.descriptor||!J.descriptor.data||!J.descriptor.signatures||typeof J.descriptor.signatures[this.config.cal.mode]!="string")return K(Error(`[ContextModule] HttpTokenDataSource: no token metadata for address ${Q} on chain ${q}`));let W=(J.descriptor.data.length/2-20-4-4).toString(16).padStart(2,"0");return j([W,J.descriptor.data,J.descriptor.signatures[this.config.cal.mode]].join(""))}catch{return K(Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};QQ=hY([O(),oJ(0,$(b.Config)),oJ(1,$(B.NetworkClient))],QQ);var{defineProperty:CY,getOwnPropertyDescriptor:yY}=Object,gY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?yY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&CY(Q,J,X),X},rJ=(q,Q)=>(J,W)=>Q(J,W,q),JQ=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q===G.ETHEREUM_TOKEN&&typeof q=="object"&&q!==null&&"chainId"in q&&"address"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0}async loadField(q){let Q=await this._dataSource.getTokenInfosPayload({address:q.address,chainId:q.chainId}),J=await this._certificateLoader.loadCertificate({keyId:k.Erc20MetadataKey,keyUsage:P.CoinMeta,targetDevice:q.deviceModelId});return Q.caseOf({Left:(W)=>({type:G.ERROR,error:W}),Right:(W)=>({type:G.ETHEREUM_TOKEN,payload:W,certificate:J})})}};JQ=gY([O(),rJ(0,$(A.TokenDataSource)),rJ(1,$(H.PkiCertificateLoader))],JQ);var{defineProperty:mY,getOwnPropertyDescriptor:uY}=Object,pY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?uY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&mY(Q,J,X),X},tJ=(q,Q)=>(J,W)=>Q(J,W,q),eJ=((q)=>(q.Approve="0x095ea7b3",q.Transfer="0xa9059cbb",q))(eJ||{}),lY=Object.values(eJ),cY=[G.ETHEREUM_TOKEN],WQ=class{_dataSource;logger;constructor(q,Q){this._dataSource=q,this.logger=Q("TokenContextLoader")}canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.selector)&&this.isSelectorSupported(q.selector)&&cY.every((J)=>Q.includes(J))}async load(q){let{to:Q,chainId:J}=q,W=[(await this._dataSource.getTokenInfosPayload({address:Q,chainId:J})).caseOf({Left:(X)=>({type:G.ERROR,error:X}),Right:(X)=>({type:G.ETHEREUM_TOKEN,payload:X})})];return this.logger.debug("load result",{data:{result:W}}),W}isSelectorSupported(q){return Object.values(lY).includes(q)}};WQ=pY([O(),tJ(0,$(A.TokenDataSource)),tJ(1,$(b.ContextModuleLoggerFactory))],WQ);var qW=()=>new v(({bind:q})=>{q(A.TokenDataSource).to(QQ),q(A.TokenContextLoader).to(WQ),q(A.TokenContextFieldLoader).to(JQ)});var QW="X-Ledger-Client-Version",JW="X-Ledger-Client-Origin";var WW={dependencies:{bs58:"catalog:","crypto-js":"catalog:",ethers:"catalog:",inversify:"catalog:","purify-ts":"catalog:","reflect-metadata":"catalog:"},devDependencies:{"@ledgerhq/device-management-kit":"workspace:^","@ledgerhq/eslint-config-dsdk":"workspace:^","@ledgerhq/ldmk-tool":"workspace:^","@ledgerhq/prettier-config-dsdk":"workspace:^","@ledgerhq/tsconfig-dsdk":"workspace:^","@ledgerhq/vitest-config-dmk":"workspace:^","@types/crypto-js":"catalog:","ts-node":"catalog:"},exports:{".":{import:"./lib/esm/index.js",require:"./lib/cjs/index.js",types:"./lib/types/index.d.ts"},"./*":{import:"./lib/esm/*",require:"./lib/cjs/*",types:"./lib/types/*"}},files:["./lib"],license:"Apache-2.0",name:"@ledgerhq/context-module",peerDependencies:{"@ledgerhq/device-management-kit":"workspace:^"},private:!1,repository:{type:"git",url:"https://github.com/LedgerHQ/device-sdk-ts.git"},scripts:{build:"pnpm ldmk-tool build --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",dev:'concurrently "pnpm watch:builds" "pnpm watch:types"',lint:"eslint","lint:fix":"pnpm lint --fix",postpack:"find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",prebuild:"rimraf lib",prettier:"prettier . --check","prettier:fix":"prettier . --write",test:"vitest run","test:coverage":"vitest run --coverage","test:watch":"vitest",typecheck:"tsc --noEmit","watch:builds":"pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json","watch:types":'concurrently "tsc --watch -p tsconfig.prod.json" "tsc-alias --watch -p tsconfig.prod.json"'},version:"2.6.0"};var qq=(q)=>new XW({headers:{[QW]:`context-module/${WW.version}`,...q.originToken&&{[JW]:q.originToken}}});var{defineProperty:sY,getOwnPropertyDescriptor:iY}=Object,nY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?iY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&sY(Q,J,X),X},YW=(q,Q)=>(J,W)=>Q(J,W,q),XQ=class{constructor(q,Q){this.config=q,this.http=Q??qq(q)}http;async getDomainNamePayload({chainId:q,domain:Q,challenge:J}){let W;try{W=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${q}/forward/${Q}`,{params:{types:"eoa",sources:"ens",challenge:J}})}catch{return K(Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name"))}return W?this.isTrustedNameDto(W)?j({data:W.signedDescriptor.data,keyId:W.keyId,keyUsage:W.keyUsage}):K(Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${Q} on chain ${q}`)):K(Error(`[ContextModule] HttpTrustedNameDataSource: No data received for domain ${Q} on chain ${q}`))}async getTrustedNamePayload({chainId:q,address:Q,challenge:J,sources:W,types:X}){let Y;try{W=W.filter((N)=>N==="ens"||N==="crypto_asset_list"),Y=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${q}/reverse/${Q}`,{params:{types:X.join(","),sources:W.join(","),challenge:J}})}catch{return K(Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name"))}if(!Y)return K(Error(`[ContextModule] HttpTrustedNameDataSource: No data received for address ${Q} on chain ${q}`));if(!this.isTrustedNameDto(Y))return K(Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${Q} on chain ${q}`));if(typeof Y.signedDescriptor.signatures[this.config.cal.mode]!="string")return j({data:Y.signedDescriptor.data,keyId:Y.keyId,keyUsage:Y.keyUsage});let Z=Y.signedDescriptor.signatures[this.config.cal.mode];return j({data:this.formatTrustedName(Y.signedDescriptor.data,Z),keyId:Y.keyId,keyUsage:Y.keyUsage})}formatTrustedName(q,Q){Q.length%2!==0&&(Q="0"+Q);let J="15",W=(Q.length/2).toString(16);return`${q}${J}${W}${Q}`}isTrustedNameDto(q){return typeof q=="object"&&q!==null&&"signedDescriptor"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"&&typeof q.signedDescriptor=="object"&&q.signedDescriptor!==null&&"data"in q.signedDescriptor&&"signatures"in q.signedDescriptor&&typeof q.signedDescriptor.data=="string"&&typeof q.signedDescriptor.signatures=="object"}};XQ=nY([O(),YW(0,$(b.Config)),YW(1,$(B.NetworkClient))],XQ);var l={TrustedNameDataSource:Symbol.for("TrustedNameDataSource"),TrustedNameContextLoader:Symbol.for("TrustedNameContextLoader"),TrustedNameContextFieldLoader:Symbol.for("TrustedNameContextFieldLoader")};var{defineProperty:aY,getOwnPropertyDescriptor:oY}=Object,rY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?oY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&aY(Q,J,X),X},ZW=(q,Q)=>(J,W)=>Q(J,W,q),YQ=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q===G.ETHEREUM_TRUSTED_NAME&&typeof q=="object"&&q!==null&&"chainId"in q&&"address"in q&&"challenge"in q&&"types"in q&&"sources"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0}async loadField(q){return await(await this._dataSource.getTrustedNamePayload({chainId:q.chainId,address:q.address,challenge:q.challenge,types:q.types,sources:q.sources})).caseOf({Left:(Q)=>Promise.resolve({type:G.ERROR,error:Q}),Right:async({data:Q,keyId:J,keyUsage:W})=>{let X=await this._certificateLoader.loadCertificate({keyId:J,keyUsage:W,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_TRUSTED_NAME,payload:Q,certificate:X}}})}};YQ=rY([O(),ZW(0,$(l.TrustedNameDataSource)),ZW(1,$(H.PkiCertificateLoader))],YQ);var{defineProperty:tY,getOwnPropertyDescriptor:eY}=Object,qZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?eY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&tY(Q,J,X),X},JJ=(q,Q)=>(J,W)=>Q(J,W,q),QZ=[G.ETHEREUM_TRUSTED_NAME],ZQ=class{constructor(q,Q,J){this._dataSource=q,this._certificateLoader=Q,this.logger=J("TrustedNameContextLoader")}logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"chainId"in q&&q.chainId!==void 0&&typeof q.chainId=="number"&&"to"in q&&q.to!==void 0&&L(q.to)&&q.to!=="0x"&&"deviceModelId"in q&&q.deviceModelId!==void 0&&QZ.every((J)=>Q.includes(J))}async load(q){let Q=await this._dataSource.getTrustedNamePayload({chainId:q.chainId,address:q.to,challenge:"",types:["eoa"],sources:["ens"]});return this.logger.debug("[ContextModule]: load result",{data:{payload:Q}}),await Q.caseOf({Left:(J)=>Promise.resolve([{type:G.ERROR,error:J}]),Right:async({data:J,keyId:W,keyUsage:X})=>{let Y=await this._certificateLoader.loadCertificate({keyId:W,keyUsage:X,targetDevice:q.deviceModelId});return[{type:G.ETHEREUM_TRUSTED_NAME,payload:J,certificate:Y}]}})}};ZQ=qZ([O(),JJ(0,$(l.TrustedNameDataSource)),JJ(1,$(H.PkiCertificateLoader)),JJ(2,$(b.ContextModuleLoggerFactory))],ZQ);var $W=(q)=>new v(({bind:Q})=>{q?Q(l.TrustedNameDataSource).toConstantValue(q):Q(l.TrustedNameDataSource).to(XQ),Q(l.TrustedNameContextLoader).to(ZQ),Q(l.TrustedNameContextFieldLoader).to(YQ)});var GW=255,Gq=((q)=>(q.None="none",q.Present="present",q.VerifyingContract="verifying_contract",q))(Gq||{});var{defineProperty:JZ,getOwnPropertyDescriptor:WZ}=Object,XZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?WZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&JZ(Q,J,X),X},VW=(q,Q)=>(J,W)=>Q(J,W,q),$Q=class{constructor(q,Q){this.config=q,this.http=Q}async getTypedDataFilters({chainId:q,address:Q,schema:J,version:W}){let X;try{let Y=await this.http.get(`${this.config.cal.url}/dapps`,{params:{contracts:Q,chain_id:q,output:"descriptors_eip712",descriptors_eip712_version:W,descriptors_eip712:"<set>",ref:`branch:${this.config.cal.branch}`}}),Z=cq(J);Q=Q.toLowerCase();let N=(Y??[]).map((V)=>V?.descriptors_eip712?.[Q]?.[Z]).find(Boolean);if(!N)return K(Error(`[ContextModule] HttpTypedDataDataSource: no typed data filters for address ${Q} on chain ${q} for schema ${Z}`));if(!Array.isArray(N.instructions))return K(Error(`[ContextModule] HttpTypedDataDataSource: no message info for address ${Q} on chain ${q} for schema ${Z}`));let z=[],F={};for(let V of N.instructions)if(this.isInstructionContractInfo(V,this.config.cal.mode))X={displayName:V.display_name,signature:V.signatures[this.config.cal.mode],filtersCount:V.field_mappers_count};else if(W==="v1"&&this.isInstructionFieldV1(V,this.config.cal.mode))z.push({type:"raw",displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode]});else if(this.isInstructionFieldV2(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode]});else if(this.isInstructionFieldV2WithCoinRef(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode],tokenIndex:V.coin_ref});else if(this.isInstructionFieldV2WithName(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode],types:V.name_types,sources:V.name_sources,typesAndSourcesPayload:this.formatTrustedNameTypesAndSources(V)});else if(this.isInstructionCalldataInfo(V,this.config.cal.mode))F[V.calldata_index]={displayName:V.display_name,calldataIndex:V.calldata_index,valueFlag:V.value_filter_flag,calleeFlag:this.convertCalldataPresenceFlag(V.callee_filter_flag),amountFlag:V.amount_filter_flag,spenderFlag:this.convertCalldataPresenceFlag(V.spender_filter_flag),chainIdFlag:V.chain_id_filter_flag,selectorFlag:V.selector_filter_flag,signature:V.signatures[this.config.cal.mode]};else if(this.isInstructionFieldV2Calldata(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode],calldataIndex:V.calldata_index});else return K(Error(`[ContextModule] HttpTypedDataDataSource: invalid typed data field for address ${Q} on chain ${q} for schema ${Z}`));return X?j({messageInfo:X,filters:z,calldatasInfos:F}):K(Error(`[ContextModule] HttpTypedDataDataSource: no message info for address ${Q} on chain ${q} for schema ${Z}`))}catch{return K(Error("[ContextModule] HttpTypedDataDataSource: Failed to fetch typed data informations"))}}convertCalldataPresenceFlag(q){switch(q){case"none":return Gq.None;case"present":return Gq.Present;case"verifying_contract":return Gq.VerifyingContract;default:throw Error(`Unhandled flag: ${q}`)}}formatTrustedNameTypesAndSources(q){let Q=q.name_types.length,J=q.name_sources.length,W=q.descriptor.slice((Q+J)*2*-1,J*2*-1),X=q.descriptor.slice(J*2*-1),Y=Q.toString(16).padStart(2,"0"),Z=J.toString(16).padStart(2,"0");return Y+W+Z+X}isInstructionFieldV1(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"}isInstructionFieldV2(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&["raw","datetime"].includes(q.format)&&q.coin_ref===void 0}isInstructionFieldV2WithCoinRef(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&["token","amount"].includes(q.format)&&typeof q.coin_ref=="number"}isInstructionFieldV2WithName(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&q.format==="trusted-name"&&q.coin_ref===void 0&&Array.isArray(q.name_types)&&Array.isArray(q.name_sources)&&q.name_types.every((J)=>typeof J=="string")&&q.name_sources.every((J)=>typeof J=="string")}isInstructionContractInfo(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_mappers_count=="number"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&q.field_path===void 0}isInstructionCalldataInfo(q,Q){return typeof q=="object"&&typeof q.type=="string"&&q.type==="calldata"&&typeof q.display_name=="string"&&typeof q.calldata_index=="number"&&typeof q.value_filter_flag=="boolean"&&typeof q.chain_id_filter_flag=="boolean"&&typeof q.selector_filter_flag=="boolean"&&typeof q.amount_filter_flag=="boolean"&&["none","present","verifying_contract"].includes(q.callee_filter_flag)&&["none","present","verifying_contract"].includes(q.spender_filter_flag)&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"}isInstructionFieldV2Calldata(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&["calldata-value","calldata-callee","calldata-chain-id","calldata-selector","calldata-amount","calldata-spender"].includes(q.format)&&typeof q.calldata_index=="number"}};$Q=XZ([O(),VW(0,$(b.Config)),VW(1,$(B.NetworkClient))],$Q);var Vq={TypedDataDataSource:Symbol.for("TypedDataDataSource"),TypedDataContextLoader:Symbol.for("TypedDataContextLoader")};var{defineProperty:YZ,getOwnPropertyDescriptor:ZZ}=Object,$Z=(q,Q,J,W)=>{for(var X=W>1?void 0:W?ZZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&YZ(Q,J,X),X},Mq=(q,Q)=>(J,W)=>Q(J,W,q),GQ=class{constructor(q,Q,J,W,X){this.dataSource=q,this.tokenDataSource=Q,this.proxyDataSource=J,this._certificateLoader=W,this.logger=X("DefaultTypedDataContextLoader")}logger;async load(q){let Q,J=await this.dataSource.getTypedDataFilters({address:q.verifyingContract,chainId:q.chainId,version:q.version,schema:q.schema});if(J.isLeft()){let{resolvedAddress:F,context:V}=await this.resolveProxy(q);if(V!==void 0&&(Q=V,J=await this.dataSource.getTypedDataFilters({address:F,chainId:q.chainId,version:q.version,schema:q.schema})),J.isLeft()){let _={type:"error",error:J.extract()};return this.logger.debug("load result",{data:{result:_}}),_}}let{messageInfo:W,filters:X,calldatasInfos:Y}=J.unsafeCoerce(),Z=X.reduce((F,V)=>(F[V.path]=V,F),{}),N=await this._certificateLoader.loadCertificate({keyId:k.Erc20MetadataKey,keyUsage:P.CoinMeta,targetDevice:q.deviceModelId}),z={type:"success",messageInfo:W,filters:Z,trustedNamesAddresses:this.extractTrustedNames(X,q),tokens:await this.extractTokens(X,q),calldatas:this.extractCalldatas(X,Y,q),certificate:N,proxy:Q};return this.logger.debug("load result",{data:{result:z}}),z}async resolveProxy(q){let Q=await this.proxyDataSource.getProxyImplementationAddress({calldata:"0x",proxyAddress:q.verifyingContract,chainId:q.chainId,challenge:q.challenge??""});if(Q.isLeft())return{resolvedAddress:q.verifyingContract,context:void 0};let J=Q.unsafeCoerce(),W=await this._certificateLoader.loadCertificate({keyId:J.keyId,keyUsage:J.keyUsage,targetDevice:q.deviceModelId});return{resolvedAddress:J.implementationAddress,context:{type:G.ETHEREUM_PROXY_INFO,payload:J.signedDescriptor,certificate:W}}}extractTrustedNames(q,Q){return q.filter((J)=>J.type==="trusted-name").reduce((J,W)=>{let X=Q.fieldsValues.filter((Y)=>Y.path===W.path);if(X.length!==0){let Y=X[0],Z=this.convertAddressToHexaString(Y.value);J[W.path]=Z}return J},{})}async extractTokens(q,Q){let J={};for(let W of q){if(W.type!=="token"&&W.type!=="amount")continue;let X=W.tokenIndex;if(J[X]===void 0){if(W.type==="token"){let Y=Q.fieldsValues.filter((z)=>z.path===W.path);if(Y.length===0)continue;let Z=Y[0],N=this.convertAddressToHexaString(Z.value);if(Y.every((z)=>this.convertAddressToHexaString(z.value)===N)){let z=Q.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:N,chainId:z})).ifRight((F)=>{J[X]=F})}}else if(W.type==="amount"&&X===GW){let{verifyingContract:Y,chainId:Z}=Q;(await this.tokenDataSource.getTokenInfosPayload({address:Y,chainId:Z})).ifRight((N)=>{J[X]=N})}}}return J}extractCalldatas(q,Q,J){let W=q.reduce((Y,Z)=>{if(Z.type==="calldata-value"||Z.type==="calldata-callee"||Z.type==="calldata-chain-id"||Z.type==="calldata-selector"||Z.type==="calldata-amount"||Z.type==="calldata-spender"){let N=Y[Z.calldataIndex];N===void 0?Y[Z.calldataIndex]=[Z]:N.push(Z)}return Y},{}),X={};for(let Y in Q){let Z=Q[Y],N=W[Y];if(!N)continue;let z=this.extractHexaString(N.find((I)=>I.type==="calldata-value"),J,"0x"),F=this.extractHexaString(N.find((I)=>I.type==="calldata-selector"),J,z.slice(0,10)),V=this.extractAddress(N.find((I)=>I.type==="calldata-callee"),J,Z.calleeFlag),_=this.extractAddress(N.find((I)=>I.type==="calldata-spender"),J,Z.spenderFlag),R=this.extractBigint(N.find((I)=>I.type==="calldata-amount"),J,void 0),w=this.extractBigint(N.find((I)=>I.type==="calldata-chain-id"),J,void 0),M=w!==void 0&&w<Number.MAX_SAFE_INTEGER?Number(w):J.chainId;X[Y]={filter:Z,subset:{chainId:M,data:z,selector:F,to:V,value:R,from:_}}}return X}extractHexaString(q,Q,J){if(q!==void 0){let W=Q.fieldsValues.filter((X)=>X.path===q.path);if(W.length!==0)return wq(W[0].value)}return J}extractAddress(q,Q,J,W){if(J===Gq.VerifyingContract)return Q.verifyingContract;if(q!==void 0){let X=Q.fieldsValues.filter((Y)=>Y.path===q.path);if(X.length!==0)return this.convertAddressToHexaString(X[0].value)}return W}extractBigint(q,Q,J){if(q!==void 0){let W=Q.fieldsValues.filter((X)=>X.path===q.path);if(W.length!==0)return BigInt(wq(W[0].value))}return J}convertAddressToHexaString(q){return`0x${Array.from(q,(Q)=>Q.toString(16).padStart(2,"0")).join("").padStart(40,"0")}`}};GQ=$Z([O(),Mq(0,$(Vq.TypedDataDataSource)),Mq(1,$(A.TokenDataSource)),Mq(2,$(h.ProxyDataSource)),Mq(3,$(H.PkiCertificateLoader)),Mq(4,$(b.ContextModuleLoggerFactory))],GQ);var KW=()=>new v(({bind:q})=>{q(Vq.TypedDataDataSource).to($Q),q(Vq.TypedDataContextLoader).to(GQ)});var OW=["function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable"],FW="0x3593564c",y=((q)=>(q.V2_SWAP_EXACT_IN="V2_SWAP_EXACT_IN",q.V2_SWAP_EXACT_OUT="V2_SWAP_EXACT_OUT",q.V3_SWAP_EXACT_IN="V3_SWAP_EXACT_IN",q.V3_SWAP_EXACT_OUT="V3_SWAP_EXACT_OUT",q.WRAP_ETH="WRAP_ETH",q.UNWRAP_ETH="UNWRAP_ETH",q.PERMIT2_PERMIT="PERMIT2_PERMIT",q.PERMIT2_TRANSFER_FROM="PERMIT2_TRANSFER_FROM",q.PERMIT2_PERMIT_BATCH="PERMIT2_PERMIT_BATCH",q.PERMIT2_TRANSFER_FROM_BATCH="PERMIT2_TRANSFER_FROM_BATCH",q.PAY_PORTION="PAY_PORTION",q.SWEEP="SWEEP",q))(y||{}),bW={"0x08":"V2_SWAP_EXACT_IN","0x09":"V2_SWAP_EXACT_OUT","0x00":"V3_SWAP_EXACT_IN","0x01":"V3_SWAP_EXACT_OUT","0x0b":"WRAP_ETH","0x0c":"UNWRAP_ETH","0x0a":"PERMIT2_PERMIT","0x0d":"PERMIT2_TRANSFER_FROM","0x02":"PERMIT2_PERMIT_BATCH","0x03":"PERMIT2_TRANSFER_FROM_BATCH","0x06":"PAY_PORTION","0x04":"SWEEP"},NW=["V2_SWAP_EXACT_IN","V2_SWAP_EXACT_OUT","V3_SWAP_EXACT_IN","V3_SWAP_EXACT_OUT"];var WJ=((q)=>(q[q.ETHEREUM_MAINNET=1]="ETHEREUM_MAINNET",q[q.ETHEREUM_GOERLI=5]="ETHEREUM_GOERLI",q[q.ETHEREUM_SEPOLIA=11155111]="ETHEREUM_SEPOLIA",q[q.ARBITRUM_ONE=42161]="ARBITRUM_ONE",q[q.ARBITRUM_GOERLI=421613]="ARBITRUM_GOERLI",q[q.AVALANCHE_C_CHAIN=43114]="AVALANCHE_C_CHAIN",q[q.BSC=56]="BSC",q[q.BASE=8453]="BASE",q[q.BASE_GOERLI=84531]="BASE_GOERLI",q[q.BLAST=23888]="BLAST",q[q.OPTIMISM=10]="OPTIMISM",q[q.OPTIMISM_GOERLI=420]="OPTIMISM_GOERLI",q[q.POLYGON=137]="POLYGON",q[q.POLYGON_MUMBAI=80001]="POLYGON_MUMBAI",q))(WJ||{}),zW={1:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",5:"0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",11155111:"0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",42161:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",421613:"0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3",43114:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",56:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",8453:"0x4200000000000000000000000000000000000006",84531:"0x44D627f900da8AdaC7561bD73aA745F132450798",23888:"0x4300000000000000000000000000000000000004",10:"0x4200000000000000000000000000000000000006",420:"0x4200000000000000000000000000000000000006",137:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",80001:"0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889"};var{defineProperty:GZ,getOwnPropertyDescriptor:VZ}=Object,KZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?VZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&GZ(Q,J,X),X},OZ=(q,Q)=>(J,W)=>Q(J,W,q),XJ=40,jW=6,VQ=class{constructor(q){this.abiDecoder=q}decode(q,Q,J){switch(q){case y.V2_SWAP_EXACT_IN:return this._decodeSwapV2(Q);case y.V2_SWAP_EXACT_OUT:return this._decodeSwapV2(Q);case y.V3_SWAP_EXACT_IN:return this._decodeSwapV3(Q);case y.V3_SWAP_EXACT_OUT:return this._decodeSwapV3(Q);case y.WRAP_ETH:return this._decodeWrappedEth(Q,J);case y.UNWRAP_ETH:return this._decodeWrappedEth(Q,J);case y.SWEEP:return this._decodeSweep(Q);case y.PERMIT2_PERMIT:case y.PERMIT2_TRANSFER_FROM:case y.PERMIT2_PERMIT_BATCH:case y.PERMIT2_TRANSFER_FROM_BATCH:case y.PAY_PORTION:return[];default:return[]}}_decodeSwapV2(q){let[,,,Q]=this.abiDecoder.decode(["address","uint256","uint256","address[]","bool"],q);return!Array.isArray(Q)||!Q.every(L)?[]:Q.map((J)=>J.toLowerCase())}_decodeSwapV3(q){let[,,,Q]=this.abiDecoder.decode(["address","uint256","uint256","bytes","bool"],q);if(typeof Q!="string"||!L(Q)||Q.length<2+XJ*2+jW)return[];let J=[];for(let W=2;W<Q.length;W+=XJ+jW)J.push(Q.slice(W,W+XJ));return J.map((W)=>W.toLowerCase()).map((W)=>`0x${W}`)}_isSupportedChainId(q){return Object.values(WJ).includes(q)}_decodeWrappedEth(q,Q){return this._isSupportedChainId(Q)?[zW[Q].toLowerCase()]:[]}_decodeSweep=(q)=>{let[Q]=this.abiDecoder.decode(["address","address","uint256"],q);return typeof Q!="string"||!L(Q)?[]:[Q.toLowerCase()]}};VQ=KZ([O(),OZ(0,$(n.AbiDecoderDataSource))],VQ);import{AbiCoder as zZ}from"ethers";var{defineProperty:FZ,getOwnPropertyDescriptor:bZ}=Object,NZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?bZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&FZ(Q,J,X),X},KQ=class{decode(q,Q){try{return zZ.defaultAbiCoder().decode(q,Q)}catch{return[]}}};KQ=NZ([O()],KQ);import{Interface as HZ}from"ethers";var{defineProperty:jZ,getOwnPropertyDescriptor:vZ}=Object,BZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?vZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&jZ(Q,J,X),X},YJ=(q,Q)=>(J,W)=>Q(J,W,q),DZ=[G.ETHEREUM_TOKEN],OQ=class{constructor(q,Q,J){this.commandDecoderDataSource=q,this.tokenDataSource=Q,this.logger=J("UniswapContextLoader")}logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"data"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.data)&&q.data!=="0x"&&L(q.selector)&&q.selector===FW&&DZ.every((J)=>Q.includes(J))}async load(q){let{data:Q,chainId:J}=q,W=await this._extractClearSignContexts(Q,J);return this.logger.debug("load result",{data:{result:W}}),W}async _extractClearSignContexts(q,Q){try{let J=new HZ(OW).parseTransaction({data:q}),W=J?.args[0],X=J?.args[1];if(!L(W)||!this._isHexaStringArray(X))return[];let Y=this._extractCommands(W).orDefault([]);if(W.length===0||X.length!==Y.length)return[];let Z=Y.reduce((z,F,V)=>{let _=X[V],R=this.commandDecoderDataSource.decode(F,_,Q);return z.push([F,R]),z},[]);if(!this._isChainingSwapSupported(Z))return[];let N=[...new Set(Z.flatMap(([,z])=>z))];return(await Promise.all(N.map((z)=>this.tokenDataSource.getTokenInfosPayload({address:z,chainId:Q})))).map((z)=>z.caseOf({Left:(F)=>({type:G.ERROR,error:F}),Right:(F)=>({type:G.ETHEREUM_TOKEN,payload:F})}))}catch{return[]}}_extractCommands(q){return ZJ.fromNullable(q.slice(2).match(/../g)).map((Q)=>Q.map((J)=>`0x${J}`)).map((Q)=>Q.map((J)=>bW[J])).chain((Q)=>Q.every((J)=>J!==void 0)?ZJ.of(Q):vW)}_isChainingSwapSupported(q){let Q,J;for(let[W,X]of q){if(!NW.includes(W))continue;let Y=W.slice(0,2);if(Q&&(Q!==X[0]||J!==Y))return!1;Q=X[X.length-1],J=Y}return!0}_isHexaStringArray(q){return Array.isArray(q)&&q.every((Q)=>typeof Q=="string"&&L(Q))}};OQ=BZ([O(),YJ(0,$(n.CommandDecoderDataSource)),YJ(1,$(A.TokenDataSource)),YJ(2,$(b.ContextModuleLoggerFactory))],OQ);var BW=()=>new v(({bind:q})=>{q(n.AbiDecoderDataSource).to(KQ),q(n.CommandDecoderDataSource).to(VQ),q(n.UniswapContextLoader).to(OQ)});class $J{static keyUsageMap=new Map([[P.GenuineCheck,1],[P.ExchangePayload,2],[P.NftMeta,3],[P.TrustedName,4],[P.BackupProvider,5],[P.ProtectOrchestrator,6],[P.PluginMeta,7],[P.CoinMeta,8],[P.SeedIdAuth,9],[P.TxSimulationSigner,10],[P.Calldata,11],[P.Network,12],[P.SwapTemplate,13],[P.LESMultisig,14],[P.GatedSigning,15]]);static mapKeyUsageForFirmware(q){return Object.values(P).includes(q)?this.keyUsageMap.get(q)??-1:-1}}var{defineProperty:PZ,getOwnPropertyDescriptor:UZ}=Object,_Z=(q,Q,J,W)=>{for(var X=W>1?void 0:W?UZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&PZ(Q,J,X),X},HW=(q,Q)=>(J,W)=>Q(J,W,q),FQ=class{constructor(q,Q){this.config=q,this.http=Q}async fetchCertificate(q){let Q={output:"descriptor",target_device:q.targetDevice,latest:!0,public_key_id:q.keyId,public_key_usage:q.keyUsage};try{let J=await this.http.get(`${this.config.cal.url}/certificates`,{params:{output:Q.output,target_device:Q.target_device,latest:Q.latest,public_key_id:Q.public_key_id,public_key_usage:Q.public_key_usage}});if(Array.isArray(J)&&J.length>0&&this.isValidPkiCertificateResponse(J[0],this.config.cal.mode)){let W=bQ(T.appendSignatureToPayload(J[0].descriptor.data,J[0].descriptor.signatures[this.config.cal.mode],Xq));if(!W)return K(Error("[ContextModule] HttpPkiCertificateDataSource: Cannot generate payload from fetched PKI Certificate"));let X={payload:W,keyUsageNumber:$J.mapKeyUsageForFirmware(q.keyUsage)};return j(X)}else return K(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}catch{return K(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}}isValidPkiCertificateResponse(q,Q){if(!this.isRecord(q)||!this.isRecord(q.descriptor))return!1;let J=q.descriptor;return typeof J.data!="string"||!this.isRecord(J.signatures)?!1:typeof J.signatures[Q]=="string"}isRecord(q){return typeof q=="object"&&q!==null}};FQ=_Z([O(),HW(0,$(b.Config)),HW(1,$(B.NetworkClient))],FQ);var{defineProperty:RZ,getOwnPropertyDescriptor:IZ}=Object,MZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?IZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&RZ(Q,J,X),X},wZ=(q,Q)=>(J,W)=>Q(J,W,q),NQ=class{_dataSource;constructor(q){this._dataSource=q}async loadCertificate(q){return(await this._dataSource.fetchCertificate(q)).orDefault(void 0)}};NQ=MZ([O(),wZ(0,$(H.PkiCertificateDataSource))],NQ);var zQ=()=>new v(({bind:q})=>{q(H.PkiCertificateDataSource).to(FQ),q(H.PkiCertificateLoader).to(NQ)});var{defineProperty:LZ,getOwnPropertyDescriptor:EZ}=Object,SZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?EZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&LZ(Q,J,X),X},DW=(q,Q)=>(J,W)=>Q(J,W,q),jQ=class{constructor(q,Q){this.config=q,this.http=Q??qq(q)}http;async report(q){try{await this.http.post(`${this.config.reporter.url}/v1/blind-signing-events`,{...q,source:this.config.appSource},{responseType:"void"})}catch{return K(Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return j(void 0)}};jQ=SZ([O(),DW(0,$(b.Config)),DW(1,$(B.NetworkClient))],jQ);var Qq={BlindSigningReporterDatasource:Symbol.for("BlindSigningReporterDatasource"),BlindSigningReporter:Symbol.for("BlindSigningReporter")};var{defineProperty:kZ,getOwnPropertyDescriptor:xZ}=Object,TZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?xZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&kZ(Q,J,X),X},AZ=(q,Q)=>(J,W)=>Q(J,W,q),vQ=class{constructor(q){this.dataSource=q}async report(q){return this.dataSource.report(q)}};vQ=TZ([O(),AZ(0,$(Qq.BlindSigningReporterDatasource))],vQ);var PW=()=>new v(({bind:q})=>{q(Qq.BlindSigningReporterDatasource).to(jQ),q(Qq.BlindSigningReporter).to(vQ)});var{defineProperty:fZ,getOwnPropertyDescriptor:hZ}=Object,CZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?hZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&fZ(Q,J,X),X},GJ=(q,Q)=>(J,W)=>Q(J,W,q),BQ=class{constructor(q,Q,J){this.config=q,this.http=J??qq(q),this.logger=Q("HttpSignReporterDatasource")}http;logger;async report(q){try{let Q=this.buildDto(q,this.config.appSource);this.logger.debug("[report] Posting signing event",{data:Q}),await this.http.post(`${this.config.reporter.url}/v2/blind-signing-events`,Q,{responseType:"void"})}catch{return K(Error("[ContextModule] HttpSignReporterDatasource: Failed to report signing event"))}return j(void 0)}buildDto(q,Q){let J={isBlindSign:q.isBlindSign,sessionId:q.sessionId??null,envData:{modelId:q.modelId,signerAppVersion:q.signerAppVersion,deviceVersion:q.deviceVersion,source:Q,...q.platform!==void 0&&{platform:q.platform},...q.appVersion!==void 0&&{appVersion:q.appVersion},...q.platformOS!==void 0&&{platformOS:q.platformOS},...q.platformVersion!==void 0&&{platformVersion:q.platformVersion},...q.liveAppContext!==void 0&&{liveAppContext:q.liveAppContext}}};switch(q.chain){case"ETH":return{...J,chain:"ETH",chainData:{chain:"ETH",signatureId:q.signatureId,signingMethod:q.signingMethod,targetAddress:q.targetAddress,chainId:q.chainId,blindSignReason:q.blindSignReason,...q.selectorId!==void 0&&{selectorId:q.selectorId},...q.clearSigningType!==void 0&&{clearSigningType:q.clearSigningType},...q.partialContextErrors!==void 0&&{partialContextErrors:q.partialContextErrors}}};case"SOL":return{...J,chain:"SOL",chainData:{chain:"SOL",signatureId:q.signatureId,signingMethod:q.signingMethod,targetAddress:q.targetAddress,blindSignReason:q.blindSignReason,programIds:q.programIds,unrecognizedPrograms:q.unrecognizedPrograms,...q.transactionSignature!==void 0&&{transactionSignature:q.transactionSignature}}}}}};BQ=CZ([O(),GJ(0,$(b.Config)),GJ(1,$(b.ContextModuleLoggerFactory)),GJ(2,$(B.NetworkClient))],BQ);var Lq={SignReporterDatasource:Symbol.for("SignReporterDatasource"),SignReporter:Symbol.for("SignReporter")};var{defineProperty:yZ,getOwnPropertyDescriptor:gZ}=Object,mZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?gZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&yZ(Q,J,X),X},uZ=(q,Q)=>(J,W)=>Q(J,W,q),HQ=class{constructor(q){this.dataSource=q}async report(q){return this.dataSource.report(q)}};HQ=mZ([O(),uZ(0,$(Lq.SignReporterDatasource))],HQ);var VJ=()=>new v(({bind:q})=>{q(Lq.SignReporterDatasource).to(BQ),q(Lq.SignReporter).to(HQ)});var{defineProperty:pZ,getOwnPropertyDescriptor:lZ}=Object,cZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?lZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&pZ(Q,J,X),X},UW=(q,Q)=>(J,W)=>Q(J,W,q),Hq=class{constructor(q,Q){this.config=q,this.http=Q}async check({path:q,body:Q}){let J;try{J=await this.http.post(`${this.config.web3checks.url}${q}`,Q)}catch{return K(Error("[ContextModule] HttpTransactionCheckDataSource: Failed to fetch web3 check"))}return this._isDto(J)?j({publicKeyId:J.public_key_id,descriptor:J.descriptor}):K(Error("[ContextModule] HttpTransactionCheckDataSource: Invalid web3 check response"))}_isDto(q){return q!=null&&typeof q=="object"&&"public_key_id"in q&&q.public_key_id!=null&&typeof q.public_key_id=="string"&&"descriptor"in q&&q.descriptor!=null&&typeof q.descriptor=="string"}};Hq=cZ([O(),UW(0,$(b.Config)),UW(1,$(B.NetworkClient))],Hq);var f={TransactionCheckDataSource:Symbol.for("TransactionCheckDataSource"),TransactionCheckLoader:Symbol.for("TransactionCheckLoader"),TypedDataCheckLoader:Symbol.for("TypedDataCheckLoader")};var Kq=((q)=>(q.ETHEREUM_TRANSACTION="/ethereum/scan/tx",q.ETHEREUM_TYPED_DATA="/ethereum/scan/eip-712",q.SOLANA_TRANSACTION="/solana/scan/tx",q))(Kq||{});var{defineProperty:dZ,getOwnPropertyDescriptor:sZ}=Object,iZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?sZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&dZ(Q,J,X),X},KJ=(q,Q)=>(J,W)=>Q(J,W,q),nZ=[G.ETHEREUM_TRANSACTION_CHECK],DQ=class{constructor(q,Q,J){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.logger=J("EthereumTransactionCheckLoader")}logger;canHandle(q,Q){return!nZ.every((J)=>Q.includes(J))||typeof q!="object"||q===null?!1:("from"in q)&&L(q.from)&&q.from!=="0x"&&("chainId"in q)&&typeof q.chainId=="number"&&("transaction"in q)&&q.transaction!==void 0&&("deviceModelId"in q)&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S}async load(q){let{from:Q,chainId:J,transaction:W}=q,X=wq(W);if(!Q||!X)return this.logger.debug("load result",{data:{result:[]}}),[];let Y=[await(await this.transactionCheckDataSource.check({path:Kq.ETHEREUM_TRANSACTION,body:{tx:{from:Q,raw:X},chain:J}})).caseOf({Left:(Z)=>Promise.resolve({type:G.ERROR,error:Z}),Right:async(Z)=>{let N=await this.certificateLoader.loadCertificate({keyId:Z.publicKeyId,keyUsage:P.TxSimulationSigner,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_TRANSACTION_CHECK,payload:Z.descriptor,certificate:N}}})];return this.logger.debug("load result",{data:{result:Y}}),Y}};DQ=iZ([O(),KJ(0,$(f.TransactionCheckDataSource)),KJ(1,$(H.PkiCertificateLoader)),KJ(2,$(b.ContextModuleLoggerFactory))],DQ);var{defineProperty:aZ,getOwnPropertyDescriptor:oZ}=Object,rZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?oZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&aZ(Q,J,X),X},OJ=(q,Q)=>(J,W)=>Q(J,W,q),tZ=[G.ETHEREUM_TRANSACTION_CHECK],PQ=class{constructor(q,Q,J){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.logger=J("EthereumTypedDataCheckLoader")}logger;canHandle(q,Q){return!tZ.every((J)=>Q.includes(J))||typeof q!="object"||q===null?!1:("from"in q)&&L(q.from)&&q.from!=="0x"&&("data"in q)&&typeof q.data=="object"&&("deviceModelId"in q)&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S}async load(q){let{from:Q,data:J}=q;if(!Q||!J)return this.logger.debug("load result",{data:{result:[]}}),[];let W=[await(await this.transactionCheckDataSource.check({path:Kq.ETHEREUM_TYPED_DATA,body:{msg:{from:Q,data:J}}})).caseOf({Left:(X)=>Promise.resolve({type:G.ERROR,error:X}),Right:async(X)=>{let Y=await this.certificateLoader.loadCertificate({keyId:X.publicKeyId,keyUsage:P.TxSimulationSigner,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_TRANSACTION_CHECK,payload:X.descriptor,certificate:Y}}})];return this.logger.debug("load result",{data:{result:W}}),W}};PQ=rZ([O(),OJ(0,$(f.TransactionCheckDataSource)),OJ(1,$(H.PkiCertificateLoader)),OJ(2,$(b.ContextModuleLoggerFactory))],PQ);var _W=()=>new v(({bind:q})=>{q(f.TransactionCheckDataSource).to(Hq),q(f.TransactionCheckLoader).to(DQ),q(f.TypedDataCheckLoader).to(PQ)});function eZ(q){if(q.length>=255)throw TypeError("Alphabet too long");let Q=new Uint8Array(256);for(let F=0;F<Q.length;F++)Q[F]=255;for(let F=0;F<q.length;F++){let V=q.charAt(F),_=V.charCodeAt(0);if(Q[_]!==255)throw TypeError(V+" is ambiguous");Q[_]=F}let J=q.length,W=q.charAt(0),X=Math.log(J)/Math.log(256),Y=Math.log(256)/Math.log(J);function Z(F){if(F instanceof Uint8Array);else if(ArrayBuffer.isView(F))F=new Uint8Array(F.buffer,F.byteOffset,F.byteLength);else if(Array.isArray(F))F=Uint8Array.from(F);if(!(F instanceof Uint8Array))throw TypeError("Expected Uint8Array");if(F.length===0)return"";let V=0,_=0,R=0,w=F.length;while(R!==w&&F[R]===0)R++,V++;let M=(w-R)*Y+1>>>0,I=new Uint8Array(M);while(R!==w){let u=F[R],c=0;for(let e=M-1;(u!==0||c<_)&&e!==-1;e--,c++)u+=256*I[e]>>>0,I[e]=u%J>>>0,u=u/J>>>0;if(u!==0)throw Error("Non-zero carry");_=c,R++}let m=M-_;while(m!==M&&I[m]===0)m++;let C=W.repeat(V);for(;m<M;++m)C+=q.charAt(I[m]);return C}function N(F){if(typeof F!=="string")throw TypeError("Expected String");if(F.length===0)return new Uint8Array;let V=0,_=0,R=0;while(F[V]===W)_++,V++;let w=(F.length-V)*X+1>>>0,M=new Uint8Array(w);while(V<F.length){let u=F.charCodeAt(V);if(u>255)return;let c=Q[u];if(c===255)return;let e=0;for(let Sq=w-1;(c!==0||e<R)&&Sq!==-1;Sq--,e++)c+=J*M[Sq]>>>0,M[Sq]=c%256>>>0,c=c/256>>>0;if(c!==0)throw Error("Non-zero carry");R=e,V++}let I=w-R;while(I!==w&&M[I]===0)I++;let m=new Uint8Array(_+(w-I)),C=_;while(I!==w)m[C++]=M[I++];return m}function z(F){let V=N(F);if(V)return V;throw Error("Non-base"+J+" character")}return{encode:Z,decodeUnsafe:N,decode:z}}var RW=eZ;var q0="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",FJ=RW(q0);class bJ{static encode(q){return FJ.encode(q)}static decode(q){return FJ.decode(q)}}var g=IW([Dq(S.NANO_X),Dq(S.NANO_SP),Dq(S.STAX),Dq(S.FLEX),Dq(S.APEX)]);var MW=U.custom({decode:(q)=>q instanceof Uint8Array?j(q):K("Expected a Uint8Array"),encode:(q)=>q});var{defineProperty:Q0,getOwnPropertyDescriptor:J0}=Object,W0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?J0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&Q0(Q,J,X),X},NJ=(q,Q)=>(J,W)=>Q(J,W,q),X0=[G.SOLANA_TRANSACTION_CHECK],Y0=U.interface({deviceModelId:g,transactionCheck:U.interface({from:D,transactionBytes:MW,chain:Pq})}),UQ=class{constructor(q,Q,J,W=bJ){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.bs58Encoder=W,this.logger=J("SolanaTransactionCheckLoader")}logger;canHandle(q,Q){return X0.every((J)=>Q.includes(J))?Y0.decode(q).caseOf({Left:()=>!1,Right:({transactionCheck:{from:J,transactionBytes:W}})=>J.length>0&&W.length>0}):!1}async load(q){let{from:Q,transactionBytes:J,chain:W}=q.transactionCheck,X=this.bs58Encoder.encode(J),Y=[await(await this.transactionCheckDataSource.check({path:Kq.SOLANA_TRANSACTION,body:{tx:{from:Q,raw:X},chain:W}})).caseOf({Left:(Z)=>Promise.resolve({type:G.ERROR,error:Z}),Right:async(Z)=>{let N=await this.certificateLoader.loadCertificate({keyId:Z.publicKeyId,keyUsage:P.TxSimulationSigner,targetDevice:q.deviceModelId});return{type:G.SOLANA_TRANSACTION_CHECK,payload:{descriptor:Z.descriptor},certificate:N}}})];return this.logger.debug("load result",{data:{result:Y}}),Y}};UQ=W0([O(),NJ(0,$(f.TransactionCheckDataSource)),NJ(1,$(H.PkiCertificateLoader)),NJ(2,$(b.ContextModuleLoggerFactory))],UQ);var wW=()=>new v(({bind:q})=>{q(f.TransactionCheckDataSource).to(Hq),q(f.TransactionCheckLoader).to(UQ)});var Z0=U.custom({decode:(q)=>typeof q=="string"&&q.length>0?j(q):K("Expected a non-empty string"),encode:(q)=>q}),_Q=U.interface({signedDescriptor:Z0,keyId:D,keyUsage:D});var LW=(q)=>{let Q=2**q-1;return U.custom({decode:(J)=>typeof J=="number"&&Number.isInteger(J)&&J>=0&&J<=Q?j(J):K(`Expected a u${q} integer (0..=${Q})`),encode:(J)=>J})},RQ=LW(8),IQ=LW(16);var{defineProperty:$0,getOwnPropertyDescriptor:G0}=Object,V0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?G0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&$0(Q,J,X),X},EW=(q,Q)=>(J,W)=>Q(J,W,q),MQ=class{constructor(q,Q){this.config=q,this.http=Q}async getAltResolution({altAddress:q,entryIndex:Q,challenge:J}){let W=RQ.decode(Q);if(W.isLeft())return K(Error(`[ContextModule] HttpAltResolutionDataSource: invalid entryIndex (got ${Q}): ${W.leftOrDefault("")}`));let X;try{X=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/alt-resolution/${q}/${Q}`,{params:{challenge:J}})}catch(Y){let Z=Y instanceof Error?Y.message:String(Y);return K(Error(`[ContextModule] HttpAltResolutionDataSource: Failed to fetch ALT resolution: ${Z}`))}return _Q.decode(X).caseOf({Left:(Y)=>K(Error(`[ContextModule] HttpAltResolutionDataSource: malformed response for (${q}, ${Q}): ${Y}`)),Right:(Y)=>{let Z;try{Z=T.hexToBytes(Y.signedDescriptor)}catch(N){return K(Error(`[ContextModule] HttpAltResolutionDataSource: invalid hex in signedDescriptor for (${q}, ${Q}): ${N.message}`))}return j({altAddress:q,entryIndex:Q,descriptor:Z,resolvedAddress:X.resolvedAddress,keyId:Y.keyId,keyUsage:Y.keyUsage})}})}};MQ=V0([O(),EW(0,$(b.Config)),EW(1,$(B.NetworkClient))],MQ);var Oq={AltResolutionDataSource:Symbol.for("AltResolutionDataSource"),AltResolutionContextLoader:Symbol.for("AltResolutionContextLoader")};function SW(q,Q){let J=new Map;return(W,X)=>{let Y=`${W}::${X}`,Z=J.get(Y);return Z||(Z=q.loadCertificate({keyId:W,keyUsage:X,targetDevice:Q}),J.set(Y,Z)),Z}}async function Uq({requests:q,deviceModelId:Q,certificateLoader:J,logger:W,label:X,fetch:Y,toContext:Z,describe:N}){W.debug(`[load] Fetching ${X} descriptors`,{data:{count:q.length}});let z=await Promise.all(q.map(async(V)=>({request:V,either:await Y(V)}))),F=SW(J,Q);return Promise.all(z.map(({request:V,either:_})=>_.caseOf({Left:async(R)=>(W.warn(`[load] ${X} fetch failed`,{data:{...N(V),error:R.message}}),{type:G.ERROR,error:R}),Right:async(R)=>{let w;try{w=await F(R.keyId,R.keyUsage)}catch(M){let I=M instanceof Error?M:Error(String(M));return W.warn(`[load] ${X} certificate load failed`,{data:{...N(V),error:I.message}}),{type:G.ERROR,error:I}}if(!w){let M=Error(`[ContextModule] ${X}: certificate is missing`);return W.warn(`[load] ${X} certificate missing`,{data:N(V)}),{type:G.ERROR,error:M}}return Z(R,w)}})))}var{defineProperty:K0,getOwnPropertyDescriptor:O0}=Object,F0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?O0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&K0(Q,J,X),X},zJ=(q,Q)=>(J,W)=>Q(J,W,q),b0=[G.SOLANA_ALT_RESOLUTION],N0=U.interface({altAddress:D,entryIndex:RQ,challenge:D}),z0=U.interface({deviceModelId:g,requests:x(N0)}),wQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("AltResolutionContextLoader")}logger;canHandle(q,Q){return b0.every((J)=>Q.includes(J))?z0.decode(q).caseOf({Left:()=>!1,Right:({requests:J})=>J.length>0&&J.every((W)=>W.altAddress.length>0&&W.challenge.length>0)}):!1}async load(q){return Uq({requests:q.requests,deviceModelId:q.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"ALT_RESOLUTION",fetch:(Q)=>this.dataSource.getAltResolution(Q),toContext:(Q,J)=>{let W={descriptor:Q.descriptor,resolvedAddress:Q.resolvedAddress};return{type:G.SOLANA_ALT_RESOLUTION,payload:W,certificate:J}},describe:(Q)=>({altAddress:Q.altAddress,entryIndex:Q.entryIndex})})}};wQ=F0([O(),zJ(0,$(Oq.AltResolutionDataSource)),zJ(1,$(H.PkiCertificateLoader)),zJ(2,$(b.ContextModuleLoggerFactory))],wQ);var kW=()=>new v(({bind:q})=>{q(Oq.AltResolutionDataSource).to(MQ),q(Oq.AltResolutionContextLoader).to(wQ)});var LQ={EnumVariantContextLoader:Symbol.for("EnumVariantContextLoader")};var r={InstructionInfoDataSource:Symbol.for("InstructionInfoDataSource"),InstructionInfoContextLoader:Symbol.for("InstructionInfoContextLoader")};function _q(q,Q){return q.loadCertificate(Q).then((J)=>({ok:!0,value:J}),(J)=>({ok:!1,error:J instanceof Error?J:Error(typeof J=="string"?J:JSON.stringify(J))}))}var{defineProperty:j0,getOwnPropertyDescriptor:v0}=Object,B0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?v0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&j0(Q,J,X),X},EQ=(q,Q)=>(J,W)=>Q(J,W,q),H0=[G.SOLANA_ENUM_VARIANT],D0="solana-mainnet",P0=U.interface({programId:D,enumId:D,variantIndex:IQ}),U0=U.interface({deviceModelId:g,selections:x(P0),network:E(D)}),SQ=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this.certificateLoader=J,this.logger=W("EnumVariantContextLoader")}logger;canHandle(q,Q){return H0.every((J)=>Q.includes(J))?U0.decode(q).caseOf({Left:()=>!1,Right:({selections:J})=>J.length>0&&J.every((W)=>W.programId.length>0&&W.enumId.length>0)}):!1}async load(q){let Q=q.network||D0,J=Array.from(new Set(q.selections.map((V)=>V.programId)));this.logger.debug("[load] Fetching enum variants",{data:{network:Q,programCount:J.length,selectionCount:q.selections.length}});let W=_q(this.certificateLoader,{keyId:k.CalCalldataKey,keyUsage:P.Calldata,targetDevice:q.deviceModelId}),X=Promise.all(J.map((V)=>this.dataSource.getInstructionInfo({programId:V,network:Q}))),[Y,Z]=await Promise.all([W,X]);if(!Y.ok||!Y.value){let V=Y.ok?Error("[ContextModule] EnumVariantContextLoader: certificate is missing"):Y.error;return this.logger.warn("[load] ENUM_VARIANT certificate unavailable",{data:{error:V.message}}),q.selections.map(()=>({type:G.ERROR,error:V}))}let N=Y.value,z=new Map(J.map((V,_)=>[V,Z[_]])),F=this.config.cal.mode??"prod";return q.selections.map((V)=>{let _=z.get(V.programId);if(!_){let R=Error(`[ContextModule] EnumVariantContextLoader: no CAL response for program ${V.programId}`);return this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,error:R.message}}),{type:G.ERROR,error:R}}return _.caseOf({Left:(R)=>(this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,error:R.message}}),{type:G.ERROR,error:R}),Right:(R)=>{let w=this.lookupVariant(R,V);if(!w){let I=Error(`[ContextModule] EnumVariantContextLoader: CAL has no enum variant for (${V.programId}, ${V.enumId}, ${V.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT not found in CAL response",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex}}),{type:G.ERROR,error:I}}if(!w.descriptor.signature){let I=Error(`[ContextModule] EnumVariantContextLoader: missing '${F}' signature for (${V.programId}, ${V.enumId}, ${V.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT missing signature",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,mode:F}}),{type:G.ERROR,error:I}}let M={programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,descriptor:w.descriptor};return{type:G.SOLANA_ENUM_VARIANT,payload:M,certificate:N}}})})}lookupVariant(q,Q){return q.enumVariants.find((J)=>J.enumId===Q.enumId&&J.variantIndex===Q.variantIndex)}};SQ=B0([O(),EQ(0,$(r.InstructionInfoDataSource)),EQ(1,$(b.Config)),EQ(2,$(H.PkiCertificateLoader)),EQ(3,$(b.ContextModuleLoggerFactory))],SQ);var xW=()=>new v(({bind:q})=>{q(LQ.EnumVariantContextLoader).to(SQ)});var i=((q)=>(q[q.MAINNET=900]="MAINNET",q[q.DEVNET=901]="DEVNET",q[q.TESTNET=902]="TESTNET",q))(i||{});var _0=U.interface({prod:E(D),test:E(D)}),AW=U.interface({data:D,signatures:_0}),R0=U.interface({descriptor:AW}),kQ=U.interface({descriptor:D}),TW=U.interface({signer:D,writable:D}),I0=U.interface({count_min:E(Pq),count_max:E(Pq),remaining_policy:E(TW),slots:E(x(TW))}),M0=U.interface({discriminator_hex:E(D),descriptor:AW,enum_variants:E(jJ(D,jJ(D,R0))),display_fields:E(x(kQ)),value_flow_ports:E(x(kQ)),hide_rules:E(x(kQ)),account_resets:E(x(kQ)),account_schema:E(I0)}),fW=U.interface({id:D,chain_id:Pq,instructions:x(M0)});var Fq=((q)=>(q[q.DISPLAY_FIELD=0]="DISPLAY_FIELD",q[q.VALUE_FLOW_PORT=1]="VALUE_FLOW_PORT",q[q.HIDE_RULE=2]="HIDE_RULE",q[q.ACCOUNT_RESET=3]="ACCOUNT_RESET",q))(Fq||{});function yW(q,Q){return q[Q]}function w0(q=[]){return q.map((Q)=>({account_indices:Q.account_indices,optional_account_strategy:Q.optional_account_strategy,token_value:Q.token_value,active_when:Q.active_when}))}function L0(q=[]){return q.flatMap((Q)=>Q.account_index===void 0?[]:[{account_index:Q.account_index,require_pre_balance_zero:Q.require_pre_balance_zero,value_kind:Q.value_kind,token:Q.token,require_native_pre_balance_zero:Q.require_native_pre_balance_zero}])}function E0(q=[]){return q.map((Q)=>({rule_set_index:Q.rule_set_index,target:Q.target,condition:Q.condition}))}function S0(q){return q===void 0?[]:q.account_index===void 0||q.owner===void 0?[]:[{account_index:q.account_index,owner:q.owner}]}var hW=new Set(["FORBIDDEN","EITHER","REQUIRED"]);function CW(q){let Q=hW.has(q.signer)?q.signer:"EITHER",J=hW.has(q.writable)?q.writable:"EITHER";return{signer:Q,writable:J}}function k0(q){if(q!==void 0)return{count_min:q.count_min??0,count_max:q.count_max??255,remaining_policy:q.remaining_policy?CW(q.remaining_policy):{signer:"EITHER",writable:"EITHER"},slots:(q.slots??[]).map(CW)}}function x0(q=[]){return q.map((Q)=>({name:Q.name,param:Q.param??{type:""}}))}function T0(q){return[...(q.display_fields??[]).map((Q)=>({kind:Fq.DISPLAY_FIELD,data:Q.descriptor})),...(q.value_flow_ports??[]).map((Q)=>({kind:Fq.VALUE_FLOW_PORT,data:Q.descriptor})),...(q.hide_rules??[]).map((Q)=>({kind:Fq.HIDE_RULE,data:Q.descriptor})),...(q.account_resets??[]).map((Q)=>({kind:Fq.ACCOUNT_RESET,data:Q.descriptor}))]}function gW(q,Q){let J=[];for(let[W,X]of Object.entries(q.enum_variants??{}))for(let[Y,Z]of Object.entries(X)){let N=Number(Y);IQ.decode(N).isLeft()||J.push({enumId:W,variantIndex:N,descriptor:{data:Z.descriptor.data,signature:yW(Z.descriptor.signatures,Q)??""}})}return J}function mW(q,Q){return Object.values(q).flatMap((J)=>gW(J,Q))}function uW(q,Q,J,W){let X=yW(J.descriptor.signatures,W);return X?j({programId:q,discriminator:Q,instructionName:J.instruction_name,instructionInfo:{data:J.descriptor.data,signature:X},substructures:T0(J),enumVariants:gW(J,W),idlDescriptor:{typePool:J.idl_descriptor?.type_pool??[],rootType:J.idl_descriptor?.root_type??0},mintAssociations:J.mint_association?[J.mint_association]:[],ownerAssociations:S0(J.owner_association),valueFlowPorts:w0(J.value_flow_ports),accountResets:L0(J.account_resets),displayFields:x0(J.display_fields),hideRules:E0(J.hide_rules),accountSchema:k0(J.account_schema)}):K(Error(`[ContextModule] InstructionInfoDataSource: missing '${W}' signature for (${q}, ${Q})`))}var{defineProperty:A0,getOwnPropertyDescriptor:f0}=Object,h0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?f0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&A0(Q,J,X),X},pW=(q,Q)=>(J,W)=>Q(J,W,q),C0={"solana-mainnet":i.MAINNET,"solana-devnet":i.DEVNET,"solana-testnet":i.TESTNET},xQ=class{constructor(q,Q){this.config=q,this.http=Q}async getInstructionInfo({programId:q,network:Q}){let J=C0[Q]??i.MAINNET,W;try{W=await this.http.get(`${this.config.cal.url}/solana_programs`,{params:{id:q,chain_id:J,output:"id,chain_id,instructions",ref:`branch:${this.config.cal.branch}`}})}catch(Y){let Z=Y instanceof Error?Y.message:String(Y);return K(Error(`[ContextModule] HttpInstructionInfoDataSource: Failed to fetch instruction descriptors: ${Z}`))}if(!Array.isArray(W)||W.length===0)return K(Error(`[ContextModule] HttpInstructionInfoDataSource: empty response for program ${q}`));let X=W.find((Y)=>Y!=null&&typeof Y=="object"&&Y.id===q);return X===void 0?K(Error(`[ContextModule] HttpInstructionInfoDataSource: no descriptors for program ${q}`)):fW.decode(X).caseOf({Left:(Y)=>K(Error(`[ContextModule] HttpInstructionInfoDataSource: malformed descriptors for program ${q}: ${Y}`)),Right:()=>{let Y=this.config.cal.mode??"prod",Z=X.instructions,N=Object.fromEntries(Z.map((F)=>[F.discriminator_hex??"",F])),z=Object.fromEntries(Object.entries(N).map(([F,V])=>[F,uW(q,F,V,Y)]));return j({programId:q,descriptors:z,enumVariants:mW(N,Y)})}})}};xQ=h0([O(),pW(0,$(b.Config)),pW(1,$(B.NetworkClient))],xQ);var{defineProperty:y0,getOwnPropertyDescriptor:g0}=Object,m0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?g0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&y0(Q,J,X),X},vJ=(q,Q)=>(J,W)=>Q(J,W,q),u0=[G.SOLANA_INSTRUCTION_INFO],p0="solana-mainnet",l0=U.interface({programId:D,discriminator:E(D)}),c0=U.interface({deviceModelId:g,instructions:x(l0),network:E(D)}),TQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("InstructionInfoContextLoader")}logger;canHandle(q,Q){return u0.every((J)=>Q.includes(J))?c0.decode(q).caseOf({Left:()=>!1,Right:({instructions:J})=>J.length>0&&J.every((W)=>W.programId.length>0)}):!1}async load(q){let Q=q.network||p0,J=Array.from(new Set(q.instructions.map((F)=>F.programId)));this.logger.debug("[load] Fetching instruction descriptors",{data:{network:Q,programCount:J.length,instructionCount:q.instructions.length}});let W=_q(this.certificateLoader,{keyId:k.CalCalldataKey,keyUsage:P.Calldata,targetDevice:q.deviceModelId}),X=Promise.all(J.map(async(F)=>({programId:F,either:await this.dataSource.getInstructionInfo({programId:F,network:Q})}))),[Y,Z]=await Promise.all([W,X]);if(!Y.ok||!Y.value){let F=Y.ok?Error("[ContextModule] InstructionInfoContextLoader: certificate is missing"):Y.error;return this.logger.warn("[load] INSTRUCTION_INFO certificate unavailable",{data:{error:F.message}}),J.map(()=>({type:G.ERROR,error:F}))}let N=Y.value,z=[];for(let{programId:F,either:V}of Z)V.caseOf({Left:(_)=>{this.logger.warn("[load] Failed to fetch instruction descriptors for program",{data:{programId:F,error:_.message}}),z.push({type:G.ERROR,error:_})},Right:(_)=>{let R=this.collectWantedDiscriminators(F,q.instructions);for(let[w,M]of Object.entries(_.descriptors))R!==null&&!R.has(w)||z.push(M.caseOf({Left:(I)=>(this.logger.warn("[load] INSTRUCTION_INFO descriptor error",{data:{programId:F,discriminator:w,error:I.message}}),{type:G.ERROR,error:I}),Right:(I)=>({type:G.SOLANA_INSTRUCTION_INFO,payload:I,certificate:N})}))}});return this.logger.debug("[load] Emitted contexts",{data:{count:z.length}}),z}collectWantedDiscriminators(q,Q){let J=new Set,W=!1;for(let X of Q)X.programId===q&&(X.discriminator===void 0?W=!0:J.add(X.discriminator));return W?null:J}};TQ=m0([O(),vJ(0,$(r.InstructionInfoDataSource)),vJ(1,$(H.PkiCertificateLoader)),vJ(2,$(b.ContextModuleLoggerFactory))],TQ);var lW=()=>new v(({bind:q})=>{q(r.InstructionInfoDataSource).to(xQ),q(r.InstructionInfoContextLoader).to(TQ)});var{defineProperty:d0,getOwnPropertyDescriptor:s0}=Object,i0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?s0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&d0(Q,J,X),X},BJ=(q,Q)=>(J,W)=>Q(J,W,q),AQ=class{constructor(q,Q,J){this.config=q,this.http=J,this.logger=Q("HttpLifiDataSource")}logger;async getTransactionDescriptorsPayload({templateId:q}){this.logger.debug("[getTransactionDescriptorsPayload] Fetching transaction descriptors",{data:{templateId:q}});try{let Q=await this.http.get(`${this.config.cal.url}/swap_templates`,{params:{template_id:q,output:"id,chain_id,instructions,descriptors"}});return this.logger.debug("[getTransactionDescriptorsPayload] Received response",{data:{templateId:q,responseLength:Q?.length??0,hasData:!!Q&&Q.length>0}}),!Q||Q.length===0||!Q[0]?(this.logger.warn("[getTransactionDescriptorsPayload] No transaction descriptors found",{data:{templateId:q,responseLength:Q?.length??0}}),K(Error(`[ContextModule] HttpLifiDataSource: no transaction descriptors for id ${q}`))):(this.logger.info("[getTransactionDescriptorsPayload] Successfully fetched transaction descriptors",{data:{templateId:q,descriptorsCount:Q[0].descriptors?.length??0}}),j(Q[0]))}catch(Q){return this.logger.error("[getTransactionDescriptorsPayload] Failed to fetch transaction descriptors",{data:{templateId:q,error:Q instanceof Error?Q.message:String(Q)}}),K(Error("[ContextModule] HttpLifiDataSource: Failed to fetch transaction descriptors"))}}};AQ=i0([O(),BJ(0,$(b.Config)),BJ(1,$(b.ContextModuleLoggerFactory)),BJ(2,$(B.NetworkClient))],AQ);var bq={LifiDataSource:Symbol.for("LifiDataSource"),LifiContextLoader:Symbol.for("LifiContextLoader")};var{defineProperty:n0,getOwnPropertyDescriptor:a0}=Object,o0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?a0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&n0(Q,J,X),X},fQ=(q,Q)=>(J,W)=>Q(J,W,q),r0=[G.SOLANA_LIFI],hQ=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this._certificateLoader=J,this.logger=W("LifiContextLoader")}logger;canHandle(q,Q){if(!r0.every((J)=>Q.includes(J)))return this.logger.debug("[canHandle] Skipping, expected type does not match",{data:{expectedTypes:Q,required:G.SOLANA_LIFI}}),!1;if(typeof q=="object"&&q!==null&&"templateId"in q){let J=q.templateId,W=typeof J=="string"&&J.length>0;return this.logger.debug("[canHandle] Field validation result",{data:{templateId:J,isValid:W}}),W}return this.logger.debug("[canHandle] Field does not contain a valid templateId",{data:{input:q}}),!1}async load(q){this.logger.debug("[load] Loading solana Lifi context",{data:{input:q}});let Q=await this._loadInternal(q);if(Q.type===G.ERROR)return[{type:G.ERROR,error:Q.error}];let J=Q;return[{type:G.SOLANA_LIFI,payload:J.payload,certificate:J.certificate}]}async _loadInternal(q){this.logger.debug("[_loadInternal] Loading solana Lifi context",{data:{input:q}});let{templateId:Q,deviceModelId:J}=q;if(!Q)return{type:G.ERROR,error:Error("[ContextModule] LifiContextLoader: templateId is missing")};let W=await this.dataSource.getTransactionDescriptorsPayload({templateId:Q}),X=await this._certificateLoader.loadCertificate({keyId:k.SwapTemplateKey,keyUsage:P.SwapTemplate,targetDevice:J});return W.caseOf({Left:(Y)=>(this.logger.error("[_loadInternal] Error loading solana Lifi context",{data:{error:Y}}),{type:G.ERROR,error:Y}),Right:(Y)=>{let Z=this.buildPayload(Y);return this.logger.debug("[_loadInternal] Successfully loaded solana Lifi context",{data:{descriptors:Z.descriptors,instructionsCount:Z.instructions.length,certificate:X}}),{type:G.SOLANA_LIFI,payload:Z,certificate:X}}})}buildPayload(q){return{descriptors:this.pluckTransactionData(q),instructions:this.extractInstructionsMeta(q)}}pluckTransactionData(q){let Q=this.config.cal.mode||"prod",J={},W=q.descriptors??[];this.logger.debug("[pluckTransactionData] Processing descriptors",{data:{descriptorsCount:W.length,signatureKind:Q}});for(let X of W){let Y=`${X.program_id}:${X.discriminator_hex??""}`,Z={data:X.descriptor.data,descriptorType:X.descriptor.descriptorType,descriptorVersion:X.descriptor.descriptorVersion,signature:X.descriptor.signatures[Q]??"",...X.has_basis_point!==void 0&&{has_basis_point:X.has_basis_point}};(J[Y]??=[]).push(Z),this.logger.debug("[pluckTransactionData] Mapped program descriptor",{data:{programId:X.program_id,discriminatorHex:X.discriminator_hex??"",key:Y}})}return this.logger.debug("[pluckTransactionData] Completed processing",{data:{outputKeys:Object.keys(J)}}),J}extractInstructionsMeta(q){let Q=q.instructions??[];this.logger.debug("[extractInstructionsMeta] Extracting instructions metadata",{data:{instructionsCount:Q.length}});let J=Q.map((W)=>({program_id:W.program_id,...W.discriminator_hex!==void 0&&{discriminator_hex:W.discriminator_hex},...W.amount!==void 0&&{has_basis_point:W.amount.capped_bps!==void 0}}));return this.logger.debug("[extractInstructionsMeta] Completed extracting instructions metadata",{data:{meta:J.map((W)=>({programId:W.program_id,discriminatorHex:W.discriminator_hex}))}}),J}};hQ=o0([O(),fQ(0,$(bq.LifiDataSource)),fQ(1,$(b.Config)),fQ(2,$(H.PkiCertificateLoader)),fQ(3,$(b.ContextModuleLoggerFactory))],hQ);var cW=()=>new v(({bind:q})=>{q(bq.LifiDataSource).to(AQ),q(bq.LifiContextLoader).to(hQ)});var{defineProperty:t0,getOwnPropertyDescriptor:e0}=Object,q1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?e0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&t0(Q,J,X),X},dW=(q,Q)=>(J,W)=>Q(J,W,q),CQ=class{constructor(q,Q){this.config=q,this.http=Q}isSolanaSPLOwnerInfo(q){return typeof q!="object"||q===null?!1:typeof q.tokenAccount=="string"&&typeof q.owner=="string"&&typeof q.contract=="string"&&typeof q.signedDescriptor=="string"}async fetchAddressMetadata(q,Q){try{let J=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/owner/${q}`,{params:{challenge:Q}});return this.isSolanaSPLOwnerInfo(J)?j(J):K(Error("[ContextModule] - HttpOwnerInfoDataSource: invalid fetchAddressMetadata response shape"))}catch{return K(Error("[ContextModule] - HttpOwnerInfoDataSource: Failed to fetch address metadata"))}}async computeAddressMetadata(q,Q,J){try{let W=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/computed-token-account/${q}/${Q}`,{params:{challenge:J}});return this.isSolanaSPLOwnerInfo(W)?j(W):K(Error("[ContextModule] - HttpOwnerInfoDataSource: invalid computeAddressMetadata response shape"))}catch{return K(Error("[ContextModule] - HttpOwnerInfoDataSource: Failed to compute address metadata"))}}async getOwnerInfo(q){let{tokenAddress:Q,challenge:J,createATA:W}=q;if(!J)return K(Error("[ContextModule] - HttpOwnerInfoDataSource: challenge is required"));let X;if(Q)X=await this.fetchAddressMetadata(Q,J);else if(W?.address&&W?.mintAddress)X=await this.computeAddressMetadata(W.address,W.mintAddress,J);else return K(Error("[ContextModule] - HttpOwnerInfoDataSource: either tokenAddress or valid createATA must be provided"));return X.chain((Y)=>{let Z=bQ(Y.signedDescriptor);return Z?j({tlvDescriptor:Z}):K(Error("[ContextModule] - HttpOwnerInfoDataSource: invalid base64 tlvDescriptor received"))})}};CQ=q1([O(),dW(0,$(b.Config)),dW(1,$(B.NetworkClient))],CQ);var Nq={OwnerInfoDataSource:Symbol.for("OwnerInfoDataSource"),OwnerInfoContextLoader:Symbol.for("OwnerInfoContextLoader")};var{defineProperty:Q1,getOwnPropertyDescriptor:J1}=Object,W1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?J1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&Q1(Q,J,X),X},HJ=(q,Q)=>(J,W)=>Q(J,W,q),X1=[G.SOLANA_BASIC_TRUSTED_NAME],yQ=class{constructor(q,Q,J){this._dataSource=q,this._certificateLoader=Q,this.logger=J("OwnerInfoContextLoader")}logger;canHandle(q,Q){if(!X1.every((W)=>Q.includes(W))||typeof q!="object"||q===null)return!1;let J=q;return!!(J.tokenAddress||J.createATA)}async load(q){this.logger.debug("[load] Loading solana owner info context",{data:{input:q}});let{deviceModelId:Q}=q,J=await this._certificateLoader.loadCertificate({keyId:"domain_metadata_key",keyUsage:P.TrustedName,targetDevice:Q});return J?(await this._dataSource.getOwnerInfo(q)).caseOf({Left:(W)=>[{type:G.ERROR,error:W}],Right:({tlvDescriptor:W})=>W!==void 0?[{type:G.SOLANA_BASIC_TRUSTED_NAME,payload:W,certificate:J}]:[]}):[{type:G.ERROR,error:Error("[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing")}]}};yQ=W1([O(),HJ(0,$(Nq.OwnerInfoDataSource)),HJ(1,$(H.PkiCertificateLoader)),HJ(2,$(b.ContextModuleLoggerFactory))],yQ);var sW=()=>new v(({bind:q})=>{q(Nq.OwnerInfoDataSource).to(CQ),q(Nq.OwnerInfoContextLoader).to(yQ)});var{defineProperty:Y1,getOwnPropertyDescriptor:Z1}=Object,$1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?Z1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&Y1(Q,J,X),X},iW=(q,Q)=>(J,W)=>Q(J,W,q),gQ=class{constructor(q,Q){this.config=q,this.http=Q}async getIdFromMint({mintAddress:q}){try{let Q=await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:q,network:"solana",output:"id",ref:`branch:${this.config.cal.branch}`}});return!Q||Q.length===0||!Q[0]?.id?K(Error(`[ContextModule] HttpMintToIdDataSource: no token id found for mint ${q}`)):j(Q[0].id)}catch{return K(Error("[ContextModule] HttpMintToIdDataSource: failed to fetch token id from mint address"))}}};gQ=$1([O(),iW(0,$(b.Config)),iW(1,$(B.NetworkClient))],gQ);var{defineProperty:G1,getOwnPropertyDescriptor:V1}=Object,K1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?V1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&G1(Q,J,X),X},nW=(q,Q)=>(J,W)=>Q(J,W,q),mQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfosPayload({tokenInternalId:q}){try{let Q=await this.http.get(`${this.config.cal.url}/tokens`,{params:{id:q,output:"id,name,network,network_family,network_type,exchange_app_config_serialized,live_signature,ticker,decimals,blockchain_name,chain_id,contract_address,descriptor,descriptor_exchange_app,units,symbol",ref:`branch:${this.config.cal.branch}`}});return!Q||Q.length===0||!Q[0]?K(Error(`[ContextModule] HttpTokenDataSource: no token metadata for id ${q}`)):j(Q[0])}catch{return K(Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};mQ=K1([O(),nW(0,$(b.Config)),nW(1,$(B.NetworkClient))],mQ);var t={TokenDataSource:Symbol.for("TokenDataSource"),MintToIdDataSource:Symbol.for("MintToIdDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader")};var{defineProperty:O1,getOwnPropertyDescriptor:F1}=Object,b1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?F1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&O1(Q,J,X),X},Eq=(q,Q)=>(J,W)=>Q(J,W,q),N1=[G.SOLANA_TOKEN],uQ=class{constructor(q,Q,J,W,X){this.dataSource=q,this.mintToIdDataSource=Q,this.config=J,this._certificateLoader=W,this.logger=X("TokenContextLoader")}logger;canHandle(q,Q){if(!N1.every((Y)=>Q.includes(Y))||typeof q!="object"||q===null)return!1;let J=q,W=typeof J.tokenInternalId=="string"&&J.tokenInternalId.length>0,X=typeof J.mintAddress=="string"&&J.mintAddress.length>0;return W||X}async load(q){this.logger.debug("[load] Loading solana token context",{data:{input:q}});let Q=await this._loadInternal(q);if(Q.type===G.ERROR)return[{type:G.ERROR,error:Q.error}];let J=Q;return[{type:G.SOLANA_TOKEN,payload:J.payload,certificate:J.certificate}]}async _loadInternal(q){let{deviceModelId:Q,mintAddress:J}=q,{tokenInternalId:W}=q;if(!W){if(!J)return{type:G.ERROR,error:Error("[ContextModule] TokenContextLoader: tokenInternalId and mintAddress are missing")};this.logger.debug("[_loadInternal] Resolving tokenInternalId from mintAddress",{data:{mintAddress:J}});let Z=await this.mintToIdDataSource.getIdFromMint({mintAddress:J});if(Z.isLeft())return{type:G.ERROR,error:Z.extract()};W=Z.extract()}let X=await this.dataSource.getTokenInfosPayload({tokenInternalId:W}),Y=await this._certificateLoader.loadCertificate({keyId:k.TokenMetadataKey,keyUsage:P.CoinMeta,targetDevice:Q});return Y?X.caseOf({Left:(Z)=>(this.logger.error("[_loadInternal] Error loading solana token context",{data:{error:Z}}),{type:G.ERROR,error:Z}),Right:(Z)=>(this.logger.debug("[_loadInternal] Successfully loaded solana token context",{data:{payload:this.pluckTokenData(Z),certificate:Y}}),{type:G.SOLANA_TOKEN,payload:this.pluckTokenData(Z),certificate:Y})}):{type:G.ERROR,error:Error("[ContextModule] TokenContextLoader: tokenMetadataCertificate is missing")}}pluckTokenData(q){let Q=this.config.cal.mode||"prod";return{solanaTokenDescriptor:{data:q.descriptor.data,signature:q.descriptor.signatures[Q]}}}};uQ=b1([O(),Eq(0,$(t.TokenDataSource)),Eq(1,$(t.MintToIdDataSource)),Eq(2,$(b.Config)),Eq(3,$(H.PkiCertificateLoader)),Eq(4,$(b.ContextModuleLoggerFactory))],uQ);var aW=()=>new v(({bind:q})=>{q(t.TokenDataSource).to(mQ),q(t.MintToIdDataSource).to(gQ),q(t.TokenContextLoader).to(uQ)});var{defineProperty:z1,getOwnPropertyDescriptor:j1}=Object,v1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?j1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&z1(Q,J,X),X},DJ=(q,Q)=>(J,W)=>Q(J,W,q),pQ=class{constructor(q,Q,J){this.config=q,this.http=J,this.logger=Q("HttpTokenAccountStateDataSource")}logger;async getTokenAccountState({tokenAccount:q,challenge:Q}){let J;try{J=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/token-account-state/${q}`,{params:{challenge:Q}})}catch(W){let X=W instanceof Error?W.message:String(W);return K(Error(`[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: ${X}`))}return _Q.decode(J).caseOf({Left:(W)=>K(Error(`[ContextModule] HttpTokenAccountStateDataSource: malformed response for ${q}: ${W}`)),Right:(W)=>{J.owner!==void 0&&J.mint===void 0&&this.logger.warn("[getTokenAccountState] response has owner but no mint — canonical-ATA check will fail and the OWNER binding will be dropped by the device",{data:{tokenAccount:q}});let X;try{X=T.hexToBytes(W.signedDescriptor)}catch(Y){return K(Error(`[ContextModule] HttpTokenAccountStateDataSource: invalid hex in signedDescriptor for ${q}: ${Y.message}`))}return J.nativePreBalance===void 0&&this.logger.debug("[getTokenAccountState] nativePreBalance absent in response — native resets will not attest wrappable excess",{data:{tokenAccount:q}}),j({tokenAccount:q,descriptor:X,mint:J.mint,keyId:W.keyId,keyUsage:W.keyUsage})}})}};pQ=v1([O(),DJ(0,$(b.Config)),DJ(1,$(b.ContextModuleLoggerFactory)),DJ(2,$(B.NetworkClient))],pQ);var zq={TokenAccountStateDataSource:Symbol.for("TokenAccountStateDataSource"),TokenAccountStateContextLoader:Symbol.for("TokenAccountStateContextLoader")};var{defineProperty:B1,getOwnPropertyDescriptor:H1}=Object,D1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?H1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&B1(Q,J,X),X},PJ=(q,Q)=>(J,W)=>Q(J,W,q),P1=[G.SOLANA_TOKEN_ACCOUNT_STATE],U1=U.interface({tokenAccount:D,challenge:D}),_1=U.interface({deviceModelId:g,requests:x(U1)}),lQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("TokenAccountStateContextLoader")}logger;canHandle(q,Q){return P1.every((J)=>Q.includes(J))?_1.decode(q).caseOf({Left:()=>!1,Right:({requests:J})=>J.length>0&&J.every((W)=>W.tokenAccount.length>0&&W.challenge.length>0)}):!1}async load(q){return Uq({requests:q.requests,deviceModelId:q.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"TOKEN_ACCOUNT_STATE",fetch:(Q)=>this.dataSource.getTokenAccountState(Q),toContext:(Q,J)=>{let W={descriptor:Q.descriptor,mint:Q.mint};return{type:G.SOLANA_TOKEN_ACCOUNT_STATE,payload:W,certificate:J}},describe:(Q)=>({tokenAccount:Q.tokenAccount})})}};lQ=D1([O(),PJ(0,$(zq.TokenAccountStateDataSource)),PJ(1,$(H.PkiCertificateLoader)),PJ(2,$(b.ContextModuleLoggerFactory))],lQ);var oW=()=>new v(({bind:q})=>{q(zq.TokenAccountStateDataSource).to(pQ),q(zq.TokenAccountStateContextLoader).to(lQ)});var{defineProperty:R1,getOwnPropertyDescriptor:I1}=Object,M1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?I1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&R1(Q,J,X),X},rW=(q,Q)=>(J,W)=>Q(J,W,q),w1=U.interface({prod:E(D),test:E(D)}),L1={"solana-mainnet":"solana","solana-devnet":"solana-devnet"},E1=U.interface({descriptor:U.interface({data:D,signatures:w1})}),cQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfo({mint:q,network:Q}){let J;try{J=await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:q,network:L1[Q]??Q,output:"contract_address,network,descriptor",ref:`branch:${this.config.cal.branch}`}})}catch(W){let X=W instanceof Error?W.message:String(W);return K(Error(`[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: ${X}`))}return!Array.isArray(J)||J.length===0?K(Error(`[ContextModule] HttpTokenInfoDataSource: no token info for mint ${q}`)):E1.decode(J[0]).caseOf({Left:(W)=>K(Error(`[ContextModule] HttpTokenInfoDataSource: malformed descriptor for mint ${q}: ${W}`)),Right:(W)=>j({mint:q,descriptor:W.descriptor})})}};cQ=M1([O(),rW(0,$(b.Config)),rW(1,$(B.NetworkClient))],cQ);var jq={TokenInfoDataSource:Symbol.for("TokenInfoDataSource"),TokenInfoContextLoader:Symbol.for("TokenInfoContextLoader")};var{defineProperty:S1,getOwnPropertyDescriptor:k1}=Object,x1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?k1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&S1(Q,J,X),X},dQ=(q,Q)=>(J,W)=>Q(J,W,q),T1=[G.SOLANA_TOKEN_INFO],A1="solana-mainnet",f1=U.interface({deviceModelId:g,mints:x(D),network:E(D)}),sQ=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this.certificateLoader=J,this.logger=W("TokenInfoContextLoader")}logger;canHandle(q,Q){return T1.every((J)=>Q.includes(J))?f1.decode(q).caseOf({Left:()=>!1,Right:({mints:J})=>J.length>0&&J.every((W)=>W.length>0)}):!1}async load(q){let Q=q.network||A1,J=Array.from(new Set(q.mints));this.logger.debug("[load] Fetching TOKEN_INFO descriptors",{data:{network:Q,mintCount:J.length}});let W=_q(this.certificateLoader,{keyId:k.TokenMetadataKey,keyUsage:P.CoinMeta,targetDevice:q.deviceModelId}),X=Promise.all(J.map(async(F)=>({mint:F,either:await this.dataSource.getTokenInfo({mint:F,network:Q})}))),[Y,Z]=await Promise.all([W,X]);if(!Y.ok||!Y.value){let F=Y.ok?Error("[ContextModule] TokenInfoContextLoader: certificate is missing"):Y.error;return this.logger.warn("[load] TOKEN_INFO certificate unavailable",{data:{error:F.message}}),J.map(()=>({type:G.ERROR,error:F}))}let N=Y.value,z=this.config.cal.mode??"prod";return Z.map(({mint:F,either:V})=>V.caseOf({Left:(_)=>(this.logger.warn("[load] TOKEN_INFO fetch failed",{data:{mint:F,error:_.message}}),{type:G.ERROR,error:_}),Right:(_)=>{let R=_.descriptor.signatures[z];if(!R){let M=Error(`[ContextModule] TokenInfoContextLoader: missing '${z}' signature for mint ${F}`);return this.logger.warn("[load] TOKEN_INFO missing signature",{data:{mint:F,mode:z}}),{type:G.ERROR,error:M}}let w={mint:F,descriptor:{data:_.descriptor.data,signature:R}};return{type:G.SOLANA_TOKEN_INFO,payload:w,certificate:N}}}))}};sQ=x1([O(),dQ(0,$(jq.TokenInfoDataSource)),dQ(1,$(b.Config)),dQ(2,$(H.PkiCertificateLoader)),dQ(3,$(b.ContextModuleLoggerFactory))],sQ);var tW=()=>new v(({bind:q})=>{q(jq.TokenInfoDataSource).to(cQ),q(jq.TokenInfoContextLoader).to(sQ)});var{defineProperty:h1,getOwnPropertyDescriptor:C1}=Object,y1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?C1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&h1(Q,J,X),X},eW=(q,Q)=>(J,W)=>Q(J,W,q),g1=U.interface({signedDescriptor:U.interface({data:D,signatures:U.interface({prod:E(D),test:E(D)})}),keyId:D,keyUsage:D}),iQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTrustedName({address:q,network:Q,challenge:J,types:W,sources:X}){let Y;try{Y=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/solana/${Q}/reverse/${q}`,{params:{types:W.join(","),sources:X.join(","),challenge:J}})}catch(Z){let N=Z instanceof Error?Z.message:String(Z);return K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: Failed to fetch trusted name: ${N}`))}return g1.decode(Y).caseOf({Left:(Z)=>K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: malformed response for ${q}: ${Z}`)),Right:(Z)=>{let N=this.config.cal.mode??"prod",z=Z.signedDescriptor.signatures[N];if(!z)return K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: missing ${N} signature for ${q}`));let F;try{F=T.hexToBytes(T.appendSignatureToPayload(Z.signedDescriptor.data,z,Xq))}catch(V){return K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: invalid signed descriptor for ${q}: ${V.message}`))}return j({address:q,descriptor:F,keyId:Z.keyId,keyUsage:Z.keyUsage})}})}};iQ=y1([O(),eW(0,$(b.Config)),eW(1,$(B.NetworkClient))],iQ);var vq={SolanaTrustedNameDataSource:Symbol.for("SolanaTrustedNameDataSource"),SolanaTrustedNameContextLoader:Symbol.for("SolanaTrustedNameContextLoader")};var{defineProperty:m1,getOwnPropertyDescriptor:u1}=Object,p1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?u1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&m1(Q,J,X),X},UJ=(q,Q)=>(J,W)=>Q(J,W,q),l1=[G.SOLANA_TRUSTED_NAME],c1={"solana-mainnet":i.MAINNET,"solana-devnet":i.DEVNET,"solana-testnet":i.TESTNET},qX=i.MAINNET,d1=U.interface({address:D,challenge:D,types:x(D),sources:x(D)}),s1=U.interface({deviceModelId:g,network:E(D),requests:x(d1)}),nQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("SolanaTrustedNameContextLoader")}logger;canHandle(q,Q){return l1.every((J)=>Q.includes(J))?s1.decode(q).caseOf({Left:()=>!1,Right:({requests:J})=>J.length>0&&J.every((W)=>W.address.length>0&&W.challenge.length>0)}):!1}async load(q){let Q=q.network?c1[q.network]??qX:qX,J=String(Q);return Uq({requests:q.requests,deviceModelId:q.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"TRUSTED_NAME",fetch:(W)=>this.dataSource.getTrustedName({address:W.address,challenge:W.challenge,types:W.types,sources:W.sources,network:J}),toContext:(W,X)=>({type:G.SOLANA_TRUSTED_NAME,payload:W.descriptor,certificate:X}),describe:(W)=>({address:W.address})})}};nQ=p1([O(),UJ(0,$(vq.SolanaTrustedNameDataSource)),UJ(1,$(H.PkiCertificateLoader)),UJ(2,$(b.ContextModuleLoggerFactory))],nQ);var QX=()=>new v(({bind:q})=>{q(vq.SolanaTrustedNameDataSource).to(iQ),q(vq.SolanaTrustedNameContextLoader).to(nQ)});var JX=x(U.interface({descriptor:U.interface({signatures:U.interface({prod:D,test:D})})}));var{defineProperty:i1,getOwnPropertyDescriptor:n1}=Object,a1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?n1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&i1(Q,J,X),X},WX=(q,Q)=>(J,W)=>Q(J,W,q),aQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfosPayload({assetId:q}){let Q=()=>K(Error(`[ContextModule] HttpTokenDataSource: no token metadata for asset id ${q}`));try{let J=await this.http.get(`${this.config.cal.url}/tokens`,{params:{id:`tron/trc10/${q}`,output:"id,ticker,decimals,descriptor",ref:`branch:${this.config.cal.branch}`}});return JX.decode(J).caseOf({Left:Q,Right:(W)=>{let X=W[0]?.descriptor.signatures[this.config.cal.mode];return X===void 0||X.length===0?Q():j(X)}})}catch{return K(Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};aQ=a1([O(),WX(0,$(b.Config)),WX(1,$(B.NetworkClient))],aQ);var Bq={TokenDataSource:Symbol.for("TokenDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader")};function _J(q,Q){let J=0,W=1;for(let X=0;X<10;X++){let Y=q[Q+X];if(Y===void 0)return;if(J+=(Y&127)*W,(Y&128)===0)return{value:J,next:Q+X+1};W*=128}}function XX(q,Q){let J=_J(q,Q);if(J===void 0)return;let W=Math.floor(J.value/8),X=J.value%8;switch(X){case 0:{let Y=_J(q,J.next);return Y===void 0?void 0:{fieldNumber:W,wireType:X,value:Y.value,next:Y.next}}case 2:{let Y=_J(q,J.next);if(Y===void 0)return;let Z=Y.next+Y.value;return Z>q.length?void 0:{fieldNumber:W,wireType:X,data:q.subarray(Y.next,Z),next:Z}}case 1:case 5:{let Y=J.next+(X===1?8:4);return Y>q.length?void 0:{fieldNumber:W,wireType:X,next:Y}}default:return}}function oQ(q,Q){let J=0;for(;J<q.length;){let W=XX(q,J);if(W===void 0)return;if(W.fieldNumber===Q&&W.data!==void 0)return W.data;J=W.next}}function o1(q,Q){let J=0;for(;J<q.length;){let W=XX(q,J);if(W===void 0)return;if(W.fieldNumber===Q&&W.wireType===0)return W.value;J=W.next}}function YX(q){let Q=oQ(q,11);if(Q===void 0||o1(Q,1)!==2)return;let J=oQ(Q,2);if(J===void 0)return;let W=oQ(J,2);if(W===void 0)return;let X=oQ(W,1);if(!(X===void 0||X.length===0||!X.every((Y)=>Y>=48&&Y<=57)))return String.fromCharCode(...X)}var{defineProperty:r1,getOwnPropertyDescriptor:t1}=Object,e1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?t1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&r1(Q,J,X),X},q2=(q,Q)=>(J,W)=>Q(J,W,q),Q2=[G.TRON_TOKEN],rQ=class{constructor(q){this.dataSource=q}canHandle(q,Q){return Q2.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"rawTransaction"in q&&q.rawTransaction instanceof Uint8Array&&q.rawTransaction.length>0}async load({rawTransaction:q}){let Q=YX(q);return Q===void 0?[]:(await this.dataSource.getTokenInfosPayload({assetId:Q})).caseOf({Left:(J)=>[{type:G.ERROR,error:J}],Right:(J)=>[{type:G.TRON_TOKEN,payload:J}]})}};rQ=e1([O(),q2(0,$(Bq.TokenDataSource))],rQ);var ZX=()=>new v(({bind:q})=>{q(Bq.TokenDataSource).to(aQ),q(Bq.TokenContextLoader).to(rQ)});var p=((q)=>(q.Ethereum="ethereum",q.Solana="solana",q.Concordium="concordium",q.Tron="tron",q))(p||{});var $X=(q)=>new v(({bind:Q})=>{Q(B.NetworkClient).toConstantValue(qq(q))});var VX=({config:q})=>{let Q=new GX;Q.bind(b.ContextModuleLoggerFactory).toConstantValue(q.loggerFactory);let{chain:J}=q;switch(Q.loadSync(IJ(q),$X(q)),J){case p.Ethereum:Q.loadSync(zQ(),PW(),VJ(),$W(q.customTrustedNameDataSource),TJ(),kJ(),pJ(),sJ(q.datasource),aJ(),CJ(),qW(),EJ(),KW(),BW(),_W());break;case p.Solana:Q.loadSync(zQ(),VJ(),sW(),aW(),cW(),wW(),lW(),xW(),tW(),oW(),kW(),QX());break;case p.Concordium:Q.loadSync(zQ(),LJ());break;case p.Tron:Q.loadSync(ZX());break;default:{let W=J}}return Q};class RJ{_container;_config;_loaders;_typedDataLoader;_fieldLoaders;_blindSigningReporter;_signReporter;constructor(q){this._config=q,this._container=VX({config:q}),this._loaders=q.defaultLoaders?this._getDefaultLoaders():[],this._loaders.push(...q.customLoaders),this._fieldLoaders=q.defaultFieldLoaders?this._getDefaultFieldLoaders():[],this._fieldLoaders.push(...q.customFieldLoaders),this._typedDataLoader=q.customTypedDataLoader??this._getDefaultTypedDataLoader(),this._blindSigningReporter=q.customBlindSigningReporter??this._getBlindSigningReporter(),this._signReporter=null}_getDefaultFieldLoaders(){return this._config.chain!==p.Ethereum?[]:[this._container.get(s.NftContextFieldLoader),this._container.get(A.TokenContextFieldLoader),this._container.get(l.TrustedNameContextFieldLoader),this._container.get(h.ProxyContextFieldLoader)]}_getDefaultLoaders(){let{chain:q}=this._config;switch(q){case p.Ethereum:return[this._container.get(Zq.ExternalPluginContextLoader),this._container.get(l.TrustedNameContextLoader),this._container.get(s.NftContextLoader),this._container.get(A.TokenContextLoader),this._container.get(o.CalldataContextLoader),this._container.get(Yq.DynamicNetworkContextLoader),this._container.get($q.SafeAddressLoader),this._container.get(d.GatedSigningContextLoader),this._container.get(d.GatedSigningTypedDataContextLoader),this._container.get(f.TransactionCheckLoader),this._container.get(f.TypedDataCheckLoader)];case p.Solana:return[this._container.get(t.TokenContextLoader),this._container.get(bq.LifiContextLoader),this._container.get(Nq.OwnerInfoContextLoader),this._container.get(f.TransactionCheckLoader),this._container.get(r.InstructionInfoContextLoader),this._container.get(LQ.EnumVariantContextLoader),this._container.get(jq.TokenInfoContextLoader),this._container.get(zq.TokenAccountStateContextLoader),this._container.get(Oq.AltResolutionContextLoader),this._container.get(vq.SolanaTrustedNameContextLoader)];case p.Concordium:return[this._container.get(Wq.AccountOwnershipContextLoader)];case p.Tron:return[this._container.get(Bq.TokenContextLoader)];default:{let Q=q;return[]}}}_getDefaultTypedDataLoader(){return this._config.chain!==p.Ethereum?{load:()=>Promise.reject(Error("[ContextModule] getTypedDataFilters is not supported for this chain"))}:this._container.get(Vq.TypedDataContextLoader)}_getBlindSigningReporter(){return this._container.isBound(Qq.BlindSigningReporter)?this._container.get(Qq.BlindSigningReporter):null}async getContexts(q,Q){let J=Object.values(G),W=this._loaders.filter((X)=>X.canHandle(q,Q??J)).map((X)=>X.load(q));return(await Promise.all(W)).flat()}async getFieldContext(q,Q){let J=this._fieldLoaders.filter((W)=>W.canHandle(q,Q));if(J.length===0)return Promise.resolve({type:G.ERROR,error:Error(`Loader not found for field: ${q} and expected type: ${Q}`)});for(let W of J){let X=await W.loadField(q);if(X.type!==G.ERROR)return X}return{type:G.ERROR,error:Error(`Loader not found for field: ${q} and expected type: ${Q}`)}}async getTypedDataFilters(q){return this._typedDataLoader.load(q)}async report(q){await this._blindSigningReporter?.report(q)}async signReport(q){await this._signReporter?.report(q)}}var J2="https://global.api.prd.ledger.com/cal/v1",W2="https://global.api.prd.ledger.com/transaction-checks/v3",X2="https://nft.api.live.ledger.com",Y2="https://blind-signing.api.ledger.com/ingest",Z2=Object.freeze({cal:Object.freeze({url:J2,mode:"prod",branch:"main"}),web3checks:Object.freeze({url:W2}),metadataServiceDomain:Object.freeze({url:X2}),reporter:Object.freeze({url:Y2}),datasource:Object.freeze({proxy:"default"}),appSource:"third-party"}),$2={defaultLoaders:!0,defaultFieldLoaders:!0,customLoaders:[],customFieldLoaders:[],customTypedDataLoader:void 0,customBlindSigningReporter:void 0,customTrustedNameDataSource:void 0};class G2{config;constructor({originToken:q,loggerFactory:Q}){this.config={...Z2,...$2,customLoaders:[],customFieldLoaders:[],originToken:q??"",loggerFactory:Q??KX}}removeDefaultLoaders(){return this.config.defaultLoaders=!1,this}addLoader(q){return this.config.customLoaders.push(q),this}addTypedDataLoader(q){return this.config.customTypedDataLoader=q,this}setCalConfig(q){return this.config.cal=q,this}setMetadataServiceConfig(q){return this.config.metadataServiceDomain=q,this}setWeb3ChecksConfig(q){return this.config.web3checks=q,this}setDatasourceConfig(q){return this.config.datasource=q,this}setReporterConfig(q){return this.config.reporter=q,this}setAppSource(q){return this.config.appSource=q,this}setBlindSigningReporter(q){return this.config.customBlindSigningReporter=q,this}setTrustedNameDataSource(q){return this.config.customTrustedNameDataSource=q,this}setLoggerFactory(q){return this.config.loggerFactory=q,this}setChain(q){return this.config.chain=q,this}build(){if(!this.config.chain)throw Error("[ContextModuleBuilder] setChain() must be called before build()");return new RJ(this.config)}}var mb=Object.freeze({ETH_SIGN_TRANSACTION:"eth_signTransaction",ETH_SIGN_TYPED_DATA:"eth_signTypedData"}),ub=Object.freeze({NO_CLEAR_SIGNING_CONTEXT:"no_clear_signing_context",DEVICE_REJECTED_CONTEXT:"device_rejected_context",UNRECOGNIZED_PROGRAM:"unrecognized_program",STALE_DESCRIPTOR:"stale_descriptor"}),pb=Object.freeze({BASIC:"basic",EIP7730:"eip7730"}),lb=Object.freeze({DESKTOP:"desktop",MOBILE:"mobile"});var db=Object.freeze({ETH_SIGN_TRANSACTION:"eth_signTransaction",ETH_SIGN_TYPED_DATA:"eth_signTypedData",SOL_SIGN_TRANSACTION:"sol_signTransaction"});var V2={TOKEN:G.SOLANA_TOKEN,LIFI:G.SOLANA_LIFI,TRUSTED_NAME:G.SOLANA_TRUSTED_NAME,BASIC_TRUSTED_NAME:G.SOLANA_BASIC_TRUSTED_NAME,TRANSACTION_CHECK:G.SOLANA_TRANSACTION_CHECK,INSTRUCTION_INFO:G.SOLANA_INSTRUCTION_INFO,ENUM_VARIANT:G.SOLANA_ENUM_VARIANT,TOKEN_INFO:G.SOLANA_TOKEN_INFO,TOKEN_ACCOUNT_STATE:G.SOLANA_TOKEN_ACCOUNT_STATE,ALT_RESOLUTION:G.SOLANA_ALT_RESOLUTION},K2=new Set(Object.values(V2));function ab(q){return K2.has(q.type)}var Rq=Object.freeze({NANO_S:"nanoS",NANO_SP:"nanoSP",NANO_X:"nanoX",STAX:"stax",FLEX:"flex",APEX_P:"apexP"}),O2={[S.NANO_S]:Rq.NANO_S,[S.NANO_SP]:Rq.NANO_SP,[S.NANO_X]:Rq.NANO_X,[S.STAX]:Rq.STAX,[S.FLEX]:Rq.FLEX,[S.APEX]:Rq.APEX_P};function tb(q){return O2[q]}var F2=((q)=>(q.FROM="FROM",q.TO="TO",q.VALUE="VALUE",q))(F2||{}),b2=((q)=>(q.TUPLE="TUPLE",q.ARRAY="ARRAY",q.REF="REF",q.LEAF="LEAF",q.SLICE="SLICE",q))(b2||{}),N2=((q)=>(q.STATIC_LEAF="STATIC_LEAF",q.DYNAMIC_LEAF="DYNAMIC_LEAF",q.TUPLE_LEAF="TUPLE_LEAF",q.ARRAY_LEAF="ARRAY_LEAF",q))(N2||{});export{Jq as a,kq as b,G as c,xq as d,a as e,BX as f,HX as g,c2 as h,k as i,P as j,Iq as k,Aq as l,fq as m,fX as n,Cq as o,yq as p,mq as q,uq as r,lq as s,cq as t,sq as u,iq as v,nq as w,aq as x,oq as y,rq as z,tq as A,QQ as B,JQ as C,eJ as D,WQ as E,XQ as F,YQ as G,ZQ as H,GW as I,Gq as J,$Q as K,GQ as L,VQ as M,KQ as N,OQ as O,FQ as P,NQ as Q,jQ as R,vQ as S,Kq as T,MQ as U,wQ as V,SQ as W,i as X,Fq as Y,xQ as Z,TQ as _,CQ as $,yQ as aa,pQ as ba,lQ as ca,cQ as da,sQ as ea,iQ as fa,nQ as ga,p as ha,RJ as ia,Z2 as ja,G2 as ka,mb as la,ub as ma,pb as na,lb as oa,db as pa,V2 as qa,K2 as ra,ab as sa,Rq as ta,tb as ua,F2 as va,b2 as wa,N2 as xa};
2
-
3
- //# debugId=4DD2310E7B8930EE64756E2164756E21
4
- //# sourceMappingURL=chunk-09e51wma.js.map
@@ -1,4 +0,0 @@
1
- import{Fa as a,Ga as b,Ha as c}from"./chunk-ds2m83jp.js";import"./chunk-nhva847d.js";export{b as signLegacyPsbtTransaction,a as extractInputsFromPsbt,c as createLegacyPsbtSigner};
2
-
3
- //# debugId=F3CCCADD39A261C464756E2164756E21
4
- //# sourceMappingURL=chunk-5p3ttw6y.js.map
@@ -1,4 +0,0 @@
1
- import{Ba as D,Ca as H}from"./chunk-jzrytcrf.js";import{$a as z,$c as VQ,Ib as o,Jb as U,La as qY,Mc as zQ,Oa as _Q,Pa as _0,Sc as s0,Sd as vX,Ta as i,Tc as q0,Ua as CQ,Uc as a0,Va as W,Vc as r,Wc as TQ,Xa as qQ,Xc as c,Ya as j,Yc as GQ,Zc as n0,_c as i0,ab as nX,bb as P,cb as b,eb as DQ,hb as I0,id as hQ,jd as T,kd as I,ld as p,md as $8,pc as FX}from"./chunk-dptbnkzm.js";import{Wd as ZY}from"./chunk-nhva847d.js";var BK=ZY(qY(),1);var V={AppBinding:Symbol.for("AppBinding")};var d="Zcash";var ZQ={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId")};var v=224,m={FIRST:0,NEXT:128,CHANGE_PATH:255},g={DEFAULT:0,SAPLING:5,HASH_INPUT_CONTINUE:128},A={FIRST:0,NEXT:128,LAST:1},e={CONTINUE:0,FINISHED:1},UQ=255;var R={6300:{message:"GPAuthFailedError"},"63c0":{message:"PinRemainingAttemptsError"},6400:{message:"ExecutionError"},6700:{message:"IncorrectLengthError"},6981:{message:"CommandIncompatibleFileStructureError"},6982:{message:"SecurityStatusNotSatisfiedError"},6985:{message:"UserRejectedError"},6986:{message:"ConditionsOfUseNotSatisfiedError"},"6a80":{message:"IncorrectDataError"},"6a84":{message:"NotEnoughMemorySpaceError"},"6a88":{message:"ReferencedDataNotFoundError"},"6a89":{message:"FileAlreadyExistsError"},"6a8a":{message:"SwapWithoutTrustedInputsError"},"6b00":{message:"IncorrectP1P2Error"},"6d00":{message:"InsNotSupportedError"},"6e00":{message:"ClaNotSupportedError"},"6f00":{message:"TechnicalProblemError"},"6f01":{message:"VersionParsingFailError"},"6f03":{message:"RngFailureError"},"6f42":{message:"LicensingError"},"6faa":{message:"HaltedError"},9240:{message:"MemoryProblemError"},9400:{message:"NoEFSelectedError"},9402:{message:"InvalidOffsetError"},9404:{message:"FileNotFoundError"},9408:{message:"InconsistentFileError"},9484:{message:"AlgorithmNotSupportedError"},9485:{message:"InvalidKCVError"},9802:{message:"CodeNotInitializedError"},9804:{message:"AccessConditionNotFullfilledError"},9808:{message:"ContradictionSecretCodeStatusError"},9810:{message:"ContradictionInvalidationError"},9840:{message:"CodeBlockedError"},9850:{message:"MaxValueReachedError"},b007:{message:"BadStateError"},unsupported_v6_transaction:{message:"UnsupportedV6TransactionError"}};class c0 extends DQ{constructor(Q){super({tag:"ZcashAppCommandError",...Q})}}var M=(Q)=>new c0(Q);var l0=32,Z8=64;class KQ{name="GetAddress";args;errorHelper=new D(R,M);constructor(Q){this.args=Q}getApdu(){let Q={cla:v,ins:Z8,p1:this.args.checkOnDevice?1:0,p2:0},X=new W(Q),$=H.splitPath(this.args.derivationPath);return X.add8BitUIntToData($.length),$.forEach((Y)=>{X.add32BitUIntToData(Y)}),X.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new qQ(Q),$=X.extract8BitUInt();if($===void 0)return P({error:new j("Public key length is missing")});if(X.testMinimalLength($)===!1)return P({error:new j("Public key is missing")});let Y=X.extractFieldByLength($);if(Y===void 0)return P({error:new j("Unable to extract public key")});let J=X.extract8BitUInt();if(J===void 0)return P({error:new j("Address length is missing")});if(X.testMinimalLength(J)===!1)return P({error:new j("Address is missing")});let N=X.extractFieldByLength(J);if(N===void 0)return P({error:new j("Unable to extract address")});let Z=X.encodeToString(N);if(X.testMinimalLength(l0)===!1)return P({error:new j("Chain code is missing")});let q=X.extractFieldByLength(l0);return q===void 0?P({error:new j("Unable to extract chain code")}):P({data:{publicKey:Y,address:Z,chainCode:q}})})}}var q8=196;class Q0{name="getAppConfig";errorHelper=new D(R,M);getApdu(){return new W({cla:v,ins:q8,p1:0,p2:g.DEFAULT}).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new qQ(Q);X.extract8BitUInt(),X.extract8BitUInt();let $=X.extract8BitUInt(),Y=X.extract8BitUInt(),J=X.extract8BitUInt();return $===void 0||Y===void 0||J===void 0?P({error:new j("Cannot extract version")}):P({data:{version:`${$}.${Y}.${J}`}})})}}class X0{name="SignMessage";args;constructor(Q){this.args=Q}getApdu(){throw console.log(this.args),Error("SignMessageCommand.getApdu() not implemented")}parseResponse(Q){throw Error("SignMessageCommand.parseResponse() not implemented")}}var OQ={UFVK:0,ORCHARD_FVK:1},K8=80;class LQ{name="GetFullViewingKey";errorHelper=new D(R,M);args;constructor(Q){this.args=Q}getApdu(){let Q=this.args.isContinue?m.NEXT:m.FIRST,X={cla:v,ins:K8,p1:Q,p2:this.args.p2},$=new W(X);if(!this.args.isContinue){let Y=H.splitPath(this.args.derivationPath);if($.add8BitUIntToData(Y.length),Y.forEach((J)=>{$.add32BitUIntToData(J)}),this.args.p2===OQ.UFVK){if(!this.args.transparentDerivationPath)throw Error("GetFullViewingKeyCommand: UFVK export requires a transparent derivation path (app-zcash >= v3.8.0)");let J=H.splitPath(this.args.transparentDerivationPath);$.add8BitUIntToData(J.length),J.forEach((N)=>{$.add32BitUIntToData(N)})}}return $.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>P({data:{data:new Uint8Array(Q.data)}}))}}function o0(Q){return Q==="orchardFvk"?OQ.ORCHARD_FVK:OQ.UFVK}function L(...Q){let X=Q.reduce((J,N)=>J+N.length,0),$=new Uint8Array(X),Y=0;return Q.forEach((J)=>{$.set(J,Y),Y+=J.length}),$}function bQ(Q,X){return`32'/${Q}/${X}`}var p0=96;function O8(Q){let X=`Orchard FVK must be ${p0} bytes (got ${Q.length})`;if(Q.length<2)return X;let $=new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(0,!1);return 2+$===Q.length?`${X}. Payload matches UFVK framing (u16 BE length + ${$} bytes). Use mode "ufvk" for this response, or use a Zcash app build that exports raw Orchard FVK for GET_VK P2=0x01.`:X}function P8(Q){return Q.length!==p0?z({error:new j(O8(Q))}):z({data:{mode:"orchardFvk",fullViewingKey:Q}})}function z8(Q){if(Q.length<2)return!1;let X=new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(0,!1);return Q.length>=2+X}function j8(Q){if(Q.length<2)return z({error:new j("UFVK string length is missing")});let X=new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(0,!1);if(2+X>Q.length)return z({error:new j("UFVK string is truncated")});let $=Q.slice(2,2+X),Y;try{Y=new TextDecoder("utf-8",{fatal:!0}).decode($)}catch{return z({error:new j("UFVK is not valid UTF-8")})}return 2+X<Q.length?z({error:new j("UFVK response has extra trailing bytes")}):z({data:{mode:"ufvk",fullViewingKey:Y}})}function x8(Q){let X=Q.split("/");if(X.length<3)return{error:new j(`Zcash UFVK derivation path must have at least purpose/coin/account levels (got "${Q}")`)};let[,$,Y]=X;return!$||!Y?{error:new j(`Zcash UFVK derivation path components are malformed (got "${Q}")`)}:{orchardDerivationPath:bQ($,Y),transparentDerivationPath:`44'/${$}/${Y}`}}class $0{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q=o0(this.args.mode),X;if(this.args.mode==="ufvk"){let N=x8(this.args.derivationPath);if("error"in N)return z({error:N.error});X={isContinue:!1,p2:OQ.UFVK,derivationPath:N.orchardDerivationPath,transparentDerivationPath:N.transparentDerivationPath}}else X={isContinue:!1,p2:OQ.ORCHARD_FVK,derivationPath:this.args.derivationPath};let $=await this.api.sendCommand(new LQ(X));if(!b($))return z({error:$.error});let Y=new Uint8Array($.data.data),J=Y;for(;Y.length===CQ&&!(this.args.mode==="ufvk"&&z8(J));){let N=await this.api.sendCommand(new LQ({isContinue:!0,p2:Q}));if(!b(N))return z({error:N.error});Y=new Uint8Array(N.data.data),J=L(J,Y)}return this.args.mode==="ufvk"?j8(J):P8(J)}}var G8=81;class Y0{name="GetShieldedAddress";args;errorHelper=new D(R,M);constructor(Q){this.args=Q}getApdu(){let Q={cla:v,ins:G8,p1:this.args.checkOnDevice?1:0,p2:0},X=new W(Q),$=H.splitPath(this.args.orchardDerivationPath),Y=H.splitPath(this.args.transparentDerivationPath);return[$,Y].forEach((J)=>{X.add8BitUIntToData(J.length),J.forEach((N)=>{X.add32BitUIntToData(N)})}),X.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{if(Q.data.length===CQ)return P({error:new j("Response requires continuation which is not supported")});let X=new qQ(Q),$=X.extract16BitUInt();if($===void 0)return P({error:new j("Address length is missing")});if(X.testMinimalLength($)===!1)return P({error:new j("Address is missing")});let Y=X.extractFieldByLength($);if(Y===void 0)return P({error:new j("Unable to extract address")});if(X.testMinimalLength(1))return P({error:new j("Unexpected trailing bytes in response")});let J;try{J=new TextDecoder("utf-8",{fatal:!0}).decode(Y)}catch{return P({error:new j("Address is not valid UTF-8")})}return P({data:{address:J}})})}}function w8(Q){let X=Q.startsWith("m/")?Q.slice(2):Q,$=X.split("/");if($.length!==5)return{error:new j(`Shielded address derivation path must have exactly 5 levels purpose/coin/account/change/index (got "${Q}")`)};let Y=(O)=>/^\d+'?$/.test(O);if(!$.every(Y))return{error:new j(`Shielded address derivation path contains non-numeric components (got "${Q}")`)};let[J,N,Z,q]=$;return J!=="44'"?{error:new j(`Shielded address derivation path purpose must be 44' (got "${J}")`)}:N?.endsWith("'")?Z?.endsWith("'")?q!=="0"?{error:new j(`Shielded address derivation path change must be 0 (got "${q}")`)}:{orchardDerivationPath:bQ(N,Z),transparentDerivationPath:X}:{error:new j(`Shielded address derivation path account must be hardened (got "${Z}")`)}:{error:new j(`Shielded address derivation path coin type must be hardened (got "${N}")`)}}class J0{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q=w8(this.args.derivationPath);if("error"in Q)return z({error:Q.error});let X=await this.api.sendCommand(new Y0({orchardDerivationPath:Q.orchardDerivationPath,transparentDerivationPath:Q.transparentDerivationPath,checkOnDevice:this.args.checkOnDevice}));return b(X)?z({data:{address:X.data.address}}):z({error:X.error})}}var N0=4,k8=66;class yQ{name="GetTrustedInput";errorHelper=new D(R,M);args;constructor(Q){this.args=Q}getApdu(){let{transaction:Q,indexLookup:X}=this.args,$,Y=!1;if(typeof X=="number"&&X>=0){Y=!0;let N=new Uint8Array(N0);new DataView(N.buffer,N.byteOffset,N.byteLength).setUint32(0,X,!1),$=new Uint8Array(Q.length+N0),$.set(N,0),$.set(Q,N0)}else $=Q;let J={cla:v,ins:k8,p1:Y?m.FIRST:m.NEXT,p2:g.DEFAULT};return new W(J).addBufferToData($).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}class Z0 extends DQ{appVersion;constructor(Q){super({tag:"UnsupportedV6TransactionError",message:`The Zcash app version ${Q} installed on the device does not support V6 (Ironwood) source transactions, so a UTXO received from one cannot be signed. Support is expected in a future Zcash app update.`,errorCode:"unsupported_v6_transaction"}),this.appVersion=Q}}function F8(Q,X,$,Y){if(typeof Q.setBigUint64==="function")return Q.setBigUint64(X,$,Y);let J=BigInt(32),N=BigInt(4294967295),Z=Number($>>J&N),q=Number($&N),O=Y?4:0,w=Y?0:4;Q.setUint32(X+O,Z,Y),Q.setUint32(X+w,q,Y)}function K0(Q,X,$){return Q&X^~Q&$}function O0(Q,X,$){return Q&X^Q&$^X&$}class xQ extends i0{constructor(Q,X,$,Y){super();this.finished=!1,this.length=0,this.pos=0,this.destroyed=!1,this.blockLen=Q,this.outputLen=X,this.padOffset=$,this.isLE=Y,this.buffer=new Uint8Array(Q),this.view=TQ(this.buffer)}update(Q){q0(this),Q=n0(Q),s0(Q);let{view:X,buffer:$,blockLen:Y}=this,J=Q.length;for(let N=0;N<J;){let Z=Math.min(Y-this.pos,J-N);if(Z===Y){let q=TQ(Q);for(;Y<=J-N;N+=Y)this.process(q,N);continue}if($.set(Q.subarray(N,N+Z),this.pos),this.pos+=Z,N+=Z,this.pos===Y)this.process(X,0),this.pos=0}return this.length+=Q.length,this.roundClean(),this}digestInto(Q){q0(this),a0(Q,this),this.finished=!0;let{buffer:X,view:$,blockLen:Y,isLE:J}=this,{pos:N}=this;if(X[N++]=128,r(this.buffer.subarray(N)),this.padOffset>Y-N)this.process($,0),N=0;for(let K=N;K<Y;K++)X[K]=0;F8($,Y-8,BigInt(this.length*8),J),this.process($,0);let Z=TQ(Q),q=this.outputLen;if(q%4)throw Error("_sha2: outputLen should be aligned to 32bit");let O=q/4,w=this.get();if(O>w.length)throw Error("_sha2: outputLen bigger than state");for(let K=0;K<O;K++)Z.setUint32(4*K,w[K],J)}digest(){let{buffer:Q,outputLen:X}=this;this.digestInto(Q);let $=Q.slice(0,X);return this.destroy(),$}_cloneInto(Q){Q||(Q=new this.constructor),Q.set(...this.get());let{blockLen:X,buffer:$,length:Y,finished:J,destroyed:N,pos:Z}=this;if(Q.destroyed=N,Q.finished=J,Q.length=Y,Q.pos=Z,Y%X)Q.buffer.set($);return Q}clone(){return this._cloneInto()}}var s=Uint32Array.from([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);var v8=Uint8Array.from([7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8]),e0=(()=>Uint8Array.from(Array(16).fill(0).map((Q,X)=>X)))(),R8=(()=>e0.map((Q)=>(9*Q+5)%16))(),r0=(()=>{let $=[[e0],[R8]];for(let Y=0;Y<4;Y++)for(let J of $)J.push(J[Y].map((N)=>v8[N]));return $})(),QX=(()=>r0[0])(),XX=(()=>r0[1])(),$X=[[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8],[12,13,11,15,6,9,9,7,12,15,11,13,7,8,7,7],[13,15,14,11,7,7,6,8,13,14,13,12,5,5,6,9],[14,11,12,14,8,6,5,5,15,12,15,14,9,9,8,6],[15,12,13,13,9,5,8,6,14,11,12,11,8,6,5,5]].map((Q)=>Uint8Array.from(Q)),M8=QX.map((Q,X)=>Q.map(($)=>$X[X][$])),W8=XX.map((Q,X)=>Q.map(($)=>$X[X][$])),U8=Uint32Array.from([0,1518500249,1859775393,2400959708,2840853838]),D8=Uint32Array.from([1352829926,1548603684,1836072691,2053994217,0]);function t0(Q,X,$,Y){if(Q===0)return X^$^Y;if(Q===1)return X&$|~X&Y;if(Q===2)return(X|~$)^Y;if(Q===3)return X&Y|$&~Y;return X^($|~Y)}var BQ=new Uint32Array(16);class P0 extends xQ{constructor(){super(64,20,8,!0);this.h0=1732584193,this.h1=-271733879,this.h2=-1732584194,this.h3=271733878,this.h4=-1009589776}get(){let{h0:Q,h1:X,h2:$,h3:Y,h4:J}=this;return[Q,X,$,Y,J]}set(Q,X,$,Y,J){this.h0=Q|0,this.h1=X|0,this.h2=$|0,this.h3=Y|0,this.h4=J|0}process(Q,X){for(let x=0;x<16;x++,X+=4)BQ[x]=Q.getUint32(X,!0);let $=this.h0|0,Y=$,J=this.h1|0,N=J,Z=this.h2|0,q=Z,O=this.h3|0,w=O,K=this.h4|0,k=K;for(let x=0;x<5;x++){let f=4-x,y=U8[x],h=D8[x],F=QX[x],G=XX[x],t=M8[x],jQ=W8[x];for(let u=0;u<16;u++){let NQ=GQ($+t0(x,J,Z,O)+BQ[F[u]]+y,t[u])+K|0;$=K,K=O,O=GQ(Z,10)|0,Z=J,J=NQ}for(let u=0;u<16;u++){let NQ=GQ(Y+t0(f,N,q,w)+BQ[G[u]]+h,jQ[u])+k|0;Y=k,k=w,w=GQ(q,10)|0,q=N,N=NQ}}this.set(this.h1+Z+w|0,this.h2+O+k|0,this.h3+K+Y|0,this.h4+$+N|0,this.h0+J+q|0)}roundClean(){r(BQ)}destroy(){this.destroyed=!0,r(this.buffer),this.set(0,0,0,0,0)}}var YX=VQ(()=>new P0);var JX=YX;var L8=Uint32Array.from([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),QQ=new Uint32Array(64);class z0 extends xQ{constructor(Q=32){super(64,Q,8,!1);this.A=s[0]|0,this.B=s[1]|0,this.C=s[2]|0,this.D=s[3]|0,this.E=s[4]|0,this.F=s[5]|0,this.G=s[6]|0,this.H=s[7]|0}get(){let{A:Q,B:X,C:$,D:Y,E:J,F:N,G:Z,H:q}=this;return[Q,X,$,Y,J,N,Z,q]}set(Q,X,$,Y,J,N,Z,q){this.A=Q|0,this.B=X|0,this.C=$|0,this.D=Y|0,this.E=J|0,this.F=N|0,this.G=Z|0,this.H=q|0}process(Q,X){for(let K=0;K<16;K++,X+=4)QQ[K]=Q.getUint32(X,!1);for(let K=16;K<64;K++){let k=QQ[K-15],x=QQ[K-2],f=c(k,7)^c(k,18)^k>>>3,y=c(x,17)^c(x,19)^x>>>10;QQ[K]=y+QQ[K-7]+f+QQ[K-16]|0}let{A:$,B:Y,C:J,D:N,E:Z,F:q,G:O,H:w}=this;for(let K=0;K<64;K++){let k=c(Z,6)^c(Z,11)^c(Z,25),x=w+k+K0(Z,q,O)+L8[K]+QQ[K]|0,y=(c($,2)^c($,13)^c($,22))+O0($,Y,J)|0;w=O,O=q,q=Z,Z=N+x|0,N=J,J=Y,Y=$,$=x+y|0}$=$+this.A|0,Y=Y+this.B|0,J=J+this.C|0,N=N+this.D|0,Z=Z+this.E|0,q=q+this.F|0,O=O+this.G|0,w=w+this.H|0,this.set($,Y,J,N,Z,q,O,w)}roundClean(){r(QQ)}destroy(){this.set(0,0,0,0,0,0,0,0),r(this.buffer)}}var NX=VQ(()=>new z0);var ZX=NX;function qX(Q){let X=new Uint8Array(4);return new DataView(X.buffer).setUint32(0,Q>>>0,!1),X}function E(Q){let X=new Uint8Array(4);return new DataView(X.buffer).setUint32(0,Q>>>0,!0),X}var fQ=50,PX=0,x0=4294967295,gQ=1,b8=118,C8=169,y8=20,T8=136,B8=172,a={NU6_3:3428143,NU6_2:3364600,NU6_1:3146400,NU6:2726400,NU5:1687104,CANOPY:1046400,HEARTWOOD:903000,BLOSSOM:653600,SAPLING:419200},_=(Q)=>Uint8Array.from(Q),V8=(Q,X)=>new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint16(X,!0),EQ=(Q,X)=>new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint32(X,!0),E8=(Q)=>({prevout:_(Q.prevout),script:_(Q.script),sequence:_(Q.sequence),tree:Q.tree?_(Q.tree):void 0}),I8=(Q)=>({amount:_(Q.amount),script:_(Q.script)}),zX=(Q)=>({version:_(Q.version),inputs:Q.inputs.map(E8),outputs:Q.outputs?.map(I8),locktime:Q.locktime?_(Q.locktime):void 0,timestamp:Q.timestamp?_(Q.timestamp):void 0,nVersionGroupId:Q.nVersionGroupId?_(Q.nVersionGroupId):void 0,nExpiryHeight:Q.nExpiryHeight?_(Q.nExpiryHeight):void 0,extraData:Q.extraData?_(Q.extraData):void 0,consensusBranchId:Q.consensusBranchId?_(Q.consensusBranchId):void 0}),C=(Q)=>Q<253?Uint8Array.of(Q):Q<=65535?Uint8Array.of(253,Q&255,Q>>8&255):Uint8Array.of(254,Q&255,Q>>8&255,Q>>16&255,Q>>24&255),KX=(Q,X)=>{if(X>=Q.length)return null;let $=Q[X];if($<253)return[$,X+1];if($===253)return X+3>Q.length?null:[V8(Q,X+1),X+3];if($===254)return X+5>Q.length?null:[EQ(Q,X+1)>>>0,X+5];if($===255){if(X+9>Q.length)return null;let Y=EQ(Q,X+1);return EQ(Q,X+5)!==0?null:[Y,X+9]}return null},jX=(Q)=>{if(Q.length===0)return null;let X=KX(Q,0);if(X===null||X[0]<0)return null;let $=X[0],Y=X[1],J=[];for(let N=0;N<$;N+=1){if(Y+8>Q.length)return null;Y+=8;let Z=KX(Q,Y);if(Z===null)return null;let[q,O]=Z;if(q<0||O+q>Q.length)return null;J.push(Q.subarray(O,O+q)),Y=O+q}return Y!==Q.length?null:J},OX=({outputs:Q})=>{let X=new Uint8Array(0);return Q&&(X=L(X,C(Q.length)),Q.forEach(($)=>{X=L(X,$.amount,C($.script.length),$.script)})),X},G0=(Q,X)=>{let $=new Uint8Array(0);if(Q.inputs.forEach((Z)=>{$=L($,Z.prevout,C(Z.script.length),Z.script,Z.sequence)}),Q.version.length>=4&&(EQ(Q.version,0)&2147483647)===4){let Z=Q.locktime&&Q.locktime.byteLength>0?Q.locktime:new Uint8Array(4),q=IQ(Q.nExpiryHeight),O=Q.extraData||new Uint8Array(0);return L(Q.version,Q.nVersionGroupId||new Uint8Array(0),Q.consensusBranchId||new Uint8Array(0),C(Q.inputs.length),$,OX(Q),new Uint8Array(3),Z,C(q.length+O.length),q,O)}let Y=OX(Q);Q.outputs&&Q.locktime&&(Y=L(Y,new Uint8Array(3),Q.extraData||new Uint8Array(0)));let J=Q.locktime&&Q.locktime.byteLength>0?Q.locktime:new Uint8Array(4),N=IQ(Q.nExpiryHeight);return L(Q.version,X??Q.timestamp??new Uint8Array(0),Q.nVersionGroupId||new Uint8Array(0),Q.consensusBranchId||new Uint8Array(0),J,N,C(Q.inputs.length),$,Y)},w0=(Q)=>{let X=((Q.at(64)??0)&1)===0?2:3;return L(Uint8Array.of(X),Q.subarray(1,33))},f8=(Q)=>JX(ZX(Q)),xX=(Q)=>{let X;if(Q.length===65?X=w0(Q):Q.length===33?X=Q:X=null,X?.length!==33)throw Error("Expected 65-byte uncompressed or 33-byte compressed secp256k1 public key");let $=f8(X);return L(Uint8Array.of(b8,C8,y8),$,Uint8Array.of(T8,B8))},SQ=(Q)=>Q==null||Q>=a.NU6_3?E(933566043):Q>=a.NU6_2?E(1412952880):Q>=a.NU6_1?E(1307332080):Q>=a.NU6?E(3370586197):Q>=a.NU5?E(3268858036):Q>=a.CANOPY?E(3925833126):Q>=a.HEARTWOOD?E(4122551051):Q>=a.BLOSSOM?E(733220448):Q>=a.SAPLING?E(1991772603):E(1537743641),GX=()=>E(2147483653),j0=4;function IQ(Q){if(Q===void 0||Q.byteLength===0)return new Uint8Array(j0);if(Q.byteLength!==j0)throw Error(`expiryHeight must be ${j0} bytes (got ${Q.byteLength})`);return _(Q)}var wX="0.0.0",kX={version:""},g8="3.8.0";class RX{resolve(Q,X){if(Q.sessionStateType===FX.Connected)return{isCompatible:!1,version:wX};let $=Q.currentApp;return $?.name!==d?{isCompatible:!1,version:wX}:{isCompatible:!0,version:$.version}}}function MX(Q){try{let X=Q.getDeviceSessionState(),$=new RX,{isCompatible:Y,version:J}=$.resolve(X,kX);return Y?new vX(X,kX,$).withMinVersionInclusive(g8).check()?void 0:J:void 0}catch{return}}var VX=255,S8=4,m8=VX-S8,H8=VX,W0=4,_8=5*W0,XQ=3*W0,S=32,EX=8,h8=1,mQ=64,WX=192,n=52,u8=16,FQ=512,PQ=n+FQ+u8,IX=80,A8=S,d8=A8+S,c8=d8+S,F0=S,l8=F0+S,wQ=l8+S,o8=wQ+PQ+IX,v0=S,R0=v0+S,M0=R0+S,p8=M0+S,kQ=p8+S,s8=kQ+PQ+IX,fX=h8+EX,a8=fX+S,UX=128,DX=50,n8=2147483647,i8=4,t8=5,gX=6,LX=3632576152,k0=(Q,X)=>(l(Q,X,X+1),Q[X]??0),U0=(Q,X)=>(l(Q,X,X+4),new DataView(Q.buffer,Q.byteOffset,Q.byteLength).getUint32(X,!0)),e8=(Q,X)=>{l(Q,X,X+8);let $=new DataView(Q.buffer,Q.byteOffset,Q.byteLength),Y=$.getUint32(X,!0);return $.getUint32(X+4,!0)*4294967296+Y},bX=(Q)=>`0x${Q.toString(16).padStart(8,"0")}`,l=(Q,X,$)=>{if(X<0||$<X||$>Q.length)throw Error("Malformed transaction while splitting trusted input chunks")},$Q=(Q,X)=>{let $=k0(Q,X);if($<253)return{value:$,byteLength:1,nextOffset:X+1};if($===253)return{value:k0(Q,X+1)+(k0(Q,X+2)<<8),byteLength:3,nextOffset:X+3};if($===254)return{value:U0(Q,X+1),byteLength:5,nextOffset:X+5};l(Q,X+1,X+9);let Y=e8(Q,X+1);if(!Number.isSafeInteger(Y))throw Error("CompactSize value exceeds JavaScript safe integer range");return{value:Y,byteLength:9,nextOffset:X+9}},CX=(Q)=>{let X=Q.filter((J)=>J.length>0);if(X.length===0)throw Error("Cannot send trusted input for an empty transaction");let $=[],Y=!0;return X.forEach((J)=>{let N=0;for(;N<J.length;){let Z=Math.min(N+(Y?m8:H8),J.length);$.push(J.slice(N,Z)),N=Z,Y=!1}}),$},r8=(Q,X)=>L(Q,new Uint8Array([4]),X),Q$={actions:[],digestData:new Uint8Array},X$=(Q,X)=>{let $=X;return{take:(Y)=>{l(Q,$,$+Y);let J=Q.slice($,$+Y);return $+=Y,J},skip:(Y)=>{l(Q,$,$+Y),$+=Y},takeCount:()=>{let{value:Y,nextOffset:J}=$Q(Q,$);return $=J,Y},consumed:()=>$}},yX=(Q,X)=>{let $=Q.takeCount();if($===0)return Q$;let Y=Array.from({length:$},()=>Q.take(s8)),J=Q.take(X?a8:fX);return X||Q.skip(S),{actions:Y,digestData:J}},TX=(Q,X)=>{if(X===0)return;let $=Q.takeCount();Q.skip($+X*mQ+mQ)},$$=(Q,X,$)=>{let Y=X$(Q,X),J=Y.takeCount(),N=Array.from({length:J},()=>Y.take(c8)),Z=Y.takeCount(),q=Array.from({length:Z},()=>Y.take(o8)),O=new Uint8Array,w=new Uint8Array;(J>0||Z>0)&&(O=Y.take(EX),J>0&&($?Y.skip(S):w=Y.take(S)),Y.skip(J*(WX+mQ)+Z*WX+mQ));let K=yX(Y,!$);TX(Y,K.actions.length);let k;if($&&(k=yX(Y,!1),TX(Y,k.actions.length)),Y.consumed()!==Q.length)throw Error("Malformed transaction while splitting trusted input chunks");return{saplingSpends:N,saplingOutputs:q,saplingValueBalance:O,saplingAnchor:w,orchard:K,ironwood:k}},Y$=(Q)=>{let X=Q.subarray(0,F0),$=Q.subarray(F0,wQ),Y=Q.subarray(wQ,wQ+PQ),J=Q.subarray(wQ+PQ);return{compact:L($,Y.subarray(0,n)),memo:Y.subarray(n,n+FQ),nonCompact:L(X,Y.subarray(n+FQ),J)}},J$=(Q)=>{let X=Q.subarray(0,v0),$=Q.subarray(v0,R0),Y=Q.subarray(R0,M0),J=Q.subarray(M0,kQ),N=Q.subarray(kQ,kQ+PQ),Z=Q.subarray(kQ+PQ);return{compact:L($,J,N.subarray(0,n)),memo:N.subarray(n,n+FQ),nonCompact:L(X,Y,N.subarray(n+FQ),Z)}},BX=(Q,X)=>{X.forEach(($)=>{for(let Y=0;Y<$.length;Y+=UX)Q.push($.subarray(Y,Y+UX))})},N$=(Q,X)=>{if(Q.push(L(C(X.saplingSpends.length),C(X.saplingOutputs.length),C(X.orchard.actions.length),...X.ironwood!==void 0?[C(X.ironwood.actions.length)]:[])),X.saplingSpends.length>0||X.saplingOutputs.length>0){Q.push(L(X.saplingValueBalance,X.saplingAnchor)),X.saplingSpends.forEach((Y)=>Q.push(Y));let $=X.saplingOutputs.map(Y$);$.forEach(({compact:Y})=>Q.push(Y)),BX(Q,$.map(({memo:Y})=>Y)),$.forEach(({nonCompact:Y})=>Q.push(Y))}(X.ironwood!==void 0?[X.orchard,X.ironwood]:[X.orchard]).forEach(($)=>{if($.actions.length===0)return;let Y=$.actions.map(J$);Y.forEach(({compact:J})=>Q.push(J)),BX(Q,Y.map(({memo:J})=>J)),Y.forEach(({nonCompact:J})=>Q.push(J)),Q.push($.digestData)})},SX=(Q)=>U0(Q,0)&n8,Z$=(Q)=>SX(Q)===gX,q$=(Q)=>{let X=SX(Q),$=X===i8,Y=X===gX;if(!$&&!Y&&X!==t8)throw Error(`Unsupported transaction version ${X} while splitting trusted input chunks`);if(Y){let K=U0(Q,W0);if(K!==LX)throw Error(`Unexpected version group id for a v6 transaction while splitting trusted input chunks: expected ${bX(LX)}, got ${bX(K)}`)}let J=0,N=new Uint8Array,Z=new Uint8Array,q=[];$?J+=XQ:(l(Q,XQ,XQ+8),N=Q.slice(XQ,XQ+4),Z=Q.slice(XQ+4,XQ+8),J+=_8);let O=$Q(Q,J);J=O.nextOffset,q.push(L(Q.slice(0,XQ),Q.slice(J-O.byteLength,J)));for(let K=0;K<O.value;K+=1){let k=J;l(Q,J,J+36),J+=36;let x=$Q(Q,J);J=x.nextOffset,q.push(Q.slice(k,J));let f=J;l(Q,J,J+x.value+4),J+=x.value+4;let y=Q.slice(f,J);for(let h=0;h<y.length;h+=DX)q.push(y.slice(h,h+DX))}let w=$Q(Q,J);J=w.nextOffset,q.push(Q.slice(J-w.byteLength,J));for(let K=0;K<w.value;K+=1){let k=J;l(Q,J,J+8),J+=8;let x=$Q(Q,J);J=x.nextOffset,l(Q,J,J+x.value),J+=x.value,q.push(Q.slice(k,J))}if($){let K=$Q(Q,J),k=$Q(Q,K.nextOffset),x=$Q(Q,k.nextOffset);return q.push(Q.slice(J,x.nextOffset)),q.push(Q.slice(x.nextOffset)),CX(q)}return N$(q,$$(Q,J,Y)),q.push(r8(N,Z)),CX(q)};class vQ{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q=this.args.indexLookup??0,X=q$(this.args.transaction);if(Z$(this.args.transaction)){let Z=MX(this.api);if(Z!==void 0)return z({error:new Z0(Z)})}let $=X[0];if(!$)throw Error("Unable to prepare first trusted input APDU chunk");let Y=await this.api.sendCommand(new yQ({transaction:$,indexLookup:Q}));if(!b(Y))return z({error:Y.error});let J=Y.data,N=1;for(;N<X.length;){let Z=X[N];if(!Z)throw Error("Unable to prepare trusted input APDU chunk");let q=await this.api.sendCommand(new yQ({transaction:Z}));if(!b(q))return z({error:q.error});J=q.data,N+=1}return z({data:J})}}var K$=82;class D0{constructor(Q){this.args=Q}name="PcztHeader";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:K$,p1:A.FIRST,p2:e.CONTINUE};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var O$=88;class L0{constructor(Q){this.args=Q}name="PcztIronwoodAction";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:O$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var P$=86;class b0{constructor(Q){this.args=Q}name="PcztOrchardAction";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:P$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var z$=83;class C0{constructor(Q){this.args=Q}name="PcztTransparentInput";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:z$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var j$=84;class y0{constructor(Q){this.args=Q}name="PcztTransparentOutput";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:j$,p1:this.args.p1,p2:this.args.p2};return new W(Q).addBufferToData(this.args.data).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:void 0}))}}var x$=89,mX=64;class T0{constructor(Q){this.args=Q}name="SignPcztIronwood";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:x$,p1:A.FIRST,p2:this.args.actionIndex};return new W(Q).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length!==mX?P({error:new j(`Expected ${mX}-byte Ironwood spendAuthSig, got ${X.length}`)}):P({data:{spendAuthSig:X}})})}}var G$=87,HX=64;class B0{constructor(Q){this.args=Q}name="SignPcztOrchard";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:G$,p1:A.FIRST,p2:this.args.actionIndex};return new W(Q).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length!==HX?P({error:new j(`Expected ${HX}-byte Orchard spendAuthSig, got ${X.length}`)}):P({data:{spendAuthSig:X}})})}}var w$=85;class V0{constructor(Q){this.args=Q}name="SignPcztTransparent";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:w$,p1:A.FIRST,p2:this.args.inputIndex};return new W(Q).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length<2?P({error:new j(`Expected a transparent signature with a trailing sighash byte, got ${X.length} bytes`)}):X[X.length-1]!==gQ?P({error:new j(`Expected sighash_type SIGHASH_ALL (0x01), got 0x${X[X.length-1].toString(16)}`)}):P({data:{signature:X}})})}}var _X=new Uint8Array(32),hX=(Q)=>{let X=H.splitPath(Q),$=new i;return $.add8BitUIntToData(X.length),X.forEach((Y)=>$.add32BitUIntToData(Y)),$.build()},uX=(Q)=>{if(Q===null)return Uint8Array.of(0);let X=new i;return X.add8BitUIntToData(1),X.add32BitUIntToData(Q,!1),X.build()},AX=(Q)=>Q?L(C(1),Q.pubkey,Q.seedFingerprint??_X,hX(Q.signingPath)):C(0),k$=(Q,X)=>L(X??_X,hX(Q)),HQ=(Q)=>F$(L(C(Q.length),Q)),F$=(Q)=>{if(Q.length<=UQ)return[Q];let X=[];for(let $=0;$<Q.length;$+=UQ)X.push(Q.subarray($,$+UQ));return X},dX=(Q)=>{let X=new i;return X.addBufferToData(Uint8Array.of(80,67,90,84)),X.add32BitUIntToData(Q.txVersion>=6?2:1,!1),X.add32BitUIntToData(Q.txVersion,!1),X.add32BitUIntToData(Q.versionGroupId,!1),X.add32BitUIntToData(Q.consensusBranchId,!1),X.addBufferToData(uX(Q.fallbackLockTime)),X.add32BitUIntToData(Q.expiryHeight,!1),X.add32BitUIntToData(Q.coinType,!1),X.add8BitUIntToData(Q.txModifiable),X.build()},cX=(Q)=>{let X=[C(Q.length)];for(let $ of Q){let Y=new i;Y.addBufferToData($.prevoutTxid),Y.add32BitUIntToData($.prevoutIndex,!1),Y.addBufferToData(uX($.sequence)),Y.add64BitUIntToData($.value,!1),X.push(Y.build()),X.push(...HQ($.scriptPubKey)),X.push(L(Uint8Array.of($.sighashType),AX($.derivation)))}return X},lX=(Q)=>{let X=[C(Q.length)];for(let $ of Q){let Y=new i;Y.add64BitUIntToData($.value,!1),X.push(Y.build()),X.push(...HQ($.scriptPubKey)),X.push(AX($.derivation))}return X},oX=(Q)=>{let X=[C(Q.actions.length)];if(Q.actions.length===0)return X;for(let J of Q.actions){let N=new i;N.addBufferToData(J.cvNet),N.addBufferToData(J.nullifier),N.addBufferToData(J.rk),N.addBufferToData(J.spendRecipient),N.add64BitUIntToData(J.spendValue,!1),N.addBufferToData(J.spendRho),N.addBufferToData(J.spendRseed),N.addBufferToData(J.alpha),X.push(N.build()),X.push(k$(J.signingPath,J.seedFingerprint)),X.push(L(J.cmx,J.ephemeralKey)),X.push(...HQ(J.encCiphertext)),X.push(...HQ(J.outCiphertext));let Z=new i;Z.addBufferToData(J.recipient),Z.add64BitUIntToData(J.value,!1),Z.addBufferToData(J.rseed),Z.addBufferToData(J.rcv),"notePlaintextVersion"in J&&Z.add8BitUIntToData(J.notePlaintextVersion),X.push(Z.build())}let $=new i,Y=Q.valueBalance;return $.add8BitUIntToData(Q.flags),$.add64BitUIntToData(Y<0n?-Y:Y,!1),$.add8BitUIntToData(Y<0n?1:0),$.addBufferToData(Q.anchor),X.push($.build()),X},pX=(Q)=>oX(Q),sX=(Q)=>oX(Q),RQ=(Q,X)=>Q===0?A.FIRST:Q===X-1?A.LAST:A.NEXT,E0=(Q,X,$)=>$&&Q===X-1?e.FINISHED:e.CONTINUE;var v$={actions:[],flags:0,valueBalance:0n,anchor:new Uint8Array(32)},R$=6;class f0{constructor(Q,X){this.api=Q,this.args=X}async run(){let{global:Q,transparentInputs:X,transparentOutputs:$,orchardBundle:Y,ironwoodBundle:J}=this.args.transaction,N=Y??v$,Z=J??null,q=Q.txVersion===R$;if(q&&Z===null)return z({error:new I0("V6 transaction requires a non-null Ironwood bundle")});if(!q&&Z!==null)return z({error:new I0("V5 transaction does not support an Ironwood bundle")});let O=q&&Z!==null,w=await this.api.sendCommand(new D0({data:dX(Q)}));if(!b(w))return z({error:w.error});let K=cX(X);for(let F=0;F<K.length;F+=1){let G=await this.api.sendCommand(new C0({data:K[F],p1:RQ(F,K.length),p2:e.CONTINUE}));if(!b(G))return z({error:G.error})}let k=lX($);for(let F=0;F<k.length;F+=1){let G=await this.api.sendCommand(new y0({data:k[F],p1:RQ(F,k.length),p2:e.CONTINUE}));if(!b(G))return z({error:G.error})}let x=pX(N);for(let F=0;F<x.length;F+=1){let G=await this.api.sendCommand(new b0({data:x[F],p1:RQ(F,x.length),p2:E0(F,x.length,!q)}));if(!b(G))return z({error:G.error})}if(O){let F=sX(Z);for(let G=0;G<F.length;G+=1){let t=await this.api.sendCommand(new L0({data:F[G],p1:RQ(G,F.length),p2:E0(G,F.length,!0)}));if(!b(t))return z({error:t.error})}}let f=[];for(let F=0;F<N.actions.length;F+=1){if(N.actions[F].spendValue===0n)continue;let G=await this.api.sendCommand(new B0({actionIndex:F}));if(!b(G))return z({error:G.error});f.push(G.data)}let y=[];if(O)for(let F=0;F<Z.actions.length;F+=1){if(Z.actions[F].spendValue===0n)continue;let G=await this.api.sendCommand(new T0({actionIndex:F}));if(!b(G))return z({error:G.error});y.push(G.data)}let h=[];for(let F=0;F<X.length;F+=1){let G=await this.api.sendCommand(new V0({inputIndex:F}));if(!b(G))return z({error:G.error});h.push(G.data.signature)}return z({data:{orchard:f,transparentInputSigs:h,ironwood:y}})}}var M$=74;class g0{constructor(Q){this.args=Q}name="HashOutputFull";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:M$,p1:this.args.isLastChunk?m.NEXT:m.FIRST,p2:g.DEFAULT};return new W(Q).addBufferToData(this.args.outputChunk).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}var W$=74;class S0{constructor(Q){this.args=Q}name="ProvideOutputFullChangePath";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:W$,p1:m.CHANGE_PATH,p2:g.DEFAULT},X=new W(Q),$=H.splitPath(this.args.derivationPath);return X.add8BitUIntToData($.length),$.forEach((Y)=>{X.add32BitUIntToData(Y)}),X.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}class m0{constructor(Q){this.args=Q}name="SignTransaction";errorHelper=new D(R,M);getApdu(){let{derivationPath:Q,expiryHeight:X,lockTime:$,sigHashType:Y}=this.args,J=H.splitPath(Q),N=qX($),Z={cla:v,ins:72,p2:g.DEFAULT,p1:0},q=new W(Z);return q.add8BitUIntToData(J.length),J.forEach((O)=>{q.add32BitUIntToData(O)}),q.add8BitUIntToData(0).addBufferToData(N).add8BitUIntToData(Y),q.addBufferToData(X),q.build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefaultLazy(()=>{let X=new Uint8Array(Q.data);return X.length>0&&(X[0]=48),P({data:{signature:X}})})}}var U$=68;class MQ{constructor(Q){this.args=Q}name="StartUntrustedHashTransactionInput";errorHelper=new D(R,M);getApdu(){let Q={cla:v,ins:U$,p1:this.args.firstRound?m.FIRST:m.NEXT,p2:this.args.newTransaction?g.SAPLING:g.HASH_INPUT_CONTINUE};return new W(Q).addBufferToData(this.args.transactionData).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:Q}))}}var D$=72;class H0{constructor(Q){this.args=Q}name="ZcashSaplingOutputCommit";errorHelper=new D(R,M);getApdu(){let{lockTime:Q,sigHashType:X,expiryHeight:$}=this.args,Y=L(E(Q),Uint8Array.of(0,0),Uint8Array.of(X&255),$);if(Y.length!==11)throw Error("ZcashSaplingOutputCommit: internal payload length");let J={cla:v,ins:D$,p1:0,p2:g.DEFAULT};return new W(J).addBufferToData(Y).build()}parseResponse(Q){return U.fromNullable(this.errorHelper.getError(Q)).orDefault(P({data:{committed:!0}}))}}function aX(Q,X){if(Q.length!==X.length)return!1;for(let $=0;$<Q.length;$+=1)if(Q[$]!==X[$])return!1;return!0}class h0{constructor(Q,X){this.api=Q,this.args=X}async run(){let Q={...{lockTime:PX,sigHashType:gQ,additionals:[]},...this.args.transactionArg},{inputs:X,associatedKeysets:$,blockHeight:Y,changePath:J,outputScriptHex:N,lockTime:Z,sigHashType:q,additionals:O,expiryHeight:w}=Q,K=new Set(O.map((B)=>B.trim().toLowerCase()));if(!K.has("zcash"))return z({error:new j('signTransaction requires additionals to include "zcash" (Zcash transparent signing only).')});let k=K.has("sapling");if(X.length!==$.length)return z({error:new j("Inputs and associatedKeysets lengths mismatch")});let x=E(Z),f=GX(),y;try{y=IQ(w)}catch(B){return z({error:new j(B instanceof Error?B.message:"Invalid expiryHeight")})}let h=_Q(N)??new Uint8Array,F=new Uint8Array(0),G={inputs:[],version:f,timestamp:new Uint8Array(0)};G.nVersionGroupId=Uint8Array.of(10,39,167,38),G.nExpiryHeight=y,G.extraData=k?new Uint8Array(11):Uint8Array.of(0);let t=await this.collectTrustedInputsAndOutputs(X);if(!("trustedInputs"in t))return t;let{trustedInputs:jQ,regularOutputs:u}=t;G.inputs=X.map((B,WQ)=>{let N8=E(B.length>=4&&typeof B[3]=="number"?B[3]:x0);return{script:u[WQ].script,prevout:F,sequence:N8}});let NQ=await this.collectPublicKeys($);if(!Array.isArray(NQ))return NQ;let tQ=NQ,eQ=await this.shouldProvideChangePath(J,$,tQ,h);if(typeof eQ!="boolean")return eQ;G.consensusBranchId=SQ(Y);let A0=await this.executeHashSequence(G,jQ,J,eQ,h,k,Z,q,y);if(A0)return A0;let rQ=await this.signEachInput(X,$,u,G,jQ,Z,q,y);if(!Array.isArray(rQ))return rQ;let d0=rQ;G.version=f,G.consensusBranchId=SQ(Y);for(let B=0;B<X.length;B+=1){G.inputs[B].script=L(Uint8Array.of(d0[B].length),d0[B],Uint8Array.of(tQ[B].length),tQ[B]);let WQ=4;G.inputs[B].prevout=jQ[B].value.subarray(WQ,WQ+36)}G.locktime=x;let J8=L(G0(G,G.timestamp),h,Uint8Array.of(0,0,0));return z({data:_0(J8,!0)})}async collectTrustedInputsAndOutputs(Q){let X=[],$=[];for(let Y of Q){let J=Y[0],N=zX(J);N.consensusBranchId=SQ(Y[4]);let Z=await this.getTrustedInput(Y[1],N,J.serializedPreviousTransactionOverride);if(typeof Z!="string")return Z;let q=E(Y.length>=4&&typeof Y[3]=="number"?Y[3]:x0);if(X.push({trustedInput:!0,value:_Q(Z)??new Uint8Array,sequence:q}),N.outputs&&Y[1]<=N.outputs.length-1){let O=N.outputs[Y[1]];if(!O)return z({error:new j("Invalid output index in previous transaction")});$.push(O)}else return z({error:new j("Invalid output index in previous transaction")})}return{trustedInputs:X,regularOutputs:$}}async collectPublicKeys(Q){let X=[];for(let $ of Q){let Y=await this.api.sendCommand(new KQ({derivationPath:$,checkOnDevice:!1}));if(!b(Y))return z({error:Y.error});X.push(w0(Y.data.publicKey))}return X}async shouldProvideChangePath(Q,X,$,Y){let J=typeof Q=="string"?Q.trim():"";if(J==="")return!1;let N=X.indexOf(J),Z;if(N>=0)Z=$[N];else{let q=await this.api.sendCommand(new KQ({derivationPath:J,checkOnDevice:!1}));if(!b(q))return z({error:q.error});Z=q.data.publicKey}try{let q=xX(Z),O=jX(Y);return O!==null&&O.length>=2&&O.some((w)=>aX(w,q))}catch{return!1}}async executeHashSequence(Q,X,$,Y,J,N,Z,q,O){let w=await this.startUntrustedHashTransactionInput(!0,Q,X);if(w)return w;if(Y&&$){let k=await this.api.sendCommand(new S0({derivationPath:$}));if(!b(k))return z({error:k.error})}let K=await this.hashOutputFull(J);if(K)return K;if(N){let k=await this.api.sendCommand(new H0({lockTime:Z,sigHashType:q,expiryHeight:O}));if(!b(k))return z({error:k.error})}return null}async signEachInput(Q,X,$,Y,J,N,Z,q){let O=[];for(let w=0;w<Q.length;w+=1){let K=Q[w],k=K.length>=3&&typeof K[2]=="string"?_Q(K[2])??new Uint8Array:$[w].script,x={...Y,inputs:[{...Y.inputs[w],script:k}]},f=await this.startUntrustedHashTransactionInput(!1,x,[J[w]]);if(f)return f;let y=await this.api.sendCommand(new m0({derivationPath:X[w],lockTime:N,sigHashType:Z,expiryHeight:q}));if(!b(y))return z({error:y.error});O.push(y.data.signature)}return O}async getTrustedInput(Q,X,$){let Y=$&&$.length>0?$:G0(X,X.timestamp),J=await new vQ(this.api,{transaction:Y,indexLookup:Q}).run();return nX(J)?_0(J.data.data,!1):z({error:J.error})}async hashOutputFull(Q){let X=0;for(;X<Q.length;){let $=X+fQ>=Q.length?Q.length-X:fQ,Y=Q.subarray(X,X+$),J=await this.api.sendCommand(new g0({outputChunk:Y,isLastChunk:X+$===Q.length}));if(!b(J))return z({error:J.error});X+=$}return null}buildScriptBlocks(Q){if(Q.script.length===0)return[Q.sequence];let X=[],$=0;for(;$!==Q.script.length;){let Y=Math.min(fQ,Q.script.length-$),J=Q.script.subarray($,$+Y);X.push($+Y===Q.script.length?L(J,Q.sequence):Uint8Array.from(J)),$+=Y}return X}async sendInputBlocks(Q,X){for(let $ of Q){let Y=await this.api.sendCommand(new MQ({newTransaction:X,firstRound:!1,transactionData:$}));if(!b(Y))return z({error:Y.error})}return null}async startUntrustedHashTransactionInput(Q,X,$){let Y=X.consensusBranchId||new Uint8Array(0),J=L(X.version,X.timestamp||new Uint8Array(0),X.nVersionGroupId||new Uint8Array(0),Y,C(X.inputs.length)),N=await this.api.sendCommand(new MQ({newTransaction:Q,firstRound:!0,transactionData:J}));if(!b(N))return z({error:N.error});for(let Z=0;Z<X.inputs.length;Z+=1){let q=X.inputs[Z],O=$[Z].value,w=$[Z].trustedInput?Uint8Array.of(1,O.length):Uint8Array.of(0),K=L(w,O,C(q.script.length)),k=await this.api.sendCommand(new MQ({newTransaction:Q,firstRound:!1,transactionData:K}));if(!b(k))return z({error:k.error});let x=await this.sendInputBlocks(this.buildScriptBlocks(q),Q);if(x)return x}return null}}var{defineProperty:L$,getOwnPropertyDescriptor:b$}=Object,C$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?b$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&L$(X,$,J),J},iX=(Q,X)=>($,Y)=>X($,Y,Q),uQ=class{constructor(Q,X){this.dmk=Q,this.sessionId=X}getAppConfig(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new hQ({input:{command:new Q0,appName:d,requiredUserInteraction:o.None,skipOpenApp:Q.skipOpenApp}})})}getAddress(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new hQ({input:{command:new KQ(Q),appName:d,requiredUserInteraction:Q.checkOnDevice?o.VerifyAddress:o.None,skipOpenApp:Q.skipOpenApp}})})}getShieldedAddress(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new J0(X,{derivationPath:Q.derivationPath,checkOnDevice:Q.checkOnDevice}).run(),appName:d,requiredUserInteraction:Q.checkOnDevice?o.VerifyAddress:o.None,skipOpenApp:Q.skipOpenApp}})})}getFullViewingKey(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new $0(X,{derivationPath:Q.derivationPath,mode:Q.mode}).run(),appName:d,requiredUserInteraction:o.None,skipOpenApp:Q.skipOpenApp}})})}signTransaction(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new h0(X,Q).run(),appName:d,requiredUserInteraction:o.SignTransaction,skipOpenApp:Q.skipOpenApp??!1}})})}signPcztTransaction(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new f0(X,{transaction:Q.transaction}).run(),appName:d,requiredUserInteraction:o.SignTransaction,skipOpenApp:Q.skipOpenApp??!1}})})}signMessage(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new hQ({input:{command:new X0(Q),appName:d,requiredUserInteraction:o.SignPersonalMessage,skipOpenApp:Q.skipOpenApp}})})}getTrustedInput(Q){return this.dmk.executeDeviceAction({sessionId:this.sessionId,deviceAction:new zQ({input:{task:async(X)=>new vQ(X,Q).run(),appName:d,requiredUserInteraction:o.None,skipOpenApp:Q.skipOpenApp??!1}})})}};uQ=C$([I(),iX(0,T(ZQ.Dmk)),iX(1,T(ZQ.SessionId))],uQ);var tX=()=>new p(({bind:Q})=>{Q(V.AppBinding).to(uQ)});var YQ={GetAddressUseCase:Symbol.for("GetAddressUseCase"),GetFullViewingKeyUseCase:Symbol.for("GetFullViewingKeyUseCase"),GetShieldedAddressUseCase:Symbol.for("GetShieldedAddressUseCase")};var{defineProperty:y$,getOwnPropertyDescriptor:T$}=Object,B$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?T$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&y$(X,$,J),J},V$=(Q,X)=>($,Y)=>X($,Y,Q),AQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getAddress({derivationPath:Q,checkOnDevice:X?.checkOnDevice??!1,skipOpenApp:X?.skipOpenApp??!1})}};AQ=B$([I(),V$(0,T(V.AppBinding))],AQ);var{defineProperty:E$,getOwnPropertyDescriptor:I$}=Object,f$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?I$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&E$(X,$,J),J},g$=(Q,X)=>($,Y)=>X($,Y,Q),dQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getFullViewingKey({derivationPath:Q,mode:X?.mode??"ufvk",skipOpenApp:X?.skipOpenApp??!1})}};dQ=f$([I(),g$(0,T(V.AppBinding))],dQ);var{defineProperty:S$,getOwnPropertyDescriptor:m$}=Object,H$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?m$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&S$(X,$,J),J},_$=(Q,X)=>($,Y)=>X($,Y,Q),cQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getShieldedAddress({derivationPath:Q,checkOnDevice:X?.checkOnDevice??!1,skipOpenApp:X?.skipOpenApp??!1})}};cQ=H$([I(),_$(0,T(V.AppBinding))],cQ);var eX=()=>new p(({bind:Q})=>{Q(YQ.GetAddressUseCase).to(AQ),Q(YQ.GetFullViewingKeyUseCase).to(dQ),Q(YQ.GetShieldedAddressUseCase).to(cQ)});var lQ={GetAppConfigUseCase:Symbol.for("GetAppConfigUseCase")};var{defineProperty:h$,getOwnPropertyDescriptor:u$}=Object,A$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?u$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&h$(X,$,J),J},d$=(Q,X)=>($,Y)=>X($,Y,Q),oQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(){return this._appBinder.getAppConfig({skipOpenApp:!1})}};oQ=A$([I(),d$(0,T(V.AppBinding))],oQ);var rX=()=>new p(({bind:Q})=>{Q(lQ.GetAppConfigUseCase).to(oQ)});var pQ={SignMessageUseCase:Symbol.for("SignMessageUseCase")};var{defineProperty:c$,getOwnPropertyDescriptor:l$}=Object,o$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?l$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&c$(X,$,J),J},p$=(Q,X)=>($,Y)=>X($,Y,Q),sQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.signMessage({derivationPath:Q,message:X,skipOpenApp:!1})}};sQ=o$([I(),p$(0,T(V.AppBinding))],sQ);var Q8=()=>new p(({bind:Q})=>{Q(pQ.SignMessageUseCase).to(sQ)});var JQ={GetTrustedInputUseCase:Symbol.for("GetTrustedInputUseCase"),SignTransactionUseCase:Symbol.for("SignTransactionUseCase"),SignPcztTransactionUseCase:Symbol.for("SignPcztTransactionUseCase")};var{defineProperty:s$,getOwnPropertyDescriptor:a$}=Object,n$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?a$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&s$(X,$,J),J},i$=(Q,X)=>($,Y)=>X($,Y,Q),aQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.getTrustedInput({transaction:Q,indexLookup:X?.indexLookup,skipOpenApp:X?.skipOpenApp??!1})}};aQ=n$([I(),i$(0,T(V.AppBinding))],aQ);var{defineProperty:t$,getOwnPropertyDescriptor:e$}=Object,r$=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?e$(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&t$(X,$,J),J},QY=(Q,X)=>($,Y)=>X($,Y,Q),nQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.signPcztTransaction({transaction:Q,skipOpenApp:X?.skipOpenApp})}};nQ=r$([I(),QY(0,T(V.AppBinding))],nQ);var{defineProperty:XY,getOwnPropertyDescriptor:$Y}=Object,YY=(Q,X,$,Y)=>{for(var J=Y>1?void 0:Y?$Y(X,$):X,N=Q.length-1,Z;N>=0;N--)(Z=Q[N])&&(J=(Y?Z(X,$,J):Z(J))||J);return Y&&J&&XY(X,$,J),J},JY=(Q,X)=>($,Y)=>X($,Y,Q),iQ=class{_appBinder;constructor(Q){this._appBinder=Q}execute(Q,X){return this._appBinder.signTransaction({transactionArg:Q,skipOpenApp:X?.skipOpenApp})}};iQ=YY([I(),JY(0,T(V.AppBinding))],iQ);var X8=()=>new p(({bind:Q})=>{Q(JQ.GetTrustedInputUseCase).to(aQ),Q(JQ.SignTransactionUseCase).to(iQ),Q(JQ.SignPcztTransactionUseCase).to(nQ)});var Y8=({dmk:Q,sessionId:X})=>{let $=new $8;return $.bind(ZQ.Dmk).toConstantValue(Q),$.bind(ZQ.SessionId).toConstantValue(X),$.loadSync(tX(),rX(),eX(),X8(),Q8()),$};class u0{_container;constructor({dmk:Q,sessionId:X}){this._container=Y8({dmk:Q,sessionId:X})}getAppConfig(){return this._container.get(lQ.GetAppConfigUseCase).execute()}getAddress(Q,X){return this._container.get(YQ.GetAddressUseCase).execute(Q,X)}getFullViewingKey(Q,X){return this._container.get(YQ.GetFullViewingKeyUseCase).execute(Q,X)}getShieldedAddress(Q,X){return this._container.get(YQ.GetShieldedAddressUseCase).execute(Q,X)}signTransaction(Q,X){return this._container.get(JQ.SignTransactionUseCase).execute(Q,X)}signPcztTransaction(Q,X){return this._container.get(JQ.SignPcztTransactionUseCase).execute(Q,X)}signMessage(Q,X){return this._container.get(pQ.SignMessageUseCase).execute(Q,X)}getTrustedInput(Q,X){return this._container.get(JQ.GetTrustedInputUseCase).execute(Q,X)}}class NY{_dmk;_sessionId;constructor({dmk:Q,sessionId:X}){this._dmk=Q,this._sessionId=X}build(){return new u0({dmk:this._dmk,sessionId:this._sessionId})}}export{NY as SignerZcashBuilder};
2
-
3
- //# debugId=1EFBC544E95CC49764756E2164756E21
4
- //# sourceMappingURL=chunk-gr3eswf1.js.map
@@ -1,4 +0,0 @@
1
- import"./chunk-nhva847d.js";import{hex as F}from"@scure/base";import{Chain as Y,derivationPathToString as A,SwapKitError as f}from"@swapkit/helpers";import{addCardanoVkeyWitnesses as g,decodeCardanoTransaction as m,getCardanoAddressFromBytes as H,getCardanoPublicKeyHash as O}from"@swapkit/toolboxes/cardano";function K({CARDANO:j,PROTO:q}){return{derivationType:q.CardanoDerivationType.ICARUS,mainnet:{networkId:j.NETWORK_IDS.mainnet,protocolMagic:j.PROTOCOL_MAGICS.mainnet}}}var _={AUXILIARY_DATA_HASH:7,FEE:2,INPUTS:0,OUTPUTS:1,TTL:3,VALIDITY_INTERVAL_START:8},P=258;function G(j){return new f({errorKey:"wallet_trezor_method_not_supported",info:{chain:Y.Cardano,reason:j}})}function B(j){return new f({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:Y.Cardano,error:j}})}function z(j,q){let J=typeof j==="object"&&j!==null&&"toFixed"in j||Number.isSafeInteger(j)?String(j.toFixed()):"";if(!/^\d+$/.test(J))throw G(`Invalid ${q} in Cardano transaction`);return J}function T(j){return[...j].map(([q,L])=>({policyId:F.encode(q),tokenAmounts:[...L].map(([J,M])=>({amount:z(M,"token amount"),assetNameBytes:F.encode(J)}))}))}async function b(j,q,L){let J,M,Q;if(Array.isArray(j)){if(j.length!==2)throw G("Trezor cannot sign Cardano outputs with a datum");[J,M]=j,Q=L.CardanoTxOutputSerializationFormat.ARRAY_LEGACY}else if(j instanceof Map){if(j.has(2))throw G("Trezor cannot sign Cardano outputs with a datum");if(j.has(3))throw G("Trezor cannot sign Cardano outputs with a reference script");if(j.size!==2)throw G("Unsupported field in Cardano output");J=j.get(0),M=j.get(1),Q=L.CardanoTxOutputSerializationFormat.MAP_BABBAGE}else throw G("Invalid Cardano output");if(Array.isArray(M)&&M.length!==2)throw G("Invalid Cardano output value");let[Z,X]=Array.isArray(M)?M:[M],$=await H(J);return{...$===q.address?{addressParameters:{addressType:L.CardanoAddressType.BASE,path:q.path,stakingPath:q.stakingPath}}:{address:$},amount:z(Z,"output amount"),format:Q,...X===void 0?{}:{tokenBundle:T(X)}}}function x(j,q){let L=typeof j==="object"&&j!==null&&"tag"in j&&j.tag===P&&"value"in j;return{inputs:(L?j.value:j).map((Q)=>{if(Q.length!==2)throw G("Invalid Cardano input");let[Z,X]=Q;return{path:q,prev_hash:F.encode(Z),prev_index:Number(z(X,"input index"))}}),tagCborSets:L}}async function v(j,q,L){let{body:J}=await m(j),{derivationType:M,mainnet:Q}=K(L),{PROTO:Z}=L,X=Object.values(_),$=[...J.keys()].filter((V)=>!X.includes(V));if($.length>0)throw G(`Trezor cannot sign Cardano transactions with body fields ${$.join(", ")}`);let W=J.get(_.OUTPUTS),U=J.get(_.AUXILIARY_DATA_HASH),N=J.get(_.TTL),E=J.get(_.VALIDITY_INTERVAL_START);return{...x(J.get(_.INPUTS),q.path),...Q,derivationType:M,fee:z(J.get(_.FEE),"fee"),outputs:await Promise.all(W.map((V)=>b(V,q,Z))),signingMode:Z.CardanoTxSigningMode.ORDINARY_TRANSACTION,...U?{auxiliaryData:{hash:F.encode(U)}}:{},...N===void 0?{}:{ttl:z(N,"ttl")},...E===void 0?{}:{validityIntervalStart:z(E,"validity interval start")}}}async function y(j,{hash:q,witnesses:L},J,{PROTO:M}){let{bodyHash:Q}=await m(j);if(q.toLowerCase()!==Q)throw B("Trezor signed a different transaction body");let Z=L.map(({pubKey:X,signature:$,type:W})=>{if(W!==M.CardanoTxWitnessType.SHELLEY_WITNESS||X.toLowerCase()!==J)throw B("Trezor returned a witness for an unexpected key");return{publicKey:F.decode(X),signature:F.decode($)}});return g(j,Z)}async function d({connect:j,derivationPath:q}){let[L,J,M,Q,Z]=q;if(q.length!==5||Q!==0||Z===void 0)throw new f({errorKey:"wallet_trezor_derivation_path_not_supported",info:{chain:Y.Cardano,derivationPath:q}});let X=A(q),$=A([L,J,M,2,0]),{derivationType:W,mainnet:U}=K(j),N=j.default,E=await N.cardanoGetPublicKey({bundle:[X,$].map((I)=>({derivationType:W,path:I}))});if(!E.success)throw new f({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:Y.Cardano,derivationPath:q,error:E.payload.error}});let[V,S]=E.payload.map(({node:I})=>Buffer.from(I.public_key,"hex")),k=await O(V),D=await H(Buffer.concat([Buffer.from([U.networkId]),k,await O(S)]));async function w(I){let C=await v(I,{address:D,path:X,stakingPath:$},j),R=await N.cardanoSignTransaction(C);if(!R.success)throw B(R.payload.error);return y(I,R.payload,V.toString("hex"),j)}return{getAddress:()=>D,publicKey:V,publicKeyHash:k,signTransaction:w}}export{v as toTrezorCardanoTransaction,d as getCardanoSigner,y as addTrezorWitnesses};
2
-
3
- //# debugId=610DAB94A71C5BD564756E2164756E21
4
- //# sourceMappingURL=chunk-qjq7gvyx.js.map
@@ -1,10 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/trezor/cardanoSigner.ts"],
4
- "sourcesContent": [
5
- "import { hex } from \"@scure/base\";\nimport { Chain, type DerivationPathArray, derivationPathToString, SwapKitError } from \"@swapkit/helpers\";\nimport {\n addCardanoVkeyWitnesses,\n decodeCardanoTransaction,\n getCardanoAddressFromBytes,\n getCardanoPublicKeyHash,\n} from \"@swapkit/toolboxes/cardano\";\nimport type {\n CardanoAssetGroup,\n CardanoInput,\n CardanoOutput,\n CardanoSignedTxData,\n CardanoSignTransaction,\n PROTO,\n} from \"@trezor/connect-web\";\n\ntype CardanoAddressParams = { address: string; path: string; stakingPath: string };\nexport type TrezorConnectModule = typeof import(\"@trezor/connect-web\");\n\nfunction getConnectParams({ CARDANO, PROTO }: TrezorConnectModule) {\n return {\n // Trezor Suite default, same as the SwapKit keystore\n derivationType: PROTO.CardanoDerivationType.ICARUS,\n mainnet: { networkId: CARDANO.NETWORK_IDS.mainnet, protocolMagic: CARDANO.PROTOCOL_MAGICS.mainnet },\n };\n}\n\nconst BODY = { AUXILIARY_DATA_HASH: 7, FEE: 2, INPUTS: 0, OUTPUTS: 1, TTL: 3, VALIDITY_INTERVAL_START: 8 } as const;\nconst SET_TAG = 258;\n\nfunction notSupported(reason: string) {\n return new SwapKitError({ errorKey: \"wallet_trezor_method_not_supported\", info: { chain: Chain.Cardano, reason } });\n}\n\nfunction signFailed(error: string) {\n return new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: Chain.Cardano, error },\n });\n}\n\nfunction toUint(value: unknown, field: string) {\n const isBigNumber = typeof value === \"object\" && value !== null && \"toFixed\" in value;\n const text = isBigNumber || Number.isSafeInteger(value) ? String((value as number).toFixed()) : \"\";\n if (!/^\\d+$/.test(text)) throw notSupported(`Invalid ${field} in Cardano transaction`);\n return text;\n}\n\nfunction toTokenBundle(multiAsset: Map<Uint8Array, Map<Uint8Array, unknown>>): CardanoAssetGroup[] {\n return [...multiAsset].map(([policyId, assets]) => ({\n policyId: hex.encode(policyId),\n tokenAmounts: [...assets].map(([assetName, amount]) => ({\n amount: toUint(amount, \"token amount\"),\n assetNameBytes: hex.encode(assetName),\n })),\n }));\n}\n\nasync function toTrezorOutput(\n output: unknown,\n own: CardanoAddressParams,\n proto: TrezorConnectModule[\"PROTO\"],\n): Promise<CardanoOutput> {\n let address: unknown;\n let value: unknown;\n let format: PROTO.CardanoTxOutputSerializationFormat;\n\n if (Array.isArray(output)) {\n if (output.length !== 2) throw notSupported(\"Trezor cannot sign Cardano outputs with a datum\");\n [address, value] = output;\n format = proto.CardanoTxOutputSerializationFormat.ARRAY_LEGACY;\n } else if (output instanceof Map) {\n if (output.has(2)) throw notSupported(\"Trezor cannot sign Cardano outputs with a datum\");\n if (output.has(3)) throw notSupported(\"Trezor cannot sign Cardano outputs with a reference script\");\n if (output.size !== 2) throw notSupported(\"Unsupported field in Cardano output\");\n address = output.get(0);\n value = output.get(1);\n format = proto.CardanoTxOutputSerializationFormat.MAP_BABBAGE;\n } else {\n throw notSupported(\"Invalid Cardano output\");\n }\n\n if (Array.isArray(value) && value.length !== 2) throw notSupported(\"Invalid Cardano output value\");\n const [coin, multiAsset] = Array.isArray(value) ? value : [value];\n const outputAddress = await getCardanoAddressFromBytes(address as Uint8Array);\n const destination =\n outputAddress === own.address\n ? {\n addressParameters: {\n addressType: proto.CardanoAddressType.BASE,\n path: own.path,\n stakingPath: own.stakingPath,\n },\n }\n : { address: outputAddress };\n\n return {\n ...destination,\n amount: toUint(coin, \"output amount\"),\n format,\n ...(multiAsset === undefined ? {} : { tokenBundle: toTokenBundle(multiAsset) }),\n };\n}\n\nfunction toTrezorInputs(inputs: unknown, path: string) {\n const isTagged =\n typeof inputs === \"object\" && inputs !== null && \"tag\" in inputs && inputs.tag === SET_TAG && \"value\" in inputs;\n const list = (isTagged ? inputs.value : inputs) as unknown[][];\n\n const trezorInputs: CardanoInput[] = list.map((input) => {\n if (input.length !== 2) throw notSupported(\"Invalid Cardano input\");\n const [txHash, index] = input as [Uint8Array, unknown];\n return { path, prev_hash: hex.encode(txHash), prev_index: Number(toUint(index, \"input index\")) };\n });\n\n return { inputs: trezorInputs, tagCborSets: isTagged };\n}\n\nexport async function toTrezorCardanoTransaction(\n txHex: string,\n own: CardanoAddressParams,\n connect: TrezorConnectModule,\n): Promise<CardanoSignTransaction> {\n const { body } = await decodeCardanoTransaction(txHex);\n const { derivationType, mainnet } = getConnectParams(connect);\n const { PROTO: proto } = connect;\n\n const supportedFields: unknown[] = Object.values(BODY);\n const unsupported = [...body.keys()].filter((field) => !supportedFields.includes(field));\n if (unsupported.length > 0) {\n throw notSupported(`Trezor cannot sign Cardano transactions with body fields ${unsupported.join(\", \")}`);\n }\n\n const outputs = body.get(BODY.OUTPUTS) as unknown[];\n const auxiliaryDataHash = body.get(BODY.AUXILIARY_DATA_HASH) as Uint8Array | undefined;\n\n const ttl = body.get(BODY.TTL);\n const validityIntervalStart = body.get(BODY.VALIDITY_INTERVAL_START);\n\n return {\n ...toTrezorInputs(body.get(BODY.INPUTS), own.path),\n ...mainnet,\n derivationType,\n fee: toUint(body.get(BODY.FEE), \"fee\"),\n outputs: await Promise.all(outputs.map((output) => toTrezorOutput(output, own, proto))),\n signingMode: proto.CardanoTxSigningMode.ORDINARY_TRANSACTION,\n ...(auxiliaryDataHash ? { auxiliaryData: { hash: hex.encode(auxiliaryDataHash) } } : {}),\n ...(ttl === undefined ? {} : { ttl: toUint(ttl, \"ttl\") }),\n ...(validityIntervalStart === undefined\n ? {}\n : { validityIntervalStart: toUint(validityIntervalStart, \"validity interval start\") }),\n };\n}\n\nexport async function addTrezorWitnesses(\n txHex: string,\n { hash, witnesses }: Pick<CardanoSignedTxData, \"hash\" | \"witnesses\">,\n publicKey: string,\n { PROTO: proto }: TrezorConnectModule,\n) {\n const { bodyHash } = await decodeCardanoTransaction(txHex);\n\n if (hash.toLowerCase() !== bodyHash) throw signFailed(\"Trezor signed a different transaction body\");\n\n const vkeyWitnesses = witnesses.map(({ pubKey, signature, type }) => {\n if (type !== proto.CardanoTxWitnessType.SHELLEY_WITNESS || pubKey.toLowerCase() !== publicKey) {\n throw signFailed(\"Trezor returned a witness for an unexpected key\");\n }\n return { publicKey: hex.decode(pubKey), signature: hex.decode(signature) };\n });\n\n return addCardanoVkeyWitnesses(txHex, vkeyWitnesses);\n}\n\nexport async function getCardanoSigner({\n connect,\n derivationPath,\n}: {\n connect: TrezorConnectModule;\n derivationPath: DerivationPathArray;\n}) {\n const [purpose, coinType, account, role, index] = derivationPath;\n if (derivationPath.length !== 5 || role !== 0 || index === undefined) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_derivation_path_not_supported\",\n info: { chain: Chain.Cardano, derivationPath },\n });\n }\n\n const path = derivationPathToString(derivationPath);\n const stakingPath = derivationPathToString([purpose, coinType, account, 2, 0] as DerivationPathArray);\n const { derivationType, mainnet } = getConnectParams(connect);\n const TrezorConnect = connect.default;\n\n // One device call: a second one right after would need a new Connect popup\n const keysResult = await TrezorConnect.cardanoGetPublicKey({\n bundle: [path, stakingPath].map((keyPath) => ({ derivationType, path: keyPath })),\n });\n if (!keysResult.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { chain: Chain.Cardano, derivationPath, error: keysResult.payload.error },\n });\n }\n\n const [publicKey, stakingKey] = keysResult.payload.map(({ node }) => Buffer.from(node.public_key, \"hex\")) as [\n Buffer,\n Buffer,\n ];\n const publicKeyHash = await getCardanoPublicKeyHash(publicKey);\n const address = await getCardanoAddressFromBytes(\n Buffer.concat([Buffer.from([mainnet.networkId]), publicKeyHash, await getCardanoPublicKeyHash(stakingKey)]),\n );\n\n async function signTransaction(txHex: string) {\n const params = await toTrezorCardanoTransaction(txHex, { address, path, stakingPath }, connect);\n const result = await TrezorConnect.cardanoSignTransaction(params);\n\n if (!result.success) throw signFailed(result.payload.error);\n\n return addTrezorWitnesses(txHex, result.payload, publicKey.toString(\"hex\"), connect);\n }\n\n return { getAddress: () => address, publicKey, publicKeyHash, signTransaction };\n}\n"
6
- ],
7
- "mappings": "4BAAA,cAAS,oBACT,gBAAS,4BAAiC,kBAAwB,yBAClE,kCACE,8BACA,gCACA,6BACA,mCAcF,SAAS,CAAgB,EAAG,UAAS,SAA8B,CACjE,MAAO,CAEL,eAAgB,EAAM,sBAAsB,OAC5C,QAAS,CAAE,UAAW,EAAQ,YAAY,QAAS,cAAe,EAAQ,gBAAgB,OAAQ,CACpG,EAGF,IAAM,EAAO,CAAE,oBAAqB,EAAG,IAAK,EAAG,OAAQ,EAAG,QAAS,EAAG,IAAK,EAAG,wBAAyB,CAAE,EACnG,EAAU,IAEhB,SAAS,CAAY,CAAC,EAAgB,CACpC,OAAO,IAAI,EAAa,CAAE,SAAU,qCAAsC,KAAM,CAAE,MAAO,EAAM,QAAS,QAAO,CAAE,CAAC,EAGpH,SAAS,CAAU,CAAC,EAAe,CACjC,OAAO,IAAI,EAAa,CACtB,SAAU,2CACV,KAAM,CAAE,MAAO,EAAM,QAAS,OAAM,CACtC,CAAC,EAGH,SAAS,CAAM,CAAC,EAAgB,EAAe,CAE7C,IAAM,EADc,OAAO,IAAU,UAAY,IAAU,MAAQ,YAAa,GACpD,OAAO,cAAc,CAAK,EAAI,OAAQ,EAAiB,QAAQ,CAAC,EAAI,GAChG,GAAI,CAAC,QAAQ,KAAK,CAAI,EAAG,MAAM,EAAa,WAAW,0BAA8B,EACrF,OAAO,EAGT,SAAS,CAAa,CAAC,EAA4E,CACjG,MAAO,CAAC,GAAG,CAAU,EAAE,IAAI,EAAE,EAAU,MAAa,CAClD,SAAU,EAAI,OAAO,CAAQ,EAC7B,aAAc,CAAC,GAAG,CAAM,EAAE,IAAI,EAAE,EAAW,MAAa,CACtD,OAAQ,EAAO,EAAQ,cAAc,EACrC,eAAgB,EAAI,OAAO,CAAS,CACtC,EAAE,CACJ,EAAE,EAGJ,eAAe,CAAc,CAC3B,EACA,EACA,EACwB,CACxB,IAAI,EACA,EACA,EAEJ,GAAI,MAAM,QAAQ,CAAM,EAAG,CACzB,GAAI,EAAO,SAAW,EAAG,MAAM,EAAa,iDAAiD,EAC7F,CAAC,EAAS,CAAK,EAAI,EACnB,EAAS,EAAM,mCAAmC,aAC7C,QAAI,aAAkB,IAAK,CAChC,GAAI,EAAO,IAAI,CAAC,EAAG,MAAM,EAAa,iDAAiD,EACvF,GAAI,EAAO,IAAI,CAAC,EAAG,MAAM,EAAa,4DAA4D,EAClG,GAAI,EAAO,OAAS,EAAG,MAAM,EAAa,qCAAqC,EAC/E,EAAU,EAAO,IAAI,CAAC,EACtB,EAAQ,EAAO,IAAI,CAAC,EACpB,EAAS,EAAM,mCAAmC,YAElD,WAAM,EAAa,wBAAwB,EAG7C,GAAI,MAAM,QAAQ,CAAK,GAAK,EAAM,SAAW,EAAG,MAAM,EAAa,8BAA8B,EACjG,IAAO,EAAM,GAAc,MAAM,QAAQ,CAAK,EAAI,EAAQ,CAAC,CAAK,EAC1D,EAAgB,MAAM,EAA2B,CAAqB,EAY5E,MAAO,IAVL,IAAkB,EAAI,QAClB,CACE,kBAAmB,CACjB,YAAa,EAAM,mBAAmB,KACtC,KAAM,EAAI,KACV,YAAa,EAAI,WACnB,CACF,EACA,CAAE,QAAS,CAAc,EAI7B,OAAQ,EAAO,EAAM,eAAe,EACpC,YACI,IAAe,OAAY,CAAC,EAAI,CAAE,YAAa,EAAc,CAAU,CAAE,CAC/E,EAGF,SAAS,CAAc,CAAC,EAAiB,EAAc,CACrD,IAAM,EACJ,OAAO,IAAW,UAAY,IAAW,MAAQ,QAAS,GAAU,EAAO,MAAQ,GAAW,UAAW,EAS3G,MAAO,CAAE,QARK,EAAW,EAAO,MAAQ,GAEE,IAAI,CAAC,IAAU,CACvD,GAAI,EAAM,SAAW,EAAG,MAAM,EAAa,uBAAuB,EAClE,IAAO,EAAQ,GAAS,EACxB,MAAO,CAAE,OAAM,UAAW,EAAI,OAAO,CAAM,EAAG,WAAY,OAAO,EAAO,EAAO,aAAa,CAAC,CAAE,EAChG,EAE8B,YAAa,CAAS,EAGvD,eAAsB,CAA0B,CAC9C,EACA,EACA,EACiC,CACjC,IAAQ,QAAS,MAAM,EAAyB,CAAK,GAC7C,iBAAgB,WAAY,EAAiB,CAAO,GACpD,MAAO,GAAU,EAEnB,EAA6B,OAAO,OAAO,CAAI,EAC/C,EAAc,CAAC,GAAG,EAAK,KAAK,CAAC,EAAE,OAAO,CAAC,IAAU,CAAC,EAAgB,SAAS,CAAK,CAAC,EACvF,GAAI,EAAY,OAAS,EACvB,MAAM,EAAa,4DAA4D,EAAY,KAAK,IAAI,GAAG,EAGzG,IAAM,EAAU,EAAK,IAAI,EAAK,OAAO,EAC/B,EAAoB,EAAK,IAAI,EAAK,mBAAmB,EAErD,EAAM,EAAK,IAAI,EAAK,GAAG,EACvB,EAAwB,EAAK,IAAI,EAAK,uBAAuB,EAEnE,MAAO,IACF,EAAe,EAAK,IAAI,EAAK,MAAM,EAAG,EAAI,IAAI,KAC9C,EACH,iBACA,IAAK,EAAO,EAAK,IAAI,EAAK,GAAG,EAAG,KAAK,EACrC,QAAS,MAAM,QAAQ,IAAI,EAAQ,IAAI,CAAC,IAAW,EAAe,EAAQ,EAAK,CAAK,CAAC,CAAC,EACtF,YAAa,EAAM,qBAAqB,wBACpC,EAAoB,CAAE,cAAe,CAAE,KAAM,EAAI,OAAO,CAAiB,CAAE,CAAE,EAAI,CAAC,KAClF,IAAQ,OAAY,CAAC,EAAI,CAAE,IAAK,EAAO,EAAK,KAAK,CAAE,KACnD,IAA0B,OAC1B,CAAC,EACD,CAAE,sBAAuB,EAAO,EAAuB,yBAAyB,CAAE,CACxF,EAGF,eAAsB,CAAkB,CACtC,GACE,OAAM,aACR,GACE,MAAO,GACT,CACA,IAAQ,YAAa,MAAM,EAAyB,CAAK,EAEzD,GAAI,EAAK,YAAY,IAAM,EAAU,MAAM,EAAW,4CAA4C,EAElG,IAAM,EAAgB,EAAU,IAAI,EAAG,SAAQ,YAAW,UAAW,CACnE,GAAI,IAAS,EAAM,qBAAqB,iBAAmB,EAAO,YAAY,IAAM,EAClF,MAAM,EAAW,iDAAiD,EAEpE,MAAO,CAAE,UAAW,EAAI,OAAO,CAAM,EAAG,UAAW,EAAI,OAAO,CAAS,CAAE,EAC1E,EAED,OAAO,EAAwB,EAAO,CAAa,EAGrD,eAAsB,CAAgB,EACpC,UACA,kBAIC,CACD,IAAO,EAAS,EAAU,EAAS,EAAM,GAAS,EAClD,GAAI,EAAe,SAAW,GAAK,IAAS,GAAK,IAAU,OACzD,MAAM,IAAI,EAAa,CACrB,SAAU,8CACV,KAAM,CAAE,MAAO,EAAM,QAAS,gBAAe,CAC/C,CAAC,EAGH,IAAM,EAAO,EAAuB,CAAc,EAC5C,EAAc,EAAuB,CAAC,EAAS,EAAU,EAAS,EAAG,CAAC,CAAwB,GAC5F,iBAAgB,WAAY,EAAiB,CAAO,EACtD,EAAgB,EAAQ,QAGxB,EAAa,MAAM,EAAc,oBAAoB,CACzD,OAAQ,CAAC,EAAM,CAAW,EAAE,IAAI,CAAC,KAAa,CAAE,iBAAgB,KAAM,CAAQ,EAAE,CAClF,CAAC,EACD,GAAI,CAAC,EAAW,QACd,MAAM,IAAI,EAAa,CACrB,SAAU,sCACV,KAAM,CAAE,MAAO,EAAM,QAAS,iBAAgB,MAAO,EAAW,QAAQ,KAAM,CAChF,CAAC,EAGH,IAAO,EAAW,GAAc,EAAW,QAAQ,IAAI,EAAG,UAAW,OAAO,KAAK,EAAK,WAAY,KAAK,CAAC,EAIlG,EAAgB,MAAM,EAAwB,CAAS,EACvD,EAAU,MAAM,EACpB,OAAO,OAAO,CAAC,OAAO,KAAK,CAAC,EAAQ,SAAS,CAAC,EAAG,EAAe,MAAM,EAAwB,CAAU,CAAC,CAAC,CAC5G,EAEA,eAAe,CAAe,CAAC,EAAe,CAC5C,IAAM,EAAS,MAAM,EAA2B,EAAO,CAAE,UAAS,OAAM,aAAY,EAAG,CAAO,EACxF,EAAS,MAAM,EAAc,uBAAuB,CAAM,EAEhE,GAAI,CAAC,EAAO,QAAS,MAAM,EAAW,EAAO,QAAQ,KAAK,EAE1D,OAAO,EAAmB,EAAO,EAAO,QAAS,EAAU,SAAS,KAAK,EAAG,CAAO,EAGrF,MAAO,CAAE,WAAY,IAAM,EAAS,YAAW,gBAAe,iBAAgB",
8
- "debugId": "610DAB94A71C5BD564756E2164756E21",
9
- "names": []
10
- }
@@ -1,4 +0,0 @@
1
- import{$,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,_,a,aa,b,ba,c,ca,d,da,e,ea,f,fa,g,ga,h,ha,i,ia,j,ja,k,ka,l,la,m,ma,n,na,o,oa,p,pa,q,qa,r,ra,s,sa,t,ta,u,ua,v,va,w,wa,x,xa,y,z}from"./chunk-09e51wma.js";import"./chunk-yrxe491r.js";import"./chunk-dptbnkzm.js";import"./chunk-nhva847d.js";export{ua as mapDeviceModelId,sa as isSolanaContextSuccess,h as isEthereumClearSignContextSuccess,t as getSchemaHash,I as VERIFYING_CONTRACT_TOKEN_INDEX,O as UniswapContextLoader,J as TypedDataCalldataParamPresence,H as TrustedNameContextLoader,G as TrustedNameContextFieldLoader,T as TransactionCheckPaths,ea as TokenInfoContextLoader,E as TokenContextLoader,C as TokenContextFieldLoader,ca as TokenAccountStateContextLoader,ga as SolanaTrustedNameContextLoader,X as SolanaTransactionScanChainId,Y as SolanaInstructionSubstructureKind,qa as SolanaContextType,pa as SigningMethod,ra as SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES,A as ProxyContextFieldLoader,aa as OwnerInfoContextLoader,x as NftContextLoader,w as NftContextFieldLoader,j as KeyUsage,i as KeyId,_ as InstructionInfoContextLoader,K as HttpTypedDataDataSource,F as HttpTrustedNameDataSource,da as HttpTokenInfoDataSource,B as HttpTokenDataSource,ba as HttpTokenAccountStateDataSource,fa as HttpSolanaTrustedNameDataSource,z as HttpSafeProxyDataSource,y as HttpProxyDataSource,P as HttpPkiCertificateDataSource,$ as HttpOwnerInfoDataSource,v as HttpNftDataSource,Z as HttpInstructionInfoDataSource,r as HttpGatedDescriptorDataSource,p as HttpExternalPluginDataSource,m as HttpDynamicNetworkDataSource,k as HttpCalldataDescriptorDataSource,R as HttpBlindSigningReporterDatasource,U as HttpAltResolutionDataSource,b as HttpAccountOwnershipDataSource,u as GatedSigningTypedDataContextLoader,s as GatedSigningContextLoader,q as ExternalPluginContextLoader,N as EthersAbiDecoderDataSource,f as EthereumClearSignContextType,W as EnumVariantContextLoader,g as ETHEREUM_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES,D as ERC20_SUPPORTED_SELECTORS,o as DynamicNetworkContextLoader,L as DefaultTypedDataContextLoader,Q as DefaultPkiCertificateLoader,ia as DefaultContextModule,M as DefaultCommandDecoderDataSource,S as DefaultBlindSigningReporter,xa as DataPathLeafType,wa as DataPathElementType,n as DYNAMIC_NETWORK_CONTEXT_TYPES,ja as DEFAULT_CONFIG,ha as ContextModuleChainID,ka as ContextModuleBuilder,va as ContainerPath,na as ClearSigningType,c as ClearSignContextType,e as ClearSignContextReferenceType,l as CalldataContextLoader,oa as BlindSigningPlatform,ta as BlindSigningModelId,la as BlindSigningMethod,ma as BlindSignReason,V as AltResolutionContextLoader,a as AccountOwnershipError,d as AccountOwnershipContextLoader};
2
-
3
- //# debugId=B6EC406B25B9A3EF64756E2164756E21
4
- //# sourceMappingURL=chunk-xx7cwpzq.js.map