@ledgerhq/context-module 0.0.0-develop-20260719002409 → 0.0.0-develop-20260721105622
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/package.json +1 -1
- package/lib/cjs/src/ContextModuleBuilder.js +1 -1
- package/lib/cjs/src/ContextModuleBuilder.js.map +2 -2
- package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
- package/lib/cjs/src/ContextModuleBuilder.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
- package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +1 -1
- package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +1 -1
- package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
- package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.js +1 -1
- package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.js.map +3 -3
- package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
- package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +3 -3
- package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js.map +1 -1
- package/lib/cjs/src/modules/solana/model/SolanaPayloads.js.map +2 -2
- package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
- package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +1 -1
- package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +1 -1
- package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
- package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
- package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +1 -1
- package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +1 -1
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +1 -1
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +2 -2
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
- package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +2 -2
- package/lib/esm/package.json +1 -1
- package/lib/esm/src/ContextModuleBuilder.js +1 -1
- package/lib/esm/src/ContextModuleBuilder.js.map +2 -2
- package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
- package/lib/esm/src/ContextModuleBuilder.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
- package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
- package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
- package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
- package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
- package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
- package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
- package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
- package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +1 -1
- package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +2 -2
- package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +1 -1
- package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
- package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.js +1 -1
- package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.js.map +3 -3
- package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
- package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +3 -3
- package/lib/esm/src/modules/solana/model/SolanaPayloads.js.map +2 -2
- package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
- package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +1 -1
- package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +1 -1
- package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +2 -2
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
- package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +1 -1
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +2 -2
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
- package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +2 -2
- package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
- package/lib/types/src/modules/solana/lifi/domain/LifiContextLoader.d.ts.map +1 -1
- package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts +5 -1
- package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts.map +1 -1
- package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts +3 -1
- package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts.map +1 -1
- package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts +1 -1
- package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
- package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts +1 -0
- package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -1
- package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts +1 -0
- package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/ContextModuleBuilder.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { type LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\n\nimport { configTypes } from \"./config/di/configTypes\";\nimport { type ContextModuleConstructorArgs } from \"./config/model/ContextModuleBuildArgs\";\nimport {\n type ContextModuleCalConfig,\n type ContextModuleDatasourceConfig,\n type ContextModuleMetadataServiceConfig,\n type ContextModuleServiceConfig,\n} from \"./config/model/ContextModuleConfig\";\nimport { HttpProxyDataSource } from \"./modules/ethereum/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"./modules/ethereum/proxy/data/HttpSafeProxyDataSource\";\nimport { proxyTypes } from \"./modules/ethereum/proxy/di/proxyTypes\";\nimport { HttpTrustedNameDataSource } from \"./modules/ethereum/trusted-name/data/HttpTrustedNameDataSource\";\nimport { type TrustedNameDataSource } from \"./modules/ethereum/trusted-name/data/TrustedNameDataSource\";\nimport { trustedNameTypes } from \"./modules/ethereum/trusted-name/di/trustedNameTypes\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport { ContextModuleChainID } from \"./shared/domain/ContextModuleChainID\";\nimport { ContextModuleBuilder } from \"./ContextModuleBuilder\";\nimport { DefaultContextModule } from \"./DefaultContextModule\";\n\ndescribe(\"ContextModuleBuilder\", () => {\n const defaultCalConfig: ContextModuleCalConfig = {\n url: \"https://cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n };\n const defaultWeb3ChecksConfig = {\n url: \"https://web3checks/v1\",\n };\n const mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n });\n\n const defaultBuilderArgs: ContextModuleConstructorArgs = {\n originToken: \"test\",\n loggerFactory: mockLoggerFactory,\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"should return a default context module\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n });\n\n it(\"should return a custom context module\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customLoader: ContextLoader = {\n load: vi.fn(),\n canHandle: vi.fn() as unknown as ContextLoader[\"canHandle\"],\n };\n\n const res = contextModuleBuilder\n .removeDefaultLoaders()\n .addLoader(customLoader)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n });\n\n it(\"should return a custom context module with a custom typed data loader\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customLoader = { load: vi.fn() };\n\n const res = contextModuleBuilder\n .removeDefaultLoaders()\n .addTypedDataLoader(customLoader)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n // @ts-expect-error _typedDataLoader is private\n expect(res[\"_typedDataLoader\"]).toBe(customLoader);\n });\n\n it(\"should return a custom context module with a custom config\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setCalConfig(defaultCalConfig)\n .setWeb3ChecksConfig(defaultWeb3ChecksConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.cal).toEqual(defaultCalConfig);\n expect(config.web3checks).toEqual(defaultWeb3ChecksConfig);\n });\n\n it(\"should not throw when setChain is called before build\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n expect(() =>\n contextModuleBuilder.setChain(ContextModuleChainID.Ethereum).build(),\n ).not.toThrow();\n });\n\n it(\"should throw when setChain is not called before build\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n expect(() => contextModuleBuilder.build()).toThrow(\n \"[ContextModuleBuilder] setChain() must be called before build()\",\n );\n });\n\n describe(\"setMetadataServiceConfig\", () => {\n it(\"should set the metadata service configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customMetadataConfig: ContextModuleMetadataServiceConfig = {\n url: \"https://custom-metadata-service.com/v3\",\n };\n\n const res = contextModuleBuilder\n .setMetadataServiceConfig(customMetadataConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.metadataServiceDomain).toEqual(customMetadataConfig);\n });\n\n it(\"should override the default metadata service configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customMetadataConfig: ContextModuleMetadataServiceConfig = {\n url: \"https://override-metadata-service.com/v1\",\n };\n\n const res = contextModuleBuilder\n .setMetadataServiceConfig(customMetadataConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(config.metadataServiceDomain.url).toBe(customMetadataConfig.url);\n expect(config.metadataServiceDomain.url).not.toBe(\n \"https://nft.api.live.ledger.com/v2\",\n );\n });\n });\n\n describe(\"setCalConfig\", () => {\n it(\"should set the CAL configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customCalConfig: ContextModuleCalConfig = {\n url: \"https://custom-cal-service.com/v2\",\n mode: \"test\",\n branch: \"next\",\n };\n\n const res = contextModuleBuilder\n .setCalConfig(customCalConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.cal).toEqual(customCalConfig);\n });\n\n it(\"should override the default CAL configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customCalConfig: ContextModuleCalConfig = {\n url: \"https://override-cal-service.com/v1\",\n mode: \"prod\",\n branch: \"demo\",\n };\n\n const res = contextModuleBuilder\n .setCalConfig(customCalConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(config.cal.url).toBe(customCalConfig.url);\n expect(config.cal.mode).toBe(customCalConfig.mode);\n expect(config.cal.branch).toBe(customCalConfig.branch);\n expect(config.cal.url).not.toBe(\n \"https://crypto-assets-service.api.ledger.com/v1\",\n );\n });\n });\n\n describe(\"setWeb3ChecksConfig\", () => {\n it(\"should set the web3 checks configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customWeb3ChecksConfig = {\n url: \"https://custom-web3checks-service.com/v4\",\n };\n\n const res = contextModuleBuilder\n .setWeb3ChecksConfig(customWeb3ChecksConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.web3checks).toEqual(customWeb3ChecksConfig);\n });\n\n it(\"should override the default web3 checks configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customWeb3ChecksConfig = {\n url: \"https://override-web3checks-service.com/v2\",\n };\n\n const res = contextModuleBuilder\n .setWeb3ChecksConfig(customWeb3ChecksConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(config.web3checks.url).toBe(customWeb3ChecksConfig.url);\n expect(config.web3checks.url).not.toBe(\n \"https://web3checks-backend.api.ledger.com/v3\",\n );\n });\n });\n\n describe(\"setDatasourceConfig\", () => {\n it(\"should bind HttpSafeProxyDataSource when proxy is 'safe'\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDatasourceConfig: ContextModuleDatasourceConfig = {\n proxy: \"safe\",\n };\n\n const res = contextModuleBuilder\n .setDatasourceConfig(customDatasourceConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const proxyDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<unknown>(proxyTypes.ProxyDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(proxyDataSource).toBeInstanceOf(HttpSafeProxyDataSource);\n });\n\n it(\"should bind HttpProxyDataSource when proxy is 'default'\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDatasourceConfig: ContextModuleDatasourceConfig = {\n proxy: \"default\",\n };\n\n const res = contextModuleBuilder\n .setDatasourceConfig(customDatasourceConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const proxyDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<unknown>(proxyTypes.ProxyDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n\n it(\"should bind HttpProxyDataSource when datasource config is empty\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDatasourceConfig: ContextModuleDatasourceConfig = {};\n\n const res = contextModuleBuilder\n .setDatasourceConfig(customDatasourceConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const proxyDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<unknown>(proxyTypes.ProxyDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"loggerFactory\", () => {\n it(\"should use the default empty logger when loggerFactory is not provided\", () => {\n const contextModuleBuilder = new ContextModuleBuilder({\n originToken: \"test\",\n });\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const loggerFactory = (res as DefaultContextModule)[\"_container\"].get<\n (tag: string) => LoggerPublisherService\n >(configTypes.ContextModuleLoggerFactory);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(loggerFactory).toBeDefined();\n\n const logger = loggerFactory(\"test\");\n expect(logger.debug).toBeDefined();\n expect(logger.info).toBeDefined();\n expect(logger.warn).toBeDefined();\n expect(logger.error).toBeDefined();\n expect(logger.subscribers).toEqual([]);\n\n expect(() => logger.debug(\"test\")).not.toThrow();\n expect(() => logger.info(\"test\")).not.toThrow();\n expect(() => logger.warn(\"test\")).not.toThrow();\n expect(() => logger.error(\"test\")).not.toThrow();\n });\n\n it(\"should set the loggerFactory when provided in the constructor\", () => {\n const loggerFactory: (tag: string) => LoggerPublisherService = vi.fn();\n\n const contextModuleBuilder = new ContextModuleBuilder({\n ...defaultBuilderArgs,\n loggerFactory,\n });\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const boundLoggerFactory = (res as DefaultContextModule)[\n \"_container\"\n ].get<(tag: string) => LoggerPublisherService>(\n configTypes.ContextModuleLoggerFactory,\n );\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(boundLoggerFactory).toBe(loggerFactory);\n });\n\n it(\"should set the loggerFactory via setLoggerFactory\", () => {\n const loggerFactory: (tag: string) => LoggerPublisherService = vi.fn();\n\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setLoggerFactory(loggerFactory)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const boundLoggerFactory = (res as DefaultContextModule)[\n \"_container\"\n ].get<(tag: string) => LoggerPublisherService>(\n configTypes.ContextModuleLoggerFactory,\n );\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(boundLoggerFactory).toBe(loggerFactory);\n });\n\n it(\"should override constructor loggerFactory with setLoggerFactory\", () => {\n const constructorLoggerFactory: (tag: string) => LoggerPublisherService =\n vi.fn();\n const overrideLoggerFactory: (tag: string) => LoggerPublisherService =\n vi.fn();\n\n const contextModuleBuilder = new ContextModuleBuilder({\n ...defaultBuilderArgs,\n loggerFactory: constructorLoggerFactory,\n });\n\n const res = contextModuleBuilder\n .setLoggerFactory(overrideLoggerFactory)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const boundLoggerFactory = (res as DefaultContextModule)[\n \"_container\"\n ].get<(tag: string) => LoggerPublisherService>(\n configTypes.ContextModuleLoggerFactory,\n );\n\n expect(boundLoggerFactory).toBe(overrideLoggerFactory);\n expect(boundLoggerFactory).not.toBe(constructorLoggerFactory);\n });\n });\n\n describe(\"instance isolation\", () => {\n it(\"should not share customLoaders arrays between builder instances\", () => {\n const builder1 = new ContextModuleBuilder(defaultBuilderArgs);\n const builder2 = new ContextModuleBuilder(defaultBuilderArgs);\n const customLoader: ContextLoader = {\n load: vi.fn(),\n canHandle: vi.fn() as unknown as ContextLoader[\"canHandle\"],\n };\n\n builder1.addLoader(customLoader);\n\n const res1 = builder1\n .removeDefaultLoaders()\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const res2 = builder2\n .removeDefaultLoaders()\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n // @ts-expect-error _loaders is private\n expect(res1[\"_loaders\"]).toHaveLength(1);\n // @ts-expect-error _loaders is private\n expect(res2[\"_loaders\"]).toHaveLength(0);\n });\n });\n\n describe(\"setTrustedNameDataSource\", () => {\n it(\"should inject the custom data source into the container\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n\n const res = contextModuleBuilder\n .setTrustedNameDataSource(customDataSource)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const injectedDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<TrustedNameDataSource>(trustedNameTypes.TrustedNameDataSource);\n\n expect(injectedDataSource).toBe(customDataSource);\n });\n\n it(\"should use HttpTrustedNameDataSource when no custom data source is set\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const injectedDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<TrustedNameDataSource>(trustedNameTypes.TrustedNameDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(injectedDataSource).toBeInstanceOf(HttpTrustedNameDataSource);\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import { type LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\n\nimport { configTypes } from \"./config/di/configTypes\";\nimport { type ContextModuleConstructorArgs } from \"./config/model/ContextModuleBuildArgs\";\nimport {\n type ContextModuleCalConfig,\n type ContextModuleDatasourceConfig,\n type ContextModuleMetadataServiceConfig,\n type ContextModuleServiceConfig,\n} from \"./config/model/ContextModuleConfig\";\nimport { HttpProxyDataSource } from \"./modules/ethereum/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"./modules/ethereum/proxy/data/HttpSafeProxyDataSource\";\nimport { proxyTypes } from \"./modules/ethereum/proxy/di/proxyTypes\";\nimport { HttpTrustedNameDataSource } from \"./modules/ethereum/trusted-name/data/HttpTrustedNameDataSource\";\nimport { type TrustedNameDataSource } from \"./modules/ethereum/trusted-name/data/TrustedNameDataSource\";\nimport { trustedNameTypes } from \"./modules/ethereum/trusted-name/di/trustedNameTypes\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport { ContextModuleChainID } from \"./shared/domain/ContextModuleChainID\";\nimport { ContextModuleBuilder } from \"./ContextModuleBuilder\";\nimport { DefaultContextModule } from \"./DefaultContextModule\";\n\ndescribe(\"ContextModuleBuilder\", () => {\n const defaultCalConfig: ContextModuleCalConfig = {\n url: \"https://cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n };\n const defaultWeb3ChecksConfig = {\n url: \"https://web3checks/v1\",\n };\n const mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n });\n\n const defaultBuilderArgs: ContextModuleConstructorArgs = {\n originToken: \"test\",\n loggerFactory: mockLoggerFactory,\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n it(\"should return a default context module\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n });\n\n it(\"should return a custom context module\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customLoader: ContextLoader = {\n load: vi.fn(),\n canHandle: vi.fn() as unknown as ContextLoader[\"canHandle\"],\n };\n\n const res = contextModuleBuilder\n .removeDefaultLoaders()\n .addLoader(customLoader)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n });\n\n it(\"should return a custom context module with a custom typed data loader\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customLoader = { load: vi.fn() };\n\n const res = contextModuleBuilder\n .removeDefaultLoaders()\n .addTypedDataLoader(customLoader)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n // @ts-expect-error _typedDataLoader is private\n expect(res[\"_typedDataLoader\"]).toBe(customLoader);\n });\n\n it(\"should return a custom context module with a custom config\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setCalConfig(defaultCalConfig)\n .setWeb3ChecksConfig(defaultWeb3ChecksConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.cal).toEqual(defaultCalConfig);\n expect(config.web3checks).toEqual(defaultWeb3ChecksConfig);\n });\n\n it(\"should not throw when setChain is called before build\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n expect(() =>\n contextModuleBuilder.setChain(ContextModuleChainID.Ethereum).build(),\n ).not.toThrow();\n });\n\n it(\"should throw when setChain is not called before build\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n expect(() => contextModuleBuilder.build()).toThrow(\n \"[ContextModuleBuilder] setChain() must be called before build()\",\n );\n });\n\n describe(\"setMetadataServiceConfig\", () => {\n it(\"should set the metadata service configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customMetadataConfig: ContextModuleMetadataServiceConfig = {\n url: \"https://custom-metadata-service.com/v3\",\n };\n\n const res = contextModuleBuilder\n .setMetadataServiceConfig(customMetadataConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.metadataServiceDomain).toEqual(customMetadataConfig);\n });\n\n it(\"should override the default metadata service configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customMetadataConfig: ContextModuleMetadataServiceConfig = {\n url: \"https://override-metadata-service.com/v1\",\n };\n\n const res = contextModuleBuilder\n .setMetadataServiceConfig(customMetadataConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(config.metadataServiceDomain.url).toBe(customMetadataConfig.url);\n expect(config.metadataServiceDomain.url).not.toBe(\n \"https://nft.api.live.ledger.com/v2\",\n );\n });\n });\n\n describe(\"setCalConfig\", () => {\n it(\"should set the CAL configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customCalConfig: ContextModuleCalConfig = {\n url: \"https://custom-cal-service.com/v2\",\n mode: \"test\",\n branch: \"next\",\n };\n\n const res = contextModuleBuilder\n .setCalConfig(customCalConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.cal).toEqual(customCalConfig);\n });\n\n it(\"should override the default CAL configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customCalConfig: ContextModuleCalConfig = {\n url: \"https://override-cal-service.com/v1\",\n mode: \"prod\",\n branch: \"demo\",\n };\n\n const res = contextModuleBuilder\n .setCalConfig(customCalConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(config.cal.url).toBe(customCalConfig.url);\n expect(config.cal.mode).toBe(customCalConfig.mode);\n expect(config.cal.branch).toBe(customCalConfig.branch);\n expect(config.cal.url).not.toBe(\n \"https://global.api.prd.ledger.com/cal/v1\",\n );\n });\n });\n\n describe(\"setWeb3ChecksConfig\", () => {\n it(\"should set the web3 checks configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customWeb3ChecksConfig = {\n url: \"https://custom-web3checks-service.com/v4\",\n };\n\n const res = contextModuleBuilder\n .setWeb3ChecksConfig(customWeb3ChecksConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(config.web3checks).toEqual(customWeb3ChecksConfig);\n });\n\n it(\"should override the default web3 checks configuration\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customWeb3ChecksConfig = {\n url: \"https://override-web3checks-service.com/v2\",\n };\n\n const res = contextModuleBuilder\n .setWeb3ChecksConfig(customWeb3ChecksConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const config = (res as DefaultContextModule)[\n \"_container\"\n ].get<ContextModuleServiceConfig>(configTypes.Config);\n\n expect(config.web3checks.url).toBe(customWeb3ChecksConfig.url);\n expect(config.web3checks.url).not.toBe(\n \"https://global.api.prd.ledger.com/transaction-checks/v3\",\n );\n });\n });\n\n describe(\"setDatasourceConfig\", () => {\n it(\"should bind HttpSafeProxyDataSource when proxy is 'safe'\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDatasourceConfig: ContextModuleDatasourceConfig = {\n proxy: \"safe\",\n };\n\n const res = contextModuleBuilder\n .setDatasourceConfig(customDatasourceConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const proxyDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<unknown>(proxyTypes.ProxyDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(proxyDataSource).toBeInstanceOf(HttpSafeProxyDataSource);\n });\n\n it(\"should bind HttpProxyDataSource when proxy is 'default'\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDatasourceConfig: ContextModuleDatasourceConfig = {\n proxy: \"default\",\n };\n\n const res = contextModuleBuilder\n .setDatasourceConfig(customDatasourceConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const proxyDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<unknown>(proxyTypes.ProxyDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n\n it(\"should bind HttpProxyDataSource when datasource config is empty\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDatasourceConfig: ContextModuleDatasourceConfig = {};\n\n const res = contextModuleBuilder\n .setDatasourceConfig(customDatasourceConfig)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const proxyDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<unknown>(proxyTypes.ProxyDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"loggerFactory\", () => {\n it(\"should use the default empty logger when loggerFactory is not provided\", () => {\n const contextModuleBuilder = new ContextModuleBuilder({\n originToken: \"test\",\n });\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const loggerFactory = (res as DefaultContextModule)[\"_container\"].get<\n (tag: string) => LoggerPublisherService\n >(configTypes.ContextModuleLoggerFactory);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(loggerFactory).toBeDefined();\n\n const logger = loggerFactory(\"test\");\n expect(logger.debug).toBeDefined();\n expect(logger.info).toBeDefined();\n expect(logger.warn).toBeDefined();\n expect(logger.error).toBeDefined();\n expect(logger.subscribers).toEqual([]);\n\n expect(() => logger.debug(\"test\")).not.toThrow();\n expect(() => logger.info(\"test\")).not.toThrow();\n expect(() => logger.warn(\"test\")).not.toThrow();\n expect(() => logger.error(\"test\")).not.toThrow();\n });\n\n it(\"should set the loggerFactory when provided in the constructor\", () => {\n const loggerFactory: (tag: string) => LoggerPublisherService = vi.fn();\n\n const contextModuleBuilder = new ContextModuleBuilder({\n ...defaultBuilderArgs,\n loggerFactory,\n });\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const boundLoggerFactory = (res as DefaultContextModule)[\n \"_container\"\n ].get<(tag: string) => LoggerPublisherService>(\n configTypes.ContextModuleLoggerFactory,\n );\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(boundLoggerFactory).toBe(loggerFactory);\n });\n\n it(\"should set the loggerFactory via setLoggerFactory\", () => {\n const loggerFactory: (tag: string) => LoggerPublisherService = vi.fn();\n\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setLoggerFactory(loggerFactory)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const boundLoggerFactory = (res as DefaultContextModule)[\n \"_container\"\n ].get<(tag: string) => LoggerPublisherService>(\n configTypes.ContextModuleLoggerFactory,\n );\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(boundLoggerFactory).toBe(loggerFactory);\n });\n\n it(\"should override constructor loggerFactory with setLoggerFactory\", () => {\n const constructorLoggerFactory: (tag: string) => LoggerPublisherService =\n vi.fn();\n const overrideLoggerFactory: (tag: string) => LoggerPublisherService =\n vi.fn();\n\n const contextModuleBuilder = new ContextModuleBuilder({\n ...defaultBuilderArgs,\n loggerFactory: constructorLoggerFactory,\n });\n\n const res = contextModuleBuilder\n .setLoggerFactory(overrideLoggerFactory)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const boundLoggerFactory = (res as DefaultContextModule)[\n \"_container\"\n ].get<(tag: string) => LoggerPublisherService>(\n configTypes.ContextModuleLoggerFactory,\n );\n\n expect(boundLoggerFactory).toBe(overrideLoggerFactory);\n expect(boundLoggerFactory).not.toBe(constructorLoggerFactory);\n });\n });\n\n describe(\"instance isolation\", () => {\n it(\"should not share customLoaders arrays between builder instances\", () => {\n const builder1 = new ContextModuleBuilder(defaultBuilderArgs);\n const builder2 = new ContextModuleBuilder(defaultBuilderArgs);\n const customLoader: ContextLoader = {\n load: vi.fn(),\n canHandle: vi.fn() as unknown as ContextLoader[\"canHandle\"],\n };\n\n builder1.addLoader(customLoader);\n\n const res1 = builder1\n .removeDefaultLoaders()\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const res2 = builder2\n .removeDefaultLoaders()\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n\n // @ts-expect-error _loaders is private\n expect(res1[\"_loaders\"]).toHaveLength(1);\n // @ts-expect-error _loaders is private\n expect(res2[\"_loaders\"]).toHaveLength(0);\n });\n });\n\n describe(\"setTrustedNameDataSource\", () => {\n it(\"should inject the custom data source into the container\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n const customDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n\n const res = contextModuleBuilder\n .setTrustedNameDataSource(customDataSource)\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const injectedDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<TrustedNameDataSource>(trustedNameTypes.TrustedNameDataSource);\n\n expect(injectedDataSource).toBe(customDataSource);\n });\n\n it(\"should use HttpTrustedNameDataSource when no custom data source is set\", () => {\n const contextModuleBuilder = new ContextModuleBuilder(defaultBuilderArgs);\n\n const res = contextModuleBuilder\n .setChain(ContextModuleChainID.Ethereum)\n .build();\n const injectedDataSource = (res as DefaultContextModule)[\n \"_container\"\n ].get<TrustedNameDataSource>(trustedNameTypes.TrustedNameDataSource);\n\n expect(res).toBeInstanceOf(DefaultContextModule);\n expect(injectedDataSource).toBeInstanceOf(HttpTrustedNameDataSource);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["configTypes", "HttpProxyDataSource", "HttpSafeProxyDataSource", "proxyTypes", "HttpTrustedNameDataSource", "trustedNameTypes", "ContextModuleChainID", "ContextModuleBuilder", "DefaultContextModule", "defaultCalConfig", "defaultWeb3ChecksConfig", "defaultBuilderArgs", "res", "contextModuleBuilder", "customLoader", "config", "customMetadataConfig", "customCalConfig", "customWeb3ChecksConfig", "customDatasourceConfig", "proxyDataSource", "loggerFactory", "logger", "boundLoggerFactory", "constructorLoggerFactory", "overrideLoggerFactory", "builder1", "builder2", "res1", "res2", "customDataSource", "injectedDataSource"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{DeviceModelId as r}from"@ledgerhq/device-management-kit";import{Left as i}from"purify-ts";import{HttpCalldataDescriptorDataSource as C}from"./HttpCalldataDescriptorDataSource";const v={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"test",branch:"main"},originToken:"originToken"};describe("HttpCalldataDescriptorDataSource",()=>{let c,t,o,u,s,m,E,f,p,b,y,h,T;const d={loadCertificate:vi.fn()};beforeEach(()=>{t={get:vi.fn()},c=new C(v,d,"dapps",t)}),beforeAll(()=>{vi.clearAllMocks(),o={descriptor:{data:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c",signatures:{test:"3045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f"}}},u={0:{1:{data:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c65",signatures:{test:"3045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582"}},2:{data:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c65",signatures:{test:"3045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523"}}}},f=D("FROM","UFIXED","AMOUNT","06"),p=D("TO","FIXED","DATETIME","07"),b=D("TO","BOOL","UNIT","08"),y=D("VALUE","INT","DURATION","09"),s={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",start:0,end:5,weight:1},{type:"LEAF",leaf_type:"DYNAMIC_LEAF"}]},type_family:"ADDRESS",type_size:20},type:"TOKEN_AMOUNT",token:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",start:0,end:5,weight:1},{type:"LEAF",leaf_type:"DYNAMIC_LEAF"}]},type_family:"ADDRESS",type_size:20}},descriptor:"0001000112416d6f756e7420746f20776974686472617702010203580001000115000100010101020120030a000100010200010401030215000100010105020114030a000100010200000401030420ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05034d6178"},m={param:{value:{type:"path",binary_path:{type:"CONTAINER",value:"TO"},type_family:"STRING",type_size:20},type:"TRUSTED_NAME",types:["eoa"],sources:["ens","unstoppable_domain"]},descriptor:"000100010c546f20726563697069656e7402010803230001000115000100010105020114030a00010001020002040103020101030402030402"},E={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",weight:2},{type:"LEAF",leaf_type:"TUPLE_LEAF"},{type:"SLICE",end:2}]},type_family:"BYTES",type_size:20},collection:{type:"path",binary_path:{type:"DATA",elements:[{type:"REF"},{type:"LEAF",leaf_type:"ARRAY_LEAF"},{type:"SLICE",start:1}]},type_family:"INT",type_size:20},type:"NFT"},descriptor:"000100010c546f20726563697069656e7402010803230001000115000100010105020114"},h={param:{id:0,value:{type:"path",binary_path:{type:"DATA",elements:[]},type_family:"BYTES",type_size:20},type:"ENUM"},descriptor:"000100010c546f20726563697069656e7402010803230001000115000100010105020112"},T={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"BYTES",type_size:32},callee:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",weight:1},{type:"LEAF",leaf_type:"DYNAMIC_LEAF"}]},type_family:"ADDRESS",type_size:20},selector:{type:"path",binary_path:{type:"CONTAINER",value:"FROM"},type_family:"BYTES",type_size:4},amount:{type:"path",binary_path:{type:"DATA",elements:[{type:"REF"},{type:"LEAF",leaf_type:"TUPLE_LEAF"}]},type_family:"UINT",type_size:32},spender:{type:"path",binary_path:{type:"DATA",elements:[{type:"SLICE",start:0,end:20},{type:"LEAF",leaf_type:"ARRAY_LEAF"}]},type_family:"ADDRESS",type_size:20},type:"CALLDATA"},descriptor:"000100010c43616c6c64617461207465737402010803230001000115000100010105020114"}});function D(e,a,l,A){return{param:{value:{type:"path",binary_path:{type:"CONTAINER",value:e},type_family:a,type_size:32},type:l},descriptor:A}}function n(e,a,l){return{descriptors_calldata:{"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9":{"0x69328dec":{type:"calldata",version:"v1",transaction_info:e,enums:a,fields:l}}}}}it.each([["dapps"],["tokens"]])("should call http.get with the correct url for endpoint '%s'",async e=>{t.get.mockResolvedValue([]),await new C(v,d,e,t).getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"}),expect(t.get).toHaveBeenCalledWith(`${v.cal.url}/${e}`,{params:{output:"descriptors_calldata",chain_id:1,contracts:"0x0abc",contract_address:"0x0abc",ref:`branch:${v.cal.branch}`}})}),it("should return an error when http.get throws an error",async()=>{t.get.mockRejectedValue(new Error("boom")),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const e=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: Error: boom")))}),it("should return an error when no payload is returned",async()=>{t.get.mockResolvedValue({test:""}),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const e=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array")))}),it("should return an error when an empty array is returned",async()=>{t.get.mockResolvedValue([]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const e=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: No data for contract 0x0abc and selector 0x01ff")))}),it("should return an error when selector is not found",async()=>{const e=n(o,u,[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x01fe"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x01fe")))}),it("Calldata with fields references and enums",async()=>{const e=n(o,u,[s,m,E,h]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9",selector:"0x69328dEc"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582",type:"ethereumEnum",id:0,value:1},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523",type:"ethereumEnum",id:0,value:2},{payload:s.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumToken",valuePath:[{type:"ARRAY",start:0,end:5,itemSize:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}]}},{payload:m.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumTrustedName",valuePath:"TO",types:["eoa"],sources:["ens","unstoppable_domain"]}},{payload:E.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumNft",valuePath:[{type:"REF"},{type:"LEAF",leafType:"ARRAY_LEAF"},{type:"SLICE",start:1}]}},{payload:h.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumEnum",valuePath:[],id:0}}])}),it("Calldata with fields references and enums with certificates",async()=>{const e=n(o,u,[s,m,E,h]),a={keyUsageNumber:11,payload:new Uint8Array([1,2,3,4,21,4,5,6,7,8])};t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValueOnce(a);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9",selector:"0x69328dEc"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo",certificate:a},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582",type:"ethereumEnum",id:0,value:1,certificate:a},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523",type:"ethereumEnum",id:0,value:2,certificate:a},{payload:s.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumToken",valuePath:[{type:"ARRAY",start:0,end:5,itemSize:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}]}},{payload:m.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumTrustedName",valuePath:"TO",types:["eoa"],sources:["ens","unstoppable_domain"]}},{payload:E.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumNft",valuePath:[{type:"REF"},{type:"LEAF",leafType:"ARRAY_LEAF"},{type:"SLICE",start:1}]}},{payload:h.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumEnum",valuePath:[],id:0}}])}),it("Calldata without fields references",async()=>{const e=n(o,[],[f,p,b,y]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{type:"ethereumTransactionFieldDescription",payload:f.descriptor},{type:"ethereumTransactionFieldDescription",payload:p.descriptor},{type:"ethereumTransactionFieldDescription",payload:b.descriptor},{type:"ethereumTransactionFieldDescription",payload:y.descriptor}])}),it("Calldata on third array element",async()=>{const e=n(o,[],[f,p,b,y]);t.get.mockResolvedValue([{},{},e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{type:"ethereumTransactionFieldDescription",payload:f.descriptor},{type:"ethereumTransactionFieldDescription",payload:p.descriptor},{type:"ethereumTransactionFieldDescription",payload:b.descriptor},{type:"ethereumTransactionFieldDescription",payload:y.descriptor}])}),it("Calldata without fields references and transaction info signature length % 2 different from 0",async()=>{const e={descriptor:{data:o.descriptor.data,signatures:{test:o.descriptor.signatures.test+"0"}}},a=n(e,[],[f,p,b,y]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff4803045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f0",type:"ethereumTransactionInfo"},{type:"ethereumTransactionFieldDescription",payload:f.descriptor},{type:"ethereumTransactionFieldDescription",payload:p.descriptor},{type:"ethereumTransactionFieldDescription",payload:b.descriptor},{type:"ethereumTransactionFieldDescription",payload:y.descriptor}])}),it("Calldata with token fields references as constants",async()=>{const e={name:"Amount to exchange",param:{type:"TOKEN_AMOUNT",token:{raw:"0xae7ab96520de3a18e5e111b5eaab095312d7fe84",type:"constant",value:"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",version:1,type_size:20,type_family:"ADDRESS"},value:{type:"path",version:1,abi_path:{type:"data",absolute:!0,elements:[{type:"field",identifier:"_stETHAmount"}]},type_size:32,binary_path:{type:"DATA",version:1,elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"UINT"},version:1},version:1,descriptor:"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f0001010101050201140514ae7ab96520de3a18e5e111b5eaab095312d7fe84"},a=n(o,[],[e]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:e.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumToken",value:"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84"}}])}),it("Calldata with collection fields references as constants",async()=>{const e={name:"Collection ID",param:{type:"NFT",collection:{raw:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",type:"constant",value:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",version:1,type_size:20,type_family:"ADDRESS"},value:{type:"path",version:1,abi_path:{type:"data",absolute:!0,elements:[{type:"field",identifier:"_collectionId"}]},type_size:20,binary_path:{type:"DATA",version:1,elements:[{type:"ARRAY",weight:2},{type:"LEAF",leaf_type:"TUPLE_LEAF"},{type:"SLICE",end:2}]},type_family:"BYTES"},version:1},version:1,descriptor:"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f00010101010502011405147d2768de32b0b80b7a3454c06bdac94a69ddc7a9"},a=n(o,[],[e]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:e.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumNft",value:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9"}}])}),it("Calldata with CALLDATA fields references",async()=>{const e=n(o,[],[T]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:T.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"calldata",valuePath:[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],callee:[{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],selector:"FROM",amount:[{type:"REF"},{type:"LEAF",leafType:"TUPLE_LEAF"}],spender:[{type:"SLICE",start:0,end:20},{type:"LEAF",leafType:"ARRAY_LEAF"}]}}])}),it("Calldata with CALLDATA fields references without optional properties",async()=>{const e={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"BYTES",type_size:32},callee:{type:"path",binary_path:{type:"DATA",elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"BYTES",type_size:32},type:"CALLDATA"},descriptor:"000100010c43616c6c64617461207465737402010803230001000115000100010105020114"},a=n(o,[],[e]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:e.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"calldata",valuePath:[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],callee:[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],selector:void 0,amount:void 0,spender:void 0,chainId:void 0}}])}),it("should return an error when calldata is not correctly formatted",async()=>{const e={descriptors_calldata:{"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9":{"0x69328dec":{type:"calldat",version:"v1",transaction_info:o,enums:u,fields:[s]}}}};t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when transactionInfo is not correctly formatted",async()=>{const e=n({descriptor:{data:"1234",signatures:{prod:"1234"}}},u,[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when enum is not correctly formatted",async()=>{const e=n(o,["badEnum"],[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when enum does not contain a signature",async()=>{const e=n(o,{0:{1:{data:"1234"}}},[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when enum contain the wrong signature",async()=>{const e=n(o,{0:{1:{data:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010106067374626c65",signatures:{prod:"wrongSignature"}}}},[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field is not correctly formatted",async()=>{const e=n(o,[],[{descriptor:3}]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field value is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:"TO",type_family:"UNKNOWN",type_size:20},type:"DATETIME"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field container path is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:"UNKNOWN",type_family:"ADDRESS",type_size:20},type:"DATETIME"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field calldata path is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:{elements:[{type:"UNKNOWN"}]},type_family:"ADDRESS",type_size:20},type:"DATETIME"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field type is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:"TO",type_family:"ADDRESS",type_size:20},type:"UNKNOWN"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))})});
|
|
1
|
+
import{DeviceModelId as r}from"@ledgerhq/device-management-kit";import{Left as i}from"purify-ts";import{HttpCalldataDescriptorDataSource as C}from"./HttpCalldataDescriptorDataSource";const v={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"test",branch:"main"},originToken:"originToken"};describe("HttpCalldataDescriptorDataSource",()=>{let c,t,o,u,s,m,E,f,p,b,y,h,T;const d={loadCertificate:vi.fn()};beforeEach(()=>{t={get:vi.fn()},c=new C(v,d,"dapps",t)}),beforeAll(()=>{vi.clearAllMocks(),o={descriptor:{data:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c",signatures:{test:"3045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f"}}},u={0:{1:{data:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c65",signatures:{test:"3045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582"}},2:{data:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c65",signatures:{test:"3045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523"}}}},f=D("FROM","UFIXED","AMOUNT","06"),p=D("TO","FIXED","DATETIME","07"),b=D("TO","BOOL","UNIT","08"),y=D("VALUE","INT","DURATION","09"),s={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",start:0,end:5,weight:1},{type:"LEAF",leaf_type:"DYNAMIC_LEAF"}]},type_family:"ADDRESS",type_size:20},type:"TOKEN_AMOUNT",token:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",start:0,end:5,weight:1},{type:"LEAF",leaf_type:"DYNAMIC_LEAF"}]},type_family:"ADDRESS",type_size:20}},descriptor:"0001000112416d6f756e7420746f20776974686472617702010203580001000115000100010101020120030a000100010200010401030215000100010105020114030a000100010200000401030420ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05034d6178"},m={param:{value:{type:"path",binary_path:{type:"CONTAINER",value:"TO"},type_family:"STRING",type_size:20},type:"TRUSTED_NAME",types:["eoa"],sources:["ens","unstoppable_domain"]},descriptor:"000100010c546f20726563697069656e7402010803230001000115000100010105020114030a00010001020002040103020101030402030402"},E={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",weight:2},{type:"LEAF",leaf_type:"TUPLE_LEAF"},{type:"SLICE",end:2}]},type_family:"BYTES",type_size:20},collection:{type:"path",binary_path:{type:"DATA",elements:[{type:"REF"},{type:"LEAF",leaf_type:"ARRAY_LEAF"},{type:"SLICE",start:1}]},type_family:"INT",type_size:20},type:"NFT"},descriptor:"000100010c546f20726563697069656e7402010803230001000115000100010105020114"},h={param:{id:0,value:{type:"path",binary_path:{type:"DATA",elements:[]},type_family:"BYTES",type_size:20},type:"ENUM"},descriptor:"000100010c546f20726563697069656e7402010803230001000115000100010105020112"},T={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"BYTES",type_size:32},callee:{type:"path",binary_path:{type:"DATA",elements:[{type:"ARRAY",weight:1},{type:"LEAF",leaf_type:"DYNAMIC_LEAF"}]},type_family:"ADDRESS",type_size:20},selector:{type:"path",binary_path:{type:"CONTAINER",value:"FROM"},type_family:"BYTES",type_size:4},amount:{type:"path",binary_path:{type:"DATA",elements:[{type:"REF"},{type:"LEAF",leaf_type:"TUPLE_LEAF"}]},type_family:"UINT",type_size:32},spender:{type:"path",binary_path:{type:"DATA",elements:[{type:"SLICE",start:0,end:20},{type:"LEAF",leaf_type:"ARRAY_LEAF"}]},type_family:"ADDRESS",type_size:20},type:"CALLDATA"},descriptor:"000100010c43616c6c64617461207465737402010803230001000115000100010105020114"}});function D(e,a,l,A){return{param:{value:{type:"path",binary_path:{type:"CONTAINER",value:e},type_family:a,type_size:32},type:l},descriptor:A}}function n(e,a,l){return{descriptors_calldata:{"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9":{"0x69328dec":{type:"calldata",version:"v1",transaction_info:e,enums:a,fields:l}}}}}it.each([["dapps"],["tokens"]])("should call http.get with the correct url for endpoint '%s'",async e=>{t.get.mockResolvedValue([]),await new C(v,d,e,t).getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"}),expect(t.get).toHaveBeenCalledWith(`${v.cal.url}/${e}`,{params:{output:"descriptors_calldata",chain_id:1,contracts:"0x0abc",contract_address:"0x0abc",ref:`branch:${v.cal.branch}`}})}),it("should return an error when http.get throws an error",async()=>{t.get.mockRejectedValue(new Error("boom")),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const e=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: Error: boom")))}),it("should return an error when no payload is returned",async()=>{t.get.mockResolvedValue({test:""}),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const e=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array")))}),it("should return an error when an empty array is returned",async()=>{t.get.mockResolvedValue([]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const e=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: No data for contract 0x0abc and selector 0x01ff")))}),it("should return an error when selector is not found",async()=>{const e=n(o,u,[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x01fe"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x01fe")))}),it("Calldata with fields references and enums",async()=>{const e=n(o,u,[s,m,E,h]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9",selector:"0x69328dEc"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582",type:"ethereumEnum",id:0,value:1},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523",type:"ethereumEnum",id:0,value:2},{payload:s.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumToken",valuePath:[{type:"ARRAY",start:0,end:5,itemSize:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}]}},{payload:m.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumTrustedName",valuePath:"TO",types:["eoa"],sources:["ens","unstoppable_domain"]}},{payload:E.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumNft",valuePath:[{type:"REF"},{type:"LEAF",leafType:"ARRAY_LEAF"},{type:"SLICE",start:1}]}},{payload:h.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumEnum",valuePath:[],id:0}}])}),it("Calldata with fields references and enums with certificates",async()=>{const e=n(o,u,[s,m,E,h]),a={keyUsageNumber:11,payload:new Uint8Array([1,2,3,4,21,4,5,6,7,8])};t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValueOnce(a);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9",selector:"0x69328dEc"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo",certificate:a},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582",type:"ethereumEnum",id:0,value:1,certificate:a},{payload:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523",type:"ethereumEnum",id:0,value:2,certificate:a},{payload:s.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumToken",valuePath:[{type:"ARRAY",start:0,end:5,itemSize:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}]}},{payload:m.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumTrustedName",valuePath:"TO",types:["eoa"],sources:["ens","unstoppable_domain"]}},{payload:E.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumNft",valuePath:[{type:"REF"},{type:"LEAF",leafType:"ARRAY_LEAF"},{type:"SLICE",start:1}]}},{payload:h.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumEnum",valuePath:[],id:0}}])}),it("Calldata without fields references",async()=>{const e=n(o,[],[f,p,b,y]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{type:"ethereumTransactionFieldDescription",payload:f.descriptor},{type:"ethereumTransactionFieldDescription",payload:p.descriptor},{type:"ethereumTransactionFieldDescription",payload:b.descriptor},{type:"ethereumTransactionFieldDescription",payload:y.descriptor}])}),it("Calldata on third array element",async()=>{const e=n(o,[],[f,p,b,y]);t.get.mockResolvedValue([{},{},e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{type:"ethereumTransactionFieldDescription",payload:f.descriptor},{type:"ethereumTransactionFieldDescription",payload:p.descriptor},{type:"ethereumTransactionFieldDescription",payload:b.descriptor},{type:"ethereumTransactionFieldDescription",payload:y.descriptor}])}),it("Calldata without fields references and transaction info signature length % 2 different from 0",async()=>{const e={descriptor:{data:o.descriptor.data,signatures:{test:o.descriptor.signatures.test+"0"}}},a=n(e,[],[f,p,b,y]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff4803045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f0",type:"ethereumTransactionInfo"},{type:"ethereumTransactionFieldDescription",payload:f.descriptor},{type:"ethereumTransactionFieldDescription",payload:p.descriptor},{type:"ethereumTransactionFieldDescription",payload:b.descriptor},{type:"ethereumTransactionFieldDescription",payload:y.descriptor}])}),it("Calldata with token fields references as constants",async()=>{const e={name:"Amount to exchange",param:{type:"TOKEN_AMOUNT",token:{raw:"0xae7ab96520de3a18e5e111b5eaab095312d7fe84",type:"constant",value:"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84",version:1,type_size:20,type_family:"ADDRESS"},value:{type:"path",version:1,abi_path:{type:"data",absolute:!0,elements:[{type:"field",identifier:"_stETHAmount"}]},type_size:32,binary_path:{type:"DATA",version:1,elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"UINT"},version:1},version:1,descriptor:"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f0001010101050201140514ae7ab96520de3a18e5e111b5eaab095312d7fe84"},a=n(o,[],[e]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:e.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumToken",value:"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84"}}])}),it("Calldata with collection fields references as constants",async()=>{const e={name:"Collection ID",param:{type:"NFT",collection:{raw:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",type:"constant",value:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",version:1,type_size:20,type_family:"ADDRESS"},value:{type:"path",version:1,abi_path:{type:"data",absolute:!0,elements:[{type:"field",identifier:"_collectionId"}]},type_size:20,binary_path:{type:"DATA",version:1,elements:[{type:"ARRAY",weight:2},{type:"LEAF",leaf_type:"TUPLE_LEAF"},{type:"SLICE",end:2}]},type_family:"BYTES"},version:1},version:1,descriptor:"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f00010101010502011405147d2768de32b0b80b7a3454c06bdac94a69ddc7a9"},a=n(o,[],[e]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:e.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"ethereumNft",value:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9"}}])}),it("Calldata with CALLDATA fields references",async()=>{const e=n(o,[],[T]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:T.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"calldata",valuePath:[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],callee:[{type:"ARRAY",itemSize:1},{type:"LEAF",leafType:"DYNAMIC_LEAF"}],selector:"FROM",amount:[{type:"REF"},{type:"LEAF",leafType:"TUPLE_LEAF"}],spender:[{type:"SLICE",start:0,end:20},{type:"LEAF",leafType:"ARRAY_LEAF"}]}}])}),it("Calldata with CALLDATA fields references without optional properties",async()=>{const e={param:{value:{type:"path",binary_path:{type:"DATA",elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"BYTES",type_size:32},callee:{type:"path",binary_path:{type:"DATA",elements:[{type:"TUPLE",offset:0},{type:"LEAF",leaf_type:"STATIC_LEAF"}]},type_family:"BYTES",type_size:32},type:"CALLDATA"},descriptor:"000100010c43616c6c64617461207465737402010803230001000115000100010105020114"},a=n(o,[],[e]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l.extract()).toEqual([{payload:"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f",type:"ethereumTransactionInfo"},{payload:e.descriptor,type:"ethereumTransactionFieldDescription",reference:{type:"calldata",valuePath:[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],callee:[{type:"TUPLE",offset:0},{type:"LEAF",leafType:"STATIC_LEAF"}],selector:void 0,amount:void 0,spender:void 0,chainId:void 0}}])}),it("should return an error when calldata is not correctly formatted",async()=>{const e={descriptors_calldata:{"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9":{"0x69328dec":{type:"calldat",version:"v1",transaction_info:o,enums:u,fields:[s]}}}};t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when transactionInfo is not correctly formatted",async()=>{const e=n({descriptor:{data:"1234",signatures:{prod:"1234"}}},u,[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when enum is not correctly formatted",async()=>{const e=n(o,["badEnum"],[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when enum does not contain a signature",async()=>{const e=n(o,{0:{1:{data:"1234"}}},[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when enum contain the wrong signature",async()=>{const e=n(o,{0:{1:{data:"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010106067374626c65",signatures:{prod:"wrongSignature"}}}},[s]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field is not correctly formatted",async()=>{const e=n(o,[],[{descriptor:3}]);t.get.mockResolvedValue([e]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const a=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(a).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field value is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:"TO",type_family:"UNKNOWN",type_size:20},type:"DATETIME"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field container path is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:"UNKNOWN",type_family:"ADDRESS",type_size:20},type:"DATETIME"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field calldata path is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:{elements:[{type:"UNKNOWN"}]},type_family:"ADDRESS",type_size:20},type:"DATETIME"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))}),it("should return an error when field type is not correctly formatted",async()=>{const a=n(o,[],[{param:{value:{binary_path:"TO",type_family:"ADDRESS",type_size:20},type:"UNKNOWN"},descriptor:"000100010c546f20726563697069667"}]);t.get.mockResolvedValue([a]),vi.spyOn(d,"loadCertificate").mockResolvedValue(void 0);const l=await c.getCalldataDescriptors({deviceModelId:r.FLEX,chainId:1,address:"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9",selector:"0x69328dec"});expect(l).toEqual(i(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec")))})});
|
|
2
2
|
//# sourceMappingURL=HttpCalldataDescriptorDataSource.test.js.map
|