@ledgerhq/context-module 0.0.0-ledger-button-20250821163751 → 0.0.0-ledger-button-20250905004746
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/lib/cjs/src/DefaultContextModule.js +1 -1
- package/lib/cjs/src/DefaultContextModule.js.map +3 -3
- package/lib/cjs/src/di.js +1 -1
- package/lib/cjs/src/di.js.map +3 -3
- package/lib/cjs/src/dynamic-network/data/DynamicNetworkDataSource.js +2 -0
- package/lib/cjs/src/dynamic-network/data/DynamicNetworkDataSource.js.map +7 -0
- package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +2 -0
- package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +7 -0
- package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +2 -0
- package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +7 -0
- package/lib/cjs/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.js +2 -0
- package/lib/cjs/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.js.map +7 -0
- package/lib/cjs/src/dynamic-network/di/dynamicNetworkModuleFactory.js +2 -0
- package/lib/cjs/src/dynamic-network/di/dynamicNetworkModuleFactory.js.map +7 -0
- package/lib/cjs/src/dynamic-network/di/dynamicNetworkTypes.js +2 -0
- package/lib/cjs/src/dynamic-network/di/dynamicNetworkTypes.js.map +7 -0
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js +2 -0
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +7 -0
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +2 -0
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +7 -0
- package/lib/cjs/src/dynamic-network/model/DynamicNetworkConfiguration.js +2 -0
- package/lib/cjs/src/dynamic-network/model/DynamicNetworkConfiguration.js.map +7 -0
- package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
- package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +2 -2
- package/lib/cjs/src/index.js +1 -1
- package/lib/cjs/src/index.js.map +2 -2
- package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.js +1 -1
- package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.js.map +3 -3
- package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.test.js +1 -1
- package/lib/cjs/src/pki/domain/DefaultPkiCertificateLoader.test.js.map +3 -3
- package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
- package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/cjs/src/transaction/data/HttpProxyDataSource.js +1 -1
- package/lib/cjs/src/transaction/data/HttpProxyDataSource.js.map +1 -1
- package/lib/cjs/src/transaction/data/HttpProxyDataSource.test.js +1 -1
- package/lib/cjs/src/transaction/data/HttpProxyDataSource.test.js.map +1 -1
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.js +1 -1
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.js.map +3 -3
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js +1 -1
- package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js.map +3 -3
- package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
- package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +1 -1
- package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
- package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +1 -1
- package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
- package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +2 -2
- package/lib/esm/src/DefaultContextModule.js +1 -1
- package/lib/esm/src/DefaultContextModule.js.map +3 -3
- package/lib/esm/src/di.js +1 -1
- package/lib/esm/src/di.js.map +3 -3
- package/lib/esm/src/dynamic-network/data/DynamicNetworkDataSource.js +1 -0
- package/lib/esm/src/dynamic-network/data/DynamicNetworkDataSource.js.map +7 -0
- package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +2 -0
- package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +7 -0
- package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +2 -0
- package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +7 -0
- package/lib/esm/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.js +1 -0
- package/lib/esm/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.js.map +7 -0
- package/lib/esm/src/dynamic-network/di/dynamicNetworkModuleFactory.js +2 -0
- package/lib/esm/src/dynamic-network/di/dynamicNetworkModuleFactory.js.map +7 -0
- package/lib/esm/src/dynamic-network/di/dynamicNetworkTypes.js +2 -0
- package/lib/esm/src/dynamic-network/di/dynamicNetworkTypes.js.map +7 -0
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js +2 -0
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +7 -0
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +2 -0
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +7 -0
- package/lib/esm/src/dynamic-network/model/DynamicNetworkConfiguration.js +1 -0
- package/lib/esm/src/dynamic-network/model/DynamicNetworkConfiguration.js.map +7 -0
- package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
- package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +2 -2
- package/lib/esm/src/index.js +1 -1
- package/lib/esm/src/index.js.map +2 -2
- package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.js +1 -1
- package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.js.map +3 -3
- package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.test.js +1 -1
- package/lib/esm/src/pki/domain/DefaultPkiCertificateLoader.test.js.map +3 -3
- package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
- package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/esm/src/transaction/data/HttpProxyDataSource.js +1 -1
- package/lib/esm/src/transaction/data/HttpProxyDataSource.js.map +1 -1
- package/lib/esm/src/transaction/data/HttpProxyDataSource.test.js +1 -1
- package/lib/esm/src/transaction/data/HttpProxyDataSource.test.js.map +1 -1
- package/lib/esm/src/transaction/domain/TransactionContextLoader.js +1 -1
- package/lib/esm/src/transaction/domain/TransactionContextLoader.js.map +3 -3
- package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js +1 -1
- package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js.map +3 -3
- package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
- package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +1 -1
- package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
- package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +1 -1
- package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
- package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +2 -2
- package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
- package/lib/types/src/di.d.ts.map +1 -1
- package/lib/types/src/dynamic-network/data/DynamicNetworkDataSource.d.ts +6 -0
- package/lib/types/src/dynamic-network/data/DynamicNetworkDataSource.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts +13 -0
- package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.d.ts +2 -0
- package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.d.ts +14 -0
- package/lib/types/src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/di/dynamicNetworkModuleFactory.d.ts +3 -0
- package/lib/types/src/dynamic-network/di/dynamicNetworkModuleFactory.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/di/dynamicNetworkTypes.d.ts +5 -0
- package/lib/types/src/dynamic-network/di/dynamicNetworkTypes.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts +15 -0
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.test.d.ts +2 -0
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/dynamic-network/model/DynamicNetworkConfiguration.d.ts +16 -0
- package/lib/types/src/dynamic-network/model/DynamicNetworkConfiguration.d.ts.map +1 -0
- package/lib/types/src/index.d.ts +2 -0
- package/lib/types/src/index.d.ts.map +1 -1
- package/lib/types/src/pki/domain/DefaultPkiCertificateLoader.d.ts.map +1 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts +2 -0
- package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
- package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts +1 -3
- package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var
|
|
1
|
+
"use strict";var n=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var g=(a,t)=>{for(var o in t)n(a,o,{get:t[o],enumerable:!0})},D=(a,t,o,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of T(t))!_.call(a,e)&&e!==o&&n(a,e,{get:()=>t[e],enumerable:!(r=h(t,e))||r.enumerable});return a};var k=a=>D(n({},"__esModule",{value:!0}),a);var b={};g(b,{DefaultContextModule:()=>S});module.exports=k(b);var p=require("purify-ts"),d=require("./dynamic-network/di/dynamicNetworkTypes"),s=require("./transaction/di/transactionTypes"),C=require("./trusted-name/di/trustedNameTypes"),m=require("./external-plugin/di/externalPluginTypes"),l=require("./nft/di/nftTypes"),i=require("./shared/model/ClearSignContext"),c=require("./solana/di/solanaContextTypes"),x=require("./token/di/tokenTypes"),y=require("./typed-data/di/typedDataTypes"),L=require("./uniswap/di/uniswapTypes"),f=require("./web3-check/di/web3CheckTypes"),u=require("./di");class S{_container;_loaders;_typedDataLoader;_web3CheckLoader;_solanaLoader;constructor(t){this._container=(0,u.makeContainer)({config:t}),this._loaders=t.defaultLoaders?this._getDefaultLoaders():[],this._loaders.push(...t.customLoaders),this._typedDataLoader=t.customTypedDataLoader??this._getDefaultTypedDataLoader(),this._web3CheckLoader=t.customWeb3CheckLoader??this._getWeb3CheckLoader(),this._solanaLoader=t.customSolanaLoader??this._getSolanaLoader()}_getDefaultLoaders(){return[this._container.get(m.externalPluginTypes.ExternalPluginContextLoader),this._container.get(C.trustedNameTypes.TrustedNameContextLoader),this._container.get(l.nftTypes.NftContextLoader),this._container.get(x.tokenTypes.TokenContextLoader),this._container.get(s.transactionTypes.TransactionContextLoader),this._container.get(L.uniswapTypes.UniswapContextLoader),this._container.get(d.dynamicNetworkTypes.DynamicNetworkContextLoader)]}_getDefaultTypedDataLoader(){return this._container.get(y.typedDataTypes.TypedDataContextLoader)}_getWeb3CheckLoader(){return this._container.get(f.web3CheckTypes.Web3CheckContextLoader)}_getSolanaLoader(){try{return this._container.get(c.solanaContextTypes.SolanaContextLoader)}catch{return{load:async t=>(0,p.Left)(new Error("[ContextModule] - DefaultContextModule: no SolanaContextLoader bound"))}}}async getContexts(t){const o=this._loaders.map(e=>e.load(t));return(await Promise.all(o)).flat()}async getContext(t){const o=this._loaders.filter(e=>e.loadField).map(e=>e.loadField(t));return(await Promise.all(o)).find(e=>e!==null)||{type:i.ClearSignContextType.ERROR,error:new Error(`Field type not supported: ${t.type}`)}}async getTypedDataFilters(t){return this._typedDataLoader.load(t)}async getWeb3Checks(t){return(await this._web3CheckLoader.load(t)).caseOf({Right:r=>({type:i.ClearSignContextType.WEB3_CHECK,payload:r.descriptor,certificate:r.certificate}),Left:()=>null})}async getSolanaContext(t){return await this._solanaLoader.load(t)}}0&&(module.exports={DefaultContextModule});
|
|
2
2
|
//# sourceMappingURL=DefaultContextModule.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/DefaultContextModule.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Container } from \"inversify\";\nimport { Left } from \"purify-ts\";\n\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { transactionTypes } from \"@/transaction/di/transactionTypes\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { type ExternalPluginContextLoader } from \"./external-plugin/domain/ExternalPluginContextLoader\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { type NftContextLoader } from \"./nft/domain/NftContextLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport {\n type TransactionContext,\n type TransactionFieldContext,\n} from \"./shared/model/TransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { type TokenContextLoader } from \"./token/domain/TokenContextLoader\";\nimport { type TransactionContextLoader } from \"./transaction/domain/TransactionContextLoader\";\nimport { type TrustedNameContextLoader } from \"./trusted-name/domain/TrustedNameContextLoader\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { uniswapTypes } from \"./uniswap/di/uniswapTypes\";\nimport { type UniswapContextLoader } from \"./uniswap/domain/UniswapContextLoader\";\nimport { web3CheckTypes } from \"./web3-check/di/web3CheckTypes\";\nimport { type Web3CheckContextLoader } from \"./web3-check/domain/Web3CheckContextLoader\";\nimport {\n type Web3CheckContext,\n type Web3Checks,\n} from \"./web3-check/domain/web3CheckTypes\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader[];\n private _typedDataLoader: TypedDataContextLoader;\n private _web3CheckLoader: Web3CheckContextLoader;\n private _solanaLoader: SolanaContextLoader;\n\n constructor(args: ContextModuleConfig) {\n this._container = makeContainer({ config: args });\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._web3CheckLoader =\n args.customWeb3CheckLoader ?? this._getWeb3CheckLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n }\n\n private _getDefaultLoaders(): ContextLoader[] {\n return [\n this._container.get<ExternalPluginContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<TrustedNameContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<NftContextLoader>(nftTypes.NftContextLoader),\n this._container.get<TokenContextLoader>(tokenTypes.TokenContextLoader),\n this._container.get<TransactionContextLoader>(\n transactionTypes.TransactionContextLoader,\n ),\n this._container.get<UniswapContextLoader>(\n uniswapTypes.UniswapContextLoader,\n ),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getWeb3CheckLoader(): Web3CheckContextLoader {\n return this._container.get<Web3CheckContextLoader>(\n web3CheckTypes.Web3CheckContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\n }\n\n public async getContexts(\n transaction: TransactionContext,\n ): Promise<ClearSignContext[]> {\n const promises = this._loaders.map((fetcher) => fetcher.load(transaction));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getContext(\n field: TransactionFieldContext,\n ): Promise<ClearSignContext> {\n const promises = this._loaders\n .filter((fetcher) => fetcher.loadField)\n .map((fetcher) => fetcher.loadField!(field));\n const responses = await Promise.all(promises);\n return (\n responses.find((resp) => resp !== null) || {\n type: ClearSignContextType.ERROR,\n error: new Error(`Field type not supported: ${field.type}`),\n }\n );\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async getWeb3Checks(\n transactionContext: Web3CheckContext,\n ): Promise<ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null> {\n const web3Checks = await this._web3CheckLoader.load(transactionContext);\n\n return web3Checks.caseOf({\n Right: (checks: Web3Checks) => ({\n type: ClearSignContextType.WEB3_CHECK,\n payload: checks.descriptor,\n certificate: checks.certificate,\n }),\n Left: () => null,\n });\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAqB,
|
|
6
|
-
"names": ["DefaultContextModule_exports", "__export", "DefaultContextModule", "__toCommonJS", "import_purify_ts", "import_transactionTypes", "import_trustedNameTypes", "import_externalPluginTypes", "import_nftTypes", "import_ClearSignContext", "import_solanaContextTypes", "import_tokenTypes", "import_typedDataTypes", "import_uniswapTypes", "import_web3CheckTypes", "import_di", "args", "_ctx", "transaction", "promises", "fetcher", "field", "resp", "typedData", "transactionContext", "checks"]
|
|
4
|
+
"sourcesContent": ["import { type Container } from \"inversify\";\nimport { Left } from \"purify-ts\";\n\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport { type DynamicNetworkContextLoader } from \"@/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { transactionTypes } from \"@/transaction/di/transactionTypes\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { type ExternalPluginContextLoader } from \"./external-plugin/domain/ExternalPluginContextLoader\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { type NftContextLoader } from \"./nft/domain/NftContextLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport {\n type TransactionContext,\n type TransactionFieldContext,\n} from \"./shared/model/TransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { type TokenContextLoader } from \"./token/domain/TokenContextLoader\";\nimport { type TransactionContextLoader } from \"./transaction/domain/TransactionContextLoader\";\nimport { type TrustedNameContextLoader } from \"./trusted-name/domain/TrustedNameContextLoader\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { uniswapTypes } from \"./uniswap/di/uniswapTypes\";\nimport { type UniswapContextLoader } from \"./uniswap/domain/UniswapContextLoader\";\nimport { web3CheckTypes } from \"./web3-check/di/web3CheckTypes\";\nimport { type Web3CheckContextLoader } from \"./web3-check/domain/Web3CheckContextLoader\";\nimport {\n type Web3CheckContext,\n type Web3Checks,\n} from \"./web3-check/domain/web3CheckTypes\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader[];\n private _typedDataLoader: TypedDataContextLoader;\n private _web3CheckLoader: Web3CheckContextLoader;\n private _solanaLoader: SolanaContextLoader;\n\n constructor(args: ContextModuleConfig) {\n this._container = makeContainer({ config: args });\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._web3CheckLoader =\n args.customWeb3CheckLoader ?? this._getWeb3CheckLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n }\n\n private _getDefaultLoaders(): ContextLoader[] {\n return [\n this._container.get<ExternalPluginContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<TrustedNameContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<NftContextLoader>(nftTypes.NftContextLoader),\n this._container.get<TokenContextLoader>(tokenTypes.TokenContextLoader),\n this._container.get<TransactionContextLoader>(\n transactionTypes.TransactionContextLoader,\n ),\n this._container.get<UniswapContextLoader>(\n uniswapTypes.UniswapContextLoader,\n ),\n this._container.get<DynamicNetworkContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getWeb3CheckLoader(): Web3CheckContextLoader {\n return this._container.get<Web3CheckContextLoader>(\n web3CheckTypes.Web3CheckContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\n }\n\n public async getContexts(\n transaction: TransactionContext,\n ): Promise<ClearSignContext[]> {\n const promises = this._loaders.map((fetcher) => fetcher.load(transaction));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getContext(\n field: TransactionFieldContext,\n ): Promise<ClearSignContext> {\n const promises = this._loaders\n .filter((fetcher) => fetcher.loadField)\n .map((fetcher) => fetcher.loadField!(field));\n const responses = await Promise.all(promises);\n return (\n responses.find((resp) => resp !== null) || {\n type: ClearSignContextType.ERROR,\n error: new Error(`Field type not supported: ${field.type}`),\n }\n );\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async getWeb3Checks(\n transactionContext: Web3CheckContext,\n ): Promise<ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null> {\n const web3Checks = await this._web3CheckLoader.load(transactionContext);\n\n return web3Checks.caseOf({\n Right: (checks: Web3Checks) => ({\n type: ClearSignContextType.WEB3_CHECK,\n payload: checks.descriptor,\n certificate: checks.certificate,\n }),\n Left: () => null,\n });\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAqB,qBAErBC,EAAoC,oDAIpCC,EAAiC,6CACjCC,EAAiC,8CAGjCC,EAAoC,oDAEpCC,EAAyB,6BAGzBC,EAIO,2CAMPC,EAAmC,0CAGnCC,EAA2B,iCAI3BC,EAA+B,0CAE/BC,EAA6B,qCAE7BC,EAA+B,0CAO/BC,EAA8B,gBAEvB,MAAMd,CAA8C,CACjD,WACA,SACA,iBACA,iBACA,cAER,YAAYe,EAA2B,CACrC,KAAK,cAAa,iBAAc,CAAE,OAAQA,CAAK,CAAC,EAChD,KAAK,SAAWA,EAAK,eAAiB,KAAK,mBAAmB,EAAI,CAAC,EACnE,KAAK,SAAS,KAAK,GAAGA,EAAK,aAAa,EACxC,KAAK,iBACHA,EAAK,uBAAyB,KAAK,2BAA2B,EAChE,KAAK,iBACHA,EAAK,uBAAyB,KAAK,oBAAoB,EACzD,KAAK,cAAgBA,EAAK,oBAAsB,KAAK,iBAAiB,CACxE,CAEQ,oBAAsC,CAC5C,MAAO,CACL,KAAK,WAAW,IACd,sBAAoB,2BACtB,EACA,KAAK,WAAW,IACd,mBAAiB,wBACnB,EACA,KAAK,WAAW,IAAsB,WAAS,gBAAgB,EAC/D,KAAK,WAAW,IAAwB,aAAW,kBAAkB,EACrE,KAAK,WAAW,IACd,mBAAiB,wBACnB,EACA,KAAK,WAAW,IACd,eAAa,oBACf,EACA,KAAK,WAAW,IACd,sBAAoB,2BACtB,CACF,CACF,CAEQ,4BAAqD,CAC3D,OAAO,KAAK,WAAW,IACrB,iBAAe,sBACjB,CACF,CAEQ,qBAA8C,CACpD,OAAO,KAAK,WAAW,IACrB,iBAAe,sBACjB,CACF,CAEQ,kBAAwC,CAC9C,GAAI,CACF,OAAO,KAAK,WAAW,IACrB,qBAAmB,mBACrB,CACF,MAAQ,CACN,MAAO,CACL,KAAM,MAAOC,MACX,QACE,IAAI,MACF,sEACF,CACF,CACJ,CACF,CACF,CAEA,MAAa,YACXC,EAC6B,CAC7B,MAAMC,EAAW,KAAK,SAAS,IAAKC,GAAYA,EAAQ,KAAKF,CAAW,CAAC,EAEzE,OADkB,MAAM,QAAQ,IAAIC,CAAQ,GAC3B,KAAK,CACxB,CAEA,MAAa,WACXE,EAC2B,CAC3B,MAAMF,EAAW,KAAK,SACnB,OAAQC,GAAYA,EAAQ,SAAS,EACrC,IAAKA,GAAYA,EAAQ,UAAWC,CAAK,CAAC,EAE7C,OADkB,MAAM,QAAQ,IAAIF,CAAQ,GAEhC,KAAMG,GAASA,IAAS,IAAI,GAAK,CACzC,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MAAM,6BAA6BD,EAAM,IAAI,EAAE,CAC5D,CAEJ,CAEA,MAAa,oBACXE,EACoC,CACpC,OAAO,KAAK,iBAAiB,KAAKA,CAAS,CAC7C,CAEA,MAAa,cACXC,EAC0E,CAG1E,OAFmB,MAAM,KAAK,iBAAiB,KAAKA,CAAkB,GAEpD,OAAO,CACvB,MAAQC,IAAwB,CAC9B,KAAM,uBAAqB,WAC3B,QAASA,EAAO,WAChB,YAAaA,EAAO,WACtB,GACA,KAAM,IAAM,IACd,CAAC,CACH,CAEA,MAAa,iBACXD,EACyC,CACzC,OAAO,MAAM,KAAK,cAAc,KAAKA,CAAkB,CACzD,CACF",
|
|
6
|
+
"names": ["DefaultContextModule_exports", "__export", "DefaultContextModule", "__toCommonJS", "import_purify_ts", "import_dynamicNetworkTypes", "import_transactionTypes", "import_trustedNameTypes", "import_externalPluginTypes", "import_nftTypes", "import_ClearSignContext", "import_solanaContextTypes", "import_tokenTypes", "import_typedDataTypes", "import_uniswapTypes", "import_web3CheckTypes", "import_di", "args", "_ctx", "transaction", "promises", "fetcher", "field", "resp", "typedData", "transactionContext", "checks"]
|
|
7
7
|
}
|
package/lib/cjs/src/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var n=Object.defineProperty;var
|
|
1
|
+
"use strict";var n=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var w=(r,o)=>{for(var e in o)n(r,e,{get:o[e],enumerable:!0})},A=(r,o,e,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of k(o))!x.call(r,t)&&t!==e&&n(r,t,{get:()=>o[t],enumerable:!(a=g(o,t))||a.enumerable});return r};var N=r=>A(n({},"__esModule",{value:!0}),r);var b={};w(b,{makeContainer:()=>P});module.exports=N(b);var m=require("inversify"),i=require("./config/di/configModuleFactory"),c=require("./dynamic-network/di/dynamicNetworkModuleFactory"),f=require("./external-plugin/di/externalPluginModuleFactory"),p=require("./nft/di/nftModuleFactory"),d=require("./pki/di/pkiModuleFactory"),l=require("./solana/di/SolanaContextModuleFactory"),u=require("./token/di/tokenModuleFactory"),y=require("./transaction/di/transactionModuleFactory"),M=require("./trusted-name/di/trustedNameModuleFactory"),F=require("./typed-data/di/typedDataModuleFactory"),C=require("./uniswap/di/uniswapModuleFactory"),s=require("./web3-check/di/web3CheckModuleFactory");const P=({config:r})=>{const o=new m.Container;return o.loadSync((0,i.configModuleFactory)(r),(0,f.externalPluginModuleFactory)(),(0,c.dynamicNetworkModuleFactory)(),(0,p.nftModuleFactory)(),(0,u.tokenModuleFactory)(),(0,y.transactionModuleFactory)(),(0,M.trustedNameModuleFactory)(),(0,F.typedDataModuleFactory)(),(0,d.nanoPkiModuleFactory)(),(0,C.uniswapModuleFactory)(),(0,s.web3CheckModuleFactory)(),(0,l.solanaContextModuleFactory)()),o};0&&(module.exports={makeContainer});
|
|
2
2
|
//# sourceMappingURL=di.js.map
|
package/lib/cjs/src/di.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/di.ts"],
|
|
4
|
-
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { transactionModuleFactory } from \"@/transaction/di/transactionModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\nimport { web3CheckModuleFactory } from \"@/web3-check/di/web3CheckModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n nftModuleFactory(),\n tokenModuleFactory(),\n transactionModuleFactory(),\n trustedNameModuleFactory(),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n web3CheckModuleFactory(),\n solanaContextModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA0B,qBAE1BC,EAAoC,2CAEpCC,EAA4C,4DAC5CC,EAAiC,qCACjCC,EAAqC,qCACrCC,EAA2C,kDAC3CC,EAAmC,yCACnCC,EAAyC,qDACzCC,EAAyC,sDACzCC,EAAuC,kDACvCC,EAAqC,6CACrCC,EAAuC,kDAMhC,
|
|
6
|
-
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_configModuleFactory", "import_externalPluginModuleFactory", "import_nftModuleFactory", "import_pkiModuleFactory", "import_SolanaContextModuleFactory", "import_tokenModuleFactory", "import_transactionModuleFactory", "import_trustedNameModuleFactory", "import_typedDataModuleFactory", "import_uniswapModuleFactory", "import_web3CheckModuleFactory", "config", "container"]
|
|
4
|
+
"sourcesContent": ["import { Container } from \"inversify\";\n\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { dynamicNetworkModuleFactory } from \"@/dynamic-network/di/dynamicNetworkModuleFactory\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { transactionModuleFactory } from \"@/transaction/di/transactionModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\nimport { web3CheckModuleFactory } from \"@/web3-check/di/web3CheckModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n dynamicNetworkModuleFactory(),\n nftModuleFactory(),\n tokenModuleFactory(),\n transactionModuleFactory(),\n trustedNameModuleFactory(),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n web3CheckModuleFactory(),\n solanaContextModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA0B,qBAE1BC,EAAoC,2CAEpCC,EAA4C,4DAC5CC,EAA4C,4DAC5CC,EAAiC,qCACjCC,EAAqC,qCACrCC,EAA2C,kDAC3CC,EAAmC,yCACnCC,EAAyC,qDACzCC,EAAyC,sDACzCC,EAAuC,kDACvCC,EAAqC,6CACrCC,EAAuC,kDAMhC,MAAMd,EAAgB,CAAC,CAAE,OAAAe,CAAO,IAAyB,CAC9D,MAAMC,EAAY,IAAI,YAEtB,OAAAA,EAAU,YACR,uBAAoBD,CAAM,KAC1B,+BAA4B,KAC5B,+BAA4B,KAC5B,oBAAiB,KACjB,sBAAmB,KACnB,4BAAyB,KACzB,4BAAyB,KACzB,0BAAuB,KACvB,wBAAqB,KACrB,wBAAqB,KACrB,0BAAuB,KACvB,8BAA2B,CAC7B,EAEOC,CACT",
|
|
6
|
+
"names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_configModuleFactory", "import_dynamicNetworkModuleFactory", "import_externalPluginModuleFactory", "import_nftModuleFactory", "import_pkiModuleFactory", "import_SolanaContextModuleFactory", "import_tokenModuleFactory", "import_transactionModuleFactory", "import_trustedNameModuleFactory", "import_typedDataModuleFactory", "import_uniswapModuleFactory", "import_web3CheckModuleFactory", "config", "container"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var f=(o,r,n,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of m(r))!c.call(o,i)&&i!==n&&e(o,i,{get:()=>r[i],enumerable:!(t=a(r,i))||t.enumerable});return o};var y=o=>f(e({},"__esModule",{value:!0}),o);var p={};module.exports=y(p);
|
|
2
|
+
//# sourceMappingURL=DynamicNetworkDataSource.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/data/DynamicNetworkDataSource.ts"],
|
|
4
|
+
"sourcesContent": ["import { type Either } from \"purify-ts\";\n\nimport { type DynamicNetworkConfiguration } from \"@/dynamic-network/model/DynamicNetworkConfiguration\";\n\nexport interface DynamicNetworkDataSource {\n getDynamicNetworkConfiguration(\n chainId: number,\n ): Promise<Either<Error, DynamicNetworkConfiguration>>;\n}\n"],
|
|
5
|
+
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["DynamicNetworkDataSource_exports", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var N=Object.create;var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var R=Object.getOwnPropertyNames;var E=Object.getPrototypeOf,C=Object.prototype.hasOwnProperty;var h=(t,r)=>{for(var o in r)a(t,o,{get:r[o],enumerable:!0})},m=(t,r,o,e)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of R(r))!C.call(t,i)&&i!==o&&a(t,i,{get:()=>r[i],enumerable:!(e=u(r,i))||e.enumerable});return t};var d=(t,r,o)=>(o=t!=null?N(E(t)):{},m(r||!t||!t.__esModule?a(o,"default",{value:t,enumerable:!0}):o,t)),b=t=>m(a({},"__esModule",{value:!0}),t),g=(t,r,o,e)=>{for(var i=e>1?void 0:e?u(r,o):r,n=t.length-1,p;n>=0;n--)(p=t[n])&&(i=(e?p(r,o,i):p(i))||i);return e&&i&&a(r,o,i),i},y=(t,r)=>(o,e)=>r(o,e,t);var j={};h(j,{HttpDynamicNetworkDataSource:()=>c});module.exports=b(j);var l=d(require("axios")),f=require("inversify"),s=require("purify-ts"),D=require("../../config/di/configTypes"),w=require("../../shared/constant/HttpHeaders"),k=d(require("../../../package.json"));let c=class{constructor(r){this.config=r}async getDynamicNetworkConfiguration(r){let o;try{o=(await l.default.get(`${this.config.cal.url}/networks?output=id,descriptors,icons&chain_id=${r}`,{headers:{[w.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${k.default.version}`}})).data}catch(n){return(0,s.Left)(n instanceof Error?n:new Error("Failed to fetch network configuration"))}const e=o?.[0];if(!e)return(0,s.Left)(new Error(`Network configuration not found for chain ID: ${r}`));if(!this.isValidNetworkData(e))return(0,s.Left)(new Error(`Invalid network configuration response for chain ID: ${r}`));const i=this.transformToNetworkConfiguration(e);return(0,s.Right)(i)}isValidNetworkData(r){if(!r||typeof r!="object")return!1;const o=r;if(typeof o.id!="string"||!o.descriptors||typeof o.descriptors!="object")return!1;for(const e of Object.values(o.descriptors))if(!this.isValidDescriptor(e))return!1;return!(o.icons&&typeof o.icons!="object")}isValidDescriptor(r){if(!r||typeof r!="object")return!1;const o=r;if(typeof o.data!="string"||typeof o.descriptorType!="string"||typeof o.descriptorVersion!="string"||!o.signatures||typeof o.signatures!="object")return!1;const e=o.signatures;return!(typeof e.prod!="string"||typeof e.test!="string")}transformToNetworkConfiguration(r){const o=Object.entries(r.descriptors).reduce((e,[i,n])=>(e[i]={descriptorType:n.descriptorType,descriptorVersion:n.descriptorVersion,data:n.data,signatures:n.signatures,icon:r.icons?.[i]},e),{});return{id:r.id,descriptors:o}}};c=g([(0,f.injectable)(),y(0,(0,f.inject)(D.configTypes.Config))],c);0&&(module.exports={HttpDynamicNetworkDataSource});
|
|
2
|
+
//# sourceMappingURL=HttpDynamicNetworkDataSource.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/data/HttpDynamicNetworkDataSource.ts"],
|
|
4
|
+
"sourcesContent": ["import { type DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type DynamicNetworkApiResponseDto } from \"./dto/DynamicNetworkApiResponseDto\";\nimport { type DynamicNetworkDataSource } from \"./DynamicNetworkDataSource\";\n\n@injectable()\nexport class HttpDynamicNetworkDataSource implements DynamicNetworkDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async getDynamicNetworkConfiguration(\n chainId: number,\n ): Promise<Either<Error, DynamicNetworkConfiguration>> {\n let response: DynamicNetworkApiResponseDto;\n\n try {\n const axiosResponse = await axios.get<DynamicNetworkApiResponseDto>(\n `${this.config.cal.url}/networks?output=id,descriptors,icons&chain_id=${chainId}`,\n {\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n },\n );\n response = axiosResponse.data;\n } catch (error) {\n return Left(\n error instanceof Error\n ? error\n : new Error(\"Failed to fetch network configuration\"),\n );\n }\n\n const networkData = response?.[0];\n if (!networkData) {\n return Left(\n new Error(`Network configuration not found for chain ID: ${chainId}`),\n );\n }\n\n // Validate response structure\n if (!this.isValidNetworkData(networkData)) {\n return Left(\n new Error(\n `Invalid network configuration response for chain ID: ${chainId}`,\n ),\n );\n }\n\n const configuration = this.transformToNetworkConfiguration(networkData);\n return Right(configuration);\n }\n\n private isValidNetworkData(\n data: unknown,\n ): data is DynamicNetworkApiResponseDto[0] {\n if (!data || typeof data !== \"object\") {\n return false;\n }\n\n const obj = data as Record<string, unknown>;\n\n // Check required fields\n if (typeof obj[\"id\"] !== \"string\") {\n return false;\n }\n\n // Check descriptors structure\n if (!obj[\"descriptors\"] || typeof obj[\"descriptors\"] !== \"object\") {\n return false;\n }\n\n // Validate each descriptor\n for (const descriptor of Object.values(obj[\"descriptors\"])) {\n if (!this.isValidDescriptor(descriptor)) {\n return false;\n }\n }\n\n // Icons are optional but if present, should be an object\n if (obj[\"icons\"] && typeof obj[\"icons\"] !== \"object\") {\n return false;\n }\n\n return true;\n }\n\n private isValidDescriptor(\n descriptor: unknown,\n ): descriptor is DynamicNetworkApiResponseDto[0][\"descriptors\"][string] {\n if (!descriptor || typeof descriptor !== \"object\") {\n return false;\n }\n\n const desc = descriptor as Record<string, unknown>;\n\n // Check required descriptor fields\n if (\n typeof desc[\"data\"] !== \"string\" ||\n typeof desc[\"descriptorType\"] !== \"string\" ||\n typeof desc[\"descriptorVersion\"] !== \"string\"\n ) {\n return false;\n }\n\n // Check signatures structure\n if (!desc[\"signatures\"] || typeof desc[\"signatures\"] !== \"object\") {\n return false;\n }\n\n const signatures = desc[\"signatures\"] as Record<string, unknown>;\n if (\n typeof signatures[\"prod\"] !== \"string\" ||\n typeof signatures[\"test\"] !== \"string\"\n ) {\n return false;\n }\n\n return true;\n }\n\n private transformToNetworkConfiguration(\n networkData: DynamicNetworkApiResponseDto[0],\n ): DynamicNetworkConfiguration {\n const descriptors = Object.entries(networkData.descriptors).reduce(\n (acc, [deviceModel, descriptor]) => {\n acc[deviceModel as DeviceModelId] = {\n descriptorType: descriptor.descriptorType,\n descriptorVersion: descriptor.descriptorVersion,\n data: descriptor.data,\n signatures: descriptor.signatures,\n icon: networkData.icons?.[deviceModel],\n };\n return acc;\n },\n {} as Record<DeviceModelId, DynamicNetworkDescriptor>,\n );\n\n return {\n id: networkData.id,\n descriptors,\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAM5BC,EAA6C,yCAC7CC,EAAoB,iCAMb,IAAMC,EAAN,KAAuE,CAC5E,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,+BACJC,EACqD,CACrD,IAAIC,EAEJ,GAAI,CASFA,GARsB,MAAM,EAAAC,QAAM,IAChC,GAAG,KAAK,OAAO,IAAI,GAAG,kDAAkDF,CAAO,GAC/E,CACE,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAG,QAAQ,OAAO,EACnE,CACF,CACF,GACyB,IAC3B,OAASC,EAAO,CACd,SAAO,QACLA,aAAiB,MACbA,EACA,IAAI,MAAM,uCAAuC,CACvD,CACF,CAEA,MAAMC,EAAcJ,IAAW,CAAC,EAChC,GAAI,CAACI,EACH,SAAO,QACL,IAAI,MAAM,iDAAiDL,CAAO,EAAE,CACtE,EAIF,GAAI,CAAC,KAAK,mBAAmBK,CAAW,EACtC,SAAO,QACL,IAAI,MACF,wDAAwDL,CAAO,EACjE,CACF,EAGF,MAAMM,EAAgB,KAAK,gCAAgCD,CAAW,EACtE,SAAO,SAAMC,CAAa,CAC5B,CAEQ,mBACNC,EACyC,CACzC,GAAI,CAACA,GAAQ,OAAOA,GAAS,SAC3B,MAAO,GAGT,MAAMC,EAAMD,EAQZ,GALI,OAAOC,EAAI,IAAU,UAKrB,CAACA,EAAI,aAAkB,OAAOA,EAAI,aAAmB,SACvD,MAAO,GAIT,UAAWC,KAAc,OAAO,OAAOD,EAAI,WAAc,EACvD,GAAI,CAAC,KAAK,kBAAkBC,CAAU,EACpC,MAAO,GAKX,MAAI,EAAAD,EAAI,OAAY,OAAOA,EAAI,OAAa,SAK9C,CAEQ,kBACNC,EACsE,CACtE,GAAI,CAACA,GAAc,OAAOA,GAAe,SACvC,MAAO,GAGT,MAAMC,EAAOD,EAYb,GARE,OAAOC,EAAK,MAAY,UACxB,OAAOA,EAAK,gBAAsB,UAClC,OAAOA,EAAK,mBAAyB,UAMnC,CAACA,EAAK,YAAiB,OAAOA,EAAK,YAAkB,SACvD,MAAO,GAGT,MAAMC,EAAaD,EAAK,WACxB,MACE,SAAOC,EAAW,MAAY,UAC9B,OAAOA,EAAW,MAAY,SAMlC,CAEQ,gCACNN,EAC6B,CAC7B,MAAMO,EAAc,OAAO,QAAQP,EAAY,WAAW,EAAE,OAC1D,CAACQ,EAAK,CAACC,EAAaL,CAAU,KAC5BI,EAAIC,CAA4B,EAAI,CAClC,eAAgBL,EAAW,eAC3B,kBAAmBA,EAAW,kBAC9B,KAAMA,EAAW,KACjB,WAAYA,EAAW,WACvB,KAAMJ,EAAY,QAAQS,CAAW,CACvC,EACOD,GAET,CAAC,CACH,EAEA,MAAO,CACL,GAAIR,EAAY,GAChB,YAAAO,CACF,CACF,CACF,EA1Iad,EAANiB,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,cAAY,MAAM,IAFjBlB",
|
|
6
|
+
"names": ["HttpDynamicNetworkDataSource_exports", "__export", "HttpDynamicNetworkDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_configTypes", "import_HttpHeaders", "import_package", "HttpDynamicNetworkDataSource", "config", "chainId", "response", "axios", "PACKAGE", "error", "networkData", "configuration", "data", "obj", "descriptor", "desc", "signatures", "descriptors", "acc", "deviceModel", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var f=Object.create;var d=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,w=Object.prototype.hasOwnProperty;var k=(a,i,c,o)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of g(i))!w.call(a,t)&&t!==c&&d(a,t,{get:()=>i[t],enumerable:!(o=u(i,t))||o.enumerable});return a};var b=(a,i,c)=>(c=a!=null?f(p(a)):{},k(i||!a||!a.__esModule?d(c,"default",{value:a,enumerable:!0}):c,a));var r=b(require("axios")),n=require("purify-ts"),e=require("vitest"),l=require("./HttpDynamicNetworkDataSource");e.vi.mock("axios");(0,e.describe)("HttpNetworkDataSource",()=>{let a;const i={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"}},c={data:[{id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"}},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"}}}}]};(0,e.beforeAll)(()=>{a=new l.HttpDynamicNetworkDataSource(i)}),(0,e.beforeEach)(()=>{e.vi.clearAllMocks()}),(0,e.describe)("getNetworkConfiguration",()=>{(0,e.it)("should return network configuration successfully",async()=>{e.vi.mocked(r.default.get).mockResolvedValue(c);const o=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(r.default.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=1",e.expect.objectContaining({headers:e.expect.any(Object)})),(0,e.expect)(o).toEqual((0,n.Right)({id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"},icon:void 0},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"},icon:void 0}}}))}),(0,e.it)("should return error when network data is not found",async()=>{e.vi.mocked(r.default.get).mockResolvedValue({data:[]});const o=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should return error when network data is undefined",async()=>{e.vi.mocked(r.default.get).mockResolvedValue({data:void 0});const o=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should return error when axios throws an error",async()=>{e.vi.mocked(r.default.get).mockRejectedValue(new Error("Network error"));const o=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Network error")))}),(0,e.it)("should return generic error when axios throws non-Error",async()=>{e.vi.mocked(r.default.get).mockRejectedValue("String error");const o=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Failed to fetch network configuration")))}),(0,e.it)("should handle invalid data - missing id",async()=>{const o={data:[{descriptors:{}}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - missing descriptors",async()=>{const o={data:[{id:"ethereum"}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - missing data field",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:{descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}}}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - missing signatures",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1"}}}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid signatures - missing prod",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"sig2"}}}}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should include icons when available",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}},stax:{data:"0x0102",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig3",test:"sig4"}}},icons:{flex:"icon1",stax:"icon2"}}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t.isRight()).toBe(!0);const s=t.unsafeCoerce();(0,e.expect)(s.descriptors.flex.icon).toBe("icon1"),(0,e.expect)(s.descriptors.stax.icon).toBe("icon2")}),(0,e.it)("should transform data correctly for Polygon chain ID",async()=>{e.vi.mocked(r.default.get).mockResolvedValue(c);const o=await a.getDynamicNetworkConfiguration(137);(0,e.expect)(r.default.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=137",e.expect.objectContaining({headers:e.expect.any(Object)})),(0,e.expect)(o.isRight()).toBe(!0);const t=o.unsafeCoerce();(0,e.expect)(Object.keys(t.descriptors)).toEqual(["flex","stax"])}),(0,e.it)("should handle invalid data - null data",async()=>{const o={data:[null]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should handle invalid data - non-object data",async()=>{const o={data:["string_instead_of_object"]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - icons as string instead of object",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:"should_be_object_not_string"}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - icons as number instead of object (line 93)",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:123}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - null descriptor (line 103)",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:null}}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - non-object descriptor (line 103)",async()=>{const o={data:[{id:"ethereum",descriptors:{flex:"should_be_object_not_string"}}]};e.vi.mocked(r.default.get).mockResolvedValue(o);const t=await a.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))})})});
|
|
2
|
+
//# sourceMappingURL=HttpDynamicNetworkDataSource.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/data/HttpDynamicNetworkDataSource.test.ts"],
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeAll, beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpDynamicNetworkDataSource } from \"./HttpDynamicNetworkDataSource\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpNetworkDataSource\", () => {\n let datasource: HttpDynamicNetworkDataSource;\n const mockConfig: ContextModuleConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n\n const mockNetworkResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n },\n },\n },\n ],\n };\n\n beforeAll(() => {\n datasource = new HttpDynamicNetworkDataSource(mockConfig);\n });\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getNetworkConfiguration\", () => {\n it(\"should return network configuration successfully\", async () => {\n vi.mocked(axios.get).mockResolvedValue(mockNetworkResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(axios.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=1\",\n expect.objectContaining({\n headers: expect.any(Object) as Record<string, string>,\n }),\n );\n\n expect(result).toEqual(\n Right({\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n icon: undefined,\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n icon: undefined,\n },\n },\n }),\n );\n });\n\n it(\"should return error when network data is not found\", async () => {\n vi.mocked(axios.get).mockResolvedValue({ data: [] });\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when network data is undefined\", async () => {\n vi.mocked(axios.get).mockResolvedValue({ data: undefined });\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when axios throws an error\", async () => {\n vi.mocked(axios.get).mockRejectedValue(new Error(\"Network error\"));\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(Left(new Error(\"Network error\")));\n });\n\n it(\"should return generic error when axios throws non-Error\", async () => {\n vi.mocked(axios.get).mockRejectedValue(\"String error\");\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Failed to fetch network configuration\")),\n );\n });\n\n it(\"should handle invalid data - missing id\", async () => {\n const invalidResponse = {\n data: [\n {\n // Missing id\n descriptors: {},\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - missing descriptors\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n // Missing descriptors\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing data field\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n // Missing data\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: { prod: \"sig1\", test: \"sig2\" },\n },\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing signatures\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n // Missing signatures\n },\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid signatures - missing prod\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n // Missing prod\n test: \"sig2\",\n },\n },\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should include icons when available\", async () => {\n const responseWithIcons = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n stax: {\n data: \"0x0102\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig3\",\n test: \"sig4\",\n },\n },\n },\n icons: {\n flex: \"icon1\",\n stax: \"icon2\",\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(responseWithIcons);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(configuration.descriptors.flex.icon).toBe(\"icon1\");\n expect(configuration.descriptors.stax.icon).toBe(\"icon2\");\n });\n\n it(\"should transform data correctly for Polygon chain ID\", async () => {\n vi.mocked(axios.get).mockResolvedValue(mockNetworkResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(137);\n\n expect(axios.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=137\",\n expect.objectContaining({\n headers: expect.any(Object) as Record<string, string>,\n }),\n );\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(Object.keys(configuration.descriptors)).toEqual([\"flex\", \"stax\"]);\n });\n\n it(\"should handle invalid data - null data\", async () => {\n const invalidResponse = {\n data: [null],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should handle invalid data - non-object data\", async () => {\n const invalidResponse = {\n data: [\"string_instead_of_object\"],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as string instead of object\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: \"should_be_object_not_string\",\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as number instead of object (line 93)\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: 123,\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - null descriptor (line 103)\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: null,\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - non-object descriptor (line 103)\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: \"should_be_object_not_string\",\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_axios", "import_purify_ts", "import_vitest", "import_HttpDynamicNetworkDataSource", "datasource", "mockConfig", "mockNetworkResponse", "axios", "result", "invalidResponse", "responseWithIcons", "configuration"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var d=(s,r,n,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of g(r))!p.call(s,t)&&t!==n&&e(s,t,{get:()=>r[t],enumerable:!(i=o(r,t))||i.enumerable});return s};var c=s=>d(e({},"__esModule",{value:!0}),s);var a={};module.exports=c(a);
|
|
2
|
+
//# sourceMappingURL=DynamicNetworkApiResponseDto.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/dynamic-network/data/dto/DynamicNetworkApiResponseDto.ts"],
|
|
4
|
+
"sourcesContent": ["export type DynamicNetworkApiResponseDto = Array<{\n id: string;\n descriptors: Record<\n string,\n {\n data: string;\n descriptorType: string;\n descriptorVersion: string;\n signatures: {\n prod: string;\n test: string;\n };\n }\n >;\n icons: Record<string, string>;\n}>;\n"],
|
|
5
|
+
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["DynamicNetworkApiResponseDto_exports", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var D=(o,t)=>{for(var e in t)a(o,e,{get:t[e],enumerable:!0})},N=(o,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of w(t))!k.call(o,r)&&r!==e&&a(o,r,{get:()=>t[r],enumerable:!(n=p(t,r))||n.enumerable});return o};var d=o=>N(a({},"__esModule",{value:!0}),o);var u={};D(u,{dynamicNetworkModuleFactory:()=>f});module.exports=d(u);var c=require("inversify"),i=require("../../dynamic-network/data/HttpDynamicNetworkDataSource"),y=require("../../dynamic-network/domain/DynamicNetworkContextLoader"),m=require("./dynamicNetworkTypes");const f=()=>new c.ContainerModule(({bind:o})=>{o(m.dynamicNetworkTypes.DynamicNetworkDataSource).to(i.HttpDynamicNetworkDataSource),o(m.dynamicNetworkTypes.DynamicNetworkContextLoader).to(y.DynamicNetworkContextLoader)});0&&(module.exports={dynamicNetworkModuleFactory});
|
|
2
|
+
//# sourceMappingURL=dynamicNetworkModuleFactory.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/di/dynamicNetworkModuleFactory.ts"],
|
|
4
|
+
"sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpDynamicNetworkDataSource } from \"@/dynamic-network/data/HttpDynamicNetworkDataSource\";\nimport { DynamicNetworkContextLoader } from \"@/dynamic-network/domain/DynamicNetworkContextLoader\";\n\nimport { dynamicNetworkTypes } from \"./dynamicNetworkTypes\";\n\nexport const dynamicNetworkModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(dynamicNetworkTypes.DynamicNetworkDataSource).to(\n HttpDynamicNetworkDataSource,\n );\n bind(dynamicNetworkTypes.DynamicNetworkContextLoader).to(\n DynamicNetworkContextLoader,\n );\n });\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAA6C,+DAC7CC,EAA4C,gEAE5CC,EAAoC,iCAE7B,MAAML,EAA8B,IACzC,IAAI,kBAAgB,CAAC,CAAE,KAAAM,CAAK,IAAM,CAChCA,EAAK,sBAAoB,wBAAwB,EAAE,GACjD,8BACF,EACAA,EAAK,sBAAoB,2BAA2B,EAAE,GACpD,6BACF,CACF,CAAC",
|
|
6
|
+
"names": ["dynamicNetworkModuleFactory_exports", "__export", "dynamicNetworkModuleFactory", "__toCommonJS", "import_inversify", "import_HttpDynamicNetworkDataSource", "import_DynamicNetworkContextLoader", "import_dynamicNetworkTypes", "bind"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var r=Object.defineProperty;var n=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var D=(e,o)=>{for(var a in o)r(e,a,{get:o[a],enumerable:!0})},i=(e,o,a,c)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of y(o))!m.call(e,t)&&t!==a&&r(e,t,{get:()=>o[t],enumerable:!(c=n(o,t))||c.enumerable});return e};var k=e=>i(r({},"__esModule",{value:!0}),e);var N={};D(N,{dynamicNetworkTypes:()=>w});module.exports=k(N);const w={DynamicNetworkDataSource:Symbol("DynamicNetworkDataSource"),DynamicNetworkContextLoader:Symbol("DynamicNetworkContextLoader")};0&&(module.exports={dynamicNetworkTypes});
|
|
2
|
+
//# sourceMappingURL=dynamicNetworkTypes.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/di/dynamicNetworkTypes.ts"],
|
|
4
|
+
"sourcesContent": ["export const dynamicNetworkTypes = {\n DynamicNetworkDataSource: Symbol(\"DynamicNetworkDataSource\"),\n DynamicNetworkContextLoader: Symbol(\"DynamicNetworkContextLoader\"),\n};\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAsB,CACjC,yBAA0B,OAAO,0BAA0B,EAC3D,4BAA6B,OAAO,6BAA6B,CACnE",
|
|
6
|
+
"names": ["dynamicNetworkTypes_exports", "__export", "dynamicNetworkTypes", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var I=(r,e)=>{for(var o in e)s(r,o,{get:e[o],enumerable:!0})},h=(r,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of D(e))!x.call(r,t)&&t!==o&&s(r,t,{get:()=>e[t],enumerable:!(i=p(e,t))||i.enumerable});return r};var w=r=>h(s({},"__esModule",{value:!0}),r),C=(r,e,o,i)=>{for(var t=i>1?void 0:i?p(e,o):e,n=r.length-1,a;n>=0;n--)(a=r[n])&&(t=(i?a(e,o,t):a(t))||t);return i&&t&&s(e,o,t),t},f=(r,e)=>(o,i)=>e(o,i,r);var M={};I(M,{DynamicNetworkContextLoader:()=>d});module.exports=w(M);var u=require("@ledgerhq/device-management-kit"),c=require("inversify"),g=require("../../config/di/configTypes"),y=require("../../dynamic-network/di/dynamicNetworkTypes"),S=require("../../pki/di/pkiTypes"),_=require("../../pki/model/KeyId"),k=require("../../pki/model/KeyUsage"),l=require("../../shared/model/ClearSignContext"),N=require("../../shared/utils/HexStringUtils");const v="15";let d=class{_networkDataSource;_config;_certificateLoader;constructor(e,o,i){this._networkDataSource=e,this._config=o,this._certificateLoader=i}async load(e){if(e.deviceModelId===u.DeviceModelId.NANO_S)return[];const o=await this._networkDataSource.getDynamicNetworkConfiguration(e.chainId),i=await this._certificateLoader.loadCertificate({keyId:_.KeyId.CalNetwork,keyUsage:k.KeyUsage.Network,targetDevice:e.deviceModelId});return o.caseOf({Left:()=>[],Right:t=>{const n=[],a=t.descriptors[e.deviceModelId];if(!a)return[];const m=a.signatures[this._config.cal.mode];if(!m)return[];const T=N.HexStringUtils.appendSignatureToPayload(a.data,m,v);return n.push({type:l.ClearSignContextType.DYNAMIC_NETWORK,payload:T,certificate:i}),a.icon&&n.push({type:l.ClearSignContextType.DYNAMIC_NETWORK_ICON,payload:a.icon}),n}})}loadField(e){return Promise.resolve(null)}};d=C([(0,c.injectable)(),f(0,(0,c.inject)(y.dynamicNetworkTypes.DynamicNetworkDataSource)),f(1,(0,c.inject)(g.configTypes.Config)),f(2,(0,c.inject)(S.pkiTypes.PkiCertificateLoader))],d);0&&(module.exports={DynamicNetworkContextLoader});
|
|
2
|
+
//# sourceMappingURL=DynamicNetworkContextLoader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/domain/DynamicNetworkContextLoader.ts"],
|
|
4
|
+
"sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport {\n TransactionContext,\n TransactionFieldContext,\n} from \"@/shared/model/TransactionContext\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\nconst NETWORK_SIGNATURE_TAG = \"15\";\n\n@injectable()\nexport class DynamicNetworkContextLoader implements ContextLoader {\n private readonly _networkDataSource: DynamicNetworkDataSource;\n private readonly _config: ContextModuleConfig;\n private readonly _certificateLoader: PkiCertificateLoader;\n\n constructor(\n @inject(dynamicNetworkTypes.DynamicNetworkDataSource)\n networkDataSource: DynamicNetworkDataSource,\n @inject(configTypes.Config)\n config: ContextModuleConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n certificateLoader: PkiCertificateLoader,\n ) {\n this._networkDataSource = networkDataSource;\n this._config = config;\n this._certificateLoader = certificateLoader;\n }\n\n async load(ctx: TransactionContext): Promise<ClearSignContext[]> {\n if (ctx.deviceModelId === DeviceModelId.NANO_S) return [];\n\n const result = await this._networkDataSource.getDynamicNetworkConfiguration(\n ctx.chainId,\n );\n\n // Fetch certificate for the network configuration upfront\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: ctx.deviceModelId,\n });\n\n return result.caseOf({\n Left: () => [],\n Right: (configuration) => {\n const contexts: ClearSignContext[] = [];\n const descriptor = configuration.descriptors[ctx.deviceModelId];\n\n if (!descriptor) {\n return [];\n }\n\n const signature = descriptor.signatures[this._config.cal.mode];\n\n if (!signature) {\n return [];\n }\n\n const configPayload = HexStringUtils.appendSignatureToPayload(\n descriptor.data,\n signature,\n NETWORK_SIGNATURE_TAG,\n );\n\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: configPayload,\n certificate,\n });\n\n // Add icon if available in the descriptor\n if (descriptor.icon) {\n // Icons don't need signatures appended\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: descriptor.icon,\n });\n }\n\n return contexts;\n },\n });\n }\n\n // Dynamic network context doesn't support field-level loading\n loadField(_field: TransactionFieldContext): Promise<ClearSignContext | null> {\n return Promise.resolve(null);\n }\n}\n"],
|
|
5
|
+
"mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA8B,2CAC9BC,EAAmC,qBAEnCC,EAA4B,mCAG5BC,EAAoC,oDACpCC,EAAyB,6BAEzBC,EAAsB,6BACtBC,EAAyB,gCAEzBC,EAGO,2CAKPC,EAA+B,yCAE/B,MAAMC,EAAwB,KAGvB,IAAMC,EAAN,KAA2D,CAC/C,mBACA,QACA,mBAEjB,YAEEC,EAEAC,EAEAC,EACA,CACA,KAAK,mBAAqBF,EAC1B,KAAK,QAAUC,EACf,KAAK,mBAAqBC,CAC5B,CAEA,MAAM,KAAKC,EAAsD,CAC/D,GAAIA,EAAI,gBAAkB,gBAAc,OAAQ,MAAO,CAAC,EAExD,MAAMC,EAAS,MAAM,KAAK,mBAAmB,+BAC3CD,EAAI,OACN,EAGME,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAO,QAAM,WACb,SAAU,WAAS,QACnB,aAAcF,EAAI,aACpB,CAAC,EAED,OAAOC,EAAO,OAAO,CACnB,KAAM,IAAM,CAAC,EACb,MAAQE,GAAkB,CACxB,MAAMC,EAA+B,CAAC,EAChCC,EAAaF,EAAc,YAAYH,EAAI,aAAa,EAE9D,GAAI,CAACK,EACH,MAAO,CAAC,EAGV,MAAMC,EAAYD,EAAW,WAAW,KAAK,QAAQ,IAAI,IAAI,EAE7D,GAAI,CAACC,EACH,MAAO,CAAC,EAGV,MAAMC,EAAgB,iBAAe,yBACnCF,EAAW,KACXC,EACAX,CACF,EAEA,OAAAS,EAAS,KAAK,CACZ,KAAM,uBAAqB,gBAC3B,QAASG,EACT,YAAAL,CACF,CAAC,EAGGG,EAAW,MAEbD,EAAS,KAAK,CACZ,KAAM,uBAAqB,qBAC3B,QAASC,EAAW,IACtB,CAAC,EAGID,CACT,CACF,CAAC,CACH,CAGA,UAAUI,EAAmE,CAC3E,OAAO,QAAQ,QAAQ,IAAI,CAC7B,CACF,EA9EaZ,EAANa,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,sBAAoB,wBAAwB,GAEnDA,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,WAAS,oBAAoB,IAV5Bd",
|
|
6
|
+
"names": ["DynamicNetworkContextLoader_exports", "__export", "DynamicNetworkContextLoader", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_configTypes", "import_dynamicNetworkTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_ClearSignContext", "import_HexStringUtils", "NETWORK_SIGNATURE_TAG", "DynamicNetworkContextLoader", "networkDataSource", "config", "certificateLoader", "ctx", "result", "certificate", "configuration", "contexts", "descriptor", "signature", "configPayload", "_field", "__decorateClass", "__decorateParam"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),n=require("purify-ts"),f=require("../../dynamic-network/domain/DynamicNetworkContextLoader"),m=require("../../pki/model/KeyId"),g=require("../../pki/model/KeyUsage"),d=require("../../shared/model/ClearSignContext");describe("DynamicNetworkContextLoader",()=>{const a={getDynamicNetworkConfiguration:vi.fn()},l={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"},web3checks:{url:"https://web3checks.api.ledger.com"},metadataServiceDomain:{url:"https://metadata.api.ledger.com"},defaultLoaders:!0,customLoaders:[]},p={loadCertificate:vi.fn()},u={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},c=new f.DynamicNetworkContextLoader(a,l,p),t=o=>({data:"",descriptorType:"",descriptorVersion:"",signatures:{prod:"",test:""},icon:void 0,...o});beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(p,"loadCertificate").mockResolvedValue(u)}),describe("load function",()=>{it("should return empty array when network data source returns error",async()=>{const o={chainId:1,deviceModelId:e.DeviceModelId.STAX,to:"0x123",data:"0x456",selector:"0x789"};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue((0,n.Left)(new Error("Network error")));const i=await c.load(o);expect(i).toEqual([]),expect(a.getDynamicNetworkConfiguration).toHaveBeenCalledWith(1)}),it("should return empty array when descriptor for device model is not found",async()=>{const o={chainId:1,deviceModelId:e.DeviceModelId.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.DeviceModelId.NANO_S]:t(),[e.DeviceModelId.NANO_SP]:t(),[e.DeviceModelId.NANO_X]:t(),[e.DeviceModelId.FLEX]:t({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0})}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue((0,n.Right)(i));const r=await c.load(o);expect(r).toEqual([])}),it("should return empty array when signature for mode is not found",async()=>{const o={chainId:1,deviceModelId:e.DeviceModelId.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.DeviceModelId.APEX]:t(),[e.DeviceModelId.NANO_S]:t(),[e.DeviceModelId.NANO_SP]:t(),[e.DeviceModelId.NANO_X]:t(),[e.DeviceModelId.FLEX]:t(),[e.DeviceModelId.STAX]:t({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"test-sig"},icon:void 0})}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue((0,n.Right)(i));const r=await c.load(o);expect(r).toEqual([])}),it("should return context with network configuration when all data is available",async()=>{const o={chainId:137,deviceModelId:e.DeviceModelId.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"polygon",descriptors:{[e.DeviceModelId.APEX]:t(),[e.DeviceModelId.NANO_S]:t(),[e.DeviceModelId.NANO_SP]:t(),[e.DeviceModelId.NANO_X]:t(),[e.DeviceModelId.FLEX]:t(),[e.DeviceModelId.STAX]:{data:"0x0101080201015101012308000000000000008952",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"test-sig"},icon:void 0}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue((0,n.Right)(i));const r=await c.load(o);expect(r).toHaveLength(1),expect(r[0]).toMatchObject({type:d.ClearSignContextType.DYNAMIC_NETWORK,payload:expect.stringContaining("0x0101080201015101012308000000000000008952"),certificate:u}),expect(p.loadCertificate).toHaveBeenCalledWith({keyId:m.KeyId.CalNetwork,keyUsage:g.KeyUsage.Network,targetDevice:e.DeviceModelId.STAX})}),it("should include icon context when icon is available",async()=>{const o={chainId:1,deviceModelId:e.DeviceModelId.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.DeviceModelId.APEX]:t(),[e.DeviceModelId.NANO_S]:t(),[e.DeviceModelId.NANO_SP]:t(),[e.DeviceModelId.NANO_X]:t(),[e.DeviceModelId.FLEX]:t(),[e.DeviceModelId.STAX]:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:"icon-hex-data"}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue((0,n.Right)(i));const r=await c.load(o);expect(r).toHaveLength(2),expect(r[0]).toMatchObject({type:d.ClearSignContextType.DYNAMIC_NETWORK,payload:expect.any(String),certificate:u}),expect(r[1]).toMatchObject({type:d.ClearSignContextType.DYNAMIC_NETWORK_ICON,payload:"icon-hex-data"})}),it("should handle multiple device models correctly",async()=>{const o={chainId:1,deviceModelId:e.DeviceModelId.FLEX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.DeviceModelId.APEX]:t(),[e.DeviceModelId.NANO_S]:t(),[e.DeviceModelId.NANO_SP]:t(),[e.DeviceModelId.NANO_X]:t(),[e.DeviceModelId.FLEX]:{data:"0xFLEX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"flex-prod-sig",test:"flex-test-sig"},icon:void 0},[e.DeviceModelId.STAX]:{data:"0xSTAX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"stax-prod-sig",test:"stax-test-sig"},icon:void 0}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue((0,n.Right)(i));const r=await c.load(o);expect(r).toHaveLength(1);const s=r[0];s&&"payload"in s&&(expect(s.payload).toContain("0xFLEX"),expect(s.payload).toContain("flex-prod-sig"))}),it("should use test mode signature when configured",async()=>{const o=new f.DynamicNetworkContextLoader(a,{...l,cal:{...l.cal,mode:"test"}},p),i={chainId:1,deviceModelId:e.DeviceModelId.STAX,to:"0x123",data:"0x456",selector:"0x789"},r={id:"ethereum",descriptors:{[e.DeviceModelId.APEX]:t(),[e.DeviceModelId.NANO_S]:t(),[e.DeviceModelId.NANO_SP]:t(),[e.DeviceModelId.NANO_X]:t(),[e.DeviceModelId.FLEX]:t(),[e.DeviceModelId.STAX]:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue((0,n.Right)(r));const s=await o.load(i);expect(s).toHaveLength(1);const y=s[0];y&&"payload"in y&&expect(y.payload).toContain("test-sig")})}),describe("loadField function",()=>{it("should always return null",async()=>{const o={type:d.ClearSignContextType.TOKEN,chainId:1,address:"0x123"},i=await c.loadField(o);expect(i).toBeNull()})})});
|
|
2
|
+
//# sourceMappingURL=DynamicNetworkContextLoader.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/domain/DynamicNetworkContextLoader.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { DynamicNetworkContextLoader } from \"@/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport {\n type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport {\n type TransactionContext,\n type TransactionFieldContext,\n} from \"@/shared/model/TransactionContext\";\n\ndescribe(\"DynamicNetworkContextLoader\", () => {\n const mockNetworkDataSource: DynamicNetworkDataSource = {\n getDynamicNetworkConfiguration: vi.fn(),\n };\n\n const mockConfig: ContextModuleConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n web3checks: {\n url: \"https://web3checks.api.ledger.com\",\n },\n metadataServiceDomain: {\n url: \"https://metadata.api.ledger.com\",\n },\n defaultLoaders: true,\n customLoaders: [],\n };\n\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n const loader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n mockConfig,\n mockCertificateLoader,\n );\n\n // Helper function to create a mock NetworkDescriptor\n const createMockDescriptor = (\n partial?: Partial<DynamicNetworkDescriptor>,\n ): DynamicNetworkDescriptor => ({\n data: \"\",\n descriptorType: \"\",\n descriptorVersion: \"\",\n signatures: {\n prod: \"\",\n test: \"\",\n },\n icon: undefined,\n ...partial,\n });\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"load function\", () => {\n it(\"should return empty array when network data source returns error\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Left(new Error(\"Network error\")));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n expect(\n mockNetworkDataSource.getDynamicNetworkConfiguration,\n ).toHaveBeenCalledWith(1);\n });\n\n it(\"should return empty array when descriptor for device model is not found\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n // STAX descriptor is intentionally missing\n [DeviceModelId.FLEX]: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n } as Record<DeviceModelId, DynamicNetworkDescriptor>,\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return empty array when signature for mode is not found\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n test: \"test-sig\",\n // Missing prod signature - intentionally partial\n } as { prod: string; test: string },\n icon: undefined,\n }),\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return context with network configuration when all data is available\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 137,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"polygon\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101080201015101012308000000000000008952\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: expect.stringContaining(\n \"0x0101080201015101012308000000000000008952\",\n ),\n certificate: mockCertificate,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: DeviceModelId.STAX,\n });\n });\n\n it(\"should include icon context when icon is available\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: \"icon-hex-data\",\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: expect.any(String),\n certificate: mockCertificate,\n });\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: \"icon-hex-data\",\n });\n });\n\n it(\"should handle multiple device models correctly\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.FLEX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: {\n data: \"0xFLEX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"flex-prod-sig\",\n test: \"flex-test-sig\",\n },\n icon: undefined,\n },\n [DeviceModelId.STAX]: {\n data: \"0xSTAX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"stax-prod-sig\",\n test: \"stax-test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"0xFLEX\");\n expect(context.payload).toContain(\"flex-prod-sig\");\n }\n });\n\n it(\"should use test mode signature when configured\", async () => {\n // GIVEN\n const testModeLoader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n { ...mockConfig, cal: { ...mockConfig.cal, mode: \"test\" } },\n mockCertificateLoader,\n );\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await testModeLoader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"test-sig\");\n }\n });\n });\n\n describe(\"loadField function\", () => {\n it(\"should always return null\", async () => {\n // GIVEN\n const field: TransactionFieldContext = {\n type: ClearSignContextType.TOKEN,\n chainId: 1,\n address: \"0x123\",\n };\n\n // WHEN\n const result = await loader.loadField(field);\n\n // THEN\n expect(result).toBeNull();\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_DynamicNetworkContextLoader", "import_KeyId", "import_KeyUsage", "import_ClearSignContext", "mockNetworkDataSource", "mockConfig", "mockCertificateLoader", "mockCertificate", "loader", "createMockDescriptor", "partial", "transaction", "result", "networkConfig", "context", "testModeLoader", "field"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(e,r,n,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of d(r))!p.call(e,t)&&t!==n&&o(e,t,{get:()=>r[t],enumerable:!(i=s(r,t))||i.enumerable});return e};var g=e=>c(o({},"__esModule",{value:!0}),e);var a={};module.exports=g(a);
|
|
2
|
+
//# sourceMappingURL=DynamicNetworkConfiguration.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/dynamic-network/model/DynamicNetworkConfiguration.ts"],
|
|
4
|
+
"sourcesContent": ["import { type DeviceModelId } from \"@ledgerhq/device-management-kit\";\n\nexport type DynamicNetworkDescriptor = {\n descriptorType: string;\n descriptorVersion: string;\n data: string;\n signatures: {\n prod: string;\n test: string;\n };\n icon: string | undefined;\n};\n\nexport type DynamicNetworkConfiguration = {\n id: string;\n descriptors: Record<DeviceModelId, DynamicNetworkDescriptor>;\n};\n"],
|
|
5
|
+
"mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
|
|
6
|
+
"names": ["DynamicNetworkConfiguration_exports", "__toCommonJS"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var y=Object.create;var i=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,D=Object.prototype.hasOwnProperty;var b=(s,o,r,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of f(o))!D.call(s,e)&&e!==r&&i(s,e,{get:()=>o[e],enumerable:!(a=E(o,e))||a.enumerable});return s};var I=(s,o,r)=>(r=s!=null?y(x(s)):{},b(o||!s||!s.__esModule?i(r,"default",{value:s,enumerable:!0}):r,s));var m=require("ethers"),l=require("purify-ts"),n=I(require("@/external-plugin/__tests__/abi.json")),u=require("../../external-plugin/domain/ExternalPluginContextLoader"),t=require("../../shared/model/ClearSignContext");const d=({abi:s,selectorDetails:o})=>({abi:s,selectorDetails:{erc20OfInterest:[],method:"",plugin:"",serializedData:"123456",signature:"7890",...o}}),p=(s,o,r)=>{const e=new m.Interface(JSON.stringify(s)).encodeFunctionData(o,r);return{to:"0x0",data:e,selector:e.slice(0,10)}};describe("ExternalPluginContextLoader",()=>{const s={getTokenInfosPayload:vi.fn()},o={getDappInfos:vi.fn()},r=new u.ExternalPluginContextLoader(o,s);beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(s,"getTokenInfosPayload").mockImplementation(({address:a})=>Promise.resolve((0,l.Right)(`payload-${a}`)))}),describe("load function",()=>{it("should return an empty array if no destination address is provided",async()=>{const a={},e=()=>r.load(a);await expect(e()).resolves.toEqual([])}),it("should return an empty array if no data provided",async()=>{const a={to:"0x0",data:"0x",selector:"0x0"},e=await r.load(a);expect(e).toEqual([])}),it("should return an empty array if no dapp info is povided",async()=>{const a=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(void 0));const e=await r.load(a);expect(e).toEqual([])}),it("should return e plugin if no erc20OfInterest is provided",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:[],method:"singleParam"}}),e=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"}])}),it("should return a list of context responses when one erc20OfInterest is provided for a single parameter",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["fromToken"],method:"singleParam"}}),e=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual(expect.arrayContaining([{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"}]))}),it("should return a context response with only set external plugin when one erc20OfInterest is provided for a single parameter but no payload is feched",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["fromToken"],method:"singleParam"}}),e=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a)),vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Left)(Error("error")));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.ERROR,error:new Error("error")},{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"}])}),it("should return a list of context responses when two erc20OfInterest are provided for two parameters",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["fromToken","toToken"],method:"multipleParams"}}),e=p(n.default,"multipleParams",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","0xdAC17F958D2ee523a2206206994597C13D831ec7"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual(expect.arrayContaining([{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xdAC17F958D2ee523a2206206994597C13D831ec7"}]))}),it("should return a list of context responses when one erc20OfInterest is an array",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["fromToken.0","fromToken.1","fromToken.2","fromToken.-1"],method:"arrayParam"}}),e=p(n.default,"arrayParam",[["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","0xdAC17F958D2ee523a2206206994597C13D831ec7","0xB8c77482e45F1F44dE1745F52C74426C631bDD52"]]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.TOKEN,payload:"payload-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xdAC17F958D2ee523a2206206994597C13D831ec7"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xB8c77482e45F1F44dE1745F52C74426C631bDD52"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xB8c77482e45F1F44dE1745F52C74426C631bDD52"},{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"}])}),it("should return an error when a token datasource returns an error",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["fromToken"],method:"singleParam"}}),e=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a)),vi.spyOn(s,"getTokenInfosPayload").mockResolvedValue((0,l.Left)(new Error("error")));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.ERROR,error:new Error("error")},{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"}])}),it("should return an error when the abi is not conform",async()=>{const a=d({abi:[{fakeabi:"notworking"}],selectorDetails:{erc20OfInterest:["fromToken"],method:"singleParam"}}),e=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.ERROR,error:new Error("[ContextModule] ExternalPluginContextLoader: Unable to parse abi")},{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"}])}),it("should throw an error when the erc20OfInterest doest not exist in the transaction",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["notFound"],method:"singleParam"}}),e=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.ERROR,error:new Error("[ContextModule] ExternalPluginContextLoader: Unable to get address")}])}),it("should throw an error when an out-of-bounds element is present in erc20OfInterest",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["fromToken.3"],method:"arrayParam"}}),e=p(n.default,"arrayParam",[["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48","0xdAC17F958D2ee523a2206206994597C13D831ec7","0xB8c77482e45F1F44dE1745F52C74426C631bDD52"]]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.ERROR,error:new RangeError("out of result range")}])}),it("should return a list of context responses when one erc20OfInterest is a complex struct",async()=>{const a=d({abi:n.default,selectorDetails:{erc20OfInterest:["complexStruct.address1","complexStruct.param1.param2.0.param3.addresses.0","complexStruct.param1.param2.0.param3.addresses.1","complexStruct.param1.param2.0.param3.addresses.-1","complexStruct.param1.param2.1.param3.addresses.0","complexStruct.param1.param2.-1.param3.addresses.0"],method:"complexStructParam"}}),e=p(n.default,"complexStructParam",[{address1:"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",param1:{param2:[{param3:{addresses:["0xdAC17F958D2ee523a2206206994597C13D831ec7","0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE"]}},{param3:{addresses:["0xB8c77482e45F1F44dE1745F52C74426C631bDD52"]}}]}}]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Right)(a));const c=await r.load(e);expect(c).toEqual([{type:t.ClearSignContextType.TOKEN,payload:"payload-0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xdAC17F958D2ee523a2206206994597C13D831ec7"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xB8c77482e45F1F44dE1745F52C74426C631bDD52"},{type:t.ClearSignContextType.TOKEN,payload:"payload-0xB8c77482e45F1F44dE1745F52C74426C631bDD52"},{type:t.ClearSignContextType.EXTERNAL_PLUGIN,payload:"1234567890"}])}),it("should return an error when datasource return a Left",async()=>{const a=p(n.default,"singleParam",["0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"]);vi.spyOn(o,"getDappInfos").mockResolvedValue((0,l.Left)(new Error("error")));const e=await r.load(a);expect(e).toEqual([{type:t.ClearSignContextType.ERROR,error:new Error("error")}])}),it("should return an error when transaction data is not a valid hex string",async()=>{const a={to:"0x0",data:"notAHexString"},e=await r.load(a);expect(e).toEqual([{type:t.ClearSignContextType.ERROR,error:new Error("Invalid selector")}])})})});
|
|
2
2
|
//# sourceMappingURL=ExternalPluginContextLoader.test.js.map
|