@swapkit/wallet-hardware 5.0.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/THIRD_PARTY_LICENSES.md +2344 -0
- package/dist/chunk-09e51wma.js +4 -0
- package/dist/chunk-09e51wma.js.map +167 -0
- package/dist/chunk-0arpsm5f.js +4 -0
- package/dist/chunk-0arpsm5f.js.map +10 -0
- package/dist/chunk-1amf58aq.js +4 -0
- package/dist/{chunk-vwv6z2mk.js.map → chunk-1amf58aq.js.map} +2 -2
- package/dist/chunk-3t17wpjg.js +17 -0
- package/dist/chunk-3t17wpjg.js.map +29 -0
- package/dist/chunk-5c7b7z2d.js +4 -0
- package/dist/{chunk-9gy0xve4.js.map → chunk-5c7b7z2d.js.map} +2 -2
- package/dist/chunk-5p3ttw6y.js +4 -0
- package/dist/{chunk-n05bv2n5.js.map → chunk-5p3ttw6y.js.map} +1 -1
- package/dist/chunk-dptbnkzm.js +64 -0
- package/dist/chunk-dptbnkzm.js.map +260 -0
- package/dist/chunk-ds2m83jp.js +5 -0
- package/dist/chunk-ds2m83jp.js.map +11 -0
- package/dist/chunk-eenx3cv6.js +4 -0
- package/dist/chunk-eenx3cv6.js.map +33 -0
- package/dist/chunk-gr3eswf1.js +4 -0
- package/dist/chunk-gr3eswf1.js.map +73 -0
- package/dist/{chunk-7fsaymh4.js → chunk-hg71hp4m.js} +3 -3
- package/dist/{chunk-7fsaymh4.js.map → chunk-hg71hp4m.js.map} +1 -1
- package/dist/chunk-jewm2ag3.js +5 -0
- package/dist/chunk-jewm2ag3.js.map +10 -0
- package/dist/chunk-jzrytcrf.js +4 -0
- package/dist/chunk-jzrytcrf.js.map +12 -0
- package/dist/chunk-k3thje6a.js +4 -0
- package/dist/chunk-k3thje6a.js.map +9 -0
- package/dist/chunk-nhva847d.js +5 -0
- package/dist/chunk-nhva847d.js.map +9 -0
- package/dist/chunk-tm47brht.js +4 -0
- package/dist/chunk-tm47brht.js.map +140 -0
- package/dist/chunk-xmvg4cds.js +4 -0
- package/dist/chunk-xmvg4cds.js.map +127 -0
- package/dist/chunk-xx7cwpzq.js +4 -0
- package/dist/chunk-xx7cwpzq.js.map +9 -0
- package/dist/chunk-yrxe491r.js +20 -0
- package/dist/chunk-yrxe491r.js.map +17 -0
- package/dist/index.cjs +2 -2
- package/dist/index.cjs.map +1 -1
- package/dist/keepkey/index.cjs +2 -2
- package/dist/keepkey/index.cjs.map +2 -2
- package/dist/keepkey/index.js +2 -2
- package/dist/keepkey/index.js.map +2 -2
- package/dist/ledger/index.cjs +90 -2
- package/dist/ledger/index.cjs.map +830 -23
- package/dist/ledger/index.js +2 -2
- package/dist/ledger/index.js.map +21 -19
- package/dist/trezor/index.cjs +2 -2
- package/dist/trezor/index.cjs.map +5 -4
- package/dist/trezor/index.js +2 -2
- package/dist/trezor/index.js.map +3 -3
- package/dist/types/helpers/psbt.d.ts +9 -0
- package/dist/types/helpers/psbt.d.ts.map +1 -0
- package/dist/types/ledger/clients/bitcoin.d.ts +36 -0
- package/dist/types/ledger/clients/bitcoin.d.ts.map +1 -0
- package/dist/types/ledger/clients/cosmos.d.ts +38 -10
- package/dist/types/ledger/clients/cosmos.d.ts.map +1 -1
- package/dist/types/ledger/clients/evm.d.ts +37 -46
- package/dist/types/ledger/clients/evm.d.ts.map +1 -1
- package/dist/types/ledger/clients/near.d.ts +5 -2
- package/dist/types/ledger/clients/near.d.ts.map +1 -1
- package/dist/types/ledger/clients/sui.d.ts +8 -12
- package/dist/types/ledger/clients/sui.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/index.d.ts +34 -8
- package/dist/types/ledger/clients/thorchain/index.d.ts.map +1 -1
- package/dist/types/ledger/clients/thorchain/protocol.d.ts +58 -0
- package/dist/types/ledger/clients/thorchain/protocol.d.ts.map +1 -0
- package/dist/types/ledger/clients/tron.d.ts +11 -8
- package/dist/types/ledger/clients/tron.d.ts.map +1 -1
- package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts +3 -2
- package/dist/types/ledger/clients/utxo-legacy-adapter.d.ts.map +1 -1
- package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts +18 -0
- package/dist/types/ledger/clients/utxo-legacy-outputs.d.ts.map +1 -0
- package/dist/types/ledger/clients/utxo.d.ts +10 -13
- package/dist/types/ledger/clients/utxo.d.ts.map +1 -1
- package/dist/types/ledger/clients/xrp.d.ts +4 -1
- package/dist/types/ledger/clients/xrp.d.ts.map +1 -1
- package/dist/types/ledger/clients/zcash.d.ts +53 -0
- package/dist/types/ledger/clients/zcash.d.ts.map +1 -0
- package/dist/types/ledger/helpers/dmk.d.ts +24 -0
- package/dist/types/ledger/helpers/dmk.d.ts.map +1 -0
- package/dist/types/ledger/helpers/executeDeviceAction.d.ts +34 -0
- package/dist/types/ledger/helpers/executeDeviceAction.d.ts.map +1 -0
- package/dist/types/ledger/helpers/getLedgerAddress.d.ts +1 -1
- package/dist/types/ledger/helpers/getLedgerAddress.d.ts.map +1 -1
- package/dist/types/ledger/helpers/getLedgerClient.d.ts +10 -3
- package/dist/types/ledger/helpers/getLedgerClient.d.ts.map +1 -1
- package/dist/types/ledger/helpers/index.d.ts +2 -1
- package/dist/types/ledger/helpers/index.d.ts.map +1 -1
- package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts +26 -0
- package/dist/types/ledger/helpers/ledgerJsDmkBridge.d.ts.map +1 -0
- package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts +13 -0
- package/dist/types/ledger/helpers/ledgerJsDmkTransport.d.ts.map +1 -0
- package/dist/types/ledger/helpers/lowS.d.ts +6 -0
- package/dist/types/ledger/helpers/lowS.d.ts.map +1 -0
- package/dist/types/ledger/helpers/rawTx.d.ts +2 -0
- package/dist/types/ledger/helpers/rawTx.d.ts.map +1 -0
- package/dist/types/ledger/index.d.ts +19 -7
- package/dist/types/ledger/index.d.ts.map +1 -1
- package/dist/types/ledger/types.d.ts +6 -10
- package/dist/types/ledger/types.d.ts.map +1 -1
- package/dist/types/trezor/index.d.ts +2 -2
- package/dist/types/trezor/index.d.ts.map +1 -1
- package/package.json +36 -36
- package/src/helpers/psbt.ts +26 -0
- package/src/ledger/clients/bitcoin.ts +575 -0
- package/src/ledger/clients/cosmos.ts +180 -51
- package/src/ledger/clients/evm.ts +238 -195
- package/src/ledger/clients/near.ts +43 -13
- package/src/ledger/clients/sui.ts +55 -68
- package/src/ledger/clients/thorchain/index.ts +210 -86
- package/src/ledger/clients/thorchain/protocol.ts +166 -0
- package/src/ledger/clients/tron.ts +49 -37
- package/src/ledger/clients/utxo-legacy-adapter.ts +35 -32
- package/src/ledger/clients/utxo-legacy-outputs.ts +122 -0
- package/src/ledger/clients/utxo.ts +108 -206
- package/src/ledger/clients/xrp.ts +39 -23
- package/src/ledger/clients/zcash.ts +440 -0
- package/src/ledger/helpers/dmk.ts +231 -0
- package/src/ledger/helpers/executeDeviceAction.ts +201 -0
- package/src/ledger/helpers/getLedgerClient.ts +101 -72
- package/src/ledger/helpers/index.ts +6 -1
- package/src/ledger/helpers/ledgerJsDmkBridge.ts +109 -0
- package/src/ledger/helpers/ledgerJsDmkTransport.ts +88 -0
- package/src/ledger/helpers/lowS.ts +30 -0
- package/src/ledger/helpers/rawTx.ts +12 -0
- package/src/ledger/index.ts +564 -369
- package/src/ledger/types.ts +15 -10
- package/src/trezor/index.ts +117 -25
- package/dist/chunk-3yr76n9s.js +0 -5
- package/dist/chunk-3yr76n9s.js.map +0 -10
- package/dist/chunk-9gy0xve4.js +0 -4
- package/dist/chunk-bwf31zxr.js +0 -4
- package/dist/chunk-bwf31zxr.js.map +0 -10
- package/dist/chunk-egtwbe6q.js +0 -4
- package/dist/chunk-egtwbe6q.js.map +0 -10
- package/dist/chunk-n05bv2n5.js +0 -5
- package/dist/chunk-vwv6z2mk.js +0 -4
- package/dist/types/ledger/clients/thorchain/common.d.ts +0 -28
- package/dist/types/ledger/clients/thorchain/common.d.ts.map +0 -1
- package/dist/types/ledger/clients/thorchain/helpers.d.ts +0 -7
- package/dist/types/ledger/clients/thorchain/helpers.d.ts.map +0 -1
- package/dist/types/ledger/clients/thorchain/lib.d.ts +0 -22
- package/dist/types/ledger/clients/thorchain/lib.d.ts.map +0 -1
- package/dist/types/ledger/clients/thorchain/utils.d.ts +0 -2
- package/dist/types/ledger/clients/thorchain/utils.d.ts.map +0 -1
- package/dist/types/ledger/clients/utxo-psbt.d.ts +0 -18
- package/dist/types/ledger/clients/utxo-psbt.d.ts.map +0 -1
- package/dist/types/ledger/cosmosTypes.d.ts +0 -40
- package/dist/types/ledger/cosmosTypes.d.ts.map +0 -1
- package/dist/types/ledger/helpers/getLedgerTransport.d.ts +0 -3
- package/dist/types/ledger/helpers/getLedgerTransport.d.ts.map +0 -1
- package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts +0 -14
- package/dist/types/ledger/helpers/ledgerNetworkInfo.d.ts.map +0 -1
- package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts +0 -14
- package/dist/types/ledger/interfaces/CosmosLedgerInterface.d.ts.map +0 -1
- package/src/ledger/clients/thorchain/common.ts +0 -93
- package/src/ledger/clients/thorchain/helpers.ts +0 -120
- package/src/ledger/clients/thorchain/lib.ts +0 -258
- package/src/ledger/clients/thorchain/utils.ts +0 -69
- package/src/ledger/clients/utxo-psbt.ts +0 -172
- package/src/ledger/cosmosTypes.ts +0 -98
- package/src/ledger/helpers/getLedgerTransport.ts +0 -102
- package/src/ledger/helpers/ledgerNetworkInfo.ts +0 -127
- package/src/ledger/interfaces/CosmosLedgerInterface.ts +0 -67
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{Aa as tX}from"./chunk-yrxe491r.js";import{Jb as ZJ,Kd as XW,La as z2,Lb as vW,Na as L,Nb as K,Oa as bQ,Ob as j,Pa as wq,Pb as U,Qb as D,Rb as Pq,Sb as E,Tb as IW,Ub as x,Vb as jJ,Wb as Dq,Xb as QJ,Yb as qJ,jd as $,kd as O,lc as KX,ld as v,md as GX,vb as S}from"./chunk-dptbnkzm.js";import{Wd as fJ}from"./chunk-nhva847d.js";var cz=fJ(z2(),1);var b={Config:Symbol.for("config"),OriginToken:Symbol.for("originToken"),ContextModuleLoggerFactory:Symbol.for("contextModuleLoggerFactory")};var IJ=(q)=>new v(({bind:Q})=>{Q(b.Config).toConstantValue(q)});class Jq extends Error{kind;constructor(q,Q){super(Q),this.name="AccountOwnershipError",this.kind=q}}var B={NetworkClient:Symbol.for("networkClient")};var{defineProperty:OX,getOwnPropertyDescriptor:FX}=Object,bX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?FX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&OX(Q,J,X),X},MJ=(q,Q)=>(J,W)=>Q(J,W,q),kq=class{constructor(q,Q){this.config=q,this.http=Q}async getDescriptor({publicKey:q,address:Q,challenge:J,network:W}){try{let X=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${q}/${Q}`,{params:{challenge:J,network:W}});return X?this.isAccountOwnershipDto(X)?j({signedDescriptor:X.signedDescriptor,keyId:X.keyId,keyUsage:X.keyUsage}):K(new Jq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):K(new Jq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(X){return K(this.classifyError(X))}}classifyError(q){if(this.hasNumericStatus(q)){let Q=q.status,J=this.extractErrorMessage(q);return this.classifyFromStatus(Q,J)}return new Jq("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}classifyFromStatus(q,Q){return q>=400&&q<500?new Jq("verification_failed",Q):new Jq("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${q}: ${Q}`)}hasNumericStatus(q){return typeof q=="object"&&q!==null&&"status"in q&&typeof q.status=="number"}extractErrorMessage(q){let Q=this.extractResponseBodyMessage(q);return Q!==null?Q:typeof q=="object"&&q!==null&&("message"in q)&&typeof q.message=="string"&&q.message.length>0?q.message:typeof q=="string"?q:"Unknown error"}extractResponseBodyMessage(q){if(typeof q!="object"||q===null||!("responseBody"in q)||typeof q.responseBody!="string")return null;let Q=q.responseBody;if(Q.length===0)return null;try{let J=JSON.parse(Q);if(typeof J=="object"&&J!==null&&"message"in J&&typeof J.message=="string"&&J.message.length>0)return J.message}catch{}return Q}isAccountOwnershipDto(q){return typeof q=="object"&&q!==null&&"signedDescriptor"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.signedDescriptor=="string"&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"}};kq=bX([O(),MJ(0,$(b.Config)),MJ(1,$(B.NetworkClient))],kq);var Wq={AccountOwnershipDataSource:Symbol.for("AccountOwnershipDataSource"),AccountOwnershipContextLoader:Symbol.for("AccountOwnershipContextLoader")};var H={PkiCertificateDataSource:Symbol.for("PkiCertificateDataSource"),PkiCertificateLoader:Symbol.for("PkiCertificateLoader")};var G=((q)=>(q.ERROR="error",q.CONCORDIUM_ACCOUNT_OWNERSHIP="concordiumAccountOwnership",q.ETHEREUM_TOKEN="ethereumToken",q.ETHEREUM_NFT="ethereumNft",q.ETHEREUM_TRUSTED_NAME="ethereumTrustedName",q.ETHEREUM_PLUGIN="ethereumPlugin",q.ETHEREUM_EXTERNAL_PLUGIN="ethereumExternalPlugin",q.ETHEREUM_TRANSACTION_INFO="ethereumTransactionInfo",q.ETHEREUM_PROXY_INFO="ethereumProxyInfo",q.ETHEREUM_ENUM="ethereumEnum",q.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION="ethereumTransactionFieldDescription",q.ETHEREUM_TRANSACTION_CHECK="ethereumTransactionCheck",q.ETHEREUM_DYNAMIC_NETWORK="ethereumDynamicNetwork",q.ETHEREUM_DYNAMIC_NETWORK_ICON="ethereumDynamicNetworkIcon",q.ETHEREUM_SAFE="ethereumSafe",q.ETHEREUM_SIGNER="ethereumSigner",q.ETHEREUM_GATED_SIGNING="ethereumGatedSigning",q.SOLANA_TOKEN="solanaToken",q.SOLANA_LIFI="solanaLifi",q.SOLANA_TRUSTED_NAME="solanaTrustedName",q.SOLANA_BASIC_TRUSTED_NAME="solanaBasicTrustedName",q.SOLANA_TRANSACTION_CHECK="solanaTransactionCheck",q.SOLANA_INSTRUCTION_INFO="solanaInstructionInfo",q.SOLANA_ENUM_VARIANT="solanaEnumVariant",q.SOLANA_TOKEN_INFO="solanaTokenInfo",q.SOLANA_TOKEN_ACCOUNT_STATE="solanaTokenAccountState",q.SOLANA_ALT_RESOLUTION="solanaAltResolution",q.TRON_TOKEN="tronToken",q))(G||{});var{defineProperty:NX,getOwnPropertyDescriptor:zX}=Object,jX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?zX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&NX(Q,J,X),X},wJ=(q,Q)=>(J,W)=>Q(J,W,q),vX=[G.CONCORDIUM_ACCOUNT_OWNERSHIP],xq=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return vX.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"publicKey"in q&&typeof q.publicKey=="string"&&q.publicKey.length>0&&"address"in q&&typeof q.address=="string"&&q.address.length>0&&"network"in q&&(q.network==="mainnet"||q.network==="testnet")&&"deviceModelId"in q&&q.deviceModelId!==void 0&&"challenge"in q&&typeof q.challenge=="string"&&q.challenge.length>0}async load({publicKey:q,address:Q,network:J,deviceModelId:W,challenge:X}){return(await this._dataSource.getDescriptor({publicKey:q,address:Q,challenge:X,network:J})).caseOf({Left:(Y)=>Promise.resolve([{type:G.ERROR,error:Y}]),Right:async(Y)=>[{type:G.CONCORDIUM_ACCOUNT_OWNERSHIP,payload:Y.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:Y.keyId,keyUsage:Y.keyUsage,targetDevice:W})}]})}};xq=jX([O(),wJ(0,$(Wq.AccountOwnershipDataSource)),wJ(1,$(H.PkiCertificateLoader))],xq);var LJ=()=>new v(({bind:q})=>{q(Wq.AccountOwnershipDataSource).to(kq),q(Wq.AccountOwnershipContextLoader).to(xq)});var a=((q)=>(q[q.TOKEN=G.ETHEREUM_TOKEN]="TOKEN",q[q.NFT=G.ETHEREUM_NFT]="NFT",q[q.TRUSTED_NAME=G.ETHEREUM_TRUSTED_NAME]="TRUSTED_NAME",q[q.ENUM=G.ETHEREUM_ENUM]="ENUM",q.CALLDATA="calldata",q))(a||{}),BX={TOKEN:G.ETHEREUM_TOKEN,NFT:G.ETHEREUM_NFT,TRUSTED_NAME:G.ETHEREUM_TRUSTED_NAME,PLUGIN:G.ETHEREUM_PLUGIN,EXTERNAL_PLUGIN:G.ETHEREUM_EXTERNAL_PLUGIN,TRANSACTION_INFO:G.ETHEREUM_TRANSACTION_INFO,PROXY_INFO:G.ETHEREUM_PROXY_INFO,ENUM:G.ETHEREUM_ENUM,TRANSACTION_FIELD_DESCRIPTION:G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,TRANSACTION_CHECK:G.ETHEREUM_TRANSACTION_CHECK,DYNAMIC_NETWORK:G.ETHEREUM_DYNAMIC_NETWORK,DYNAMIC_NETWORK_ICON:G.ETHEREUM_DYNAMIC_NETWORK_ICON,SAFE:G.ETHEREUM_SAFE,SIGNER:G.ETHEREUM_SIGNER,GATED_SIGNING:G.ETHEREUM_GATED_SIGNING},HX=new Set(Object.values(BX));function c2(q){return HX.has(q.type)}var k=((q)=>(q.Test="test",q.PersoV2="persov2",q.LedgerRootV3="ledger_root_v3",q.PluginSelectorKey="plugin_selector_key",q.NftMetadataKey="nft_metadata_key",q.TokenMetadataKey="token_metadata_key",q.PartnerMetadataKey="partner_metadata_key",q.Erc20MetadataKey="erc20_metadata_key",q.DomainMetadataKey="domain_metadata_key",q.CalCalldataKey="cal_calldata_key",q.CalTrustedNameKey="cal_trusted_name_key",q.CalNetwork="cal_network",q.CalGatedSigning="cal_gated_signing",q.SwapTemplateKey="swap_template_key",q))(k||{});var P=((q)=>(q.GenuineCheck="genuine_check",q.ExchangePayload="exchange_payload",q.NftMeta="nft_meta",q.TrustedName="trusted_name",q.BackupProvider="backup_provider",q.ProtectOrchestrator="protect_orchestrator",q.PluginMeta="plugin_meta",q.CoinMeta="coin_meta",q.SeedIdAuth="seed_id_auth",q.TxSimulationSigner="tx_simu_signer",q.Calldata="calldata",q.Network="network",q.LESMultisig="les_multisig",q.GatedSigning="gated_signing",q.SwapTemplate="swap_template",q))(P||{});var Xq="15",tQ="81ff";class T{static hexToBytes(q){let Q=q.startsWith("0x")||q.startsWith("0X")?q.slice(2):q;if(Q.length===0)throw Error("HexStringUtils.hexToBytes: empty hex string");if(Q.length%2!==0)throw Error(`HexStringUtils.hexToBytes: odd-length hex string (${Q.length})`);if(!/^[0-9a-fA-F]+$/.test(Q))throw Error("HexStringUtils.hexToBytes: non-hex characters");let J=new Uint8Array(Q.length/2);for(let W=0;W<J.length;W++)J[W]=Number.parseInt(Q.slice(W*2,W*2+2),16);return J}static stringToHex(q){let Q="";for(let J=0;J<q.length;J++){let W=q.charCodeAt(J).toString(16);Q+=W.padStart(2,"0")}return Q}static appendSignatureToPayload(q,Q,J){Q.length%2!==0&&(Q="0"+Q);let W=(Q.length/2).toString(16);return W.length%2!==0&&(W="0"+W),`${q}${J}${W}${Q}`}}var{defineProperty:DX,getOwnPropertyDescriptor:PX}=Object,UX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?PX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&DX(Q,J,X),X},eQ=(q,Q)=>(J,W)=>Q(J,W,q),Iq=class{constructor(q,Q,J,W){this.config=q,this._certificateLoader=Q,this.endpoint=J,this.http=W}async getCalldataDescriptors({chainId:q,address:Q,selector:J,deviceModelId:W}){let X;try{X=await this.http.get(`${this.config.cal.url}/${this.endpoint}`,{params:{output:"descriptors_calldata",chain_id:q,contracts:Q,contract_address:Q,ref:`branch:${this.config.cal.branch}`}})}catch(Y){return K(Error(`[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: ${Y}`))}if(!Array.isArray(X))return K(Error("[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array"));if(X.length===0)return K(Error(`[ContextModule] HttpCalldataDescriptorDataSource: No data for contract ${Q} and selector ${J}`));for(let Y of X){Q=Q.toLowerCase(),J=`0x${J.slice(2).toLowerCase()}`;let Z=Y.descriptors_calldata?.[Q]?.[J];if(!Z||!this.isCalldataDescriptorV1(Z,this.config.cal.mode))continue;let N=Z.transaction_info.descriptor.data,z=Z.transaction_info.descriptor.signatures[this.config.cal.mode],F={targetDevice:W,keyUsage:P.Calldata,keyId:k.CalCalldataKey},V=await this._certificateLoader.loadCertificate(F),_={type:G.ETHEREUM_TRANSACTION_INFO,payload:T.appendSignatureToPayload(N,z,tQ),certificate:V},R=[];for(let[M,I]of Object.entries(Z.enums))for(let[m,{data:C,signatures:u}]of Object.entries(I))R.push({type:G.ETHEREUM_ENUM,id:Number(M),value:Number(m),payload:T.appendSignatureToPayload(C,u[this.config.cal.mode],tQ),certificate:V});let w=Z.fields.map((M)=>({type:G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,payload:M.descriptor,reference:this.getReference(M.param)}));return j([_,...R,...w])}return K(Error(`[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract ${Q} and selector ${J}`))}getReference(q){if(q.type==="TOKEN_AMOUNT"&&q.token!==void 0&&q.token.type==="path")return{type:a.TOKEN,valuePath:this.toGenericPath(q.token.binary_path)};if(q.type==="TOKEN_AMOUNT"&&q.token!==void 0&&q.token.type==="constant")return{type:a.TOKEN,value:q.token.value};if(q.type==="NFT"&&q.collection.type==="path")return{type:a.NFT,valuePath:this.toGenericPath(q.collection.binary_path)};if(q.type==="NFT"&&q.collection.type==="constant")return{type:a.NFT,value:q.collection.value};if(q.type==="TRUSTED_NAME"&&q.value.type==="path")return{type:a.TRUSTED_NAME,valuePath:this.toGenericPath(q.value.binary_path),types:q.types,sources:q.sources};if(q.type==="ENUM"&&q.value.type==="path")return{type:a.ENUM,valuePath:this.toGenericPath(q.value.binary_path),id:q.id};if(q.type==="CALLDATA"&&q.value.type==="path"&&q.callee.type==="path")return{type:a.CALLDATA,valuePath:this.toGenericPath(q.value.binary_path),callee:this.toGenericPath(q.callee.binary_path),selector:q.selector?.type==="path"?this.toGenericPath(q.selector.binary_path):void 0,amount:q.amount?.type==="path"?this.toGenericPath(q.amount.binary_path):void 0,spender:q.spender?.type==="path"?this.toGenericPath(q.spender.binary_path):void 0,chainId:q.chainId?.type==="path"?this.toGenericPath(q.chainId.binary_path):void 0}}toGenericPath(q){return q.type==="CONTAINER"?q.value:q.elements.map((Q)=>{if(Q.type==="ARRAY"){let{weight:J,...W}=Q;return{itemSize:J,...W}}else if(Q.type==="LEAF"){let{leaf_type:J,...W}=Q;return{leafType:J,...W}}return Q})}isCalldataDescriptorV1(q,Q){return typeof q=="object"&&q.type==="calldata"&&q.version==="v1"&&this.isTransactionInfoV1(q.transaction_info,Q)&&this.isEnumV1(q.enums,Q)&&Array.isArray(q.fields)&&q.fields.every((J)=>this.isFieldV1(J))}isTransactionInfoV1(q,Q){return typeof q=="object"&&typeof q.descriptor=="object"&&typeof q.descriptor.data=="string"&&typeof q.descriptor.signatures=="object"&&typeof q.descriptor.signatures[Q]=="string"}isEnumV1(q,Q){return typeof q=="object"&&Object.entries(q).every(([J,W])=>typeof J=="string"&&typeof W=="object"&&Object.entries(W).every(([X,Y])=>typeof X=="string"&&typeof Y=="object"&&typeof Y.data=="string"&&Y.signatures!==void 0&&this.isCalldataSignatures(Y.signatures,Q)))}isCalldataSignatures(q,Q){return typeof q=="object"&&typeof q[Q]=="string"}isFieldV1(q){return typeof q=="object"&&typeof q.descriptor=="string"&&typeof q.param=="object"&&typeof q.param.value=="object"&&this.isDescriptorValueV1(q.param.value)&&(q.param.type==="RAW"||q.param.type==="AMOUNT"||q.param.type==="DATETIME"||q.param.type==="DURATION"||q.param.type==="UNIT"||q.param.type==="ENUM"||q.param.type==="NFT"&&this.isDescriptorValueV1(q.param.collection)||q.param.type==="TOKEN_AMOUNT"&&(q.param.token===void 0||this.isDescriptorValueV1(q.param.token))||q.param.type==="TRUSTED_NAME"&&Array.isArray(q.param.types)&&Array.isArray(q.param.sources)&&q.param.types.every((Q)=>typeof Q=="string")&&q.param.sources.every((Q)=>typeof Q=="string")||q.param.type==="CALLDATA"&&this.isDescriptorValueV1(q.param.value)&&this.isDescriptorValueV1(q.param.callee)&&(q.param.selector===void 0||this.isDescriptorValueV1(q.param.selector))&&(q.param.amount===void 0||this.isDescriptorValueV1(q.param.amount))&&(q.param.spender===void 0||this.isDescriptorValueV1(q.param.spender))&&(q.param.chainId===void 0||this.isDescriptorValueV1(q.param.chainId)))}isDescriptorValueV1(q){return typeof q=="object"&&typeof q.type_family=="string"&&["UINT","INT","UFIXED","FIXED","ADDRESS","BOOL","BYTES","STRING"].includes(q.type_family)&&(typeof q.type_size>"u"||typeof q.type_size=="number")&&(q.type==="path"&&this.isCalldataDescriptorValueBinaryPathV1(q)||q.type==="constant"&&this.isCalldataDescriptorValueConstantV1(q))}isCalldataDescriptorValueConstantV1(q){return typeof q=="object"&&q.type==="constant"&&typeof q.value=="string"}isCalldataDescriptorValueBinaryPathV1(q){return typeof q=="object"&&(q.type==="path"&&q.binary_path.type==="CONTAINER"&&["FROM","TO","VALUE"].includes(q.binary_path.value)||q.binary_path.type==="DATA"&&Array.isArray(q.binary_path.elements)&&q.binary_path.elements.every((Q)=>this.isPathElementV1(Q)))}isPathElementV1(q){return typeof q=="object"&&(q.type==="REF"||q.type==="TUPLE"&&typeof q.offset=="number"||q.type==="ARRAY"&&typeof q.weight=="number"&&(typeof q.start>"u"||typeof q.start=="number")&&(typeof q.end>"u"||typeof q.end=="number")||q.type==="LEAF"&&typeof q.leaf_type=="string"&&["ARRAY_LEAF","TUPLE_LEAF","STATIC_LEAF","DYNAMIC_LEAF"].includes(q.leaf_type)||q.type==="SLICE"&&(typeof q.start>"u"||typeof q.start=="number")&&(typeof q.end>"u"||typeof q.end=="number"))}};Iq=UX([O(),eQ(0,$(b.Config)),eQ(1,$(H.PkiCertificateLoader)),eQ(3,$(B.NetworkClient))],Iq);var o={CalldataContextLoader:Symbol.for("CalldataContextLoader"),DappCalldataDescriptorDataSource:Symbol.for("DappCalldataDescriptorDataSource"),TokenCalldataDescriptorDataSource:Symbol.for("TokenCalldataDescriptorDataSource")};var h={ProxyDataSource:Symbol.for("ProxyDataSource"),ProxyContextFieldLoader:Symbol.for("ProxyContextFieldLoader")};var{defineProperty:_X,getOwnPropertyDescriptor:RX}=Object,IX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?RX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&_X(Q,J,X),X},Tq=(q,Q)=>(J,W)=>Q(J,W,q),MX=[G.ETHEREUM_TRANSACTION_INFO,G.ETHEREUM_TRANSACTION_FIELD_DESCRIPTION,G.ETHEREUM_PROXY_INFO,G.ETHEREUM_ENUM],Aq=class{constructor(q,Q,J,W){this.dappDataSource=q,this.tokenDataSource=Q,this.proxyDataSource=J,this.logger=W("CalldataContextLoader")}logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"data"in q&&"selector"in q&&"chainId"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.data)&&L(q.selector)&&q.selector!=="0x"&&MX.every((J)=>Q.includes(J))}async load(q){let{to:Q,data:J,selector:W,chainId:X,deviceModelId:Y}=q,Z={address:Q,chainId:X,selector:W,deviceModelId:Y,data:J},N=(await this._getContexts(Z,this.dappDataSource).alt(this._getContexts(Z,this.tokenDataSource)).alt(this._getContextsWithProxy(Z,this.dappDataSource)).run()).caseOf({Just:(z)=>z,Nothing:()=>[{type:G.ERROR,error:Error("[ContextModule] CalldataContextLoader: No calldata contexts found")}]});return this.logger.debug("load result",{data:{result:N}}),N}_getContexts({address:q,chainId:Q,selector:J,deviceModelId:W},X){return qJ(async({liftMaybe:Y})=>{let Z=await X.getCalldataDescriptors({deviceModelId:W,address:q,chainId:Q,selector:J});return Y(Z.toMaybe().filter((N)=>N.length>0))})}_getContextsWithProxy({address:q,chainId:Q,selector:J,deviceModelId:W,data:X},Y){return qJ(async({liftMaybe:Z})=>{let N=await this.proxyDataSource.getProxyImplementationAddress({calldata:X,proxyAddress:q,chainId:Q,challenge:""});return Z(N.toMaybe())}).map(({implementationAddress:Z})=>{let N={address:Z,chainId:Q,selector:J,deviceModelId:W,data:X};return this._getContexts(N,Y).map((z)=>[{type:G.ETHEREUM_PROXY_INFO,payload:"0x"},...z])}).join()}};Aq=IX([O(),Tq(0,$(o.DappCalldataDescriptorDataSource)),Tq(1,$(o.TokenCalldataDescriptorDataSource)),Tq(2,$(h.ProxyDataSource)),Tq(3,$(b.ContextModuleLoggerFactory))],Aq);var EJ=()=>new v(({bind:q})=>{q(o.DappCalldataDescriptorDataSource).toDynamicValue((Q)=>new Iq(Q.get(b.Config),Q.get(H.PkiCertificateLoader),"dapps",Q.get(B.NetworkClient))),q(o.TokenCalldataDescriptorDataSource).toDynamicValue((Q)=>new Iq(Q.get(b.Config),Q.get(H.PkiCertificateLoader),"tokens",Q.get(B.NetworkClient))),q(o.CalldataContextLoader).to(Aq)});var{defineProperty:wX,getOwnPropertyDescriptor:LX}=Object,EX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?LX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&wX(Q,J,X),X},SJ=(q,Q)=>(J,W)=>Q(J,W,q),SX={nanos:S.NANO_S,nanosp:S.NANO_SP,nanox:S.NANO_X,stax:S.STAX,flex:S.FLEX,apexp:S.APEX},fq=class{constructor(q,Q){this.config=q,this.http=Q}async getDynamicNetworkConfiguration(q){let Q;try{Q=await this.http.get(`${this.config.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:q}})}catch(X){return K(X instanceof Error?Error(X.message):Error("Failed to fetch network configuration"))}let J=Q?.[0];if(!J)return K(Error(`Network configuration not found for chain ID: ${q}`));if(!this.isValidNetworkData(J))return K(Error(`Invalid network configuration response for chain ID: ${q}`));let W=this.transformToNetworkConfiguration(J);return j(W)}isValidNetworkData(q){if(!q||typeof q!="object")return!1;let Q=q;if(typeof Q.id!="string"||!Q.descriptors||typeof Q.descriptors!="object")return!1;for(let J of Object.values(Q.descriptors))if(!this.isValidDescriptor(J))return!1;return!(Q.icons&&typeof Q.icons!="object")}isValidDescriptor(q){if(!q||typeof q!="object")return!1;let Q=q;if(typeof Q.data!="string"||typeof Q.descriptorType!="string"||typeof Q.descriptorVersion!="string"||!Q.signatures||typeof Q.signatures!="object")return!1;let J=Q.signatures;return!(typeof J.prod!="string"||typeof J.test!="string")}transformToNetworkConfiguration(q){let Q=Object.entries(q.descriptors).reduce((J,[W,X])=>{let Y=SX[W.toLowerCase()];return Y===void 0||(J[Y]={descriptorType:X.descriptorType,descriptorVersion:X.descriptorVersion,data:X.data,signatures:X.signatures,icon:q.icons?.[W]}),J},{});return{id:q.id,descriptors:Q}}};fq=EX([O(),SJ(0,$(b.Config)),SJ(1,$(B.NetworkClient))],fq);var Yq={DynamicNetworkDataSource:Symbol("DynamicNetworkDataSource"),DynamicNetworkContextLoader:Symbol("DynamicNetworkContextLoader")};var{defineProperty:kX,getOwnPropertyDescriptor:xX}=Object,TX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?xX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&kX(Q,J,X),X},hq=(q,Q)=>(J,W)=>Q(J,W,q),AX="15",fX=[G.ETHEREUM_DYNAMIC_NETWORK,G.ETHEREUM_DYNAMIC_NETWORK_ICON],Cq=class{_networkDataSource;_config;_certificateLoader;logger;constructor(q,Q,J,W){this._networkDataSource=q,this._config=Q,this._certificateLoader=J,this.logger=W("DynamicNetworkContextLoader")}canHandle(q,Q){return typeof q=="object"&&q!==null&&"chainId"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S&&typeof q.chainId=="number"&&fX.every((J)=>Q.includes(J))}async load(q){let{chainId:Q,deviceModelId:J}=q,W=await this._networkDataSource.getDynamicNetworkConfiguration(Q),X=await this._certificateLoader.loadCertificate({keyId:k.CalNetwork,keyUsage:P.Network,targetDevice:J}),Y=W.caseOf({Left:()=>[],Right:(Z)=>{let N=[],z=Z.descriptors[J];if(!z)return[];let F=z.signatures[this._config.cal.mode];if(!F)return[];let V=T.appendSignatureToPayload(z.data,F,AX);return N.push({type:G.ETHEREUM_DYNAMIC_NETWORK,payload:V,certificate:X}),z.icon&&N.push({type:G.ETHEREUM_DYNAMIC_NETWORK_ICON,payload:z.icon}),N}});return this.logger.debug("load result",{data:{result:Y}}),Y}};Cq=TX([O(),hq(0,$(Yq.DynamicNetworkDataSource)),hq(1,$(b.Config)),hq(2,$(H.PkiCertificateLoader)),hq(3,$(b.ContextModuleLoggerFactory))],Cq);var kJ=()=>new v(({bind:q})=>{q(Yq.DynamicNetworkDataSource).to(fq),q(Yq.DynamicNetworkContextLoader).to(Cq)});var{defineProperty:hX,getOwnPropertyDescriptor:CX}=Object,yX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?CX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&hX(Q,J,X),X},xJ=(q,Q)=>(J,W)=>Q(J,W,q),yq=class{constructor(q,Q){this.config=q,this.http=Q}async getDappInfos({chainId:q,address:Q,selector:J}){try{let W=await this.http.get(`${this.config.cal.url}/dapps`,{params:{output:"b2c,b2c_signatures,abis",chain_id:q,contracts:Q}});if(!W[0])return j(void 0);Q=Q.toLowerCase(),J=`0x${J.slice(2).toLowerCase()}`;let{erc20OfInterest:X,method:Y,plugin:Z}=W[0].b2c?.contracts?.find((V)=>V.address===Q)?.selectors?.[J]||{},{signature:N,serialized_data:z}=W[0].b2c_signatures?.[Q]?.[J]||{};if(!X||!Y||!Z||!N||!z)return j(void 0);let F=W[0].abis?.[Q];return F?j({selectorDetails:{method:Y,plugin:Z,erc20OfInterest:X,signature:N,serializedData:z},abi:F}):j(void 0)}catch{return K(Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))}}};yq=yX([O(),xJ(0,$(b.Config)),xJ(1,$(B.NetworkClient))],yq);var Zq={ExternalPluginDataSource:Symbol.for("ExternalPluginDataSource"),ExternalPluginContextLoader:Symbol.for("ExternalPluginContextLoader")};import{Interface as pX}from"ethers";var A={TokenDataSource:Symbol.for("TokenDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader"),TokenContextFieldLoader:Symbol.for("TokenContextFieldLoader")};var n={AbiDecoderDataSource:Symbol.for("AbiDecoderDataSource"),CommandDecoderDataSource:Symbol.for("CommandDecoderDataSource"),UniswapContextLoader:Symbol.for("UniswapContextLoader")};var{defineProperty:gX,getOwnPropertyDescriptor:mX}=Object,uX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?mX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&gX(Q,J,X),X},gq=(q,Q)=>(J,W)=>Q(J,W,q),lX=[G.ETHEREUM_EXTERNAL_PLUGIN,G.ETHEREUM_TOKEN],mq=class{constructor(q,Q,J,W){this._externalPluginDataSource=q,this._tokenDataSource=Q,this._uniswapLoader=J,this._customPluginLoaders={Uniswap:this._uniswapLoader},this.logger=W("ExternalPluginContextLoader")}_customPluginLoaders;logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"data"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.data)&&q.data!=="0x"&&L(q.selector)&&q.selector!=="0x"&&lX.every((J)=>Q.includes(J))}async load(q){let{to:Q,data:J,selector:W,chainId:X}=q,Y=await this._externalPluginDataSource.getDappInfos({address:Q,chainId:X,selector:W}),Z=await QJ(async({liftEither:N})=>{let z=await N(Y);if(!z)return[];let F={type:G.ETHEREUM_EXTERNAL_PLUGIN,payload:z.selectorDetails.serializedData.concat(z.selectorDetails.signature)},V=this._customPluginLoaders[z.selectorDetails.plugin];if(V!==void 0&&V.canHandle(q,[G.ETHEREUM_TOKEN])){let M=await V.load(q);return[F,...M]}let _=this.getDecodedCallData(z.abi,z.selectorDetails.method,J);if(_.isLeft())return[{type:G.ERROR,error:_.extract()},F];let R=_.extract(),w=z.selectorDetails.erc20OfInterest.map(async(M)=>this.getTokenPayload(q,M,R));return[...(await Promise.all(w)).map((M)=>M.caseOf({Left:(I)=>({type:G.ERROR,error:I}),Right:(I)=>({type:G.ETHEREUM_TOKEN,payload:I})})),F]}).caseOf({Left:(N)=>[{type:G.ERROR,error:N}],Right:(N)=>N});return this.logger.debug("load result",{data:{result:Z}}),Z}getTokenPayload(q,Q,J){let W=this.getAddressFromPath(Q,J);return QJ(({fromPromise:X})=>X(this._tokenDataSource.getTokenInfosPayload({address:W,chainId:q.chainId})))}getDecodedCallData(q,Q,J){try{let W=new pX(q);return j(W.decodeFunctionData(Q,J))}catch{return K(Error("[ContextModule] ExternalPluginContextLoader: Unable to parse abi"))}}getAddressFromPath(q,Q){let J=Q;for(let W of q.split("."))W==="-1"?J=J[J.length-1]:J=J[W];if(!L(J))throw Error("[ContextModule] ExternalPluginContextLoader: Unable to get address");return J}};mq=uX([O(),gq(0,$(Zq.ExternalPluginDataSource)),gq(1,$(A.TokenDataSource)),gq(2,$(n.UniswapContextLoader)),gq(3,$(b.ContextModuleLoggerFactory))],mq);var TJ=()=>new v(({bind:q})=>{q(Zq.ExternalPluginDataSource).to(yq),q(Zq.ExternalPluginContextLoader).to(mq)});var{defineProperty:cX,getOwnPropertyDescriptor:dX}=Object,sX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?dX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&cX(Q,J,X),X},AJ=(q,Q)=>(J,W)=>Q(J,W,q),uq=class{constructor(q,Q){this.config=q,this.http=Q}async getGatedDescriptor({contractAddress:q,selector:Q,chainId:J}){let W;try{W=await this.http.get(`${this.config.cal.url}/gated_dapps`,{params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors,app,category",contracts:q,chain_id:J}})}catch(N){return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${N}`))}if(!this.isGatedDappsDto(W))return K(Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));let X=q.toLowerCase(),Y=Q.startsWith("0x")?Q.slice(2).toLowerCase():Q.toLowerCase(),Z=`0x${Y}`;for(let N of W){let z=N.gated_descriptors?.[X];if(!z)continue;let F=z[Y]??z[Z]??z[Q];if(F?.descriptor)return j({signedDescriptor:T.appendSignatureToPayload(F.descriptor,F.signatures[this.config.cal.mode],Xq)})}return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${q} and selector ${Q}`))}async getGatedDescriptorForTypedData({contractAddress:q,schemaHash:Q,chainId:J}){let W;try{W=await this.http.get(`${this.config.cal.url}/gated_dapps`,{params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors",contracts:q,chain_id:J}})}catch(Z){return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${Z}`))}if(!this.isGatedDappsDto(W))return K(Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));let X=q.toLowerCase(),Y=Q.toLowerCase();for(let Z of W){let N=Z.gated_descriptors?.[X];if(!N)continue;let z=N[Y];if(z?.descriptor)return j({signedDescriptor:T.appendSignatureToPayload(z.descriptor,z.signatures[this.config.cal.mode],Xq)})}return K(Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${q} and schema hash ${Q}`))}isGatedDappsDto(q){if(!Array.isArray(q)||q.length===0)return!1;for(let Q of q)if(!this.isGatedDappsResponseItemDto(Q))return!1;return!0}isGatedDappsResponseItemDto(q){if(!q||typeof q!="object")return!1;let Q=q;if(!Q.gated_descriptors||typeof Q.gated_descriptors!="object")return!1;let J=Q.gated_descriptors;for(let W of Object.values(J)){if(typeof W!="object"||W===null)return!1;for(let X of Object.values(W))if(!this.isGatedDescriptorEntryDto(X))return!1}return!0}isGatedDescriptorEntryDto(q){if(!q||typeof q!="object")return!1;let Q=q;if(typeof Q.network!="string"||typeof Q.chain_id!="number"||typeof Q.address!="string"||typeof Q.selector!="string"||typeof Q.version!="string"||typeof Q.descriptor!="string")return!1;if(Q.signatures!==void 0){if(typeof Q.signatures!="object"||Q.signatures===null)return!1;let J=Q.signatures;for(let W of Object.values(J))if(typeof W!="string")return!1}return!0}};uq=sX([O(),AJ(0,$(b.Config)),AJ(1,$(B.NetworkClient))],uq);var d={GatedDescriptorDataSource:Symbol.for("GatedDescriptorDataSource"),GatedSigningContextLoader:Symbol.for("GatedSigningContextLoader"),GatedSigningTypedDataContextLoader:Symbol.for("GatedSigningTypedDataContextLoader")};var{defineProperty:iX,getOwnPropertyDescriptor:nX}=Object,aX=(q,Q,J,W)=>{for(var X=W>1?void 0:W?nX(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&iX(Q,J,X),X},pq=(q,Q)=>(J,W)=>Q(J,W,q),oX=[G.ETHEREUM_GATED_SIGNING];function rX(q){let Q=q.toLowerCase();return Q.startsWith("0x")?Q:`0x${Q}`}var lq=class{constructor(q,Q,J,W){this._dataSource=q,this._certificateLoader=Q,this._proxyDataSource=J,this.logger=W("GatedSigningContextLoader")}logger;canHandle(q,Q){return oX.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"to"in q&&L(q.to)&&q.to!=="0x"&&"selector"in q&&L(q.selector)&&"chainId"in q&&typeof q.chainId=="number"&&"deviceModelId"in q&&q.deviceModelId!==void 0}async load({to:q,selector:Q,chainId:J,deviceModelId:W}){let X=await this._dataSource.getGatedDescriptor({contractAddress:q,selector:Q,chainId:J});if(X.isRight()){let{signedDescriptor:M}=X.unsafeCoerce(),I=await this._loadGatedCertificate(W);return this.logger.debug("load result",{data:{path:"direct",to:q,selector:Q,chainId:J,contextTypes:[G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_GATED_SIGNING,payload:M,certificate:I}]}let Y=X.extract(),Z={type:G.ERROR,error:Y},N=await this._proxyDataSource.getProxyImplementationAddress({proxyAddress:q,chainId:J,challenge:"",calldata:"0x"});if(N.isLeft()){let M=N.extract();return this.logger.warn("No gated descriptor found and proxy resolution failed",{data:{to:q,selector:Q,chainId:J,directError:Y.message,proxyError:M.message}}),[Z]}let z=N.unsafeCoerce(),F=rX(z.implementationAddress),V=await this._dataSource.getGatedDescriptor({contractAddress:F,selector:Q,chainId:J});if(V.isLeft()){let M=V.extract();return this.logger.warn("No gated descriptor found for proxy implementation address",{data:{to:q,implementationAddress:F,selector:Q,chainId:J,directError:Y.message,implError:M.message}}),[Z]}let{signedDescriptor:_}=V.unsafeCoerce(),[R,w]=await Promise.all([this._certificateLoader.loadCertificate({keyId:z.keyId,keyUsage:z.keyUsage,targetDevice:W}),this._loadGatedCertificate(W)]);return this.logger.debug("load result",{data:{path:"proxy",to:q,implementationAddress:F,selector:Q,chainId:J,contextTypes:[G.ETHEREUM_PROXY_INFO,G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_PROXY_INFO,payload:z.signedDescriptor,certificate:R},{type:G.ETHEREUM_GATED_SIGNING,payload:_,certificate:w}]}_loadGatedCertificate(q){return this._certificateLoader.loadCertificate({keyId:k.CalGatedSigning,keyUsage:P.GatedSigning,targetDevice:q})}};lq=aX([O(),pq(0,$(d.GatedDescriptorDataSource)),pq(1,$(H.PkiCertificateLoader)),pq(2,$(h.ProxyDataSource)),pq(3,$(b.ContextModuleLoggerFactory))],lq);var hJ=fJ(tX(),1);function eX(q){return Object.fromEntries(Object.entries(q).sort(([Q],[J])=>Q.localeCompare(J)).map(([Q,J])=>[Q,J.map((W)=>({name:W.name,type:W.type}))]))}function cq(q){let Q=eX(q),J=JSON.stringify(Q);return hJ.default(J).toString()}var{defineProperty:qY,getOwnPropertyDescriptor:QY}=Object,JY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?QY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&qY(Q,J,X),X},dq=(q,Q)=>(J,W)=>Q(J,W,q),WY="0x0000000000000000000000000000000000000000",XY=[G.ETHEREUM_GATED_SIGNING];function YY(q){if(!q||typeof q!="object")return!1;let Q=q;if(!Q.types||typeof Q.types!="object"||Array.isArray(Q.types))return!1;let J=Q.types;for(let W of Object.keys(J)){if(typeof W!="string")return!1;let X=J[W];if(!Array.isArray(X))return!1;for(let Y of X)if(!Y||typeof Y!="object"||typeof Y.name!="string"||typeof Y.type!="string")return!1}return!0}var sq=class{constructor(q,Q,J,W){this._dataSource=q,this._certificateLoader=Q,this._proxyDataSource=J,this.logger=W("GatedSigningTypedDataContextLoader")}logger;canHandle(q,Q){return XY.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"data"in q&&YY(q.data)&&"chainId"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0&&"challenge"in q&&typeof q.challenge=="string"}async load({data:q,chainId:Q,deviceModelId:J,challenge:W}){let X=q.domain?.verifyingContract?.toLowerCase()??WY,Y=X.startsWith("0x")?X:`0x${X}`,Z=cq(q.types),N=await this._dataSource.getGatedDescriptorForTypedData({contractAddress:Y,schemaHash:Z,chainId:Q});if(N.isRight()){let{signedDescriptor:C}=N.unsafeCoerce(),u=await this._certificateLoader.loadCertificate({keyId:k.CalGatedSigning,keyUsage:P.GatedSigning,targetDevice:J});return this.logger.debug("load result",{data:{path:"direct",verifyingContract:Y,schemaHash:Z,chainId:Q,contextTypes:[G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_GATED_SIGNING,payload:C,certificate:u}]}let z=N.caseOf({Left:(C)=>C,Right:()=>Error("unreachable")}),F=await this._proxyDataSource.getProxyImplementationAddress({proxyAddress:Y,chainId:Q,challenge:W,calldata:"0x"});if(F.isLeft()){let C=F.extract();return this.logger.warn("Direct gated descriptor lookup failed and proxy resolution failed",{data:{verifyingContract:Y,schemaHash:Z,chainId:Q,directError:z.message,proxyError:C.message}}),[{type:G.ERROR,error:z}]}let V=F.unsafeCoerce(),_=V.implementationAddress.toLowerCase(),R=_.startsWith("0x")?_:`0x${_}`,w=await this._dataSource.getGatedDescriptorForTypedData({contractAddress:R,schemaHash:Z,chainId:Q});if(w.isLeft()){let C=w.extract();return this.logger.warn("No gated descriptor found for proxy implementation address",{data:{verifyingContract:Y,implementationAddress:R,schemaHash:Z,chainId:Q,directError:z.message,implError:C.message}}),[{type:G.ERROR,error:z}]}let{signedDescriptor:M}=w.unsafeCoerce(),[I,m]=await Promise.all([this._certificateLoader.loadCertificate({keyId:V.keyId,keyUsage:V.keyUsage,targetDevice:J}),this._certificateLoader.loadCertificate({keyId:k.CalGatedSigning,keyUsage:P.GatedSigning,targetDevice:J})]);return this.logger.debug("load result",{data:{path:"proxy",verifyingContract:Y,implementationAddress:R,schemaHash:Z,chainId:Q,contextTypes:[G.ETHEREUM_PROXY_INFO,G.ETHEREUM_GATED_SIGNING]}}),[{type:G.ETHEREUM_PROXY_INFO,payload:V.signedDescriptor,certificate:I},{type:G.ETHEREUM_GATED_SIGNING,payload:M,certificate:m}]}};sq=JY([O(),dq(0,$(d.GatedDescriptorDataSource)),dq(1,$(H.PkiCertificateLoader)),dq(2,$(h.ProxyDataSource)),dq(3,$(b.ContextModuleLoggerFactory))],sq);var CJ=()=>new v(({bind:q})=>{q(d.GatedDescriptorDataSource).to(uq),q(d.GatedSigningContextLoader).to(lq),q(d.GatedSigningTypedDataContextLoader).to(sq)});var{defineProperty:ZY,getOwnPropertyDescriptor:$Y}=Object,GY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?$Y(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&ZY(Q,J,X),X},yJ=(q,Q)=>(J,W)=>Q(J,W,q),iq=class{constructor(q,Q){this.config=q,this.http=Q}async getSetPluginPayload({chainId:q,address:Q,selector:J}){try{let W=await this.http.get(`${this.config.metadataServiceDomain.url}/v1/ethereum/${q}/contracts/${Q}/plugin-selector/${J}`);return W.payload?j(W.payload):K(Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}catch{return K(Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}}async getNftInfosPayload({chainId:q,address:Q}){try{let J=await this.http.get(`${this.config.metadataServiceDomain.url}/v1/ethereum/${q}/contracts/${Q}`);return J.payload?j(J.payload):K(Error("[ContextModule] HttpNftDataSource: no nft metadata"))}catch{return K(Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}}};iq=GY([O(),yJ(0,$(b.Config)),yJ(1,$(B.NetworkClient))],iq);var s={NftDataSource:Symbol.for("NftDataSource"),NftContextLoader:Symbol.for("NftContextLoader"),NftContextFieldLoader:Symbol.for("NftContextFieldLoader")};var{defineProperty:VY,getOwnPropertyDescriptor:KY}=Object,OY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?KY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&VY(Q,J,X),X},FY=(q,Q)=>(J,W)=>Q(J,W,q),nq=class{constructor(q){this._dataSource=q}canHandle(q,Q){return Q===G.ETHEREUM_NFT&&typeof q=="object"&&q!==null&&"chainId"in q&&"address"in q}async loadField(q){return(await this._dataSource.getNftInfosPayload({address:q.address,chainId:q.chainId})).caseOf({Left:(Q)=>({type:G.ERROR,error:Q}),Right:(Q)=>({type:G.ETHEREUM_NFT,payload:Q})})}};nq=OY([O(),FY(0,$(s.NftDataSource))],nq);var{defineProperty:bY,getOwnPropertyDescriptor:NY}=Object,zY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?NY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&bY(Q,J,X),X},gJ=(q,Q)=>(J,W)=>Q(J,W,q),mJ=((q)=>(q.Approve="0x095ea7b3",q.SetApprovalForAll="0xa22cb465",q.TransferFrom="0x23b872dd",q.SafeTransferFrom="0x42842e0e",q.SafeTransferFromWithData="0xb88d4fde",q))(mJ||{}),uJ=((q)=>(q.SetApprovalForAll="0xa22cb465",q.SafeTransferFrom="0xf242432a",q.SafeBatchTransferFrom="0x2eb2c2d6",q))(uJ||{}),jY=[...Object.values(mJ),...Object.values(uJ)],vY=[G.ETHEREUM_PLUGIN,G.ETHEREUM_NFT],aq=class{_dataSource;logger;constructor(q,Q){this._dataSource=q,this.logger=Q("NftContextLoader")}canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.selector)&&this.isSelectorSupported(q.selector)&&vY.every((J)=>Q.includes(J))}async load(q){let Q=[],{to:J,selector:W,chainId:X}=q,Y=(await this._dataSource.getSetPluginPayload({chainId:X,address:J,selector:W})).caseOf({Left:(N)=>({type:G.ERROR,error:N}),Right:(N)=>({type:G.ETHEREUM_PLUGIN,payload:N})});if(Y.type===G.ERROR)return this.logger.debug("load result",{data:{result:[Y]}}),[Y];Q.push(Y);let Z=(await this._dataSource.getNftInfosPayload({chainId:X,address:J})).caseOf({Left:(N)=>({type:G.ERROR,error:N}),Right:(N)=>({type:G.ETHEREUM_NFT,payload:N})});return Z.type===G.ERROR?(this.logger.debug("load result",{data:{result:[Z]}}),[Z]):(Q.push(Z),this.logger.debug("load result",{data:{result:Q}}),Q)}isSelectorSupported(q){return Object.values(jY).includes(q)}};aq=zY([O(),gJ(0,$(s.NftDataSource)),gJ(1,$(b.ContextModuleLoggerFactory))],aq);var pJ=()=>new v(({bind:q})=>{q(s.NftDataSource).to(iq),q(s.NftContextLoader).to(aq),q(s.NftContextFieldLoader).to(nq)});var{defineProperty:BY,getOwnPropertyDescriptor:HY}=Object,DY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?HY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&BY(Q,J,X),X},lJ=(q,Q)=>(J,W)=>Q(J,W,q),oq=class{constructor(q,Q){this.config=q,this.http=Q}async getProxyImplementationAddress({proxyAddress:q,chainId:Q,challenge:J,calldata:W}){let X;try{X=await this.http.post(`${this.config.metadataServiceDomain.url}/v2/ethereum/${Q}/contract/proxy/delegate`,{proxy:q,data:W,challenge:J})}catch{return K(Error("[ContextModule] HttpProxyDataSource: Failed to fetch delegate proxy"))}return X?this.isProxyDelegateCallDto(X)?X.addresses[0]?j({implementationAddress:X.addresses[0],signedDescriptor:X.signedDescriptor,keyId:k.DomainMetadataKey,keyUsage:P.TrustedName}):K(Error(`[ContextModule] HttpProxyDataSource: No implementation address found for proxy ${q} on chain ${Q}`)):K(Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${q} on chain ${Q}`)):K(Error(`[ContextModule] HttpProxyDataSource: No data received for proxy ${q} on chain ${Q}`))}isProxyDelegateCallDto(q){return typeof q=="object"&&q!==null&&"addresses"in q&&"signedDescriptor"in q&&Array.isArray(q.addresses)&&q.addresses.every((Q)=>typeof Q=="string")&&typeof q.signedDescriptor=="string"}};oq=DY([O(),lJ(0,$(b.Config)),lJ(1,$(B.NetworkClient))],oq);var{defineProperty:PY,getOwnPropertyDescriptor:UY}=Object,_Y=(q,Q,J,W)=>{for(var X=W>1?void 0:W?UY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&PY(Q,J,X),X},cJ=(q,Q)=>(J,W)=>Q(J,W,q),rq=class{constructor(q,Q){this.config=q,this.http=Q}async getProxyImplementationAddress({proxyAddress:q,chainId:Q,challenge:J}){let W;try{W=await this.http.get(`${this.config.metadataServiceDomain.url}/v3/ethereum/${Q}/contract/proxy/${q}`,{params:{challenge:J,resolver:"SAFE_GATEWAY"}})}catch{return K(Error("[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation"))}return W?this.isSafeProxyImplementationAddressDto(W)?j({implementationAddress:W.implementationAddress,signedDescriptor:W.signedDescriptor,keyId:W.keyId,keyUsage:W.keyUsage}):K(Error(`[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${q} on chain ${Q}`)):K(Error(`[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${q} on chain ${Q}`))}isSafeProxyImplementationAddressDto(q){return typeof q=="object"&&q!==null&&"proxyAddress"in q&&"implementationAddress"in q&&"standard"in q&&"signedDescriptor"in q&&"providedBy"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.proxyAddress=="string"&&typeof q.implementationAddress=="string"&&typeof q.standard=="string"&&typeof q.signedDescriptor=="string"&&typeof q.providedBy=="string"&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"}};rq=_Y([O(),cJ(0,$(b.Config)),cJ(1,$(B.NetworkClient))],rq);var{defineProperty:RY,getOwnPropertyDescriptor:IY}=Object,MY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?IY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&RY(Q,J,X),X},dJ=(q,Q)=>(J,W)=>Q(J,W,q),tq=class{constructor(q,Q){this._proxyDataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q===G.ETHEREUM_PROXY_INFO&&typeof q=="object"&&q!==null&&"chainId"in q&&"proxyAddress"in q&&"calldata"in q&&"challenge"in q&&"deviceModelId"in q}async loadField(q){return(await this._proxyDataSource.getProxyImplementationAddress({calldata:q.calldata,proxyAddress:q.proxyAddress,chainId:q.chainId,challenge:q.challenge})).caseOf({Left:(Q)=>Promise.resolve({type:G.ERROR,error:Q}),Right:async({signedDescriptor:Q,keyId:J,keyUsage:W})=>{let X=await this._certificateLoader.loadCertificate({keyId:J,keyUsage:W,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_PROXY_INFO,payload:Q,certificate:X}}})}};tq=MY([O(),dJ(0,$(h.ProxyDataSource)),dJ(1,$(H.PkiCertificateLoader))],tq);var sJ=(q)=>new v(({bind:Q})=>{q?.proxy==="safe"?Q(h.ProxyDataSource).to(rq):Q(h.ProxyDataSource).to(oq),Q(h.ProxyContextFieldLoader).to(tq)});var{defineProperty:wY,getOwnPropertyDescriptor:LY}=Object,EY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?LY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&wY(Q,J,X),X},iJ=(q,Q)=>(J,W)=>Q(J,W,q),eq=class{constructor(q,Q){this.config=q,this.http=Q}async getDescriptors({safeContractAddress:q,chainId:Q,challenge:J}){try{let W=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/ethereum/${Q}/safe/account/${q}`,{params:{challenge:J}});return W?this.isSafeAccountDto(W)?j({account:{signedDescriptor:W.accountDescriptor.signedDescriptor,keyId:W.accountDescriptor.keyId,keyUsage:W.accountDescriptor.keyUsage},signers:{signedDescriptor:W.signersDescriptor.signedDescriptor,keyId:W.signersDescriptor.keyId,keyUsage:W.signersDescriptor.keyUsage}}):K(Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")):K(Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response"))}catch{return K(Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors"))}}isSafeAccountDto(q){return typeof q=="object"&&q!==null&&"accountDescriptor"in q&&"signersDescriptor"in q&&typeof q.accountDescriptor=="object"&&typeof q.signersDescriptor=="object"&&this.isSafeDescriptorDto(q.accountDescriptor)&&this.isSafeDescriptorDto(q.signersDescriptor)}isSafeDescriptorDto(q){return typeof q=="object"&&q!==null&&"signedDescriptor"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.signedDescriptor=="string"&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"}};eq=EY([iJ(0,$(b.Config)),iJ(1,$(B.NetworkClient))],eq);var $q={SafeAddressDataSource:Symbol.for("SafeAddressDataSource"),SafeAddressLoader:Symbol.for("SafeAddressLoader")};var{defineProperty:SY,getOwnPropertyDescriptor:kY}=Object,xY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?kY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&SY(Q,J,X),X},nJ=(q,Q)=>(J,W)=>Q(J,W,q),TY=[G.ETHEREUM_SAFE,G.ETHEREUM_SIGNER],qQ=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q.every((J)=>TY.includes(J))&&typeof q=="object"&&q!==null&&"safeContractAddress"in q&&L(q.safeContractAddress)&&q.safeContractAddress!=="0x"&&"chainId"in q&&typeof q.chainId=="number"&&"deviceModelId"in q&&q.deviceModelId!==void 0&&"challenge"in q&&typeof q.challenge=="string"&&q.challenge.length>0}async load({safeContractAddress:q,chainId:Q,deviceModelId:J,challenge:W}){return(await this._dataSource.getDescriptors({safeContractAddress:q,chainId:Q,challenge:W})).caseOf({Left:(X)=>Promise.resolve([{type:G.ERROR,error:X}]),Right:async({account:X,signers:Y})=>[{type:G.ETHEREUM_SAFE,payload:X.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:X.keyId,keyUsage:X.keyUsage,targetDevice:J})},{type:G.ETHEREUM_SIGNER,payload:Y.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:Y.keyId,keyUsage:Y.keyUsage,targetDevice:J})}]})}};qQ=xY([O(),nJ(0,$($q.SafeAddressDataSource)),nJ(1,$(H.PkiCertificateLoader))],qQ);var aJ=()=>new v(({bind:q})=>{q($q.SafeAddressDataSource).to(eq),q($q.SafeAddressLoader).to(qQ)});var{defineProperty:AY,getOwnPropertyDescriptor:fY}=Object,hY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?fY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&AY(Q,J,X),X},oJ=(q,Q)=>(J,W)=>Q(J,W,q),QQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfosPayload({chainId:q,address:Q}){try{let J=(await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:Q,chain_id:q,output:"descriptor",ref:`branch:${this.config.cal.branch}`}}))?.[0];if(!J||!J.descriptor||!J.descriptor.data||!J.descriptor.signatures||typeof J.descriptor.signatures[this.config.cal.mode]!="string")return K(Error(`[ContextModule] HttpTokenDataSource: no token metadata for address ${Q} on chain ${q}`));let W=(J.descriptor.data.length/2-20-4-4).toString(16).padStart(2,"0");return j([W,J.descriptor.data,J.descriptor.signatures[this.config.cal.mode]].join(""))}catch{return K(Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};QQ=hY([O(),oJ(0,$(b.Config)),oJ(1,$(B.NetworkClient))],QQ);var{defineProperty:CY,getOwnPropertyDescriptor:yY}=Object,gY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?yY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&CY(Q,J,X),X},rJ=(q,Q)=>(J,W)=>Q(J,W,q),JQ=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q===G.ETHEREUM_TOKEN&&typeof q=="object"&&q!==null&&"chainId"in q&&"address"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0}async loadField(q){let Q=await this._dataSource.getTokenInfosPayload({address:q.address,chainId:q.chainId}),J=await this._certificateLoader.loadCertificate({keyId:k.Erc20MetadataKey,keyUsage:P.CoinMeta,targetDevice:q.deviceModelId});return Q.caseOf({Left:(W)=>({type:G.ERROR,error:W}),Right:(W)=>({type:G.ETHEREUM_TOKEN,payload:W,certificate:J})})}};JQ=gY([O(),rJ(0,$(A.TokenDataSource)),rJ(1,$(H.PkiCertificateLoader))],JQ);var{defineProperty:mY,getOwnPropertyDescriptor:uY}=Object,pY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?uY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&mY(Q,J,X),X},tJ=(q,Q)=>(J,W)=>Q(J,W,q),eJ=((q)=>(q.Approve="0x095ea7b3",q.Transfer="0xa9059cbb",q))(eJ||{}),lY=Object.values(eJ),cY=[G.ETHEREUM_TOKEN],WQ=class{_dataSource;logger;constructor(q,Q){this._dataSource=q,this.logger=Q("TokenContextLoader")}canHandle(q,Q){return typeof q=="object"&&q!==null&&"to"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.to)&&q.to!=="0x"&&L(q.selector)&&this.isSelectorSupported(q.selector)&&cY.every((J)=>Q.includes(J))}async load(q){let{to:Q,chainId:J}=q,W=[(await this._dataSource.getTokenInfosPayload({address:Q,chainId:J})).caseOf({Left:(X)=>({type:G.ERROR,error:X}),Right:(X)=>({type:G.ETHEREUM_TOKEN,payload:X})})];return this.logger.debug("load result",{data:{result:W}}),W}isSelectorSupported(q){return Object.values(lY).includes(q)}};WQ=pY([O(),tJ(0,$(A.TokenDataSource)),tJ(1,$(b.ContextModuleLoggerFactory))],WQ);var qW=()=>new v(({bind:q})=>{q(A.TokenDataSource).to(QQ),q(A.TokenContextLoader).to(WQ),q(A.TokenContextFieldLoader).to(JQ)});var QW="X-Ledger-Client-Version",JW="X-Ledger-Client-Origin";var WW={dependencies:{bs58:"catalog:","crypto-js":"catalog:",ethers:"catalog:",inversify:"catalog:","purify-ts":"catalog:","reflect-metadata":"catalog:"},devDependencies:{"@ledgerhq/device-management-kit":"workspace:^","@ledgerhq/eslint-config-dsdk":"workspace:^","@ledgerhq/ldmk-tool":"workspace:^","@ledgerhq/prettier-config-dsdk":"workspace:^","@ledgerhq/tsconfig-dsdk":"workspace:^","@ledgerhq/vitest-config-dmk":"workspace:^","@types/crypto-js":"catalog:","ts-node":"catalog:"},exports:{".":{import:"./lib/esm/index.js",require:"./lib/cjs/index.js",types:"./lib/types/index.d.ts"},"./*":{import:"./lib/esm/*",require:"./lib/cjs/*",types:"./lib/types/*"}},files:["./lib"],license:"Apache-2.0",name:"@ledgerhq/context-module",peerDependencies:{"@ledgerhq/device-management-kit":"workspace:^"},private:!1,repository:{type:"git",url:"https://github.com/LedgerHQ/device-sdk-ts.git"},scripts:{build:"pnpm ldmk-tool build --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",dev:'concurrently "pnpm watch:builds" "pnpm watch:types"',lint:"eslint","lint:fix":"pnpm lint --fix",postpack:"find . -name '*.tgz' -exec cp {} ../../../dist/ \\; ",prebuild:"rimraf lib",prettier:"prettier . --check","prettier:fix":"prettier . --write",test:"vitest run","test:coverage":"vitest run --coverage","test:watch":"vitest",typecheck:"tsc --noEmit","watch:builds":"pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json","watch:types":'concurrently "tsc --watch -p tsconfig.prod.json" "tsc-alias --watch -p tsconfig.prod.json"'},version:"2.6.0"};var qq=(q)=>new XW({headers:{[QW]:`context-module/${WW.version}`,...q.originToken&&{[JW]:q.originToken}}});var{defineProperty:sY,getOwnPropertyDescriptor:iY}=Object,nY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?iY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&sY(Q,J,X),X},YW=(q,Q)=>(J,W)=>Q(J,W,q),XQ=class{constructor(q,Q){this.config=q,this.http=Q??qq(q)}http;async getDomainNamePayload({chainId:q,domain:Q,challenge:J}){let W;try{W=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${q}/forward/${Q}`,{params:{types:"eoa",sources:"ens",challenge:J}})}catch{return K(Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name"))}return W?this.isTrustedNameDto(W)?j({data:W.signedDescriptor.data,keyId:W.keyId,keyUsage:W.keyUsage}):K(Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain ${Q} on chain ${q}`)):K(Error(`[ContextModule] HttpTrustedNameDataSource: No data received for domain ${Q} on chain ${q}`))}async getTrustedNamePayload({chainId:q,address:Q,challenge:J,sources:W,types:X}){let Y;try{W=W.filter((N)=>N==="ens"||N==="crypto_asset_list"),Y=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/ethereum/${q}/reverse/${Q}`,{params:{types:X.join(","),sources:W.join(","),challenge:J}})}catch{return K(Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name"))}if(!Y)return K(Error(`[ContextModule] HttpTrustedNameDataSource: No data received for address ${Q} on chain ${q}`));if(!this.isTrustedNameDto(Y))return K(Error(`[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address ${Q} on chain ${q}`));if(typeof Y.signedDescriptor.signatures[this.config.cal.mode]!="string")return j({data:Y.signedDescriptor.data,keyId:Y.keyId,keyUsage:Y.keyUsage});let Z=Y.signedDescriptor.signatures[this.config.cal.mode];return j({data:this.formatTrustedName(Y.signedDescriptor.data,Z),keyId:Y.keyId,keyUsage:Y.keyUsage})}formatTrustedName(q,Q){Q.length%2!==0&&(Q="0"+Q);let J="15",W=(Q.length/2).toString(16);return`${q}${J}${W}${Q}`}isTrustedNameDto(q){return typeof q=="object"&&q!==null&&"signedDescriptor"in q&&"keyId"in q&&"keyUsage"in q&&typeof q.keyId=="string"&&typeof q.keyUsage=="string"&&typeof q.signedDescriptor=="object"&&q.signedDescriptor!==null&&"data"in q.signedDescriptor&&"signatures"in q.signedDescriptor&&typeof q.signedDescriptor.data=="string"&&typeof q.signedDescriptor.signatures=="object"}};XQ=nY([O(),YW(0,$(b.Config)),YW(1,$(B.NetworkClient))],XQ);var l={TrustedNameDataSource:Symbol.for("TrustedNameDataSource"),TrustedNameContextLoader:Symbol.for("TrustedNameContextLoader"),TrustedNameContextFieldLoader:Symbol.for("TrustedNameContextFieldLoader")};var{defineProperty:aY,getOwnPropertyDescriptor:oY}=Object,rY=(q,Q,J,W)=>{for(var X=W>1?void 0:W?oY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&aY(Q,J,X),X},ZW=(q,Q)=>(J,W)=>Q(J,W,q),YQ=class{constructor(q,Q){this._dataSource=q,this._certificateLoader=Q}canHandle(q,Q){return Q===G.ETHEREUM_TRUSTED_NAME&&typeof q=="object"&&q!==null&&"chainId"in q&&"address"in q&&"challenge"in q&&"types"in q&&"sources"in q&&"deviceModelId"in q&&q.deviceModelId!==void 0}async loadField(q){return await(await this._dataSource.getTrustedNamePayload({chainId:q.chainId,address:q.address,challenge:q.challenge,types:q.types,sources:q.sources})).caseOf({Left:(Q)=>Promise.resolve({type:G.ERROR,error:Q}),Right:async({data:Q,keyId:J,keyUsage:W})=>{let X=await this._certificateLoader.loadCertificate({keyId:J,keyUsage:W,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_TRUSTED_NAME,payload:Q,certificate:X}}})}};YQ=rY([O(),ZW(0,$(l.TrustedNameDataSource)),ZW(1,$(H.PkiCertificateLoader))],YQ);var{defineProperty:tY,getOwnPropertyDescriptor:eY}=Object,qZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?eY(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&tY(Q,J,X),X},JJ=(q,Q)=>(J,W)=>Q(J,W,q),QZ=[G.ETHEREUM_TRUSTED_NAME],ZQ=class{constructor(q,Q,J){this._dataSource=q,this._certificateLoader=Q,this.logger=J("TrustedNameContextLoader")}logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"chainId"in q&&q.chainId!==void 0&&typeof q.chainId=="number"&&"to"in q&&q.to!==void 0&&L(q.to)&&q.to!=="0x"&&"deviceModelId"in q&&q.deviceModelId!==void 0&&QZ.every((J)=>Q.includes(J))}async load(q){let Q=await this._dataSource.getTrustedNamePayload({chainId:q.chainId,address:q.to,challenge:"",types:["eoa"],sources:["ens"]});return this.logger.debug("[ContextModule]: load result",{data:{payload:Q}}),await Q.caseOf({Left:(J)=>Promise.resolve([{type:G.ERROR,error:J}]),Right:async({data:J,keyId:W,keyUsage:X})=>{let Y=await this._certificateLoader.loadCertificate({keyId:W,keyUsage:X,targetDevice:q.deviceModelId});return[{type:G.ETHEREUM_TRUSTED_NAME,payload:J,certificate:Y}]}})}};ZQ=qZ([O(),JJ(0,$(l.TrustedNameDataSource)),JJ(1,$(H.PkiCertificateLoader)),JJ(2,$(b.ContextModuleLoggerFactory))],ZQ);var $W=(q)=>new v(({bind:Q})=>{q?Q(l.TrustedNameDataSource).toConstantValue(q):Q(l.TrustedNameDataSource).to(XQ),Q(l.TrustedNameContextLoader).to(ZQ),Q(l.TrustedNameContextFieldLoader).to(YQ)});var GW=255,Gq=((q)=>(q.None="none",q.Present="present",q.VerifyingContract="verifying_contract",q))(Gq||{});var{defineProperty:JZ,getOwnPropertyDescriptor:WZ}=Object,XZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?WZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&JZ(Q,J,X),X},VW=(q,Q)=>(J,W)=>Q(J,W,q),$Q=class{constructor(q,Q){this.config=q,this.http=Q}async getTypedDataFilters({chainId:q,address:Q,schema:J,version:W}){let X;try{let Y=await this.http.get(`${this.config.cal.url}/dapps`,{params:{contracts:Q,chain_id:q,output:"descriptors_eip712",descriptors_eip712_version:W,descriptors_eip712:"<set>",ref:`branch:${this.config.cal.branch}`}}),Z=cq(J);Q=Q.toLowerCase();let N=(Y??[]).map((V)=>V?.descriptors_eip712?.[Q]?.[Z]).find(Boolean);if(!N)return K(Error(`[ContextModule] HttpTypedDataDataSource: no typed data filters for address ${Q} on chain ${q} for schema ${Z}`));if(!Array.isArray(N.instructions))return K(Error(`[ContextModule] HttpTypedDataDataSource: no message info for address ${Q} on chain ${q} for schema ${Z}`));let z=[],F={};for(let V of N.instructions)if(this.isInstructionContractInfo(V,this.config.cal.mode))X={displayName:V.display_name,signature:V.signatures[this.config.cal.mode],filtersCount:V.field_mappers_count};else if(W==="v1"&&this.isInstructionFieldV1(V,this.config.cal.mode))z.push({type:"raw",displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode]});else if(this.isInstructionFieldV2(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode]});else if(this.isInstructionFieldV2WithCoinRef(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode],tokenIndex:V.coin_ref});else if(this.isInstructionFieldV2WithName(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode],types:V.name_types,sources:V.name_sources,typesAndSourcesPayload:this.formatTrustedNameTypesAndSources(V)});else if(this.isInstructionCalldataInfo(V,this.config.cal.mode))F[V.calldata_index]={displayName:V.display_name,calldataIndex:V.calldata_index,valueFlag:V.value_filter_flag,calleeFlag:this.convertCalldataPresenceFlag(V.callee_filter_flag),amountFlag:V.amount_filter_flag,spenderFlag:this.convertCalldataPresenceFlag(V.spender_filter_flag),chainIdFlag:V.chain_id_filter_flag,selectorFlag:V.selector_filter_flag,signature:V.signatures[this.config.cal.mode]};else if(this.isInstructionFieldV2Calldata(V,this.config.cal.mode))z.push({type:V.format,displayName:V.display_name,path:V.field_path,signature:V.signatures[this.config.cal.mode],calldataIndex:V.calldata_index});else return K(Error(`[ContextModule] HttpTypedDataDataSource: invalid typed data field for address ${Q} on chain ${q} for schema ${Z}`));return X?j({messageInfo:X,filters:z,calldatasInfos:F}):K(Error(`[ContextModule] HttpTypedDataDataSource: no message info for address ${Q} on chain ${q} for schema ${Z}`))}catch{return K(Error("[ContextModule] HttpTypedDataDataSource: Failed to fetch typed data informations"))}}convertCalldataPresenceFlag(q){switch(q){case"none":return Gq.None;case"present":return Gq.Present;case"verifying_contract":return Gq.VerifyingContract;default:throw Error(`Unhandled flag: ${q}`)}}formatTrustedNameTypesAndSources(q){let Q=q.name_types.length,J=q.name_sources.length,W=q.descriptor.slice((Q+J)*2*-1,J*2*-1),X=q.descriptor.slice(J*2*-1),Y=Q.toString(16).padStart(2,"0"),Z=J.toString(16).padStart(2,"0");return Y+W+Z+X}isInstructionFieldV1(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"}isInstructionFieldV2(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&["raw","datetime"].includes(q.format)&&q.coin_ref===void 0}isInstructionFieldV2WithCoinRef(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&["token","amount"].includes(q.format)&&typeof q.coin_ref=="number"}isInstructionFieldV2WithName(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&q.format==="trusted-name"&&q.coin_ref===void 0&&Array.isArray(q.name_types)&&Array.isArray(q.name_sources)&&q.name_types.every((J)=>typeof J=="string")&&q.name_sources.every((J)=>typeof J=="string")}isInstructionContractInfo(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_mappers_count=="number"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&q.field_path===void 0}isInstructionCalldataInfo(q,Q){return typeof q=="object"&&typeof q.type=="string"&&q.type==="calldata"&&typeof q.display_name=="string"&&typeof q.calldata_index=="number"&&typeof q.value_filter_flag=="boolean"&&typeof q.chain_id_filter_flag=="boolean"&&typeof q.selector_filter_flag=="boolean"&&typeof q.amount_filter_flag=="boolean"&&["none","present","verifying_contract"].includes(q.callee_filter_flag)&&["none","present","verifying_contract"].includes(q.spender_filter_flag)&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"}isInstructionFieldV2Calldata(q,Q){return typeof q=="object"&&typeof q.display_name=="string"&&typeof q.field_path=="string"&&typeof q.signatures=="object"&&typeof q.signatures[Q]=="string"&&typeof q.format=="string"&&["calldata-value","calldata-callee","calldata-chain-id","calldata-selector","calldata-amount","calldata-spender"].includes(q.format)&&typeof q.calldata_index=="number"}};$Q=XZ([O(),VW(0,$(b.Config)),VW(1,$(B.NetworkClient))],$Q);var Vq={TypedDataDataSource:Symbol.for("TypedDataDataSource"),TypedDataContextLoader:Symbol.for("TypedDataContextLoader")};var{defineProperty:YZ,getOwnPropertyDescriptor:ZZ}=Object,$Z=(q,Q,J,W)=>{for(var X=W>1?void 0:W?ZZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&YZ(Q,J,X),X},Mq=(q,Q)=>(J,W)=>Q(J,W,q),GQ=class{constructor(q,Q,J,W,X){this.dataSource=q,this.tokenDataSource=Q,this.proxyDataSource=J,this._certificateLoader=W,this.logger=X("DefaultTypedDataContextLoader")}logger;async load(q){let Q,J=await this.dataSource.getTypedDataFilters({address:q.verifyingContract,chainId:q.chainId,version:q.version,schema:q.schema});if(J.isLeft()){let{resolvedAddress:F,context:V}=await this.resolveProxy(q);if(V!==void 0&&(Q=V,J=await this.dataSource.getTypedDataFilters({address:F,chainId:q.chainId,version:q.version,schema:q.schema})),J.isLeft()){let _={type:"error",error:J.extract()};return this.logger.debug("load result",{data:{result:_}}),_}}let{messageInfo:W,filters:X,calldatasInfos:Y}=J.unsafeCoerce(),Z=X.reduce((F,V)=>(F[V.path]=V,F),{}),N=await this._certificateLoader.loadCertificate({keyId:k.Erc20MetadataKey,keyUsage:P.CoinMeta,targetDevice:q.deviceModelId}),z={type:"success",messageInfo:W,filters:Z,trustedNamesAddresses:this.extractTrustedNames(X,q),tokens:await this.extractTokens(X,q),calldatas:this.extractCalldatas(X,Y,q),certificate:N,proxy:Q};return this.logger.debug("load result",{data:{result:z}}),z}async resolveProxy(q){let Q=await this.proxyDataSource.getProxyImplementationAddress({calldata:"0x",proxyAddress:q.verifyingContract,chainId:q.chainId,challenge:q.challenge??""});if(Q.isLeft())return{resolvedAddress:q.verifyingContract,context:void 0};let J=Q.unsafeCoerce(),W=await this._certificateLoader.loadCertificate({keyId:J.keyId,keyUsage:J.keyUsage,targetDevice:q.deviceModelId});return{resolvedAddress:J.implementationAddress,context:{type:G.ETHEREUM_PROXY_INFO,payload:J.signedDescriptor,certificate:W}}}extractTrustedNames(q,Q){return q.filter((J)=>J.type==="trusted-name").reduce((J,W)=>{let X=Q.fieldsValues.filter((Y)=>Y.path===W.path);if(X.length!==0){let Y=X[0],Z=this.convertAddressToHexaString(Y.value);J[W.path]=Z}return J},{})}async extractTokens(q,Q){let J={};for(let W of q){if(W.type!=="token"&&W.type!=="amount")continue;let X=W.tokenIndex;if(J[X]===void 0){if(W.type==="token"){let Y=Q.fieldsValues.filter((z)=>z.path===W.path);if(Y.length===0)continue;let Z=Y[0],N=this.convertAddressToHexaString(Z.value);if(Y.every((z)=>this.convertAddressToHexaString(z.value)===N)){let z=Q.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:N,chainId:z})).ifRight((F)=>{J[X]=F})}}else if(W.type==="amount"&&X===GW){let{verifyingContract:Y,chainId:Z}=Q;(await this.tokenDataSource.getTokenInfosPayload({address:Y,chainId:Z})).ifRight((N)=>{J[X]=N})}}}return J}extractCalldatas(q,Q,J){let W=q.reduce((Y,Z)=>{if(Z.type==="calldata-value"||Z.type==="calldata-callee"||Z.type==="calldata-chain-id"||Z.type==="calldata-selector"||Z.type==="calldata-amount"||Z.type==="calldata-spender"){let N=Y[Z.calldataIndex];N===void 0?Y[Z.calldataIndex]=[Z]:N.push(Z)}return Y},{}),X={};for(let Y in Q){let Z=Q[Y],N=W[Y];if(!N)continue;let z=this.extractHexaString(N.find((I)=>I.type==="calldata-value"),J,"0x"),F=this.extractHexaString(N.find((I)=>I.type==="calldata-selector"),J,z.slice(0,10)),V=this.extractAddress(N.find((I)=>I.type==="calldata-callee"),J,Z.calleeFlag),_=this.extractAddress(N.find((I)=>I.type==="calldata-spender"),J,Z.spenderFlag),R=this.extractBigint(N.find((I)=>I.type==="calldata-amount"),J,void 0),w=this.extractBigint(N.find((I)=>I.type==="calldata-chain-id"),J,void 0),M=w!==void 0&&w<Number.MAX_SAFE_INTEGER?Number(w):J.chainId;X[Y]={filter:Z,subset:{chainId:M,data:z,selector:F,to:V,value:R,from:_}}}return X}extractHexaString(q,Q,J){if(q!==void 0){let W=Q.fieldsValues.filter((X)=>X.path===q.path);if(W.length!==0)return wq(W[0].value)}return J}extractAddress(q,Q,J,W){if(J===Gq.VerifyingContract)return Q.verifyingContract;if(q!==void 0){let X=Q.fieldsValues.filter((Y)=>Y.path===q.path);if(X.length!==0)return this.convertAddressToHexaString(X[0].value)}return W}extractBigint(q,Q,J){if(q!==void 0){let W=Q.fieldsValues.filter((X)=>X.path===q.path);if(W.length!==0)return BigInt(wq(W[0].value))}return J}convertAddressToHexaString(q){return`0x${Array.from(q,(Q)=>Q.toString(16).padStart(2,"0")).join("").padStart(40,"0")}`}};GQ=$Z([O(),Mq(0,$(Vq.TypedDataDataSource)),Mq(1,$(A.TokenDataSource)),Mq(2,$(h.ProxyDataSource)),Mq(3,$(H.PkiCertificateLoader)),Mq(4,$(b.ContextModuleLoggerFactory))],GQ);var KW=()=>new v(({bind:q})=>{q(Vq.TypedDataDataSource).to($Q),q(Vq.TypedDataContextLoader).to(GQ)});var OW=["function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable"],FW="0x3593564c",y=((q)=>(q.V2_SWAP_EXACT_IN="V2_SWAP_EXACT_IN",q.V2_SWAP_EXACT_OUT="V2_SWAP_EXACT_OUT",q.V3_SWAP_EXACT_IN="V3_SWAP_EXACT_IN",q.V3_SWAP_EXACT_OUT="V3_SWAP_EXACT_OUT",q.WRAP_ETH="WRAP_ETH",q.UNWRAP_ETH="UNWRAP_ETH",q.PERMIT2_PERMIT="PERMIT2_PERMIT",q.PERMIT2_TRANSFER_FROM="PERMIT2_TRANSFER_FROM",q.PERMIT2_PERMIT_BATCH="PERMIT2_PERMIT_BATCH",q.PERMIT2_TRANSFER_FROM_BATCH="PERMIT2_TRANSFER_FROM_BATCH",q.PAY_PORTION="PAY_PORTION",q.SWEEP="SWEEP",q))(y||{}),bW={"0x08":"V2_SWAP_EXACT_IN","0x09":"V2_SWAP_EXACT_OUT","0x00":"V3_SWAP_EXACT_IN","0x01":"V3_SWAP_EXACT_OUT","0x0b":"WRAP_ETH","0x0c":"UNWRAP_ETH","0x0a":"PERMIT2_PERMIT","0x0d":"PERMIT2_TRANSFER_FROM","0x02":"PERMIT2_PERMIT_BATCH","0x03":"PERMIT2_TRANSFER_FROM_BATCH","0x06":"PAY_PORTION","0x04":"SWEEP"},NW=["V2_SWAP_EXACT_IN","V2_SWAP_EXACT_OUT","V3_SWAP_EXACT_IN","V3_SWAP_EXACT_OUT"];var WJ=((q)=>(q[q.ETHEREUM_MAINNET=1]="ETHEREUM_MAINNET",q[q.ETHEREUM_GOERLI=5]="ETHEREUM_GOERLI",q[q.ETHEREUM_SEPOLIA=11155111]="ETHEREUM_SEPOLIA",q[q.ARBITRUM_ONE=42161]="ARBITRUM_ONE",q[q.ARBITRUM_GOERLI=421613]="ARBITRUM_GOERLI",q[q.AVALANCHE_C_CHAIN=43114]="AVALANCHE_C_CHAIN",q[q.BSC=56]="BSC",q[q.BASE=8453]="BASE",q[q.BASE_GOERLI=84531]="BASE_GOERLI",q[q.BLAST=23888]="BLAST",q[q.OPTIMISM=10]="OPTIMISM",q[q.OPTIMISM_GOERLI=420]="OPTIMISM_GOERLI",q[q.POLYGON=137]="POLYGON",q[q.POLYGON_MUMBAI=80001]="POLYGON_MUMBAI",q))(WJ||{}),zW={1:"0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2",5:"0xB4FBF271143F4FBf7B91A5ded31805e42b2208d6",11155111:"0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14",42161:"0x82aF49447D8a07e3bd95BD0d56f35241523fBab1",421613:"0xe39Ab88f8A4777030A534146A9Ca3B52bd5D43A3",43114:"0xB31f66AA3C1e785363F0875A1B74E27b85FD66c7",56:"0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c",8453:"0x4200000000000000000000000000000000000006",84531:"0x44D627f900da8AdaC7561bD73aA745F132450798",23888:"0x4300000000000000000000000000000000000004",10:"0x4200000000000000000000000000000000000006",420:"0x4200000000000000000000000000000000000006",137:"0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270",80001:"0x9c3C9283D3e44854697Cd22D3Faa240Cfb032889"};var{defineProperty:GZ,getOwnPropertyDescriptor:VZ}=Object,KZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?VZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&GZ(Q,J,X),X},OZ=(q,Q)=>(J,W)=>Q(J,W,q),XJ=40,jW=6,VQ=class{constructor(q){this.abiDecoder=q}decode(q,Q,J){switch(q){case y.V2_SWAP_EXACT_IN:return this._decodeSwapV2(Q);case y.V2_SWAP_EXACT_OUT:return this._decodeSwapV2(Q);case y.V3_SWAP_EXACT_IN:return this._decodeSwapV3(Q);case y.V3_SWAP_EXACT_OUT:return this._decodeSwapV3(Q);case y.WRAP_ETH:return this._decodeWrappedEth(Q,J);case y.UNWRAP_ETH:return this._decodeWrappedEth(Q,J);case y.SWEEP:return this._decodeSweep(Q);case y.PERMIT2_PERMIT:case y.PERMIT2_TRANSFER_FROM:case y.PERMIT2_PERMIT_BATCH:case y.PERMIT2_TRANSFER_FROM_BATCH:case y.PAY_PORTION:return[];default:return[]}}_decodeSwapV2(q){let[,,,Q]=this.abiDecoder.decode(["address","uint256","uint256","address[]","bool"],q);return!Array.isArray(Q)||!Q.every(L)?[]:Q.map((J)=>J.toLowerCase())}_decodeSwapV3(q){let[,,,Q]=this.abiDecoder.decode(["address","uint256","uint256","bytes","bool"],q);if(typeof Q!="string"||!L(Q)||Q.length<2+XJ*2+jW)return[];let J=[];for(let W=2;W<Q.length;W+=XJ+jW)J.push(Q.slice(W,W+XJ));return J.map((W)=>W.toLowerCase()).map((W)=>`0x${W}`)}_isSupportedChainId(q){return Object.values(WJ).includes(q)}_decodeWrappedEth(q,Q){return this._isSupportedChainId(Q)?[zW[Q].toLowerCase()]:[]}_decodeSweep=(q)=>{let[Q]=this.abiDecoder.decode(["address","address","uint256"],q);return typeof Q!="string"||!L(Q)?[]:[Q.toLowerCase()]}};VQ=KZ([O(),OZ(0,$(n.AbiDecoderDataSource))],VQ);import{AbiCoder as zZ}from"ethers";var{defineProperty:FZ,getOwnPropertyDescriptor:bZ}=Object,NZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?bZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&FZ(Q,J,X),X},KQ=class{decode(q,Q){try{return zZ.defaultAbiCoder().decode(q,Q)}catch{return[]}}};KQ=NZ([O()],KQ);import{Interface as HZ}from"ethers";var{defineProperty:jZ,getOwnPropertyDescriptor:vZ}=Object,BZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?vZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&jZ(Q,J,X),X},YJ=(q,Q)=>(J,W)=>Q(J,W,q),DZ=[G.ETHEREUM_TOKEN],OQ=class{constructor(q,Q,J){this.commandDecoderDataSource=q,this.tokenDataSource=Q,this.logger=J("UniswapContextLoader")}logger;canHandle(q,Q){return typeof q=="object"&&q!==null&&"data"in q&&"selector"in q&&"chainId"in q&&typeof q.chainId=="number"&&L(q.data)&&q.data!=="0x"&&L(q.selector)&&q.selector===FW&&DZ.every((J)=>Q.includes(J))}async load(q){let{data:Q,chainId:J}=q,W=await this._extractClearSignContexts(Q,J);return this.logger.debug("load result",{data:{result:W}}),W}async _extractClearSignContexts(q,Q){try{let J=new HZ(OW).parseTransaction({data:q}),W=J?.args[0],X=J?.args[1];if(!L(W)||!this._isHexaStringArray(X))return[];let Y=this._extractCommands(W).orDefault([]);if(W.length===0||X.length!==Y.length)return[];let Z=Y.reduce((z,F,V)=>{let _=X[V],R=this.commandDecoderDataSource.decode(F,_,Q);return z.push([F,R]),z},[]);if(!this._isChainingSwapSupported(Z))return[];let N=[...new Set(Z.flatMap(([,z])=>z))];return(await Promise.all(N.map((z)=>this.tokenDataSource.getTokenInfosPayload({address:z,chainId:Q})))).map((z)=>z.caseOf({Left:(F)=>({type:G.ERROR,error:F}),Right:(F)=>({type:G.ETHEREUM_TOKEN,payload:F})}))}catch{return[]}}_extractCommands(q){return ZJ.fromNullable(q.slice(2).match(/../g)).map((Q)=>Q.map((J)=>`0x${J}`)).map((Q)=>Q.map((J)=>bW[J])).chain((Q)=>Q.every((J)=>J!==void 0)?ZJ.of(Q):vW)}_isChainingSwapSupported(q){let Q,J;for(let[W,X]of q){if(!NW.includes(W))continue;let Y=W.slice(0,2);if(Q&&(Q!==X[0]||J!==Y))return!1;Q=X[X.length-1],J=Y}return!0}_isHexaStringArray(q){return Array.isArray(q)&&q.every((Q)=>typeof Q=="string"&&L(Q))}};OQ=BZ([O(),YJ(0,$(n.CommandDecoderDataSource)),YJ(1,$(A.TokenDataSource)),YJ(2,$(b.ContextModuleLoggerFactory))],OQ);var BW=()=>new v(({bind:q})=>{q(n.AbiDecoderDataSource).to(KQ),q(n.CommandDecoderDataSource).to(VQ),q(n.UniswapContextLoader).to(OQ)});class $J{static keyUsageMap=new Map([[P.GenuineCheck,1],[P.ExchangePayload,2],[P.NftMeta,3],[P.TrustedName,4],[P.BackupProvider,5],[P.ProtectOrchestrator,6],[P.PluginMeta,7],[P.CoinMeta,8],[P.SeedIdAuth,9],[P.TxSimulationSigner,10],[P.Calldata,11],[P.Network,12],[P.SwapTemplate,13],[P.LESMultisig,14],[P.GatedSigning,15]]);static mapKeyUsageForFirmware(q){return Object.values(P).includes(q)?this.keyUsageMap.get(q)??-1:-1}}var{defineProperty:PZ,getOwnPropertyDescriptor:UZ}=Object,_Z=(q,Q,J,W)=>{for(var X=W>1?void 0:W?UZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&PZ(Q,J,X),X},HW=(q,Q)=>(J,W)=>Q(J,W,q),FQ=class{constructor(q,Q){this.config=q,this.http=Q}async fetchCertificate(q){let Q={output:"descriptor",target_device:q.targetDevice,latest:!0,public_key_id:q.keyId,public_key_usage:q.keyUsage};try{let J=await this.http.get(`${this.config.cal.url}/certificates`,{params:{output:Q.output,target_device:Q.target_device,latest:Q.latest,public_key_id:Q.public_key_id,public_key_usage:Q.public_key_usage}});if(Array.isArray(J)&&J.length>0&&this.isValidPkiCertificateResponse(J[0],this.config.cal.mode)){let W=bQ(T.appendSignatureToPayload(J[0].descriptor.data,J[0].descriptor.signatures[this.config.cal.mode],Xq));if(!W)return K(Error("[ContextModule] HttpPkiCertificateDataSource: Cannot generate payload from fetched PKI Certificate"));let X={payload:W,keyUsageNumber:$J.mapKeyUsageForFirmware(q.keyUsage)};return j(X)}else return K(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}catch{return K(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}}isValidPkiCertificateResponse(q,Q){if(!this.isRecord(q)||!this.isRecord(q.descriptor))return!1;let J=q.descriptor;return typeof J.data!="string"||!this.isRecord(J.signatures)?!1:typeof J.signatures[Q]=="string"}isRecord(q){return typeof q=="object"&&q!==null}};FQ=_Z([O(),HW(0,$(b.Config)),HW(1,$(B.NetworkClient))],FQ);var{defineProperty:RZ,getOwnPropertyDescriptor:IZ}=Object,MZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?IZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&RZ(Q,J,X),X},wZ=(q,Q)=>(J,W)=>Q(J,W,q),NQ=class{_dataSource;constructor(q){this._dataSource=q}async loadCertificate(q){return(await this._dataSource.fetchCertificate(q)).orDefault(void 0)}};NQ=MZ([O(),wZ(0,$(H.PkiCertificateDataSource))],NQ);var zQ=()=>new v(({bind:q})=>{q(H.PkiCertificateDataSource).to(FQ),q(H.PkiCertificateLoader).to(NQ)});var{defineProperty:LZ,getOwnPropertyDescriptor:EZ}=Object,SZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?EZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&LZ(Q,J,X),X},DW=(q,Q)=>(J,W)=>Q(J,W,q),jQ=class{constructor(q,Q){this.config=q,this.http=Q??qq(q)}http;async report(q){try{await this.http.post(`${this.config.reporter.url}/v1/blind-signing-events`,{...q,source:this.config.appSource},{responseType:"void"})}catch{return K(Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return j(void 0)}};jQ=SZ([O(),DW(0,$(b.Config)),DW(1,$(B.NetworkClient))],jQ);var Qq={BlindSigningReporterDatasource:Symbol.for("BlindSigningReporterDatasource"),BlindSigningReporter:Symbol.for("BlindSigningReporter")};var{defineProperty:kZ,getOwnPropertyDescriptor:xZ}=Object,TZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?xZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&kZ(Q,J,X),X},AZ=(q,Q)=>(J,W)=>Q(J,W,q),vQ=class{constructor(q){this.dataSource=q}async report(q){return this.dataSource.report(q)}};vQ=TZ([O(),AZ(0,$(Qq.BlindSigningReporterDatasource))],vQ);var PW=()=>new v(({bind:q})=>{q(Qq.BlindSigningReporterDatasource).to(jQ),q(Qq.BlindSigningReporter).to(vQ)});var{defineProperty:fZ,getOwnPropertyDescriptor:hZ}=Object,CZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?hZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&fZ(Q,J,X),X},GJ=(q,Q)=>(J,W)=>Q(J,W,q),BQ=class{constructor(q,Q,J){this.config=q,this.http=J??qq(q),this.logger=Q("HttpSignReporterDatasource")}http;logger;async report(q){try{let Q=this.buildDto(q,this.config.appSource);this.logger.debug("[report] Posting signing event",{data:Q}),await this.http.post(`${this.config.reporter.url}/v2/blind-signing-events`,Q,{responseType:"void"})}catch{return K(Error("[ContextModule] HttpSignReporterDatasource: Failed to report signing event"))}return j(void 0)}buildDto(q,Q){let J={isBlindSign:q.isBlindSign,sessionId:q.sessionId??null,envData:{modelId:q.modelId,signerAppVersion:q.signerAppVersion,deviceVersion:q.deviceVersion,source:Q,...q.platform!==void 0&&{platform:q.platform},...q.appVersion!==void 0&&{appVersion:q.appVersion},...q.platformOS!==void 0&&{platformOS:q.platformOS},...q.platformVersion!==void 0&&{platformVersion:q.platformVersion},...q.liveAppContext!==void 0&&{liveAppContext:q.liveAppContext}}};switch(q.chain){case"ETH":return{...J,chain:"ETH",chainData:{chain:"ETH",signatureId:q.signatureId,signingMethod:q.signingMethod,targetAddress:q.targetAddress,chainId:q.chainId,blindSignReason:q.blindSignReason,...q.selectorId!==void 0&&{selectorId:q.selectorId},...q.clearSigningType!==void 0&&{clearSigningType:q.clearSigningType},...q.partialContextErrors!==void 0&&{partialContextErrors:q.partialContextErrors}}};case"SOL":return{...J,chain:"SOL",chainData:{chain:"SOL",signatureId:q.signatureId,signingMethod:q.signingMethod,targetAddress:q.targetAddress,blindSignReason:q.blindSignReason,programIds:q.programIds,unrecognizedPrograms:q.unrecognizedPrograms,...q.transactionSignature!==void 0&&{transactionSignature:q.transactionSignature}}}}}};BQ=CZ([O(),GJ(0,$(b.Config)),GJ(1,$(b.ContextModuleLoggerFactory)),GJ(2,$(B.NetworkClient))],BQ);var Lq={SignReporterDatasource:Symbol.for("SignReporterDatasource"),SignReporter:Symbol.for("SignReporter")};var{defineProperty:yZ,getOwnPropertyDescriptor:gZ}=Object,mZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?gZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&yZ(Q,J,X),X},uZ=(q,Q)=>(J,W)=>Q(J,W,q),HQ=class{constructor(q){this.dataSource=q}async report(q){return this.dataSource.report(q)}};HQ=mZ([O(),uZ(0,$(Lq.SignReporterDatasource))],HQ);var VJ=()=>new v(({bind:q})=>{q(Lq.SignReporterDatasource).to(BQ),q(Lq.SignReporter).to(HQ)});var{defineProperty:pZ,getOwnPropertyDescriptor:lZ}=Object,cZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?lZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&pZ(Q,J,X),X},UW=(q,Q)=>(J,W)=>Q(J,W,q),Hq=class{constructor(q,Q){this.config=q,this.http=Q}async check({path:q,body:Q}){let J;try{J=await this.http.post(`${this.config.web3checks.url}${q}`,Q)}catch{return K(Error("[ContextModule] HttpTransactionCheckDataSource: Failed to fetch web3 check"))}return this._isDto(J)?j({publicKeyId:J.public_key_id,descriptor:J.descriptor}):K(Error("[ContextModule] HttpTransactionCheckDataSource: Invalid web3 check response"))}_isDto(q){return q!=null&&typeof q=="object"&&"public_key_id"in q&&q.public_key_id!=null&&typeof q.public_key_id=="string"&&"descriptor"in q&&q.descriptor!=null&&typeof q.descriptor=="string"}};Hq=cZ([O(),UW(0,$(b.Config)),UW(1,$(B.NetworkClient))],Hq);var f={TransactionCheckDataSource:Symbol.for("TransactionCheckDataSource"),TransactionCheckLoader:Symbol.for("TransactionCheckLoader"),TypedDataCheckLoader:Symbol.for("TypedDataCheckLoader")};var Kq=((q)=>(q.ETHEREUM_TRANSACTION="/ethereum/scan/tx",q.ETHEREUM_TYPED_DATA="/ethereum/scan/eip-712",q.SOLANA_TRANSACTION="/solana/scan/tx",q))(Kq||{});var{defineProperty:dZ,getOwnPropertyDescriptor:sZ}=Object,iZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?sZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&dZ(Q,J,X),X},KJ=(q,Q)=>(J,W)=>Q(J,W,q),nZ=[G.ETHEREUM_TRANSACTION_CHECK],DQ=class{constructor(q,Q,J){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.logger=J("EthereumTransactionCheckLoader")}logger;canHandle(q,Q){return!nZ.every((J)=>Q.includes(J))||typeof q!="object"||q===null?!1:("from"in q)&&L(q.from)&&q.from!=="0x"&&("chainId"in q)&&typeof q.chainId=="number"&&("transaction"in q)&&q.transaction!==void 0&&("deviceModelId"in q)&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S}async load(q){let{from:Q,chainId:J,transaction:W}=q,X=wq(W);if(!Q||!X)return this.logger.debug("load result",{data:{result:[]}}),[];let Y=[await(await this.transactionCheckDataSource.check({path:Kq.ETHEREUM_TRANSACTION,body:{tx:{from:Q,raw:X},chain:J}})).caseOf({Left:(Z)=>Promise.resolve({type:G.ERROR,error:Z}),Right:async(Z)=>{let N=await this.certificateLoader.loadCertificate({keyId:Z.publicKeyId,keyUsage:P.TxSimulationSigner,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_TRANSACTION_CHECK,payload:Z.descriptor,certificate:N}}})];return this.logger.debug("load result",{data:{result:Y}}),Y}};DQ=iZ([O(),KJ(0,$(f.TransactionCheckDataSource)),KJ(1,$(H.PkiCertificateLoader)),KJ(2,$(b.ContextModuleLoggerFactory))],DQ);var{defineProperty:aZ,getOwnPropertyDescriptor:oZ}=Object,rZ=(q,Q,J,W)=>{for(var X=W>1?void 0:W?oZ(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&aZ(Q,J,X),X},OJ=(q,Q)=>(J,W)=>Q(J,W,q),tZ=[G.ETHEREUM_TRANSACTION_CHECK],PQ=class{constructor(q,Q,J){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.logger=J("EthereumTypedDataCheckLoader")}logger;canHandle(q,Q){return!tZ.every((J)=>Q.includes(J))||typeof q!="object"||q===null?!1:("from"in q)&&L(q.from)&&q.from!=="0x"&&("data"in q)&&typeof q.data=="object"&&("deviceModelId"in q)&&q.deviceModelId!==void 0&&q.deviceModelId!==S.NANO_S}async load(q){let{from:Q,data:J}=q;if(!Q||!J)return this.logger.debug("load result",{data:{result:[]}}),[];let W=[await(await this.transactionCheckDataSource.check({path:Kq.ETHEREUM_TYPED_DATA,body:{msg:{from:Q,data:J}}})).caseOf({Left:(X)=>Promise.resolve({type:G.ERROR,error:X}),Right:async(X)=>{let Y=await this.certificateLoader.loadCertificate({keyId:X.publicKeyId,keyUsage:P.TxSimulationSigner,targetDevice:q.deviceModelId});return{type:G.ETHEREUM_TRANSACTION_CHECK,payload:X.descriptor,certificate:Y}}})];return this.logger.debug("load result",{data:{result:W}}),W}};PQ=rZ([O(),OJ(0,$(f.TransactionCheckDataSource)),OJ(1,$(H.PkiCertificateLoader)),OJ(2,$(b.ContextModuleLoggerFactory))],PQ);var _W=()=>new v(({bind:q})=>{q(f.TransactionCheckDataSource).to(Hq),q(f.TransactionCheckLoader).to(DQ),q(f.TypedDataCheckLoader).to(PQ)});function eZ(q){if(q.length>=255)throw TypeError("Alphabet too long");let Q=new Uint8Array(256);for(let F=0;F<Q.length;F++)Q[F]=255;for(let F=0;F<q.length;F++){let V=q.charAt(F),_=V.charCodeAt(0);if(Q[_]!==255)throw TypeError(V+" is ambiguous");Q[_]=F}let J=q.length,W=q.charAt(0),X=Math.log(J)/Math.log(256),Y=Math.log(256)/Math.log(J);function Z(F){if(F instanceof Uint8Array);else if(ArrayBuffer.isView(F))F=new Uint8Array(F.buffer,F.byteOffset,F.byteLength);else if(Array.isArray(F))F=Uint8Array.from(F);if(!(F instanceof Uint8Array))throw TypeError("Expected Uint8Array");if(F.length===0)return"";let V=0,_=0,R=0,w=F.length;while(R!==w&&F[R]===0)R++,V++;let M=(w-R)*Y+1>>>0,I=new Uint8Array(M);while(R!==w){let u=F[R],c=0;for(let e=M-1;(u!==0||c<_)&&e!==-1;e--,c++)u+=256*I[e]>>>0,I[e]=u%J>>>0,u=u/J>>>0;if(u!==0)throw Error("Non-zero carry");_=c,R++}let m=M-_;while(m!==M&&I[m]===0)m++;let C=W.repeat(V);for(;m<M;++m)C+=q.charAt(I[m]);return C}function N(F){if(typeof F!=="string")throw TypeError("Expected String");if(F.length===0)return new Uint8Array;let V=0,_=0,R=0;while(F[V]===W)_++,V++;let w=(F.length-V)*X+1>>>0,M=new Uint8Array(w);while(V<F.length){let u=F.charCodeAt(V);if(u>255)return;let c=Q[u];if(c===255)return;let e=0;for(let Sq=w-1;(c!==0||e<R)&&Sq!==-1;Sq--,e++)c+=J*M[Sq]>>>0,M[Sq]=c%256>>>0,c=c/256>>>0;if(c!==0)throw Error("Non-zero carry");R=e,V++}let I=w-R;while(I!==w&&M[I]===0)I++;let m=new Uint8Array(_+(w-I)),C=_;while(I!==w)m[C++]=M[I++];return m}function z(F){let V=N(F);if(V)return V;throw Error("Non-base"+J+" character")}return{encode:Z,decodeUnsafe:N,decode:z}}var RW=eZ;var q0="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",FJ=RW(q0);class bJ{static encode(q){return FJ.encode(q)}static decode(q){return FJ.decode(q)}}var g=IW([Dq(S.NANO_X),Dq(S.NANO_SP),Dq(S.STAX),Dq(S.FLEX),Dq(S.APEX)]);var MW=U.custom({decode:(q)=>q instanceof Uint8Array?j(q):K("Expected a Uint8Array"),encode:(q)=>q});var{defineProperty:Q0,getOwnPropertyDescriptor:J0}=Object,W0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?J0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&Q0(Q,J,X),X},NJ=(q,Q)=>(J,W)=>Q(J,W,q),X0=[G.SOLANA_TRANSACTION_CHECK],Y0=U.interface({deviceModelId:g,transactionCheck:U.interface({from:D,transactionBytes:MW,chain:Pq})}),UQ=class{constructor(q,Q,J,W=bJ){this.transactionCheckDataSource=q,this.certificateLoader=Q,this.bs58Encoder=W,this.logger=J("SolanaTransactionCheckLoader")}logger;canHandle(q,Q){return X0.every((J)=>Q.includes(J))?Y0.decode(q).caseOf({Left:()=>!1,Right:({transactionCheck:{from:J,transactionBytes:W}})=>J.length>0&&W.length>0}):!1}async load(q){let{from:Q,transactionBytes:J,chain:W}=q.transactionCheck,X=this.bs58Encoder.encode(J),Y=[await(await this.transactionCheckDataSource.check({path:Kq.SOLANA_TRANSACTION,body:{tx:{from:Q,raw:X},chain:W}})).caseOf({Left:(Z)=>Promise.resolve({type:G.ERROR,error:Z}),Right:async(Z)=>{let N=await this.certificateLoader.loadCertificate({keyId:Z.publicKeyId,keyUsage:P.TxSimulationSigner,targetDevice:q.deviceModelId});return{type:G.SOLANA_TRANSACTION_CHECK,payload:{descriptor:Z.descriptor},certificate:N}}})];return this.logger.debug("load result",{data:{result:Y}}),Y}};UQ=W0([O(),NJ(0,$(f.TransactionCheckDataSource)),NJ(1,$(H.PkiCertificateLoader)),NJ(2,$(b.ContextModuleLoggerFactory))],UQ);var wW=()=>new v(({bind:q})=>{q(f.TransactionCheckDataSource).to(Hq),q(f.TransactionCheckLoader).to(UQ)});var Z0=U.custom({decode:(q)=>typeof q=="string"&&q.length>0?j(q):K("Expected a non-empty string"),encode:(q)=>q}),_Q=U.interface({signedDescriptor:Z0,keyId:D,keyUsage:D});var LW=(q)=>{let Q=2**q-1;return U.custom({decode:(J)=>typeof J=="number"&&Number.isInteger(J)&&J>=0&&J<=Q?j(J):K(`Expected a u${q} integer (0..=${Q})`),encode:(J)=>J})},RQ=LW(8),IQ=LW(16);var{defineProperty:$0,getOwnPropertyDescriptor:G0}=Object,V0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?G0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&$0(Q,J,X),X},EW=(q,Q)=>(J,W)=>Q(J,W,q),MQ=class{constructor(q,Q){this.config=q,this.http=Q}async getAltResolution({altAddress:q,entryIndex:Q,challenge:J}){let W=RQ.decode(Q);if(W.isLeft())return K(Error(`[ContextModule] HttpAltResolutionDataSource: invalid entryIndex (got ${Q}): ${W.leftOrDefault("")}`));let X;try{X=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/alt-resolution/${q}/${Q}`,{params:{challenge:J}})}catch(Y){let Z=Y instanceof Error?Y.message:String(Y);return K(Error(`[ContextModule] HttpAltResolutionDataSource: Failed to fetch ALT resolution: ${Z}`))}return _Q.decode(X).caseOf({Left:(Y)=>K(Error(`[ContextModule] HttpAltResolutionDataSource: malformed response for (${q}, ${Q}): ${Y}`)),Right:(Y)=>{let Z;try{Z=T.hexToBytes(Y.signedDescriptor)}catch(N){return K(Error(`[ContextModule] HttpAltResolutionDataSource: invalid hex in signedDescriptor for (${q}, ${Q}): ${N.message}`))}return j({altAddress:q,entryIndex:Q,descriptor:Z,resolvedAddress:X.resolvedAddress,keyId:Y.keyId,keyUsage:Y.keyUsage})}})}};MQ=V0([O(),EW(0,$(b.Config)),EW(1,$(B.NetworkClient))],MQ);var Oq={AltResolutionDataSource:Symbol.for("AltResolutionDataSource"),AltResolutionContextLoader:Symbol.for("AltResolutionContextLoader")};function SW(q,Q){let J=new Map;return(W,X)=>{let Y=`${W}::${X}`,Z=J.get(Y);return Z||(Z=q.loadCertificate({keyId:W,keyUsage:X,targetDevice:Q}),J.set(Y,Z)),Z}}async function Uq({requests:q,deviceModelId:Q,certificateLoader:J,logger:W,label:X,fetch:Y,toContext:Z,describe:N}){W.debug(`[load] Fetching ${X} descriptors`,{data:{count:q.length}});let z=await Promise.all(q.map(async(V)=>({request:V,either:await Y(V)}))),F=SW(J,Q);return Promise.all(z.map(({request:V,either:_})=>_.caseOf({Left:async(R)=>(W.warn(`[load] ${X} fetch failed`,{data:{...N(V),error:R.message}}),{type:G.ERROR,error:R}),Right:async(R)=>{let w;try{w=await F(R.keyId,R.keyUsage)}catch(M){let I=M instanceof Error?M:Error(String(M));return W.warn(`[load] ${X} certificate load failed`,{data:{...N(V),error:I.message}}),{type:G.ERROR,error:I}}if(!w){let M=Error(`[ContextModule] ${X}: certificate is missing`);return W.warn(`[load] ${X} certificate missing`,{data:N(V)}),{type:G.ERROR,error:M}}return Z(R,w)}})))}var{defineProperty:K0,getOwnPropertyDescriptor:O0}=Object,F0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?O0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&K0(Q,J,X),X},zJ=(q,Q)=>(J,W)=>Q(J,W,q),b0=[G.SOLANA_ALT_RESOLUTION],N0=U.interface({altAddress:D,entryIndex:RQ,challenge:D}),z0=U.interface({deviceModelId:g,requests:x(N0)}),wQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("AltResolutionContextLoader")}logger;canHandle(q,Q){return b0.every((J)=>Q.includes(J))?z0.decode(q).caseOf({Left:()=>!1,Right:({requests:J})=>J.length>0&&J.every((W)=>W.altAddress.length>0&&W.challenge.length>0)}):!1}async load(q){return Uq({requests:q.requests,deviceModelId:q.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"ALT_RESOLUTION",fetch:(Q)=>this.dataSource.getAltResolution(Q),toContext:(Q,J)=>{let W={descriptor:Q.descriptor,resolvedAddress:Q.resolvedAddress};return{type:G.SOLANA_ALT_RESOLUTION,payload:W,certificate:J}},describe:(Q)=>({altAddress:Q.altAddress,entryIndex:Q.entryIndex})})}};wQ=F0([O(),zJ(0,$(Oq.AltResolutionDataSource)),zJ(1,$(H.PkiCertificateLoader)),zJ(2,$(b.ContextModuleLoggerFactory))],wQ);var kW=()=>new v(({bind:q})=>{q(Oq.AltResolutionDataSource).to(MQ),q(Oq.AltResolutionContextLoader).to(wQ)});var LQ={EnumVariantContextLoader:Symbol.for("EnumVariantContextLoader")};var r={InstructionInfoDataSource:Symbol.for("InstructionInfoDataSource"),InstructionInfoContextLoader:Symbol.for("InstructionInfoContextLoader")};function _q(q,Q){return q.loadCertificate(Q).then((J)=>({ok:!0,value:J}),(J)=>({ok:!1,error:J instanceof Error?J:Error(typeof J=="string"?J:JSON.stringify(J))}))}var{defineProperty:j0,getOwnPropertyDescriptor:v0}=Object,B0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?v0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&j0(Q,J,X),X},EQ=(q,Q)=>(J,W)=>Q(J,W,q),H0=[G.SOLANA_ENUM_VARIANT],D0="solana-mainnet",P0=U.interface({programId:D,enumId:D,variantIndex:IQ}),U0=U.interface({deviceModelId:g,selections:x(P0),network:E(D)}),SQ=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this.certificateLoader=J,this.logger=W("EnumVariantContextLoader")}logger;canHandle(q,Q){return H0.every((J)=>Q.includes(J))?U0.decode(q).caseOf({Left:()=>!1,Right:({selections:J})=>J.length>0&&J.every((W)=>W.programId.length>0&&W.enumId.length>0)}):!1}async load(q){let Q=q.network||D0,J=Array.from(new Set(q.selections.map((V)=>V.programId)));this.logger.debug("[load] Fetching enum variants",{data:{network:Q,programCount:J.length,selectionCount:q.selections.length}});let W=_q(this.certificateLoader,{keyId:k.CalCalldataKey,keyUsage:P.Calldata,targetDevice:q.deviceModelId}),X=Promise.all(J.map((V)=>this.dataSource.getInstructionInfo({programId:V,network:Q}))),[Y,Z]=await Promise.all([W,X]);if(!Y.ok||!Y.value){let V=Y.ok?Error("[ContextModule] EnumVariantContextLoader: certificate is missing"):Y.error;return this.logger.warn("[load] ENUM_VARIANT certificate unavailable",{data:{error:V.message}}),q.selections.map(()=>({type:G.ERROR,error:V}))}let N=Y.value,z=new Map(J.map((V,_)=>[V,Z[_]])),F=this.config.cal.mode??"prod";return q.selections.map((V)=>{let _=z.get(V.programId);if(!_){let R=Error(`[ContextModule] EnumVariantContextLoader: no CAL response for program ${V.programId}`);return this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,error:R.message}}),{type:G.ERROR,error:R}}return _.caseOf({Left:(R)=>(this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,error:R.message}}),{type:G.ERROR,error:R}),Right:(R)=>{let w=this.lookupVariant(R,V);if(!w){let I=Error(`[ContextModule] EnumVariantContextLoader: CAL has no enum variant for (${V.programId}, ${V.enumId}, ${V.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT not found in CAL response",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex}}),{type:G.ERROR,error:I}}if(!w.descriptor.signature){let I=Error(`[ContextModule] EnumVariantContextLoader: missing '${F}' signature for (${V.programId}, ${V.enumId}, ${V.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT missing signature",{data:{programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,mode:F}}),{type:G.ERROR,error:I}}let M={programId:V.programId,enumId:V.enumId,variantIndex:V.variantIndex,descriptor:w.descriptor};return{type:G.SOLANA_ENUM_VARIANT,payload:M,certificate:N}}})})}lookupVariant(q,Q){return q.enumVariants.find((J)=>J.enumId===Q.enumId&&J.variantIndex===Q.variantIndex)}};SQ=B0([O(),EQ(0,$(r.InstructionInfoDataSource)),EQ(1,$(b.Config)),EQ(2,$(H.PkiCertificateLoader)),EQ(3,$(b.ContextModuleLoggerFactory))],SQ);var xW=()=>new v(({bind:q})=>{q(LQ.EnumVariantContextLoader).to(SQ)});var i=((q)=>(q[q.MAINNET=900]="MAINNET",q[q.DEVNET=901]="DEVNET",q[q.TESTNET=902]="TESTNET",q))(i||{});var _0=U.interface({prod:E(D),test:E(D)}),AW=U.interface({data:D,signatures:_0}),R0=U.interface({descriptor:AW}),kQ=U.interface({descriptor:D}),TW=U.interface({signer:D,writable:D}),I0=U.interface({count_min:E(Pq),count_max:E(Pq),remaining_policy:E(TW),slots:E(x(TW))}),M0=U.interface({discriminator_hex:E(D),descriptor:AW,enum_variants:E(jJ(D,jJ(D,R0))),display_fields:E(x(kQ)),value_flow_ports:E(x(kQ)),hide_rules:E(x(kQ)),account_resets:E(x(kQ)),account_schema:E(I0)}),fW=U.interface({id:D,chain_id:Pq,instructions:x(M0)});var Fq=((q)=>(q[q.DISPLAY_FIELD=0]="DISPLAY_FIELD",q[q.VALUE_FLOW_PORT=1]="VALUE_FLOW_PORT",q[q.HIDE_RULE=2]="HIDE_RULE",q[q.ACCOUNT_RESET=3]="ACCOUNT_RESET",q))(Fq||{});function yW(q,Q){return q[Q]}function w0(q=[]){return q.map((Q)=>({account_indices:Q.account_indices,optional_account_strategy:Q.optional_account_strategy,token_value:Q.token_value,active_when:Q.active_when}))}function L0(q=[]){return q.flatMap((Q)=>Q.account_index===void 0?[]:[{account_index:Q.account_index,require_pre_balance_zero:Q.require_pre_balance_zero,value_kind:Q.value_kind,token:Q.token,require_native_pre_balance_zero:Q.require_native_pre_balance_zero}])}function E0(q=[]){return q.map((Q)=>({rule_set_index:Q.rule_set_index,target:Q.target,condition:Q.condition}))}function S0(q){return q===void 0?[]:q.account_index===void 0||q.owner===void 0?[]:[{account_index:q.account_index,owner:q.owner}]}var hW=new Set(["FORBIDDEN","EITHER","REQUIRED"]);function CW(q){let Q=hW.has(q.signer)?q.signer:"EITHER",J=hW.has(q.writable)?q.writable:"EITHER";return{signer:Q,writable:J}}function k0(q){if(q!==void 0)return{count_min:q.count_min??0,count_max:q.count_max??255,remaining_policy:q.remaining_policy?CW(q.remaining_policy):{signer:"EITHER",writable:"EITHER"},slots:(q.slots??[]).map(CW)}}function x0(q=[]){return q.map((Q)=>({name:Q.name,param:Q.param??{type:""}}))}function T0(q){return[...(q.display_fields??[]).map((Q)=>({kind:Fq.DISPLAY_FIELD,data:Q.descriptor})),...(q.value_flow_ports??[]).map((Q)=>({kind:Fq.VALUE_FLOW_PORT,data:Q.descriptor})),...(q.hide_rules??[]).map((Q)=>({kind:Fq.HIDE_RULE,data:Q.descriptor})),...(q.account_resets??[]).map((Q)=>({kind:Fq.ACCOUNT_RESET,data:Q.descriptor}))]}function gW(q,Q){let J=[];for(let[W,X]of Object.entries(q.enum_variants??{}))for(let[Y,Z]of Object.entries(X)){let N=Number(Y);IQ.decode(N).isLeft()||J.push({enumId:W,variantIndex:N,descriptor:{data:Z.descriptor.data,signature:yW(Z.descriptor.signatures,Q)??""}})}return J}function mW(q,Q){return Object.values(q).flatMap((J)=>gW(J,Q))}function uW(q,Q,J,W){let X=yW(J.descriptor.signatures,W);return X?j({programId:q,discriminator:Q,instructionName:J.instruction_name,instructionInfo:{data:J.descriptor.data,signature:X},substructures:T0(J),enumVariants:gW(J,W),idlDescriptor:{typePool:J.idl_descriptor?.type_pool??[],rootType:J.idl_descriptor?.root_type??0},mintAssociations:J.mint_association?[J.mint_association]:[],ownerAssociations:S0(J.owner_association),valueFlowPorts:w0(J.value_flow_ports),accountResets:L0(J.account_resets),displayFields:x0(J.display_fields),hideRules:E0(J.hide_rules),accountSchema:k0(J.account_schema)}):K(Error(`[ContextModule] InstructionInfoDataSource: missing '${W}' signature for (${q}, ${Q})`))}var{defineProperty:A0,getOwnPropertyDescriptor:f0}=Object,h0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?f0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&A0(Q,J,X),X},pW=(q,Q)=>(J,W)=>Q(J,W,q),C0={"solana-mainnet":i.MAINNET,"solana-devnet":i.DEVNET,"solana-testnet":i.TESTNET},xQ=class{constructor(q,Q){this.config=q,this.http=Q}async getInstructionInfo({programId:q,network:Q}){let J=C0[Q]??i.MAINNET,W;try{W=await this.http.get(`${this.config.cal.url}/solana_programs`,{params:{id:q,chain_id:J,output:"id,chain_id,instructions",ref:`branch:${this.config.cal.branch}`}})}catch(Y){let Z=Y instanceof Error?Y.message:String(Y);return K(Error(`[ContextModule] HttpInstructionInfoDataSource: Failed to fetch instruction descriptors: ${Z}`))}if(!Array.isArray(W)||W.length===0)return K(Error(`[ContextModule] HttpInstructionInfoDataSource: empty response for program ${q}`));let X=W.find((Y)=>Y!=null&&typeof Y=="object"&&Y.id===q);return X===void 0?K(Error(`[ContextModule] HttpInstructionInfoDataSource: no descriptors for program ${q}`)):fW.decode(X).caseOf({Left:(Y)=>K(Error(`[ContextModule] HttpInstructionInfoDataSource: malformed descriptors for program ${q}: ${Y}`)),Right:()=>{let Y=this.config.cal.mode??"prod",Z=X.instructions,N=Object.fromEntries(Z.map((F)=>[F.discriminator_hex??"",F])),z=Object.fromEntries(Object.entries(N).map(([F,V])=>[F,uW(q,F,V,Y)]));return j({programId:q,descriptors:z,enumVariants:mW(N,Y)})}})}};xQ=h0([O(),pW(0,$(b.Config)),pW(1,$(B.NetworkClient))],xQ);var{defineProperty:y0,getOwnPropertyDescriptor:g0}=Object,m0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?g0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&y0(Q,J,X),X},vJ=(q,Q)=>(J,W)=>Q(J,W,q),u0=[G.SOLANA_INSTRUCTION_INFO],p0="solana-mainnet",l0=U.interface({programId:D,discriminator:E(D)}),c0=U.interface({deviceModelId:g,instructions:x(l0),network:E(D)}),TQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("InstructionInfoContextLoader")}logger;canHandle(q,Q){return u0.every((J)=>Q.includes(J))?c0.decode(q).caseOf({Left:()=>!1,Right:({instructions:J})=>J.length>0&&J.every((W)=>W.programId.length>0)}):!1}async load(q){let Q=q.network||p0,J=Array.from(new Set(q.instructions.map((F)=>F.programId)));this.logger.debug("[load] Fetching instruction descriptors",{data:{network:Q,programCount:J.length,instructionCount:q.instructions.length}});let W=_q(this.certificateLoader,{keyId:k.CalCalldataKey,keyUsage:P.Calldata,targetDevice:q.deviceModelId}),X=Promise.all(J.map(async(F)=>({programId:F,either:await this.dataSource.getInstructionInfo({programId:F,network:Q})}))),[Y,Z]=await Promise.all([W,X]);if(!Y.ok||!Y.value){let F=Y.ok?Error("[ContextModule] InstructionInfoContextLoader: certificate is missing"):Y.error;return this.logger.warn("[load] INSTRUCTION_INFO certificate unavailable",{data:{error:F.message}}),J.map(()=>({type:G.ERROR,error:F}))}let N=Y.value,z=[];for(let{programId:F,either:V}of Z)V.caseOf({Left:(_)=>{this.logger.warn("[load] Failed to fetch instruction descriptors for program",{data:{programId:F,error:_.message}}),z.push({type:G.ERROR,error:_})},Right:(_)=>{let R=this.collectWantedDiscriminators(F,q.instructions);for(let[w,M]of Object.entries(_.descriptors))R!==null&&!R.has(w)||z.push(M.caseOf({Left:(I)=>(this.logger.warn("[load] INSTRUCTION_INFO descriptor error",{data:{programId:F,discriminator:w,error:I.message}}),{type:G.ERROR,error:I}),Right:(I)=>({type:G.SOLANA_INSTRUCTION_INFO,payload:I,certificate:N})}))}});return this.logger.debug("[load] Emitted contexts",{data:{count:z.length}}),z}collectWantedDiscriminators(q,Q){let J=new Set,W=!1;for(let X of Q)X.programId===q&&(X.discriminator===void 0?W=!0:J.add(X.discriminator));return W?null:J}};TQ=m0([O(),vJ(0,$(r.InstructionInfoDataSource)),vJ(1,$(H.PkiCertificateLoader)),vJ(2,$(b.ContextModuleLoggerFactory))],TQ);var lW=()=>new v(({bind:q})=>{q(r.InstructionInfoDataSource).to(xQ),q(r.InstructionInfoContextLoader).to(TQ)});var{defineProperty:d0,getOwnPropertyDescriptor:s0}=Object,i0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?s0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&d0(Q,J,X),X},BJ=(q,Q)=>(J,W)=>Q(J,W,q),AQ=class{constructor(q,Q,J){this.config=q,this.http=J,this.logger=Q("HttpLifiDataSource")}logger;async getTransactionDescriptorsPayload({templateId:q}){this.logger.debug("[getTransactionDescriptorsPayload] Fetching transaction descriptors",{data:{templateId:q}});try{let Q=await this.http.get(`${this.config.cal.url}/swap_templates`,{params:{template_id:q,output:"id,chain_id,instructions,descriptors"}});return this.logger.debug("[getTransactionDescriptorsPayload] Received response",{data:{templateId:q,responseLength:Q?.length??0,hasData:!!Q&&Q.length>0}}),!Q||Q.length===0||!Q[0]?(this.logger.warn("[getTransactionDescriptorsPayload] No transaction descriptors found",{data:{templateId:q,responseLength:Q?.length??0}}),K(Error(`[ContextModule] HttpLifiDataSource: no transaction descriptors for id ${q}`))):(this.logger.info("[getTransactionDescriptorsPayload] Successfully fetched transaction descriptors",{data:{templateId:q,descriptorsCount:Q[0].descriptors?.length??0}}),j(Q[0]))}catch(Q){return this.logger.error("[getTransactionDescriptorsPayload] Failed to fetch transaction descriptors",{data:{templateId:q,error:Q instanceof Error?Q.message:String(Q)}}),K(Error("[ContextModule] HttpLifiDataSource: Failed to fetch transaction descriptors"))}}};AQ=i0([O(),BJ(0,$(b.Config)),BJ(1,$(b.ContextModuleLoggerFactory)),BJ(2,$(B.NetworkClient))],AQ);var bq={LifiDataSource:Symbol.for("LifiDataSource"),LifiContextLoader:Symbol.for("LifiContextLoader")};var{defineProperty:n0,getOwnPropertyDescriptor:a0}=Object,o0=(q,Q,J,W)=>{for(var X=W>1?void 0:W?a0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&n0(Q,J,X),X},fQ=(q,Q)=>(J,W)=>Q(J,W,q),r0=[G.SOLANA_LIFI],hQ=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this._certificateLoader=J,this.logger=W("LifiContextLoader")}logger;canHandle(q,Q){if(!r0.every((J)=>Q.includes(J)))return this.logger.debug("[canHandle] Skipping, expected type does not match",{data:{expectedTypes:Q,required:G.SOLANA_LIFI}}),!1;if(typeof q=="object"&&q!==null&&"templateId"in q){let J=q.templateId,W=typeof J=="string"&&J.length>0;return this.logger.debug("[canHandle] Field validation result",{data:{templateId:J,isValid:W}}),W}return this.logger.debug("[canHandle] Field does not contain a valid templateId",{data:{input:q}}),!1}async load(q){this.logger.debug("[load] Loading solana Lifi context",{data:{input:q}});let Q=await this._loadInternal(q);if(Q.type===G.ERROR)return[{type:G.ERROR,error:Q.error}];let J=Q;return[{type:G.SOLANA_LIFI,payload:J.payload,certificate:J.certificate}]}async _loadInternal(q){this.logger.debug("[_loadInternal] Loading solana Lifi context",{data:{input:q}});let{templateId:Q,deviceModelId:J}=q;if(!Q)return{type:G.ERROR,error:Error("[ContextModule] LifiContextLoader: templateId is missing")};let W=await this.dataSource.getTransactionDescriptorsPayload({templateId:Q}),X=await this._certificateLoader.loadCertificate({keyId:k.SwapTemplateKey,keyUsage:P.SwapTemplate,targetDevice:J});return W.caseOf({Left:(Y)=>(this.logger.error("[_loadInternal] Error loading solana Lifi context",{data:{error:Y}}),{type:G.ERROR,error:Y}),Right:(Y)=>{let Z=this.buildPayload(Y);return this.logger.debug("[_loadInternal] Successfully loaded solana Lifi context",{data:{descriptors:Z.descriptors,instructionsCount:Z.instructions.length,certificate:X}}),{type:G.SOLANA_LIFI,payload:Z,certificate:X}}})}buildPayload(q){return{descriptors:this.pluckTransactionData(q),instructions:this.extractInstructionsMeta(q)}}pluckTransactionData(q){let Q=this.config.cal.mode||"prod",J={},W=q.descriptors??[];this.logger.debug("[pluckTransactionData] Processing descriptors",{data:{descriptorsCount:W.length,signatureKind:Q}});for(let X of W){let Y=`${X.program_id}:${X.discriminator_hex??""}`,Z={data:X.descriptor.data,descriptorType:X.descriptor.descriptorType,descriptorVersion:X.descriptor.descriptorVersion,signature:X.descriptor.signatures[Q]??"",...X.has_basis_point!==void 0&&{has_basis_point:X.has_basis_point}};(J[Y]??=[]).push(Z),this.logger.debug("[pluckTransactionData] Mapped program descriptor",{data:{programId:X.program_id,discriminatorHex:X.discriminator_hex??"",key:Y}})}return this.logger.debug("[pluckTransactionData] Completed processing",{data:{outputKeys:Object.keys(J)}}),J}extractInstructionsMeta(q){let Q=q.instructions??[];this.logger.debug("[extractInstructionsMeta] Extracting instructions metadata",{data:{instructionsCount:Q.length}});let J=Q.map((W)=>({program_id:W.program_id,...W.discriminator_hex!==void 0&&{discriminator_hex:W.discriminator_hex},...W.amount!==void 0&&{has_basis_point:W.amount.capped_bps!==void 0}}));return this.logger.debug("[extractInstructionsMeta] Completed extracting instructions metadata",{data:{meta:J.map((W)=>({programId:W.program_id,discriminatorHex:W.discriminator_hex}))}}),J}};hQ=o0([O(),fQ(0,$(bq.LifiDataSource)),fQ(1,$(b.Config)),fQ(2,$(H.PkiCertificateLoader)),fQ(3,$(b.ContextModuleLoggerFactory))],hQ);var cW=()=>new v(({bind:q})=>{q(bq.LifiDataSource).to(AQ),q(bq.LifiContextLoader).to(hQ)});var{defineProperty:t0,getOwnPropertyDescriptor:e0}=Object,q1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?e0(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&t0(Q,J,X),X},dW=(q,Q)=>(J,W)=>Q(J,W,q),CQ=class{constructor(q,Q){this.config=q,this.http=Q}isSolanaSPLOwnerInfo(q){return typeof q!="object"||q===null?!1:typeof q.tokenAccount=="string"&&typeof q.owner=="string"&&typeof q.contract=="string"&&typeof q.signedDescriptor=="string"}async fetchAddressMetadata(q,Q){try{let J=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/owner/${q}`,{params:{challenge:Q}});return this.isSolanaSPLOwnerInfo(J)?j(J):K(Error("[ContextModule] - HttpOwnerInfoDataSource: invalid fetchAddressMetadata response shape"))}catch{return K(Error("[ContextModule] - HttpOwnerInfoDataSource: Failed to fetch address metadata"))}}async computeAddressMetadata(q,Q,J){try{let W=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/computed-token-account/${q}/${Q}`,{params:{challenge:J}});return this.isSolanaSPLOwnerInfo(W)?j(W):K(Error("[ContextModule] - HttpOwnerInfoDataSource: invalid computeAddressMetadata response shape"))}catch{return K(Error("[ContextModule] - HttpOwnerInfoDataSource: Failed to compute address metadata"))}}async getOwnerInfo(q){let{tokenAddress:Q,challenge:J,createATA:W}=q;if(!J)return K(Error("[ContextModule] - HttpOwnerInfoDataSource: challenge is required"));let X;if(Q)X=await this.fetchAddressMetadata(Q,J);else if(W?.address&&W?.mintAddress)X=await this.computeAddressMetadata(W.address,W.mintAddress,J);else return K(Error("[ContextModule] - HttpOwnerInfoDataSource: either tokenAddress or valid createATA must be provided"));return X.chain((Y)=>{let Z=bQ(Y.signedDescriptor);return Z?j({tlvDescriptor:Z}):K(Error("[ContextModule] - HttpOwnerInfoDataSource: invalid base64 tlvDescriptor received"))})}};CQ=q1([O(),dW(0,$(b.Config)),dW(1,$(B.NetworkClient))],CQ);var Nq={OwnerInfoDataSource:Symbol.for("OwnerInfoDataSource"),OwnerInfoContextLoader:Symbol.for("OwnerInfoContextLoader")};var{defineProperty:Q1,getOwnPropertyDescriptor:J1}=Object,W1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?J1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&Q1(Q,J,X),X},HJ=(q,Q)=>(J,W)=>Q(J,W,q),X1=[G.SOLANA_BASIC_TRUSTED_NAME],yQ=class{constructor(q,Q,J){this._dataSource=q,this._certificateLoader=Q,this.logger=J("OwnerInfoContextLoader")}logger;canHandle(q,Q){if(!X1.every((W)=>Q.includes(W))||typeof q!="object"||q===null)return!1;let J=q;return!!(J.tokenAddress||J.createATA)}async load(q){this.logger.debug("[load] Loading solana owner info context",{data:{input:q}});let{deviceModelId:Q}=q,J=await this._certificateLoader.loadCertificate({keyId:"domain_metadata_key",keyUsage:P.TrustedName,targetDevice:Q});return J?(await this._dataSource.getOwnerInfo(q)).caseOf({Left:(W)=>[{type:G.ERROR,error:W}],Right:({tlvDescriptor:W})=>W!==void 0?[{type:G.SOLANA_BASIC_TRUSTED_NAME,payload:W,certificate:J}]:[]}):[{type:G.ERROR,error:Error("[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing")}]}};yQ=W1([O(),HJ(0,$(Nq.OwnerInfoDataSource)),HJ(1,$(H.PkiCertificateLoader)),HJ(2,$(b.ContextModuleLoggerFactory))],yQ);var sW=()=>new v(({bind:q})=>{q(Nq.OwnerInfoDataSource).to(CQ),q(Nq.OwnerInfoContextLoader).to(yQ)});var{defineProperty:Y1,getOwnPropertyDescriptor:Z1}=Object,$1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?Z1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&Y1(Q,J,X),X},iW=(q,Q)=>(J,W)=>Q(J,W,q),gQ=class{constructor(q,Q){this.config=q,this.http=Q}async getIdFromMint({mintAddress:q}){try{let Q=await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:q,network:"solana",output:"id",ref:`branch:${this.config.cal.branch}`}});return!Q||Q.length===0||!Q[0]?.id?K(Error(`[ContextModule] HttpMintToIdDataSource: no token id found for mint ${q}`)):j(Q[0].id)}catch{return K(Error("[ContextModule] HttpMintToIdDataSource: failed to fetch token id from mint address"))}}};gQ=$1([O(),iW(0,$(b.Config)),iW(1,$(B.NetworkClient))],gQ);var{defineProperty:G1,getOwnPropertyDescriptor:V1}=Object,K1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?V1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&G1(Q,J,X),X},nW=(q,Q)=>(J,W)=>Q(J,W,q),mQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfosPayload({tokenInternalId:q}){try{let Q=await this.http.get(`${this.config.cal.url}/tokens`,{params:{id:q,output:"id,name,network,network_family,network_type,exchange_app_config_serialized,live_signature,ticker,decimals,blockchain_name,chain_id,contract_address,descriptor,descriptor_exchange_app,units,symbol",ref:`branch:${this.config.cal.branch}`}});return!Q||Q.length===0||!Q[0]?K(Error(`[ContextModule] HttpTokenDataSource: no token metadata for id ${q}`)):j(Q[0])}catch{return K(Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};mQ=K1([O(),nW(0,$(b.Config)),nW(1,$(B.NetworkClient))],mQ);var t={TokenDataSource:Symbol.for("TokenDataSource"),MintToIdDataSource:Symbol.for("MintToIdDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader")};var{defineProperty:O1,getOwnPropertyDescriptor:F1}=Object,b1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?F1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&O1(Q,J,X),X},Eq=(q,Q)=>(J,W)=>Q(J,W,q),N1=[G.SOLANA_TOKEN],uQ=class{constructor(q,Q,J,W,X){this.dataSource=q,this.mintToIdDataSource=Q,this.config=J,this._certificateLoader=W,this.logger=X("TokenContextLoader")}logger;canHandle(q,Q){if(!N1.every((Y)=>Q.includes(Y))||typeof q!="object"||q===null)return!1;let J=q,W=typeof J.tokenInternalId=="string"&&J.tokenInternalId.length>0,X=typeof J.mintAddress=="string"&&J.mintAddress.length>0;return W||X}async load(q){this.logger.debug("[load] Loading solana token context",{data:{input:q}});let Q=await this._loadInternal(q);if(Q.type===G.ERROR)return[{type:G.ERROR,error:Q.error}];let J=Q;return[{type:G.SOLANA_TOKEN,payload:J.payload,certificate:J.certificate}]}async _loadInternal(q){let{deviceModelId:Q,mintAddress:J}=q,{tokenInternalId:W}=q;if(!W){if(!J)return{type:G.ERROR,error:Error("[ContextModule] TokenContextLoader: tokenInternalId and mintAddress are missing")};this.logger.debug("[_loadInternal] Resolving tokenInternalId from mintAddress",{data:{mintAddress:J}});let Z=await this.mintToIdDataSource.getIdFromMint({mintAddress:J});if(Z.isLeft())return{type:G.ERROR,error:Z.extract()};W=Z.extract()}let X=await this.dataSource.getTokenInfosPayload({tokenInternalId:W}),Y=await this._certificateLoader.loadCertificate({keyId:k.TokenMetadataKey,keyUsage:P.CoinMeta,targetDevice:Q});return Y?X.caseOf({Left:(Z)=>(this.logger.error("[_loadInternal] Error loading solana token context",{data:{error:Z}}),{type:G.ERROR,error:Z}),Right:(Z)=>(this.logger.debug("[_loadInternal] Successfully loaded solana token context",{data:{payload:this.pluckTokenData(Z),certificate:Y}}),{type:G.SOLANA_TOKEN,payload:this.pluckTokenData(Z),certificate:Y})}):{type:G.ERROR,error:Error("[ContextModule] TokenContextLoader: tokenMetadataCertificate is missing")}}pluckTokenData(q){let Q=this.config.cal.mode||"prod";return{solanaTokenDescriptor:{data:q.descriptor.data,signature:q.descriptor.signatures[Q]}}}};uQ=b1([O(),Eq(0,$(t.TokenDataSource)),Eq(1,$(t.MintToIdDataSource)),Eq(2,$(b.Config)),Eq(3,$(H.PkiCertificateLoader)),Eq(4,$(b.ContextModuleLoggerFactory))],uQ);var aW=()=>new v(({bind:q})=>{q(t.TokenDataSource).to(mQ),q(t.MintToIdDataSource).to(gQ),q(t.TokenContextLoader).to(uQ)});var{defineProperty:z1,getOwnPropertyDescriptor:j1}=Object,v1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?j1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&z1(Q,J,X),X},DJ=(q,Q)=>(J,W)=>Q(J,W,q),pQ=class{constructor(q,Q,J){this.config=q,this.http=J,this.logger=Q("HttpTokenAccountStateDataSource")}logger;async getTokenAccountState({tokenAccount:q,challenge:Q}){let J;try{J=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/token-account-state/${q}`,{params:{challenge:Q}})}catch(W){let X=W instanceof Error?W.message:String(W);return K(Error(`[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: ${X}`))}return _Q.decode(J).caseOf({Left:(W)=>K(Error(`[ContextModule] HttpTokenAccountStateDataSource: malformed response for ${q}: ${W}`)),Right:(W)=>{J.owner!==void 0&&J.mint===void 0&&this.logger.warn("[getTokenAccountState] response has owner but no mint — canonical-ATA check will fail and the OWNER binding will be dropped by the device",{data:{tokenAccount:q}});let X;try{X=T.hexToBytes(W.signedDescriptor)}catch(Y){return K(Error(`[ContextModule] HttpTokenAccountStateDataSource: invalid hex in signedDescriptor for ${q}: ${Y.message}`))}return J.nativePreBalance===void 0&&this.logger.debug("[getTokenAccountState] nativePreBalance absent in response — native resets will not attest wrappable excess",{data:{tokenAccount:q}}),j({tokenAccount:q,descriptor:X,mint:J.mint,keyId:W.keyId,keyUsage:W.keyUsage})}})}};pQ=v1([O(),DJ(0,$(b.Config)),DJ(1,$(b.ContextModuleLoggerFactory)),DJ(2,$(B.NetworkClient))],pQ);var zq={TokenAccountStateDataSource:Symbol.for("TokenAccountStateDataSource"),TokenAccountStateContextLoader:Symbol.for("TokenAccountStateContextLoader")};var{defineProperty:B1,getOwnPropertyDescriptor:H1}=Object,D1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?H1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&B1(Q,J,X),X},PJ=(q,Q)=>(J,W)=>Q(J,W,q),P1=[G.SOLANA_TOKEN_ACCOUNT_STATE],U1=U.interface({tokenAccount:D,challenge:D}),_1=U.interface({deviceModelId:g,requests:x(U1)}),lQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("TokenAccountStateContextLoader")}logger;canHandle(q,Q){return P1.every((J)=>Q.includes(J))?_1.decode(q).caseOf({Left:()=>!1,Right:({requests:J})=>J.length>0&&J.every((W)=>W.tokenAccount.length>0&&W.challenge.length>0)}):!1}async load(q){return Uq({requests:q.requests,deviceModelId:q.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"TOKEN_ACCOUNT_STATE",fetch:(Q)=>this.dataSource.getTokenAccountState(Q),toContext:(Q,J)=>{let W={descriptor:Q.descriptor,mint:Q.mint};return{type:G.SOLANA_TOKEN_ACCOUNT_STATE,payload:W,certificate:J}},describe:(Q)=>({tokenAccount:Q.tokenAccount})})}};lQ=D1([O(),PJ(0,$(zq.TokenAccountStateDataSource)),PJ(1,$(H.PkiCertificateLoader)),PJ(2,$(b.ContextModuleLoggerFactory))],lQ);var oW=()=>new v(({bind:q})=>{q(zq.TokenAccountStateDataSource).to(pQ),q(zq.TokenAccountStateContextLoader).to(lQ)});var{defineProperty:R1,getOwnPropertyDescriptor:I1}=Object,M1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?I1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&R1(Q,J,X),X},rW=(q,Q)=>(J,W)=>Q(J,W,q),w1=U.interface({prod:E(D),test:E(D)}),L1={"solana-mainnet":"solana","solana-devnet":"solana-devnet"},E1=U.interface({descriptor:U.interface({data:D,signatures:w1})}),cQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfo({mint:q,network:Q}){let J;try{J=await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:q,network:L1[Q]??Q,output:"contract_address,network,descriptor",ref:`branch:${this.config.cal.branch}`}})}catch(W){let X=W instanceof Error?W.message:String(W);return K(Error(`[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: ${X}`))}return!Array.isArray(J)||J.length===0?K(Error(`[ContextModule] HttpTokenInfoDataSource: no token info for mint ${q}`)):E1.decode(J[0]).caseOf({Left:(W)=>K(Error(`[ContextModule] HttpTokenInfoDataSource: malformed descriptor for mint ${q}: ${W}`)),Right:(W)=>j({mint:q,descriptor:W.descriptor})})}};cQ=M1([O(),rW(0,$(b.Config)),rW(1,$(B.NetworkClient))],cQ);var jq={TokenInfoDataSource:Symbol.for("TokenInfoDataSource"),TokenInfoContextLoader:Symbol.for("TokenInfoContextLoader")};var{defineProperty:S1,getOwnPropertyDescriptor:k1}=Object,x1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?k1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&S1(Q,J,X),X},dQ=(q,Q)=>(J,W)=>Q(J,W,q),T1=[G.SOLANA_TOKEN_INFO],A1="solana-mainnet",f1=U.interface({deviceModelId:g,mints:x(D),network:E(D)}),sQ=class{constructor(q,Q,J,W){this.dataSource=q,this.config=Q,this.certificateLoader=J,this.logger=W("TokenInfoContextLoader")}logger;canHandle(q,Q){return T1.every((J)=>Q.includes(J))?f1.decode(q).caseOf({Left:()=>!1,Right:({mints:J})=>J.length>0&&J.every((W)=>W.length>0)}):!1}async load(q){let Q=q.network||A1,J=Array.from(new Set(q.mints));this.logger.debug("[load] Fetching TOKEN_INFO descriptors",{data:{network:Q,mintCount:J.length}});let W=_q(this.certificateLoader,{keyId:k.TokenMetadataKey,keyUsage:P.CoinMeta,targetDevice:q.deviceModelId}),X=Promise.all(J.map(async(F)=>({mint:F,either:await this.dataSource.getTokenInfo({mint:F,network:Q})}))),[Y,Z]=await Promise.all([W,X]);if(!Y.ok||!Y.value){let F=Y.ok?Error("[ContextModule] TokenInfoContextLoader: certificate is missing"):Y.error;return this.logger.warn("[load] TOKEN_INFO certificate unavailable",{data:{error:F.message}}),J.map(()=>({type:G.ERROR,error:F}))}let N=Y.value,z=this.config.cal.mode??"prod";return Z.map(({mint:F,either:V})=>V.caseOf({Left:(_)=>(this.logger.warn("[load] TOKEN_INFO fetch failed",{data:{mint:F,error:_.message}}),{type:G.ERROR,error:_}),Right:(_)=>{let R=_.descriptor.signatures[z];if(!R){let M=Error(`[ContextModule] TokenInfoContextLoader: missing '${z}' signature for mint ${F}`);return this.logger.warn("[load] TOKEN_INFO missing signature",{data:{mint:F,mode:z}}),{type:G.ERROR,error:M}}let w={mint:F,descriptor:{data:_.descriptor.data,signature:R}};return{type:G.SOLANA_TOKEN_INFO,payload:w,certificate:N}}}))}};sQ=x1([O(),dQ(0,$(jq.TokenInfoDataSource)),dQ(1,$(b.Config)),dQ(2,$(H.PkiCertificateLoader)),dQ(3,$(b.ContextModuleLoggerFactory))],sQ);var tW=()=>new v(({bind:q})=>{q(jq.TokenInfoDataSource).to(cQ),q(jq.TokenInfoContextLoader).to(sQ)});var{defineProperty:h1,getOwnPropertyDescriptor:C1}=Object,y1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?C1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&h1(Q,J,X),X},eW=(q,Q)=>(J,W)=>Q(J,W,q),g1=U.interface({signedDescriptor:U.interface({data:D,signatures:U.interface({prod:E(D),test:E(D)})}),keyId:D,keyUsage:D}),iQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTrustedName({address:q,network:Q,challenge:J,types:W,sources:X}){let Y;try{Y=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/solana/${Q}/reverse/${q}`,{params:{types:W.join(","),sources:X.join(","),challenge:J}})}catch(Z){let N=Z instanceof Error?Z.message:String(Z);return K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: Failed to fetch trusted name: ${N}`))}return g1.decode(Y).caseOf({Left:(Z)=>K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: malformed response for ${q}: ${Z}`)),Right:(Z)=>{let N=this.config.cal.mode??"prod",z=Z.signedDescriptor.signatures[N];if(!z)return K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: missing ${N} signature for ${q}`));let F;try{F=T.hexToBytes(T.appendSignatureToPayload(Z.signedDescriptor.data,z,Xq))}catch(V){return K(Error(`[ContextModule] HttpSolanaTrustedNameDataSource: invalid signed descriptor for ${q}: ${V.message}`))}return j({address:q,descriptor:F,keyId:Z.keyId,keyUsage:Z.keyUsage})}})}};iQ=y1([O(),eW(0,$(b.Config)),eW(1,$(B.NetworkClient))],iQ);var vq={SolanaTrustedNameDataSource:Symbol.for("SolanaTrustedNameDataSource"),SolanaTrustedNameContextLoader:Symbol.for("SolanaTrustedNameContextLoader")};var{defineProperty:m1,getOwnPropertyDescriptor:u1}=Object,p1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?u1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&m1(Q,J,X),X},UJ=(q,Q)=>(J,W)=>Q(J,W,q),l1=[G.SOLANA_TRUSTED_NAME],c1={"solana-mainnet":i.MAINNET,"solana-devnet":i.DEVNET,"solana-testnet":i.TESTNET},qX=i.MAINNET,d1=U.interface({address:D,challenge:D,types:x(D),sources:x(D)}),s1=U.interface({deviceModelId:g,network:E(D),requests:x(d1)}),nQ=class{constructor(q,Q,J){this.dataSource=q,this.certificateLoader=Q,this.logger=J("SolanaTrustedNameContextLoader")}logger;canHandle(q,Q){return l1.every((J)=>Q.includes(J))?s1.decode(q).caseOf({Left:()=>!1,Right:({requests:J})=>J.length>0&&J.every((W)=>W.address.length>0&&W.challenge.length>0)}):!1}async load(q){let Q=q.network?c1[q.network]??qX:qX,J=String(Q);return Uq({requests:q.requests,deviceModelId:q.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"TRUSTED_NAME",fetch:(W)=>this.dataSource.getTrustedName({address:W.address,challenge:W.challenge,types:W.types,sources:W.sources,network:J}),toContext:(W,X)=>({type:G.SOLANA_TRUSTED_NAME,payload:W.descriptor,certificate:X}),describe:(W)=>({address:W.address})})}};nQ=p1([O(),UJ(0,$(vq.SolanaTrustedNameDataSource)),UJ(1,$(H.PkiCertificateLoader)),UJ(2,$(b.ContextModuleLoggerFactory))],nQ);var QX=()=>new v(({bind:q})=>{q(vq.SolanaTrustedNameDataSource).to(iQ),q(vq.SolanaTrustedNameContextLoader).to(nQ)});var JX=x(U.interface({descriptor:U.interface({signatures:U.interface({prod:D,test:D})})}));var{defineProperty:i1,getOwnPropertyDescriptor:n1}=Object,a1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?n1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&i1(Q,J,X),X},WX=(q,Q)=>(J,W)=>Q(J,W,q),aQ=class{constructor(q,Q){this.config=q,this.http=Q}async getTokenInfosPayload({assetId:q}){let Q=()=>K(Error(`[ContextModule] HttpTokenDataSource: no token metadata for asset id ${q}`));try{let J=await this.http.get(`${this.config.cal.url}/tokens`,{params:{id:`tron/trc10/${q}`,output:"id,ticker,decimals,descriptor",ref:`branch:${this.config.cal.branch}`}});return JX.decode(J).caseOf({Left:Q,Right:(W)=>{let X=W[0]?.descriptor.signatures[this.config.cal.mode];return X===void 0||X.length===0?Q():j(X)}})}catch{return K(Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};aQ=a1([O(),WX(0,$(b.Config)),WX(1,$(B.NetworkClient))],aQ);var Bq={TokenDataSource:Symbol.for("TokenDataSource"),TokenContextLoader:Symbol.for("TokenContextLoader")};function _J(q,Q){let J=0,W=1;for(let X=0;X<10;X++){let Y=q[Q+X];if(Y===void 0)return;if(J+=(Y&127)*W,(Y&128)===0)return{value:J,next:Q+X+1};W*=128}}function XX(q,Q){let J=_J(q,Q);if(J===void 0)return;let W=Math.floor(J.value/8),X=J.value%8;switch(X){case 0:{let Y=_J(q,J.next);return Y===void 0?void 0:{fieldNumber:W,wireType:X,value:Y.value,next:Y.next}}case 2:{let Y=_J(q,J.next);if(Y===void 0)return;let Z=Y.next+Y.value;return Z>q.length?void 0:{fieldNumber:W,wireType:X,data:q.subarray(Y.next,Z),next:Z}}case 1:case 5:{let Y=J.next+(X===1?8:4);return Y>q.length?void 0:{fieldNumber:W,wireType:X,next:Y}}default:return}}function oQ(q,Q){let J=0;for(;J<q.length;){let W=XX(q,J);if(W===void 0)return;if(W.fieldNumber===Q&&W.data!==void 0)return W.data;J=W.next}}function o1(q,Q){let J=0;for(;J<q.length;){let W=XX(q,J);if(W===void 0)return;if(W.fieldNumber===Q&&W.wireType===0)return W.value;J=W.next}}function YX(q){let Q=oQ(q,11);if(Q===void 0||o1(Q,1)!==2)return;let J=oQ(Q,2);if(J===void 0)return;let W=oQ(J,2);if(W===void 0)return;let X=oQ(W,1);if(!(X===void 0||X.length===0||!X.every((Y)=>Y>=48&&Y<=57)))return String.fromCharCode(...X)}var{defineProperty:r1,getOwnPropertyDescriptor:t1}=Object,e1=(q,Q,J,W)=>{for(var X=W>1?void 0:W?t1(Q,J):Q,Y=q.length-1,Z;Y>=0;Y--)(Z=q[Y])&&(X=(W?Z(Q,J,X):Z(X))||X);return W&&X&&r1(Q,J,X),X},q2=(q,Q)=>(J,W)=>Q(J,W,q),Q2=[G.TRON_TOKEN],rQ=class{constructor(q){this.dataSource=q}canHandle(q,Q){return Q2.every((J)=>Q.includes(J))&&typeof q=="object"&&q!==null&&"rawTransaction"in q&&q.rawTransaction instanceof Uint8Array&&q.rawTransaction.length>0}async load({rawTransaction:q}){let Q=YX(q);return Q===void 0?[]:(await this.dataSource.getTokenInfosPayload({assetId:Q})).caseOf({Left:(J)=>[{type:G.ERROR,error:J}],Right:(J)=>[{type:G.TRON_TOKEN,payload:J}]})}};rQ=e1([O(),q2(0,$(Bq.TokenDataSource))],rQ);var ZX=()=>new v(({bind:q})=>{q(Bq.TokenDataSource).to(aQ),q(Bq.TokenContextLoader).to(rQ)});var p=((q)=>(q.Ethereum="ethereum",q.Solana="solana",q.Concordium="concordium",q.Tron="tron",q))(p||{});var $X=(q)=>new v(({bind:Q})=>{Q(B.NetworkClient).toConstantValue(qq(q))});var VX=({config:q})=>{let Q=new GX;Q.bind(b.ContextModuleLoggerFactory).toConstantValue(q.loggerFactory);let{chain:J}=q;switch(Q.loadSync(IJ(q),$X(q)),J){case p.Ethereum:Q.loadSync(zQ(),PW(),VJ(),$W(q.customTrustedNameDataSource),TJ(),kJ(),pJ(),sJ(q.datasource),aJ(),CJ(),qW(),EJ(),KW(),BW(),_W());break;case p.Solana:Q.loadSync(zQ(),VJ(),sW(),aW(),cW(),wW(),lW(),xW(),tW(),oW(),kW(),QX());break;case p.Concordium:Q.loadSync(zQ(),LJ());break;case p.Tron:Q.loadSync(ZX());break;default:{let W=J}}return Q};class RJ{_container;_config;_loaders;_typedDataLoader;_fieldLoaders;_blindSigningReporter;_signReporter;constructor(q){this._config=q,this._container=VX({config:q}),this._loaders=q.defaultLoaders?this._getDefaultLoaders():[],this._loaders.push(...q.customLoaders),this._fieldLoaders=q.defaultFieldLoaders?this._getDefaultFieldLoaders():[],this._fieldLoaders.push(...q.customFieldLoaders),this._typedDataLoader=q.customTypedDataLoader??this._getDefaultTypedDataLoader(),this._blindSigningReporter=q.customBlindSigningReporter??this._getBlindSigningReporter(),this._signReporter=null}_getDefaultFieldLoaders(){return this._config.chain!==p.Ethereum?[]:[this._container.get(s.NftContextFieldLoader),this._container.get(A.TokenContextFieldLoader),this._container.get(l.TrustedNameContextFieldLoader),this._container.get(h.ProxyContextFieldLoader)]}_getDefaultLoaders(){let{chain:q}=this._config;switch(q){case p.Ethereum:return[this._container.get(Zq.ExternalPluginContextLoader),this._container.get(l.TrustedNameContextLoader),this._container.get(s.NftContextLoader),this._container.get(A.TokenContextLoader),this._container.get(o.CalldataContextLoader),this._container.get(Yq.DynamicNetworkContextLoader),this._container.get($q.SafeAddressLoader),this._container.get(d.GatedSigningContextLoader),this._container.get(d.GatedSigningTypedDataContextLoader),this._container.get(f.TransactionCheckLoader),this._container.get(f.TypedDataCheckLoader)];case p.Solana:return[this._container.get(t.TokenContextLoader),this._container.get(bq.LifiContextLoader),this._container.get(Nq.OwnerInfoContextLoader),this._container.get(f.TransactionCheckLoader),this._container.get(r.InstructionInfoContextLoader),this._container.get(LQ.EnumVariantContextLoader),this._container.get(jq.TokenInfoContextLoader),this._container.get(zq.TokenAccountStateContextLoader),this._container.get(Oq.AltResolutionContextLoader),this._container.get(vq.SolanaTrustedNameContextLoader)];case p.Concordium:return[this._container.get(Wq.AccountOwnershipContextLoader)];case p.Tron:return[this._container.get(Bq.TokenContextLoader)];default:{let Q=q;return[]}}}_getDefaultTypedDataLoader(){return this._config.chain!==p.Ethereum?{load:()=>Promise.reject(Error("[ContextModule] getTypedDataFilters is not supported for this chain"))}:this._container.get(Vq.TypedDataContextLoader)}_getBlindSigningReporter(){return this._container.isBound(Qq.BlindSigningReporter)?this._container.get(Qq.BlindSigningReporter):null}async getContexts(q,Q){let J=Object.values(G),W=this._loaders.filter((X)=>X.canHandle(q,Q??J)).map((X)=>X.load(q));return(await Promise.all(W)).flat()}async getFieldContext(q,Q){let J=this._fieldLoaders.filter((W)=>W.canHandle(q,Q));if(J.length===0)return Promise.resolve({type:G.ERROR,error:Error(`Loader not found for field: ${q} and expected type: ${Q}`)});for(let W of J){let X=await W.loadField(q);if(X.type!==G.ERROR)return X}return{type:G.ERROR,error:Error(`Loader not found for field: ${q} and expected type: ${Q}`)}}async getTypedDataFilters(q){return this._typedDataLoader.load(q)}async report(q){await this._blindSigningReporter?.report(q)}async signReport(q){await this._signReporter?.report(q)}}var J2="https://global.api.prd.ledger.com/cal/v1",W2="https://global.api.prd.ledger.com/transaction-checks/v3",X2="https://nft.api.live.ledger.com",Y2="https://blind-signing.api.ledger.com/ingest",Z2=Object.freeze({cal:Object.freeze({url:J2,mode:"prod",branch:"main"}),web3checks:Object.freeze({url:W2}),metadataServiceDomain:Object.freeze({url:X2}),reporter:Object.freeze({url:Y2}),datasource:Object.freeze({proxy:"default"}),appSource:"third-party"}),$2={defaultLoaders:!0,defaultFieldLoaders:!0,customLoaders:[],customFieldLoaders:[],customTypedDataLoader:void 0,customBlindSigningReporter:void 0,customTrustedNameDataSource:void 0};class G2{config;constructor({originToken:q,loggerFactory:Q}){this.config={...Z2,...$2,customLoaders:[],customFieldLoaders:[],originToken:q??"",loggerFactory:Q??KX}}removeDefaultLoaders(){return this.config.defaultLoaders=!1,this}addLoader(q){return this.config.customLoaders.push(q),this}addTypedDataLoader(q){return this.config.customTypedDataLoader=q,this}setCalConfig(q){return this.config.cal=q,this}setMetadataServiceConfig(q){return this.config.metadataServiceDomain=q,this}setWeb3ChecksConfig(q){return this.config.web3checks=q,this}setDatasourceConfig(q){return this.config.datasource=q,this}setReporterConfig(q){return this.config.reporter=q,this}setAppSource(q){return this.config.appSource=q,this}setBlindSigningReporter(q){return this.config.customBlindSigningReporter=q,this}setTrustedNameDataSource(q){return this.config.customTrustedNameDataSource=q,this}setLoggerFactory(q){return this.config.loggerFactory=q,this}setChain(q){return this.config.chain=q,this}build(){if(!this.config.chain)throw Error("[ContextModuleBuilder] setChain() must be called before build()");return new RJ(this.config)}}var mb=Object.freeze({ETH_SIGN_TRANSACTION:"eth_signTransaction",ETH_SIGN_TYPED_DATA:"eth_signTypedData"}),ub=Object.freeze({NO_CLEAR_SIGNING_CONTEXT:"no_clear_signing_context",DEVICE_REJECTED_CONTEXT:"device_rejected_context",UNRECOGNIZED_PROGRAM:"unrecognized_program",STALE_DESCRIPTOR:"stale_descriptor"}),pb=Object.freeze({BASIC:"basic",EIP7730:"eip7730"}),lb=Object.freeze({DESKTOP:"desktop",MOBILE:"mobile"});var db=Object.freeze({ETH_SIGN_TRANSACTION:"eth_signTransaction",ETH_SIGN_TYPED_DATA:"eth_signTypedData",SOL_SIGN_TRANSACTION:"sol_signTransaction"});var V2={TOKEN:G.SOLANA_TOKEN,LIFI:G.SOLANA_LIFI,TRUSTED_NAME:G.SOLANA_TRUSTED_NAME,BASIC_TRUSTED_NAME:G.SOLANA_BASIC_TRUSTED_NAME,TRANSACTION_CHECK:G.SOLANA_TRANSACTION_CHECK,INSTRUCTION_INFO:G.SOLANA_INSTRUCTION_INFO,ENUM_VARIANT:G.SOLANA_ENUM_VARIANT,TOKEN_INFO:G.SOLANA_TOKEN_INFO,TOKEN_ACCOUNT_STATE:G.SOLANA_TOKEN_ACCOUNT_STATE,ALT_RESOLUTION:G.SOLANA_ALT_RESOLUTION},K2=new Set(Object.values(V2));function ab(q){return K2.has(q.type)}var Rq=Object.freeze({NANO_S:"nanoS",NANO_SP:"nanoSP",NANO_X:"nanoX",STAX:"stax",FLEX:"flex",APEX_P:"apexP"}),O2={[S.NANO_S]:Rq.NANO_S,[S.NANO_SP]:Rq.NANO_SP,[S.NANO_X]:Rq.NANO_X,[S.STAX]:Rq.STAX,[S.FLEX]:Rq.FLEX,[S.APEX]:Rq.APEX_P};function tb(q){return O2[q]}var F2=((q)=>(q.FROM="FROM",q.TO="TO",q.VALUE="VALUE",q))(F2||{}),b2=((q)=>(q.TUPLE="TUPLE",q.ARRAY="ARRAY",q.REF="REF",q.LEAF="LEAF",q.SLICE="SLICE",q))(b2||{}),N2=((q)=>(q.STATIC_LEAF="STATIC_LEAF",q.DYNAMIC_LEAF="DYNAMIC_LEAF",q.TUPLE_LEAF="TUPLE_LEAF",q.ARRAY_LEAF="ARRAY_LEAF",q))(N2||{});export{Jq as a,kq as b,G as c,xq as d,a as e,BX as f,HX as g,c2 as h,k as i,P as j,Iq as k,Aq as l,fq as m,fX as n,Cq as o,yq as p,mq as q,uq as r,lq as s,cq as t,sq as u,iq as v,nq as w,aq as x,oq as y,rq as z,tq as A,QQ as B,JQ as C,eJ as D,WQ as E,XQ as F,YQ as G,ZQ as H,GW as I,Gq as J,$Q as K,GQ as L,VQ as M,KQ as N,OQ as O,FQ as P,NQ as Q,jQ as R,vQ as S,Kq as T,MQ as U,wQ as V,SQ as W,i as X,Fq as Y,xQ as Z,TQ as _,CQ as $,yQ as aa,pQ as ba,lQ as ca,cQ as da,sQ as ea,iQ as fa,nQ as ga,p as ha,RJ as ia,Z2 as ja,G2 as ka,mb as la,ub as ma,pb as na,lb as oa,db as pa,V2 as qa,K2 as ra,ab as sa,Rq as ta,tb as ua,F2 as va,b2 as wa,N2 as xa};
|
|
2
|
+
|
|
3
|
+
//# debugId=4DD2310E7B8930EE64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-09e51wma.js.map
|