@swapkit/wallet-hardware 6.2.0 → 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 (77) hide show
  1. package/dist/THIRD_PARTY_LICENSES.md +4 -4
  2. package/dist/{chunk-rydhx4se.js → chunk-0k1b2ddn.js} +3 -3
  3. package/dist/{chunk-rydhx4se.js.map → chunk-0k1b2ddn.js.map} +2 -2
  4. package/dist/{chunk-j3n6fbqh.js → chunk-2tzsz8f3.js} +4 -4
  5. package/dist/{chunk-j3n6fbqh.js.map → chunk-2tzsz8f3.js.map} +1 -1
  6. package/dist/{chunk-2jddegc1.js → chunk-410fpx61.js} +4 -4
  7. package/dist/{chunk-2jddegc1.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-7kwtpk70.js → chunk-96p7njae.js} +3 -3
  11. package/dist/{chunk-7kwtpk70.js.map → chunk-96p7njae.js.map} +2 -2
  12. package/dist/{chunk-g6rrzxcx.js → chunk-97nsp4z6.js} +3 -3
  13. package/dist/{chunk-g6rrzxcx.js.map → chunk-97nsp4z6.js.map} +1 -1
  14. package/dist/{chunk-kaw35ae2.js → chunk-9a9gn4pb.js} +3 -3
  15. package/dist/{chunk-a47dwwv6.js.map → chunk-9a9gn4pb.js.map} +1 -1
  16. package/dist/chunk-a39rm9nv.js +4 -0
  17. package/dist/{chunk-42xrtarj.js.map → chunk-a39rm9nv.js.map} +5 -5
  18. package/dist/chunk-c8mwf9cn.js +4 -0
  19. package/dist/{chunk-kaw35ae2.js.map → chunk-c8mwf9cn.js.map} +1 -1
  20. package/dist/{chunk-b7htg03t.js → chunk-dhhmywmb.js} +4 -4
  21. package/dist/{chunk-b7htg03t.js.map → chunk-dhhmywmb.js.map} +1 -1
  22. package/dist/{chunk-x28a37pz.js → chunk-dsa641rq.js} +3 -3
  23. package/dist/{chunk-x28a37pz.js.map → chunk-dsa641rq.js.map} +2 -2
  24. package/dist/{chunk-7rbvcts9.js → chunk-grj9nvte.js} +3 -3
  25. package/dist/{chunk-7rbvcts9.js.map → chunk-grj9nvte.js.map} +1 -1
  26. package/dist/{chunk-tecse0bj.js → chunk-napm4102.js} +3 -3
  27. package/dist/{chunk-tecse0bj.js.map → chunk-napm4102.js.map} +1 -1
  28. package/dist/{chunk-a47dwwv6.js → chunk-nb08g045.js} +3 -3
  29. package/dist/{chunk-sp3dq5hr.js.map → chunk-nb08g045.js.map} +1 -1
  30. package/dist/chunk-npe2r2ge.js +4 -0
  31. package/dist/{chunk-tm5gk51g.js.map → chunk-npe2r2ge.js.map} +1 -1
  32. package/dist/chunk-p9mwkgye.js +4 -0
  33. package/dist/{chunk-s2akss77.js.map → chunk-p9mwkgye.js.map} +14 -12
  34. package/dist/{chunk-b093ajcq.js → chunk-qjp8j8e5.js} +3 -3
  35. package/dist/{chunk-b093ajcq.js.map → chunk-qjp8j8e5.js.map} +1 -1
  36. package/dist/{chunk-71kfnwdp.js → chunk-r1fk1sx9.js} +3 -3
  37. package/dist/{chunk-71kfnwdp.js.map → chunk-r1fk1sx9.js.map} +1 -1
  38. package/dist/{chunk-5xg0xc0g.js → chunk-ta7bqmy3.js} +3 -3
  39. package/dist/{chunk-5xg0xc0g.js.map → chunk-ta7bqmy3.js.map} +1 -1
  40. package/dist/{chunk-545s1tsc.js → chunk-tgvgr630.js} +3 -3
  41. package/dist/{chunk-545s1tsc.js.map → chunk-tgvgr630.js.map} +2 -2
  42. package/dist/{chunk-035dayv6.js → chunk-v8x9ptxs.js} +3 -3
  43. package/dist/{chunk-035dayv6.js.map → chunk-v8x9ptxs.js.map} +1 -1
  44. package/dist/{chunk-mzan0m09.js → chunk-wm89desc.js} +20 -20
  45. package/dist/{chunk-mzan0m09.js.map → chunk-wm89desc.js.map} +12 -10
  46. package/dist/{chunk-a6vcbcyd.js → chunk-wtyhjt5e.js} +3 -3
  47. package/dist/{chunk-a6vcbcyd.js.map → chunk-wtyhjt5e.js.map} +1 -1
  48. package/dist/{chunk-s5a5v0m1.js → chunk-xskdbz15.js} +3 -3
  49. package/dist/{chunk-s5a5v0m1.js.map → chunk-xskdbz15.js.map} +2 -2
  50. package/dist/{chunk-sbebfr50.js → chunk-ytjqb1sd.js} +3 -3
  51. package/dist/{chunk-sbebfr50.js.map → chunk-ytjqb1sd.js.map} +1 -1
  52. package/dist/{chunk-ys51wj1c.js → chunk-zbesf7sy.js} +3 -3
  53. package/dist/{chunk-ys51wj1c.js.map → chunk-zbesf7sy.js.map} +1 -1
  54. package/dist/keepkey/index.js +2 -2
  55. package/dist/keepkey/index.js.map +1 -1
  56. package/dist/ledger/index.cjs +28 -28
  57. package/dist/ledger/index.cjs.map +28 -24
  58. package/dist/ledger/index.js +2 -2
  59. package/dist/ledger/index.js.map +4 -4
  60. package/dist/trezor/index.cjs +2 -2
  61. package/dist/trezor/index.cjs.map +5 -4
  62. package/dist/trezor/index.js +2 -2
  63. package/dist/trezor/index.js.map +3 -3
  64. package/dist/types/ledger/clients/zcash.d.ts.map +1 -1
  65. package/dist/types/trezor/hypercoreSigner.d.ts +22 -0
  66. package/dist/types/trezor/hypercoreSigner.d.ts.map +1 -0
  67. package/dist/types/trezor/index.d.ts +2 -2
  68. package/dist/types/trezor/index.d.ts.map +1 -1
  69. package/package.json +12 -12
  70. package/src/ledger/clients/zcash.ts +16 -6
  71. package/src/ledger/index.ts +2 -2
  72. package/src/trezor/hypercoreSigner.ts +96 -0
  73. package/src/trezor/index.ts +72 -16
  74. package/dist/chunk-42xrtarj.js +0 -4
  75. package/dist/chunk-s2akss77.js +0 -4
  76. package/dist/chunk-sp3dq5hr.js +0 -4
  77. package/dist/chunk-tm5gk51g.js +0 -4
@@ -0,0 +1,4 @@
1
+ import{Ca as XW}from"./chunk-410fpx61.js";import{$b as JQ,Mb as GQ,Nd as Z0,Oa as E8,Ob as B0,Qa as L,Qb as K,Ra as Pq,Rb as j,Sa as kq,Sb as U,Tb as B,Ub as Rq,Vb as E,Wb as w0,Xb as S,Yb as HQ,Zb as _q,_b as WQ,md as $,nd as O,oc as jJ,od as v,pd as bJ,yb as k}from"./chunk-wm89desc.js";import{Zd as CQ}from"./chunk-9a9gn4pb.js";var Bj=CQ(E8(),1);var b={Config:Symbol.for("config"),OriginToken:Symbol.for("originToken"),ContextModuleLoggerFactory:Symbol.for("contextModuleLoggerFactory")};var wQ=(q)=>new v(({bind:Q})=>{Q(b.Config).toConstantValue(q)});class Wq extends Error{kind;constructor(q,Q){super(Q),this.name="AccountOwnershipError",this.kind=q}}var H={NetworkClient:Symbol.for("networkClient")};var{defineProperty:vJ,getOwnPropertyDescriptor:HJ}=Object,BJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?HJ(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&&vJ(Q,J,X),X},LQ=(q,Q)=>(J,W)=>Q(J,W,q),Tq=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 Wq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):K(new Wq("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 Wq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}classifyFromStatus(q,Q){return q>=400&&q<500?new Wq("verification_failed",Q):new Wq("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"}};Tq=BJ([O(),LQ(0,$(b.Config)),LQ(1,$(H.NetworkClient))],Tq);var Xq={AccountOwnershipDataSource:Symbol.for("AccountOwnershipDataSource"),AccountOwnershipContextLoader:Symbol.for("AccountOwnershipContextLoader")};var D={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.SOLANA_BASIC_FLOW_RULE="solanaBasicFlowRule",q.TRON_TOKEN="tronToken",q))(G||{});var{defineProperty:DJ,getOwnPropertyDescriptor:PJ}=Object,UJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?PJ(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&&DJ(Q,J,X),X},EQ=(q,Q)=>(J,W)=>Q(J,W,q),_J=[G.CONCORDIUM_ACCOUNT_OWNERSHIP],Aq=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return _J.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})}]})}};Aq=UJ([O(),EQ(0,$(Xq.AccountOwnershipDataSource)),EQ(1,$(D.PkiCertificateLoader))],Aq);var kQ=()=>new v(({bind:q})=>{q(Xq.AccountOwnershipDataSource).to(Tq),q(Xq.AccountOwnershipContextLoader).to(Aq)});var o=((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))(o||{}),RJ={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},MJ=new Set(Object.values(RJ));function X2(q){return MJ.has(q.type)}var x=((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))(x||{});var _=((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))(_||{});var Yq="15",qQ="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:IJ,getOwnPropertyDescriptor:wJ}=Object,LJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?wJ(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&&IJ(Q,J,X),X},QQ=(q,Q)=>(J,W)=>Q(J,W,q),Lq=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:_.Calldata,keyId:x.CalCalldataKey},V=await this._certificateLoader.loadCertificate(F),P={type:G.ETHEREUM_TRANSACTION_INFO,payload:T.appendSignatureToPayload(N,z,qQ),certificate:V},R=[];for(let[I,M]of Object.entries(Z.enums))for(let[m,{data:C,signatures:u}]of Object.entries(M))R.push({type:G.ETHEREUM_ENUM,id:Number(I),value:Number(m),payload:T.appendSignatureToPayload(C,u[this.config.cal.mode],qQ),certificate:V});let w=Z.fields.map((I)=>({type:G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,payload:I.descriptor,reference:this.getReference(I.param)}));return j([P,...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:o.TOKEN,valuePath:this.toGenericPath(q.token.binary_path)};if(q.type==="TOKEN_AMOUNT"&&q.token!==void 0&&q.token.type==="constant")return{type:o.TOKEN,value:q.token.value};if(q.type==="NFT"&&q.collection.type==="path")return{type:o.NFT,valuePath:this.toGenericPath(q.collection.binary_path)};if(q.type==="NFT"&&q.collection.type==="constant")return{type:o.NFT,value:q.collection.value};if(q.type==="TRUSTED_NAME"&&q.value.type==="path")return{type:o.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:o.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:o.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"))}};Lq=LJ([O(),QQ(0,$(b.Config)),QQ(1,$(D.PkiCertificateLoader)),QQ(3,$(H.NetworkClient))],Lq);var r={CalldataContextLoader:Symbol.for("CalldataContextLoader"),DappCalldataDescriptorDataSource:Symbol.for("DappCalldataDescriptorDataSource"),TokenCalldataDescriptorDataSource:Symbol.for("TokenCalldataDescriptorDataSource")};var h={ProxyDataSource:Symbol.for("ProxyDataSource"),ProxyContextFieldLoader:Symbol.for("ProxyContextFieldLoader")};var{defineProperty:EJ,getOwnPropertyDescriptor:kJ}=Object,xJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?kJ(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&&EJ(Q,J,X),X},fq=(q,Q)=>(J,W)=>Q(J,W,q),SJ=[G.ETHEREUM_TRANSACTION_INFO,G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,G.ETHEREUM_PROXY_INFO,G.ETHEREUM_ENUM],hq=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!==k.NANO_S&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.data)&&L(q.selector)&&q.selector!=="0x"&&SJ.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 JQ(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 JQ(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()}};hq=xJ([O(),fq(0,$(r.DappCalldataDescriptorDataSource)),fq(1,$(r.TokenCalldataDescriptorDataSource)),fq(2,$(h.ProxyDataSource)),fq(3,$(b.ContextModuleLoggerFactory))],hq);var xQ=()=>new v(({bind:q})=>{q(r.DappCalldataDescriptorDataSource).toDynamicValue((Q)=>new Lq(Q.get(b.Config),Q.get(D.PkiCertificateLoader),"dapps",Q.get(H.NetworkClient))),q(r.TokenCalldataDescriptorDataSource).toDynamicValue((Q)=>new Lq(Q.get(b.Config),Q.get(D.PkiCertificateLoader),"tokens",Q.get(H.NetworkClient))),q(r.CalldataContextLoader).to(hq)});var{defineProperty:TJ,getOwnPropertyDescriptor:AJ}=Object,fJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?AJ(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&&TJ(Q,J,X),X},SQ=(q,Q)=>(J,W)=>Q(J,W,q),hJ={nanos:k.NANO_S,nanosp:k.NANO_SP,nanox:k.NANO_X,stax:k.STAX,flex:k.FLEX,apexp:k.APEX},Cq=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=hJ[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}}};Cq=fJ([O(),SQ(0,$(b.Config)),SQ(1,$(H.NetworkClient))],Cq);var Zq={DynamicNetworkDataSource:Symbol("DynamicNetworkDataSource"),DynamicNetworkContextLoader:Symbol("DynamicNetworkContextLoader")};var{defineProperty:CJ,getOwnPropertyDescriptor:yJ}=Object,gJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?yJ(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&&CJ(Q,J,X),X},yq=(q,Q)=>(J,W)=>Q(J,W,q),mJ="15",uJ=[G.ETHEREUM_DYNAMIC_NETWORK,G.ETHEREUM_DYNAMIC_NETWORK_ICON],gq=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!==k.NANO_S&&typeof q.chainId=="number"&&uJ.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:x.CalNetwork,keyUsage:_.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,mJ);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}};gq=gJ([O(),yq(0,$(Zq.DynamicNetworkDataSource)),yq(1,$(b.Config)),yq(2,$(D.PkiCertificateLoader)),yq(3,$(b.ContextModuleLoggerFactory))],gq);var TQ=()=>new v(({bind:q})=>{q(Zq.DynamicNetworkDataSource).to(Cq),q(Zq.DynamicNetworkContextLoader).to(gq)});var{defineProperty:lJ,getOwnPropertyDescriptor:pJ}=Object,cJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?pJ(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&&lJ(Q,J,X),X},AQ=(q,Q)=>(J,W)=>Q(J,W,q),mq=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"))}}};mq=cJ([O(),AQ(0,$(b.Config)),AQ(1,$(H.NetworkClient))],mq);var $q={ExternalPluginDataSource:Symbol.for("ExternalPluginDataSource"),ExternalPluginContextLoader:Symbol.for("ExternalPluginContextLoader")};import{Interface as nJ}from"ethers";var A={TokenDataSource:Symbol.for("TokenDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader"),TokenContextFieldLoader:Symbol.for("TokenContextFieldLoader")};var a={AbiDecoderDataSource:Symbol.for("AbiDecoderDataSource"),CommandDecoderDataSource:Symbol.for("CommandDecoderDataSource"),UniswapContextLoader:Symbol.for("UniswapContextLoader")};var{defineProperty:dJ,getOwnPropertyDescriptor:sJ}=Object,iJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?sJ(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&&dJ(Q,J,X),X},uq=(q,Q)=>(J,W)=>Q(J,W,q),aJ=[G.ETHEREUM_EXTERNAL_PLUGIN,G.ETHEREUM_TOKEN],lq=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"&&aJ.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 WQ(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 I=await V.load(q);return[F,...I]}let P=this.getDecodedCallData(z.abi,z.selectorDetails.method,J);if(P.isLeft())return[{type:G.ERROR,error:P.extract()},F];let R=P.extract(),w=z.selectorDetails.erc20OfInterest.map(async(I)=>this.getTokenPayload(q,I,R));return[...(await Promise.all(w)).map((I)=>I.caseOf({Left:(M)=>({type:G.ERROR,error:M}),Right:(M)=>({type:G.ETHEREUM_TOKEN,payload:M})})),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 WQ(({fromPromise:X})=>X(this._tokenDataSource.getTokenInfosPayload({address:W,chainId:q.chainId})))}getDecodedCallData(q,Q,J){try{let W=new nJ(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}};lq=iJ([O(),uq(0,$($q.ExternalPluginDataSource)),uq(1,$(A.TokenDataSource)),uq(2,$(a.UniswapContextLoader)),uq(3,$(b.ContextModuleLoggerFactory))],lq);var fQ=()=>new v(({bind:q})=>{q($q.ExternalPluginDataSource).to(mq),q($q.ExternalPluginContextLoader).to(lq)});var{defineProperty:oJ,getOwnPropertyDescriptor:rJ}=Object,tJ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?rJ(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&&oJ(Q,J,X),X},hQ=(q,Q)=>(J,W)=>Q(J,W,q),pq=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],Yq)})}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],Yq)})}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}};pq=tJ([O(),hQ(0,$(b.Config)),hQ(1,$(H.NetworkClient))],pq);var s={GatedDescriptorDataSource:Symbol.for("GatedDescriptorDataSource"),GatedSigningContextLoader:Symbol.for("GatedSigningContextLoader"),GatedSigningTypedDataContextLoader:Symbol.for("GatedSigningTypedDataContextLoader")};var{defineProperty:eJ,getOwnPropertyDescriptor:qW}=Object,QW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?qW(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&&eJ(Q,J,X),X},cq=(q,Q)=>(J,W)=>Q(J,W,q),JW=[G.ETHEREUM_GATED_SIGNING];function WW(q){let Q=q.toLowerCase();return Q.startsWith("0x")?Q:`0x${Q}`}var dq=class{constructor(q,Q,J,W){this._dataSource=q,this._certificateLoader=Q,this._proxyDataSource=J,this.logger=W("GatedSigningContextLoader")}logger;canHandle(q,Q){return JW.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:I}=X.unsafeCoerce(),M=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:I,certificate:M}]}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 I=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:I.message}}),[Z]}let z=N.unsafeCoerce(),F=WW(z.implementationAddress),V=await this._dataSource.getGatedDescriptor({contractAddress:F,selector:Q,chainId:J});if(V.isLeft()){let I=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:I.message}}),[Z]}let{signedDescriptor:P}=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:P,certificate:w}]}_loadGatedCertificate(q){return this._certificateLoader.loadCertificate({keyId:x.CalGatedSigning,keyUsage:_.GatedSigning,targetDevice:q})}};dq=QW([O(),cq(0,$(s.GatedDescriptorDataSource)),cq(1,$(D.PkiCertificateLoader)),cq(2,$(h.ProxyDataSource)),cq(3,$(b.ContextModuleLoggerFactory))],dq);var yQ=CQ(XW(),1);function YW(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 sq(q){let Q=YW(q),J=JSON.stringify(Q);return yQ.default(J).toString()}var{defineProperty:ZW,getOwnPropertyDescriptor:$W}=Object,GW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?$W(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&&ZW(Q,J,X),X},iq=(q,Q)=>(J,W)=>Q(J,W,q),VW="0x0000000000000000000000000000000000000000",KW=[G.ETHEREUM_GATED_SIGNING];function OW(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 nq=class{constructor(q,Q,J,W){this._dataSource=q,this._certificateLoader=Q,this._proxyDataSource=J,this.logger=W("GatedSigningTypedDataContextLoader")}logger;canHandle(q,Q){return KW.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"data"in q&&OW(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()??VW,Y=X.startsWith("0x")?X:`0x${X}`,Z=sq(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:x.CalGatedSigning,keyUsage:_.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(),P=V.implementationAddress.toLowerCase(),R=P.startsWith("0x")?P:`0x${P}`,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:I}=w.unsafeCoerce(),[M,m]=await Promise.all([this._certificateLoader.loadCertificate({keyId:V.keyId,keyUsage:V.keyUsage,targetDevice:J}),this._certificateLoader.loadCertificate({keyId:x.CalGatedSigning,keyUsage:_.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:M},{type:G.ETHEREUM_GATED_SIGNING,payload:I,certificate:m}]}};nq=GW([O(),iq(0,$(s.GatedDescriptorDataSource)),iq(1,$(D.PkiCertificateLoader)),iq(2,$(h.ProxyDataSource)),iq(3,$(b.ContextModuleLoggerFactory))],nq);var gQ=()=>new v(({bind:q})=>{q(s.GatedDescriptorDataSource).to(pq),q(s.GatedSigningContextLoader).to(dq),q(s.GatedSigningTypedDataContextLoader).to(nq)});var{defineProperty:FW,getOwnPropertyDescriptor:NW}=Object,bW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?NW(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&&FW(Q,J,X),X},mQ=(q,Q)=>(J,W)=>Q(J,W,q),aq=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"))}}};aq=bW([O(),mQ(0,$(b.Config)),mQ(1,$(H.NetworkClient))],aq);var i={NftDataSource:Symbol.for("NftDataSource"),NftContextLoader:Symbol.for("NftContextLoader"),NftContextFieldLoader:Symbol.for("NftContextFieldLoader")};var{defineProperty:zW,getOwnPropertyDescriptor:jW}=Object,vW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?jW(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&&zW(Q,J,X),X},HW=(q,Q)=>(J,W)=>Q(J,W,q),oq=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})})}};oq=vW([O(),HW(0,$(i.NftDataSource))],oq);var{defineProperty:BW,getOwnPropertyDescriptor:DW}=Object,PW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?DW(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&&BW(Q,J,X),X},uQ=(q,Q)=>(J,W)=>Q(J,W,q),lQ=((q)=>(q.Approve="0x095ea7b3",q.SetApprovalForAll="0xa22cb465",q.TransferFrom="0x23b872dd",q.SafeTransferFrom="0x42842e0e",q.SafeTransferFromWithData="0xb88d4fde",q))(lQ||{}),pQ=((q)=>(q.SetApprovalForAll="0xa22cb465",q.SafeTransferFrom="0xf242432a",q.SafeBatchTransferFrom="0x2eb2c2d6",q))(pQ||{}),UW=[...Object.values(lQ),...Object.values(pQ)],_W=[G.ETHEREUM_PLUGIN,G.ETHEREUM_NFT],rq=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)&&_W.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(UW).includes(q)}};rq=PW([O(),uQ(0,$(i.NftDataSource)),uQ(1,$(b.ContextModuleLoggerFactory))],rq);var cQ=()=>new v(({bind:q})=>{q(i.NftDataSource).to(aq),q(i.NftContextLoader).to(rq),q(i.NftContextFieldLoader).to(oq)});var{defineProperty:RW,getOwnPropertyDescriptor:MW}=Object,IW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?MW(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&&RW(Q,J,X),X},dQ=(q,Q)=>(J,W)=>Q(J,W,q),tq=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:x.DomainMetadataKey,keyUsage:_.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"}};tq=IW([O(),dQ(0,$(b.Config)),dQ(1,$(H.NetworkClient))],tq);var{defineProperty:wW,getOwnPropertyDescriptor:LW}=Object,EW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?LW(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&&wW(Q,J,X),X},sQ=(q,Q)=>(J,W)=>Q(J,W,q),eq=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"}};eq=EW([O(),sQ(0,$(b.Config)),sQ(1,$(H.NetworkClient))],eq);var{defineProperty:kW,getOwnPropertyDescriptor:xW}=Object,SW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?xW(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&&kW(Q,J,X),X},iQ=(q,Q)=>(J,W)=>Q(J,W,q),q1=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}}})}};q1=SW([O(),iQ(0,$(h.ProxyDataSource)),iQ(1,$(D.PkiCertificateLoader))],q1);var nQ=(q)=>new v(({bind:Q})=>{q?.proxy==="safe"?Q(h.ProxyDataSource).to(eq):Q(h.ProxyDataSource).to(tq),Q(h.ProxyContextFieldLoader).to(q1)});var{defineProperty:TW,getOwnPropertyDescriptor:AW}=Object,fW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?AW(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&&TW(Q,J,X),X},aQ=(q,Q)=>(J,W)=>Q(J,W,q),Q1=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"}};Q1=fW([aQ(0,$(b.Config)),aQ(1,$(H.NetworkClient))],Q1);var Gq={SafeAddressDataSource:Symbol.for("SafeAddressDataSource"),SafeAddressLoader:Symbol.for("SafeAddressLoader")};var{defineProperty:hW,getOwnPropertyDescriptor:CW}=Object,yW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?CW(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&&hW(Q,J,X),X},oQ=(q,Q)=>(J,W)=>Q(J,W,q),gW=[G.ETHEREUM_SAFE,G.ETHEREUM_SIGNER],J1=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q.every((J)=>gW.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})}]})}};J1=yW([O(),oQ(0,$(Gq.SafeAddressDataSource)),oQ(1,$(D.PkiCertificateLoader))],J1);var rQ=()=>new v(({bind:q})=>{q(Gq.SafeAddressDataSource).to(Q1),q(Gq.SafeAddressLoader).to(J1)});var{defineProperty:mW,getOwnPropertyDescriptor:uW}=Object,lW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?uW(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&&mW(Q,J,X),X},tQ=(q,Q)=>(J,W)=>Q(J,W,q),W1=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"))}}};W1=lW([O(),tQ(0,$(b.Config)),tQ(1,$(H.NetworkClient))],W1);var{defineProperty:pW,getOwnPropertyDescriptor:cW}=Object,dW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?cW(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&&pW(Q,J,X),X},eQ=(q,Q)=>(J,W)=>Q(J,W,q),X1=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:x.Erc20MetadataKey,keyUsage:_.CoinMeta,targetDevice:q.deviceModelId});return Q.caseOf({Left:(W)=>({type:G.ERROR,error:W}),Right:(W)=>({type:G.ETHEREUM_TOKEN,payload:W,certificate:J})})}};X1=dW([O(),eQ(0,$(A.TokenDataSource)),eQ(1,$(D.PkiCertificateLoader))],X1);var{defineProperty:sW,getOwnPropertyDescriptor:iW}=Object,nW=(q,Q,J,W)=>{for(var X=W>1?void 0:W?iW(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&&sW(Q,J,X),X},q0=(q,Q)=>(J,W)=>Q(J,W,q),Q0=((q)=>(q.Approve="0x095ea7b3",q.Transfer="0xa9059cbb",q))(Q0||{}),aW=Object.values(Q0),oW=[G.ETHEREUM_TOKEN],Y1=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)&&oW.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(aW).includes(q)}};Y1=nW([O(),q0(0,$(A.TokenDataSource)),q0(1,$(b.ContextModuleLoggerFactory))],Y1);var J0=()=>new v(({bind:q})=>{q(A.TokenDataSource).to(W1),q(A.TokenContextLoader).to(Y1),q(A.TokenContextFieldLoader).to(X1)});var W0="X-Ledger-Client-Version",X0="X-Ledger-Client-Origin";var Y0={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":"^1.11.0"},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.8.0"};var qq=(q)=>new Z0({headers:{[W0]:`context-module/${Y0.version}`,...q.originToken&&{[X0]:q.originToken}}});var{defineProperty:tW,getOwnPropertyDescriptor:eW}=Object,qX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?eW(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&&tW(Q,J,X),X},$0=(q,Q)=>(J,W)=>Q(J,W,q),Z1=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"}};Z1=qX([O(),$0(0,$(b.Config)),$0(1,$(H.NetworkClient))],Z1);var c={TrustedNameDataSource:Symbol.for("TrustedNameDataSource"),TrustedNameContextLoader:Symbol.for("TrustedNameContextLoader"),TrustedNameContextFieldLoader:Symbol.for("TrustedNameContextFieldLoader")};var{defineProperty:QX,getOwnPropertyDescriptor:JX}=Object,WX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?JX(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&&QX(Q,J,X),X},G0=(q,Q)=>(J,W)=>Q(J,W,q),$1=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}}})}};$1=WX([O(),G0(0,$(c.TrustedNameDataSource)),G0(1,$(D.PkiCertificateLoader))],$1);var{defineProperty:XX,getOwnPropertyDescriptor:YX}=Object,ZX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?YX(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&&XX(Q,J,X),X},XQ=(q,Q)=>(J,W)=>Q(J,W,q),$X=[G.ETHEREUM_TRUSTED_NAME],G1=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&&$X.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}]}})}};G1=ZX([O(),XQ(0,$(c.TrustedNameDataSource)),XQ(1,$(D.PkiCertificateLoader)),XQ(2,$(b.ContextModuleLoggerFactory))],G1);var V0=(q)=>new v(({bind:Q})=>{q?Q(c.TrustedNameDataSource).toConstantValue(q):Q(c.TrustedNameDataSource).to(Z1),Q(c.TrustedNameContextLoader).to(G1),Q(c.TrustedNameContextFieldLoader).to($1)});var K0=255,Vq=((q)=>(q.None="none",q.Present="present",q.VerifyingContract="verifying_contract",q))(Vq||{});var{defineProperty:GX,getOwnPropertyDescriptor:VX}=Object,KX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?VX(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},O0=(q,Q)=>(J,W)=>Q(J,W,q),V1=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=sq(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 Vq.None;case"present":return Vq.Present;case"verifying_contract":return Vq.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"}};V1=KX([O(),O0(0,$(b.Config)),O0(1,$(H.NetworkClient))],V1);var Kq={TypedDataDataSource:Symbol.for("TypedDataDataSource"),TypedDataContextLoader:Symbol.for("TypedDataContextLoader")};var{defineProperty:OX,getOwnPropertyDescriptor:FX}=Object,NX=(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},Eq=(q,Q)=>(J,W)=>Q(J,W,q),K1=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 P={type:"error",error:J.extract()};return this.logger.debug("load result",{data:{result:P}}),P}}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:x.Erc20MetadataKey,keyUsage:_.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===K0){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((M)=>M.type==="calldata-value"),J,"0x"),F=this.extractHexaString(N.find((M)=>M.type==="calldata-selector"),J,z.slice(0,10)),V=this.extractAddress(N.find((M)=>M.type==="calldata-callee"),J,Z.calleeFlag),P=this.extractAddress(N.find((M)=>M.type==="calldata-spender"),J,Z.spenderFlag),R=this.extractBigint(N.find((M)=>M.type==="calldata-amount"),J,void 0),w=this.extractBigint(N.find((M)=>M.type==="calldata-chain-id"),J,void 0),I=w!==void 0&&w<Number.MAX_SAFE_INTEGER?Number(w):J.chainId;X[Y]={filter:Z,subset:{chainId:I,data:z,selector:F,to:V,value:R,from:P}}}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 kq(W[0].value)}return J}extractAddress(q,Q,J,W){if(J===Vq.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(kq(W[0].value))}return J}convertAddressToHexaString(q){return`0x${Array.from(q,(Q)=>Q.toString(16).padStart(2,"0")).join("").padStart(40,"0")}`}};K1=NX([O(),Eq(0,$(Kq.TypedDataDataSource)),Eq(1,$(A.TokenDataSource)),Eq(2,$(h.ProxyDataSource)),Eq(3,$(D.PkiCertificateLoader)),Eq(4,$(b.ContextModuleLoggerFactory))],K1);var F0=()=>new v(({bind:q})=>{q(Kq.TypedDataDataSource).to(V1),q(Kq.TypedDataContextLoader).to(K1)});var N0=["function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable"],b0="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||{}),z0={"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"},j0=["V2_SWAP_EXACT_IN","V2_SWAP_EXACT_OUT","V3_SWAP_EXACT_IN","V3_SWAP_EXACT_OUT"];var YQ=((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))(YQ||{}),v0={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:bX,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&&bX(Q,J,X),X},vX=(q,Q)=>(J,W)=>Q(J,W,q),ZQ=40,H0=6,O1=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+ZQ*2+H0)return[];let J=[];for(let W=2;W<Q.length;W+=ZQ+H0)J.push(Q.slice(W,W+ZQ));return J.map((W)=>W.toLowerCase()).map((W)=>`0x${W}`)}_isSupportedChainId(q){return Object.values(YQ).includes(q)}_decodeWrappedEth(q,Q){return this._isSupportedChainId(Q)?[v0[Q].toLowerCase()]:[]}_decodeSweep=(q)=>{let[Q]=this.abiDecoder.decode(["address","address","uint256"],q);return typeof Q!="string"||!L(Q)?[]:[Q.toLowerCase()]}};O1=jX([O(),vX(0,$(a.AbiDecoderDataSource))],O1);import{AbiCoder as PX}from"ethers";var{defineProperty:HX,getOwnPropertyDescriptor:BX}=Object,DX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?BX(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},F1=class{decode(q,Q){try{return PX.defaultAbiCoder().decode(q,Q)}catch{return[]}}};F1=DX([O()],F1);import{Interface as MX}from"ethers";var{defineProperty:UX,getOwnPropertyDescriptor:_X}=Object,RX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?_X(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&&UX(Q,J,X),X},$Q=(q,Q)=>(J,W)=>Q(J,W,q),IX=[G.ETHEREUM_TOKEN],N1=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===b0&&IX.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 MX(N0).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 P=X[V],R=this.commandDecoderDataSource.decode(F,P,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 GQ.fromNullable(q.slice(2).match(/../g)).map((Q)=>Q.map((J)=>`0x${J}`)).map((Q)=>Q.map((J)=>z0[J])).chain((Q)=>Q.every((J)=>J!==void 0)?GQ.of(Q):B0)}_isChainingSwapSupported(q){let Q,J;for(let[W,X]of q){if(!j0.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))}};N1=RX([O(),$Q(0,$(a.CommandDecoderDataSource)),$Q(1,$(A.TokenDataSource)),$Q(2,$(b.ContextModuleLoggerFactory))],N1);var D0=()=>new v(({bind:q})=>{q(a.AbiDecoderDataSource).to(F1),q(a.CommandDecoderDataSource).to(O1),q(a.UniswapContextLoader).to(N1)});class VQ{static keyUsageMap=new Map([[_.GenuineCheck,1],[_.ExchangePayload,2],[_.NftMeta,3],[_.TrustedName,4],[_.BackupProvider,5],[_.ProtectOrchestrator,6],[_.PluginMeta,7],[_.CoinMeta,8],[_.SeedIdAuth,9],[_.TxSimulationSigner,10],[_.Calldata,11],[_.Network,12],[_.SwapTemplate,13],[_.LESMultisig,14],[_.GatedSigning,15]]);static mapKeyUsageForFirmware(q){return Object.values(_).includes(q)?this.keyUsageMap.get(q)??-1:-1}}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},P0=(q,Q)=>(J,W)=>Q(J,W,q),b1=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=Pq(T.appendSignatureToPayload(J[0].descriptor.data,J[0].descriptor.signatures[this.config.cal.mode],Yq));if(!W)return K(Error("[ContextModule] HttpPkiCertificateDataSource: Cannot generate payload from fetched PKI Certificate"));let X={payload:W,keyUsageNumber:VQ.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}};b1=EX([O(),P0(0,$(b.Config)),P0(1,$(H.NetworkClient))],b1);var{defineProperty:kX,getOwnPropertyDescriptor:xX}=Object,SX=(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},TX=(q,Q)=>(J,W)=>Q(J,W,q),z1=class{_dataSource;constructor(q){this._dataSource=q}async loadCertificate(q){return(await this._dataSource.fetchCertificate(q)).orDefault(void 0)}};z1=SX([O(),TX(0,$(D.PkiCertificateDataSource))],z1);var j1=()=>new v(({bind:q})=>{q(D.PkiCertificateDataSource).to(b1),q(D.PkiCertificateLoader).to(z1)});var{defineProperty:AX,getOwnPropertyDescriptor:fX}=Object,hX=(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&&AX(Q,J,X),X},U0=(q,Q)=>(J,W)=>Q(J,W,q),v1=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)}};v1=hX([O(),U0(0,$(b.Config)),U0(1,$(H.NetworkClient))],v1);var Qq={BlindSigningReporterDatasource:Symbol.for("BlindSigningReporterDatasource"),BlindSigningReporter:Symbol.for("BlindSigningReporter")};var{defineProperty:CX,getOwnPropertyDescriptor:yX}=Object,gX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?yX(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},mX=(q,Q)=>(J,W)=>Q(J,W,q),H1=class{constructor(q){this.dataSource=q}async report(q){return this.dataSource.report(q)}};H1=gX([O(),mX(0,$(Qq.BlindSigningReporterDatasource))],H1);var _0=()=>new v(({bind:q})=>{q(Qq.BlindSigningReporterDatasource).to(v1),q(Qq.BlindSigningReporter).to(H1)});var{defineProperty:uX,getOwnPropertyDescriptor:lX}=Object,pX=(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&&uX(Q,J,X),X},KQ=(q,Q)=>(J,W)=>Q(J,W,q),B1=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:{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:{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}}}}}};B1=pX([O(),KQ(0,$(b.Config)),KQ(1,$(b.ContextModuleLoggerFactory)),KQ(2,$(H.NetworkClient))],B1);var Jq={SignReporterDatasource:Symbol.for("SignReporterDatasource"),SignReporter:Symbol.for("SignReporter")};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},iX=(q,Q)=>(J,W)=>Q(J,W,q),D1=class{constructor(q){this.dataSource=q}async report(q){return this.dataSource.report(q)}};D1=sX([O(),iX(0,$(Jq.SignReporterDatasource))],D1);var OQ=()=>new v(({bind:q})=>{q(Jq.SignReporterDatasource).to(B1),q(Jq.SignReporter).to(D1)});var{defineProperty:nX,getOwnPropertyDescriptor:aX}=Object,oX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?aX(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},R0=(q,Q)=>(J,W)=>Q(J,W,q),Uq=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"}};Uq=oX([O(),R0(0,$(b.Config)),R0(1,$(H.NetworkClient))],Uq);var f={TransactionCheckDataSource:Symbol.for("TransactionCheckDataSource"),TransactionCheckLoader:Symbol.for("TransactionCheckLoader"),TypedDataCheckLoader:Symbol.for("TypedDataCheckLoader")};var Oq=((q)=>(q.ETHEREUM_TRANSACTION="/ethereum/scan/tx",q.ETHEREUM_TYPED_DATA="/ethereum/scan/eip-712",q.SOLANA_TRANSACTION="/solana/scan/tx",q))(Oq||{});var{defineProperty:rX,getOwnPropertyDescriptor:tX}=Object,eX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?tX(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&&rX(Q,J,X),X},FQ=(q,Q)=>(J,W)=>Q(J,W,q),qY=[G.ETHEREUM_TRANSACTION_CHECK],P1=class{constructor(q,Q,J){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.logger=J("EthereumTransactionCheckLoader")}logger;canHandle(q,Q){return!qY.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!==k.NANO_S}async load(q){let{from:Q,chainId:J,transaction:W}=q,X=kq(W);if(!Q||!X)return this.logger.debug("load result",{data:{result:[]}}),[];let Y=[await(await this.transactionCheckDataSource.check({path:Oq.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:_.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}};P1=eX([O(),FQ(0,$(f.TransactionCheckDataSource)),FQ(1,$(D.PkiCertificateLoader)),FQ(2,$(b.ContextModuleLoggerFactory))],P1);var{defineProperty:QY,getOwnPropertyDescriptor:JY}=Object,WY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?JY(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},NQ=(q,Q)=>(J,W)=>Q(J,W,q),XY=[G.ETHEREUM_TRANSACTION_CHECK],U1=class{constructor(q,Q,J){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.logger=J("EthereumTypedDataCheckLoader")}logger;canHandle(q,Q){return!XY.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!==k.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:Oq.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:_.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}};U1=WY([O(),NQ(0,$(f.TransactionCheckDataSource)),NQ(1,$(D.PkiCertificateLoader)),NQ(2,$(b.ContextModuleLoggerFactory))],U1);var M0=()=>new v(({bind:q})=>{q(f.TransactionCheckDataSource).to(Uq),q(f.TransactionCheckLoader).to(P1),q(f.TypedDataCheckLoader).to(U1)});function YY(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),P=V.charCodeAt(0);if(Q[P]!==255)throw TypeError(V+" is ambiguous");Q[P]=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,P=0,R=0,w=F.length;while(R!==w&&F[R]===0)R++,V++;let I=(w-R)*Y+1>>>0,M=new Uint8Array(I);while(R!==w){let u=F[R],d=0;for(let e=I-1;(u!==0||d<P)&&e!==-1;e--,d++)u+=256*M[e]>>>0,M[e]=u%J>>>0,u=u/J>>>0;if(u!==0)throw Error("Non-zero carry");P=d,R++}let m=I-P;while(m!==I&&M[m]===0)m++;let C=W.repeat(V);for(;m<I;++m)C+=q.charAt(M[m]);return C}function N(F){if(typeof F!=="string")throw TypeError("Expected String");if(F.length===0)return new Uint8Array;let V=0,P=0,R=0;while(F[V]===W)P++,V++;let w=(F.length-V)*X+1>>>0,I=new Uint8Array(w);while(V<F.length){let u=F.charCodeAt(V);if(u>255)return;let d=Q[u];if(d===255)return;let e=0;for(let Sq=w-1;(d!==0||e<R)&&Sq!==-1;Sq--,e++)d+=J*I[Sq]>>>0,I[Sq]=d%256>>>0,d=d/256>>>0;if(d!==0)throw Error("Non-zero carry");R=e,V++}let M=w-R;while(M!==w&&I[M]===0)M++;let m=new Uint8Array(P+(w-M)),C=P;while(M!==w)m[C++]=I[M++];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 I0=YY;var ZY="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",bQ=I0(ZY);class zQ{static encode(q){return bQ.encode(q)}static decode(q){return bQ.decode(q)}}var g=w0([_q(k.NANO_X),_q(k.NANO_SP),_q(k.STAX),_q(k.FLEX),_q(k.APEX)]);var L0=U.custom({decode:(q)=>q instanceof Uint8Array?j(q):K("Expected a Uint8Array"),encode:(q)=>q});var{defineProperty:$Y,getOwnPropertyDescriptor:GY}=Object,VY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?GY(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&&$Y(Q,J,X),X},jQ=(q,Q)=>(J,W)=>Q(J,W,q),KY=[G.SOLANA_TRANSACTION_CHECK],OY=U.interface({deviceModelId:g,transactionCheck:U.interface({from:B,transactionBytes:L0,chain:Rq})}),_1=class{constructor(q,Q,J,W=zQ){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.bs58Encoder=W,this.logger=J("SolanaTransactionCheckLoader")}logger;canHandle(q,Q){return KY.every((J)=>Q.includes(J))?OY.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:Oq.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:_.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}};_1=VY([O(),jQ(0,$(f.TransactionCheckDataSource)),jQ(1,$(D.PkiCertificateLoader)),jQ(2,$(b.ContextModuleLoggerFactory))],_1);var E0=()=>new v(({bind:q})=>{q(f.TransactionCheckDataSource).to(Uq),q(f.TransactionCheckLoader).to(_1)});var FY=U.custom({decode:(q)=>typeof q=="string"&&q.length>0?j(q):K("Expected a non-empty string"),encode:(q)=>q}),R1=U.interface({signedDescriptor:FY,keyId:B,keyUsage:B});var k0=(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})},M1=k0(8),I1=k0(16);var{defineProperty:NY,getOwnPropertyDescriptor:bY}=Object,zY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?bY(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&&NY(Q,J,X),X},x0=(q,Q)=>(J,W)=>Q(J,W,q),w1=class{constructor(q,Q){this.config=q,this.http=Q}async getAltResolution({altAddress:q,entryIndex:Q,challenge:J}){let W=M1.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 R1.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})}})}};w1=zY([O(),x0(0,$(b.Config)),x0(1,$(H.NetworkClient))],w1);var Fq={AltResolutionDataSource:Symbol.for("AltResolutionDataSource"),AltResolutionContextLoader:Symbol.for("AltResolutionContextLoader")};function S0(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 Mq({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=S0(J,Q);return Promise.all(z.map(({request:V,either:P})=>P.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(I){let M=I instanceof Error?I:Error(String(I));return W.warn(`[load] ${X} certificate load failed`,{data:{...N(V),error:M.message}}),{type:G.ERROR,error:M}}if(!w){let I=Error(`[ContextModule] ${X}: certificate is missing`);return W.warn(`[load] ${X} certificate missing`,{data:N(V)}),{type:G.ERROR,error:I}}return Z(R,w)}})))}var{defineProperty:jY,getOwnPropertyDescriptor:vY}=Object,HY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?vY(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&&jY(Q,J,X),X},vQ=(q,Q)=>(J,W)=>Q(J,W,q),BY=[G.SOLANA_ALT_RESOLUTION],DY=U.interface({altAddress:B,entryIndex:M1,challenge:B}),PY=U.interface({deviceModelId:g,requests:S(DY)}),L1=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("AltResolutionContextLoader")}logger;canHandle(q,Q){return BY.every((J)=>Q.includes(J))?PY.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 Mq({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})})}};L1=HY([O(),vQ(0,$(Fq.AltResolutionDataSource)),vQ(1,$(D.PkiCertificateLoader)),vQ(2,$(b.ContextModuleLoggerFactory))],L1);var T0=()=>new v(({bind:q})=>{q(Fq.AltResolutionDataSource).to(w1),q(Fq.AltResolutionContextLoader).to(L1)});var E1={EnumVariantContextLoader:Symbol.for("EnumVariantContextLoader")};var l={InstructionInfoDataSource:Symbol.for("InstructionInfoDataSource"),InstructionInfoContextLoader:Symbol.for("InstructionInfoContextLoader"),SolanaBasicFlowRuleContextLoader:Symbol.for("SolanaBasicFlowRuleContextLoader")};function Iq(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:UY,getOwnPropertyDescriptor:_Y}=Object,RY=(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&&UY(Q,J,X),X},k1=(q,Q)=>(J,W)=>Q(J,W,q),MY=[G.SOLANA_ENUM_VARIANT],IY="solana-mainnet",wY=U.interface({programId:B,enumId:B,variantIndex:I1}),LY=U.interface({deviceModelId:g,selections:S(wY),network:E(B)}),x1=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this.certificateLoader=J,this.logger=W("EnumVariantContextLoader")}logger;canHandle(q,Q){return MY.every((J)=>Q.includes(J))?LY.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||IY,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=Iq(this.certificateLoader,{keyId:x.CalCalldataKey,keyUsage:_.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,P)=>[V,Z[P]])),F=this.config.cal.mode??"prod";return q.selections.map((V)=>{let P=z.get(V.programId);if(!P){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 P.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 M=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:M}}if(!w.descriptor.signature){let M=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:M}}let I={programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,descriptor:w.descriptor};return{type:G.SOLANA_ENUM_VARIANT,payload:I,certificate:N}}})})}lookupVariant(q,Q){return q.enumVariants.find((J)=>J.enumId===Q.enumId&&J.variantIndex===Q.variantIndex)}};x1=RY([O(),k1(0,$(l.InstructionInfoDataSource)),k1(1,$(b.Config)),k1(2,$(D.PkiCertificateLoader)),k1(3,$(b.ContextModuleLoggerFactory))],x1);var A0=()=>new v(({bind:q})=>{q(E1.EnumVariantContextLoader).to(x1)});var n=((q)=>(q[q.MAINNET=900]="MAINNET",q[q.DEVNET=901]="DEVNET",q[q.TESTNET=902]="TESTNET",q))(n||{});class Nq extends Error{programId;constructor(q,Q){super(Q),this.name="SolanaProgramNotFoundError",this.programId=q}}var EY=U.interface({prod:E(B),test:E(B)}),h0=U.interface({data:B,signatures:EY}),kY=U.interface({descriptor:h0}),S1=U.interface({descriptor:B}),f0=U.interface({signer:B,writable:B}),xY=U.interface({count_min:E(Rq),count_max:E(Rq),remaining_policy:E(f0),slots:E(S(f0))}),SY=U.interface({discriminator_hex:E(B),descriptor:h0,enum_variants:E(HQ(B,HQ(B,kY))),display_fields:E(S(S1)),value_flow_ports:E(S(S1)),hide_rules:E(S(S1)),account_resets:E(S(S1)),account_schema:E(xY)}),C0=U.interface({basic_flow:E(S(U.interface({rule:B,role:B})))}),y0=U.interface({id:B,chain_id:Rq,instructions:S(SY)});var bq=((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))(bq||{});function u0(q,Q){return q[Q]}function TY(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 AY(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 fY(q=[]){return q.map((Q)=>({rule_set_index:Q.rule_set_index,target:Q.target,condition:Q.condition}))}function hY(q){return q===void 0?[]:q.account_index===void 0||q.owner===void 0?[]:[{account_index:q.account_index,owner:q.owner}]}var g0=new Set(["FORBIDDEN","EITHER","REQUIRED"]);function m0(q){let Q=g0.has(q.signer)?q.signer:"EITHER",J=g0.has(q.writable)?q.writable:"EITHER";return{signer:Q,writable:J}}function CY(q){if(q!==void 0)return{count_min:q.count_min??0,count_max:q.count_max??255,remaining_policy:q.remaining_policy?m0(q.remaining_policy):{signer:"EITHER",writable:"EITHER"},slots:(q.slots??[]).map(m0)}}function yY(q=[]){return q.map((Q)=>({name:Q.name,param:Q.param??{type:""}}))}function gY(q){return[...(q.display_fields??[]).map((Q)=>({kind:bq.DISPLAY_FIELD,data:Q.descriptor})),...(q.value_flow_ports??[]).map((Q)=>({kind:bq.VALUE_FLOW_PORT,data:Q.descriptor})),...(q.hide_rules??[]).map((Q)=>({kind:bq.HIDE_RULE,data:Q.descriptor})),...(q.account_resets??[]).map((Q)=>({kind:bq.ACCOUNT_RESET,data:Q.descriptor}))]}function l0(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);I1.decode(N).isLeft()||J.push({enumId:W,variantIndex:N,descriptor:{data:Z.descriptor.data,signature:u0(Z.descriptor.signatures,Q)??""}})}return J}function p0(q,Q){return Object.values(q).flatMap((J)=>l0(J,Q))}function c0(q){return Object.entries(q).flatMap(([Q,J])=>Q===""||J.signing_route===void 0?[]:C0.decode(J.signing_route).caseOf({Left:()=>[],Right:({basic_flow:W=[]})=>W.flatMap(({rule:X,role:Y})=>X.length>0&&(Y==="required"||Y==="allowed")?[{discriminator:Q,rule:X,role:Y}]:[])}))}function d0(q,Q,J,W){let X=u0(J.descriptor.signatures,W);return X?j({programId:q,discriminator:Q,instructionName:J.instruction_name,instructionInfo:{data:J.descriptor.data,signature:X},substructures:gY(J),enumVariants:l0(J,W),idlDescriptor:{typePool:J.idl_descriptor?.type_pool??[],rootType:J.idl_descriptor?.root_type??0},mintAssociations:J.mint_association?[J.mint_association]:[],ownerAssociations:hY(J.owner_association),valueFlowPorts:TY(J.value_flow_ports),accountResets:AY(J.account_resets),displayFields:yY(J.display_fields),hideRules:fY(J.hide_rules),accountSchema:CY(J.account_schema)}):K(Error(`[ContextModule] InstructionInfoDataSource: missing '${W}' signature for (${q}, ${Q})`))}var{defineProperty:mY,getOwnPropertyDescriptor:uY}=Object,lY=(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},s0=(q,Q)=>(J,W)=>Q(J,W,q),pY={"solana-mainnet":n.MAINNET,"solana-devnet":n.DEVNET,"solana-testnet":n.TESTNET},cY=30000,dY=64,T1=class{constructor(q,Q){this.config=q,this.http=Q}cache=new Map;getInstructionInfo({programId:q,network:Q}){let J=pY[Q]??n.MAINNET,W=`${J}:${q}`,X=Date.now(),Y=this.cache.get(W);if(Y!==void 0&&Y.expiresAt>X)return Y.result;let Z=this.fetchInstructionInfo(q,J);if(this.cache.delete(W),this.cache.size>=dY){let N=this.cache.keys().next();N.done||this.cache.delete(N.value)}return this.cache.set(W,{expiresAt:X+cY,result:Z}),Z.then((N)=>{N.caseOf({Left:(z)=>z instanceof Nq,Right:()=>!0})||this.evict(W,Z)},()=>this.evict(W,Z)),Z}evict(q,Q){this.cache.get(q)?.result===Q&&this.cache.delete(q)}async fetchInstructionInfo(q,Q){let J;try{J=await this.http.get(`${this.config.cal.url}/solana_programs`,{params:{id:q,chain_id:Q,output:"id,chain_id,instructions",ref:`branch:${this.config.cal.branch}`}})}catch(X){let Y=X instanceof Error?X.message:String(X);return K(Error(`[ContextModule] HttpInstructionInfoDataSource: Failed to fetch instruction descriptors: ${Y}`))}if(!Array.isArray(J))return K(Error(`[ContextModule] HttpInstructionInfoDataSource: unexpected response for program ${q}`));if(J.length===0)return K(new Nq(q,`[ContextModule] HttpInstructionInfoDataSource: empty response for program ${q}`));let W=J.find((X)=>X!=null&&typeof X=="object"&&X.id===q);return W===void 0?K(new Nq(q,`[ContextModule] HttpInstructionInfoDataSource: no descriptors for program ${q}`)):y0.decode(W).caseOf({Left:(X)=>K(Error(`[ContextModule] HttpInstructionInfoDataSource: malformed descriptors for program ${q}: ${X}`)),Right:()=>{let X=this.config.cal.mode??"prod",Y=W.instructions,Z=Object.fromEntries(Y.map((z)=>[z.discriminator_hex??"",z])),N=Object.fromEntries(Object.entries(Z).map(([z,F])=>[z,d0(q,z,F,X)]));return j({programId:q,descriptors:N,enumVariants:p0(Z,X),basicFlowTags:c0(Z)})}})}};T1=lY([O(),s0(0,$(b.Config)),s0(1,$(H.NetworkClient))],T1);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},BQ=(q,Q)=>(J,W)=>Q(J,W,q),aY=[G.SOLANA_INSTRUCTION_INFO],oY="solana-mainnet",rY=U.interface({programId:B,discriminator:E(B)}),tY=U.interface({deviceModelId:g,instructions:S(rY),network:E(B)}),A1=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("InstructionInfoContextLoader")}logger;canHandle(q,Q){return aY.every((J)=>Q.includes(J))?tY.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||oY,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=Iq(this.certificateLoader,{keyId:x.CalCalldataKey,keyUsage:_.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:(P)=>{this.logger.warn("[load] Failed to fetch instruction descriptors for program",{data:{programId:F,error:P.message}}),z.push({type:G.ERROR,error:P})},Right:(P)=>{let R=this.collectWantedDiscriminators(F,q.instructions);for(let[w,I]of Object.entries(P.descriptors))R!==null&&!R.has(w)||z.push(I.caseOf({Left:(M)=>(this.logger.warn("[load] INSTRUCTION_INFO descriptor error",{data:{programId:F,discriminator:w,error:M.message}}),{type:G.ERROR,error:M}),Right:(M)=>({type:G.SOLANA_INSTRUCTION_INFO,payload:M,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}};A1=nY([O(),BQ(0,$(l.InstructionInfoDataSource)),BQ(1,$(D.PkiCertificateLoader)),BQ(2,$(b.ContextModuleLoggerFactory))],A1);var{defineProperty:eY,getOwnPropertyDescriptor:qZ}=Object,QZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?qZ(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&&eY(Q,J,X),X},i0=(q,Q)=>(J,W)=>Q(J,W,q),JZ="solana-mainnet",WZ=[G.SOLANA_BASIC_FLOW_RULE],XZ=U.interface({programIds:S(B),network:E(B)}),f1=class{constructor(q,Q){this.dataSource=q,this.logger=Q("SolanaBasicFlowRuleContextLoader")}logger;canHandle(q,Q){return WZ.every((J)=>Q.includes(J))?XZ.decode(q).isRight():!1}async load(q){return(await this.loadRules(q)).caseOf({Left:(Q)=>[{type:G.ERROR,error:Q}],Right:(Q)=>Q.map((J)=>({type:G.SOLANA_BASIC_FLOW_RULE,payload:J}))})}async loadRules({programIds:q,network:Q}){let J=Q||JZ,W=Array.from(new Set(q)),X=await Promise.all(W.map(async(F)=>({programId:F,either:await this.dataSource.getInstructionInfo({programId:F,network:J})}))),Y=[],Z=[];for(let{programId:F,either:V}of X)V.caseOf({Left:(P)=>{if(P instanceof Nq){this.logger.debug("[load] Program not in CAL, no signing route",{data:{programId:F}});return}this.logger.warn("[load] Failed to fetch signing routes from CAL",{data:{programId:F,error:P.message}}),Z.push(P)},Right:(P)=>{Y.push(P)}});let[N]=Z;if(N!==void 0)return K(N);let z=this.buildRules(Y);return this.logger.debug("[load] Built basic-flow rules",{data:{rules:z.map(({id:F})=>F)}}),j(z)}buildRules(q){let Q=new Map;for(let{programId:J,basicFlowTags:W}of q)for(let{discriminator:X,rule:Y,role:Z}of W){let N=Pq(X);if(N===null||N.length===0){this.logger.warn("[load] Skipping tag with invalid discriminator",{data:{programId:J,discriminator:X,rule:Y}});continue}let z=Q.get(Y);z===void 0&&(z={required:new Map,allowed:new Map},Q.set(Y,z));let F=z[Z].get(J)??[];F.push(N),z[Z].set(J,F)}return Array.from(Q,([J,W])=>({id:J,required:n0(W.required),allowed:n0(W.allowed)}))}};f1=QZ([O(),i0(0,$(l.InstructionInfoDataSource)),i0(1,$(b.ContextModuleLoggerFactory))],f1);function n0(q){return Array.from(q,([Q,J])=>({programId:Q,discriminators:J}))}var a0=()=>new v(({bind:q})=>{q(l.InstructionInfoDataSource).to(T1).inSingletonScope(),q(l.InstructionInfoContextLoader).to(A1),q(l.SolanaBasicFlowRuleContextLoader).to(f1)});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},DQ=(q,Q)=>(J,W)=>Q(J,W,q),h1=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"))}}};h1=$Z([O(),DQ(0,$(b.Config)),DQ(1,$(b.ContextModuleLoggerFactory)),DQ(2,$(H.NetworkClient))],h1);var zq={LifiDataSource:Symbol.for("LifiDataSource"),LifiContextLoader:Symbol.for("LifiContextLoader")};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},C1=(q,Q)=>(J,W)=>Q(J,W,q),OZ=[G.SOLANA_LIFI],y1=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this._certificateLoader=J,this.logger=W("LifiContextLoader")}logger;canHandle(q,Q){if(!OZ.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:x.SwapTemplateKey,keyUsage:_.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}};y1=KZ([O(),C1(0,$(zq.LifiDataSource)),C1(1,$(b.Config)),C1(2,$(D.PkiCertificateLoader)),C1(3,$(b.ContextModuleLoggerFactory))],y1);var o0=()=>new v(({bind:q})=>{q(zq.LifiDataSource).to(h1),q(zq.LifiContextLoader).to(y1)});var{defineProperty:FZ,getOwnPropertyDescriptor:NZ}=Object,bZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?NZ(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},r0=(q,Q)=>(J,W)=>Q(J,W,q),g1=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=Pq(Y.signedDescriptor);return Z?j({tlvDescriptor:Z}):K(Error("[ContextModule] - HttpOwnerInfoDataSource: invalid base64 tlvDescriptor received"))})}};g1=bZ([O(),r0(0,$(b.Config)),r0(1,$(H.NetworkClient))],g1);var jq={OwnerInfoDataSource:Symbol.for("OwnerInfoDataSource"),OwnerInfoContextLoader:Symbol.for("OwnerInfoContextLoader")};var{defineProperty:zZ,getOwnPropertyDescriptor:jZ}=Object,vZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?jZ(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&&zZ(Q,J,X),X},PQ=(q,Q)=>(J,W)=>Q(J,W,q),HZ=[G.SOLANA_BASIC_TRUSTED_NAME],m1=class{constructor(q,Q,J){this._dataSource=q,this._certificateLoader=Q,this.logger=J("OwnerInfoContextLoader")}logger;canHandle(q,Q){if(!HZ.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:_.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")}]}};m1=vZ([O(),PQ(0,$(jq.OwnerInfoDataSource)),PQ(1,$(D.PkiCertificateLoader)),PQ(2,$(b.ContextModuleLoggerFactory))],m1);var t0=()=>new v(({bind:q})=>{q(jq.OwnerInfoDataSource).to(g1),q(jq.OwnerInfoContextLoader).to(m1)});var{defineProperty:BZ,getOwnPropertyDescriptor:DZ}=Object,PZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?DZ(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&&BZ(Q,J,X),X},e0=(q,Q)=>(J,W)=>Q(J,W,q),u1=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"))}}};u1=PZ([O(),e0(0,$(b.Config)),e0(1,$(H.NetworkClient))],u1);var{defineProperty:UZ,getOwnPropertyDescriptor:_Z}=Object,RZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?_Z(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&&UZ(Q,J,X),X},qJ=(q,Q)=>(J,W)=>Q(J,W,q),l1=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"))}}};l1=RZ([O(),qJ(0,$(b.Config)),qJ(1,$(H.NetworkClient))],l1);var t={TokenDataSource:Symbol.for("TokenDataSource"),MintToIdDataSource:Symbol.for("MintToIdDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader")};var{defineProperty:MZ,getOwnPropertyDescriptor:IZ}=Object,wZ=(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&&MZ(Q,J,X),X},xq=(q,Q)=>(J,W)=>Q(J,W,q),LZ=[G.SOLANA_TOKEN],p1=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(!LZ.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:x.TokenMetadataKey,keyUsage:_.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]}}}};p1=wZ([O(),xq(0,$(t.TokenDataSource)),xq(1,$(t.MintToIdDataSource)),xq(2,$(b.Config)),xq(3,$(D.PkiCertificateLoader)),xq(4,$(b.ContextModuleLoggerFactory))],p1);var QJ=()=>new v(({bind:q})=>{q(t.TokenDataSource).to(l1),q(t.MintToIdDataSource).to(u1),q(t.TokenContextLoader).to(p1)});var{defineProperty:EZ,getOwnPropertyDescriptor:kZ}=Object,xZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?kZ(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&&EZ(Q,J,X),X},UQ=(q,Q)=>(J,W)=>Q(J,W,q),c1=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 R1.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})}})}};c1=xZ([O(),UQ(0,$(b.Config)),UQ(1,$(b.ContextModuleLoggerFactory)),UQ(2,$(H.NetworkClient))],c1);var vq={TokenAccountStateDataSource:Symbol.for("TokenAccountStateDataSource"),TokenAccountStateContextLoader:Symbol.for("TokenAccountStateContextLoader")};var{defineProperty:SZ,getOwnPropertyDescriptor:TZ}=Object,AZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?TZ(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&&SZ(Q,J,X),X},_Q=(q,Q)=>(J,W)=>Q(J,W,q),fZ=[G.SOLANA_TOKEN_ACCOUNT_STATE],hZ=U.interface({tokenAccount:B,challenge:B}),CZ=U.interface({deviceModelId:g,requests:S(hZ)}),d1=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("TokenAccountStateContextLoader")}logger;canHandle(q,Q){return fZ.every((J)=>Q.includes(J))?CZ.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 Mq({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})})}};d1=AZ([O(),_Q(0,$(vq.TokenAccountStateDataSource)),_Q(1,$(D.PkiCertificateLoader)),_Q(2,$(b.ContextModuleLoggerFactory))],d1);var JJ=()=>new v(({bind:q})=>{q(vq.TokenAccountStateDataSource).to(c1),q(vq.TokenAccountStateContextLoader).to(d1)});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},WJ=(q,Q)=>(J,W)=>Q(J,W,q),uZ=U.interface({prod:E(B),test:E(B)}),lZ={"solana-mainnet":"solana","solana-devnet":"solana-devnet"},pZ=U.interface({descriptor:U.interface({data:B,signatures:uZ})}),s1=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:lZ[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}`)):pZ.decode(J[0]).caseOf({Left:(W)=>K(Error(`[ContextModule] HttpTokenInfoDataSource: malformed descriptor for mint ${q}: ${W}`)),Right:(W)=>j({mint:q,descriptor:W.descriptor})})}};s1=mZ([O(),WJ(0,$(b.Config)),WJ(1,$(H.NetworkClient))],s1);var Hq={TokenInfoDataSource:Symbol.for("TokenInfoDataSource"),TokenInfoContextLoader:Symbol.for("TokenInfoContextLoader")};var{defineProperty:cZ,getOwnPropertyDescriptor:dZ}=Object,sZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?dZ(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&&cZ(Q,J,X),X},i1=(q,Q)=>(J,W)=>Q(J,W,q),iZ=[G.SOLANA_TOKEN_INFO],nZ="solana-mainnet",aZ=U.interface({deviceModelId:g,mints:S(B),network:E(B)}),n1=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this.certificateLoader=J,this.logger=W("TokenInfoContextLoader")}logger;canHandle(q,Q){return iZ.every((J)=>Q.includes(J))?aZ.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||nZ,J=Array.from(new Set(q.mints));this.logger.debug("[load] Fetching TOKEN_INFO descriptors",{data:{network:Q,mintCount:J.length}});let W=Iq(this.certificateLoader,{keyId:x.TokenMetadataKey,keyUsage:_.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:(P)=>(this.logger.warn("[load] TOKEN_INFO fetch failed",{data:{mint:F,error:P.message}}),{type:G.ERROR,error:P}),Right:(P)=>{let R=P.descriptor.signatures[z];if(!R){let I=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:I}}let w={mint:F,descriptor:{data:P.descriptor.data,signature:R}};return{type:G.SOLANA_TOKEN_INFO,payload:w,certificate:N}}}))}};n1=sZ([O(),i1(0,$(Hq.TokenInfoDataSource)),i1(1,$(b.Config)),i1(2,$(D.PkiCertificateLoader)),i1(3,$(b.ContextModuleLoggerFactory))],n1);var XJ=()=>new v(({bind:q})=>{q(Hq.TokenInfoDataSource).to(s1),q(Hq.TokenInfoContextLoader).to(n1)});var{defineProperty:oZ,getOwnPropertyDescriptor:rZ}=Object,tZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?rZ(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&&oZ(Q,J,X),X},YJ=(q,Q)=>(J,W)=>Q(J,W,q),eZ=U.interface({signedDescriptor:U.interface({data:B,signatures:U.interface({prod:E(B),test:E(B)})}),keyId:B,keyUsage:B}),a1=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 eZ.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,Yq))}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})}})}};a1=tZ([O(),YJ(0,$(b.Config)),YJ(1,$(H.NetworkClient))],a1);var Bq={SolanaTrustedNameDataSource:Symbol.for("SolanaTrustedNameDataSource"),SolanaTrustedNameContextLoader:Symbol.for("SolanaTrustedNameContextLoader")};var{defineProperty:q8,getOwnPropertyDescriptor:Q8}=Object,J8=(q,Q,J,W)=>{for(var X=W>1?void 0:W?Q8(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&&q8(Q,J,X),X},RQ=(q,Q)=>(J,W)=>Q(J,W,q),W8=[G.SOLANA_TRUSTED_NAME],X8={"solana-mainnet":n.MAINNET,"solana-devnet":n.DEVNET,"solana-testnet":n.TESTNET},ZJ=n.MAINNET,Y8=U.interface({address:B,challenge:B,types:S(B),sources:S(B)}),Z8=U.interface({deviceModelId:g,network:E(B),requests:S(Y8)}),o1=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("SolanaTrustedNameContextLoader")}logger;canHandle(q,Q){return W8.every((J)=>Q.includes(J))?Z8.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?X8[q.network]??ZJ:ZJ,J=String(Q);return Mq({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})})}};o1=J8([O(),RQ(0,$(Bq.SolanaTrustedNameDataSource)),RQ(1,$(D.PkiCertificateLoader)),RQ(2,$(b.ContextModuleLoggerFactory))],o1);var $J=()=>new v(({bind:q})=>{q(Bq.SolanaTrustedNameDataSource).to(a1),q(Bq.SolanaTrustedNameContextLoader).to(o1)});var GJ=S(U.interface({descriptor:U.interface({signatures:U.interface({prod:B,test:B})})}));var{defineProperty:$8,getOwnPropertyDescriptor:G8}=Object,V8=(q,Q,J,W)=>{for(var X=W>1?void 0:W?G8(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&&$8(Q,J,X),X},VJ=(q,Q)=>(J,W)=>Q(J,W,q),r1=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 GJ.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"))}}};r1=V8([O(),VJ(0,$(b.Config)),VJ(1,$(H.NetworkClient))],r1);var Dq={TokenDataSource:Symbol.for("TokenDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader")};function MQ(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 KJ(q,Q){let J=MQ(q,Q);if(J===void 0)return;let W=Math.floor(J.value/8),X=J.value%8;switch(X){case 0:{let Y=MQ(q,J.next);return Y===void 0?void 0:{fieldNumber:W,wireType:X,value:Y.value,next:Y.next}}case 2:{let Y=MQ(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 t1(q,Q){let J=0;for(;J<q.length;){let W=KJ(q,J);if(W===void 0)return;if(W.fieldNumber===Q&&W.data!==void 0)return W.data;J=W.next}}function K8(q,Q){let J=0;for(;J<q.length;){let W=KJ(q,J);if(W===void 0)return;if(W.fieldNumber===Q&&W.wireType===0)return W.value;J=W.next}}function OJ(q){let Q=t1(q,11);if(Q===void 0||K8(Q,1)!==2)return;let J=t1(Q,2);if(J===void 0)return;let W=t1(J,2);if(W===void 0)return;let X=t1(W,1);if(!(X===void 0||X.length===0||!X.every((Y)=>Y>=48&&Y<=57)))return String.fromCharCode(...X)}var{defineProperty:O8,getOwnPropertyDescriptor:F8}=Object,N8=(q,Q,J,W)=>{for(var X=W>1?void 0:W?F8(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&&O8(Q,J,X),X},b8=(q,Q)=>(J,W)=>Q(J,W,q),z8=[G.TRON_TOKEN],e1=class{constructor(q){this.dataSource=q}canHandle(q,Q){return z8.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=OJ(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}]})}};e1=N8([O(),b8(0,$(Dq.TokenDataSource))],e1);var FJ=()=>new v(({bind:q})=>{q(Dq.TokenDataSource).to(r1),q(Dq.TokenContextLoader).to(e1)});var p=((q)=>(q.Ethereum="ethereum",q.Solana="solana",q.Concordium="concordium",q.Tron="tron",q))(p||{});var NJ=(q)=>new v(({bind:Q})=>{Q(H.NetworkClient).toConstantValue(qq(q))});var zJ=({config:q})=>{let Q=new bJ;Q.bind(b.ContextModuleLoggerFactory).toConstantValue(q.loggerFactory);let{chain:J}=q;switch(Q.loadSync(wQ(q),NJ(q)),J){case p.Ethereum:Q.loadSync(j1(),_0(),OQ(),V0(q.customTrustedNameDataSource),fQ(),TQ(),cQ(),nQ(q.datasource),rQ(),gQ(),J0(),xQ(),F0(),D0(),M0());break;case p.Solana:Q.loadSync(j1(),OQ(),t0(),QJ(),o0(),E0(),a0(),A0(),XJ(),JJ(),T0(),$J());break;case p.Concordium:Q.loadSync(j1(),kQ());break;case p.Tron:Q.loadSync(FJ());break;default:{let W=J}}return Q};class IQ{_container;_config;_loaders;_typedDataLoader;_fieldLoaders;_blindSigningReporter;_signReporter;constructor(q){this._config=q,this._container=zJ({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=this._getSignReporter()}_getDefaultFieldLoaders(){return this._config.chain!==p.Ethereum?[]:[this._container.get(i.NftContextFieldLoader),this._container.get(A.TokenContextFieldLoader),this._container.get(c.TrustedNameContextFieldLoader),this._container.get(h.ProxyContextFieldLoader)]}_getDefaultLoaders(){let{chain:q}=this._config;switch(q){case p.Ethereum:return[this._container.get($q.ExternalPluginContextLoader),this._container.get(c.TrustedNameContextLoader),this._container.get(i.NftContextLoader),this._container.get(A.TokenContextLoader),this._container.get(r.CalldataContextLoader),this._container.get(Zq.DynamicNetworkContextLoader),this._container.get(Gq.SafeAddressLoader),this._container.get(s.GatedSigningContextLoader),this._container.get(s.GatedSigningTypedDataContextLoader),this._container.get(f.TransactionCheckLoader),this._container.get(f.TypedDataCheckLoader)];case p.Solana:return[this._container.get(t.TokenContextLoader),this._container.get(zq.LifiContextLoader),this._container.get(jq.OwnerInfoContextLoader),this._container.get(f.TransactionCheckLoader),this._container.get(l.InstructionInfoContextLoader),this._container.get(E1.EnumVariantContextLoader),this._container.get(Hq.TokenInfoContextLoader),this._container.get(vq.TokenAccountStateContextLoader),this._container.get(Fq.AltResolutionContextLoader),this._container.get(Bq.SolanaTrustedNameContextLoader),this._container.get(l.SolanaBasicFlowRuleContextLoader)];case p.Concordium:return[this._container.get(Xq.AccountOwnershipContextLoader)];case p.Tron:return[this._container.get(Dq.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(Kq.TypedDataContextLoader)}_getBlindSigningReporter(){return this._container.isBound(Qq.BlindSigningReporter)?this._container.get(Qq.BlindSigningReporter):null}_getSignReporter(){return this._container.isBound(Jq.SignReporter)?this._container.get(Jq.SignReporter):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 j8="https://global.api.prd.ledger.com/cal/v1",v8="https://global.api.prd.ledger.com/transaction-checks/v3",H8="https://nft.api.live.ledger.com",B8="https://blind-signing.api.ledger.com/ingest",D8=Object.freeze({cal:Object.freeze({url:j8,mode:"prod",branch:"main"}),web3checks:Object.freeze({url:v8}),metadataServiceDomain:Object.freeze({url:H8}),reporter:Object.freeze({url:B8}),datasource:Object.freeze({proxy:"default"}),appSource:"third-party"}),P8={defaultLoaders:!0,defaultFieldLoaders:!0,customLoaders:[],customFieldLoaders:[],customTypedDataLoader:void 0,customBlindSigningReporter:void 0,customTrustedNameDataSource:void 0};class U8{config;constructor({originToken:q,loggerFactory:Q}){this.config={...D8,...P8,customLoaders:[],customFieldLoaders:[],originToken:q??"",loggerFactory:Q??jJ}}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 IQ(this.config)}}var bb=Object.freeze({ETH_SIGN_TRANSACTION:"eth_signTransaction",ETH_SIGN_TYPED_DATA:"eth_signTypedData"}),zb=Object.freeze({NO_CLEAR_SIGNING_CONTEXT:"no_clear_signing_context",DEVICE_REJECTED_CONTEXT:"device_rejected_context",UNRECOGNIZED_PROGRAM:"unrecognized_program",STALE_DESCRIPTOR:"stale_descriptor"}),jb=Object.freeze({BASIC:"basic",EIP7730:"eip7730"}),vb=Object.freeze({DESKTOP:"desktop",MOBILE:"mobile"});var Bb=Object.freeze({ETH_SIGN_TRANSACTION:"eth_signTransaction",ETH_SIGN_TYPED_DATA:"eth_signTypedData",SOL_SIGN_TRANSACTION:"sol_signTransaction"});var _8={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},R8=new Set(Object.values(_8));function _b(q){return R8.has(q.type)}var wq=Object.freeze({NANO_S:"nanoS",NANO_SP:"nanoSP",NANO_X:"nanoX",STAX:"stax",FLEX:"flex",APEX_P:"apexP"}),M8={[k.NANO_S]:wq.NANO_S,[k.NANO_SP]:wq.NANO_SP,[k.NANO_X]:wq.NANO_X,[k.STAX]:wq.STAX,[k.FLEX]:wq.FLEX,[k.APEX]:wq.APEX_P};function Ib(q){return M8[q]}var I8=((q)=>(q.FROM="FROM",q.TO="TO",q.VALUE="VALUE",q))(I8||{}),w8=((q)=>(q.TUPLE="TUPLE",q.ARRAY="ARRAY",q.REF="REF",q.LEAF="LEAF",q.SLICE="SLICE",q))(w8||{}),L8=((q)=>(q.STATIC_LEAF="STATIC_LEAF",q.DYNAMIC_LEAF="DYNAMIC_LEAF",q.TUPLE_LEAF="TUPLE_LEAF",q.ARRAY_LEAF="ARRAY_LEAF",q))(L8||{});export{Wq as a,Tq as b,G as c,Aq as d,o as e,RJ as f,MJ as g,X2 as h,x as i,_ as j,Lq as k,hq as l,Cq as m,uJ as n,gq as o,mq as p,lq as q,pq as r,dq as s,sq as t,nq as u,aq as v,oq as w,rq as x,tq as y,eq as z,q1 as A,W1 as B,X1 as C,Q0 as D,Y1 as E,Z1 as F,$1 as G,G1 as H,K0 as I,Vq as J,V1 as K,K1 as L,O1 as M,F1 as N,N1 as O,b1 as P,z1 as Q,v1 as R,H1 as S,Oq as T,w1 as U,L1 as V,x1 as W,n as X,Nq as Y,bq as Z,T1 as _,A1 as $,f1 as aa,g1 as ba,m1 as ca,c1 as da,d1 as ea,s1 as fa,n1 as ga,a1 as ha,o1 as ia,p as ja,IQ as ka,D8 as la,U8 as ma,bb as na,zb as oa,jb as pa,vb as qa,Bb as ra,_8 as sa,R8 as ta,_b as ua,wq as va,Ib as wa,I8 as xa,w8 as ya,L8 as za};
2
+
3
+ //# debugId=0E263286998E186C64756E2164756E21
4
+ //# sourceMappingURL=chunk-p9mwkgye.js.map