@ledgerhq/context-module 1.14.0 → 1.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/package.json +1 -1
- package/lib/cjs/src/DefaultContextModule.js +1 -1
- package/lib/cjs/src/DefaultContextModule.js.map +3 -3
- package/lib/cjs/src/di.js +1 -1
- package/lib/cjs/src/di.js.map +3 -3
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
- package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
- package/lib/cjs/src/gated-signing/data/GatedDescriptorDataSource.js +2 -0
- package/lib/cjs/src/gated-signing/data/GatedDescriptorDataSource.js.map +7 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js +2 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +7 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +2 -0
- package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +7 -0
- package/lib/cjs/src/gated-signing/data/dto/GatedDappsDto.js +2 -0
- package/lib/cjs/src/gated-signing/data/dto/GatedDappsDto.js.map +7 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningModuleFactory.js +2 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningModuleFactory.js.map +7 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningTypes.js +2 -0
- package/lib/cjs/src/gated-signing/di/gatedSigningTypes.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.test.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningContextLoader.test.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js.map +7 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js +2 -0
- package/lib/cjs/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js.map +7 -0
- package/lib/cjs/src/index.js +1 -1
- package/lib/cjs/src/index.js.map +2 -2
- package/lib/cjs/src/pki/model/KeyId.js +1 -1
- package/lib/cjs/src/pki/model/KeyId.js.map +2 -2
- package/lib/cjs/src/pki/model/KeyUsage.js +1 -1
- package/lib/cjs/src/pki/model/KeyUsage.js.map +2 -2
- package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
- package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/cjs/src/shared/model/SolanaContextTypes.js +1 -1
- package/lib/cjs/src/shared/model/SolanaContextTypes.js.map +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.js +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.js.map +2 -2
- package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js +1 -1
- package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
- package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.js +1 -1
- package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.js.map +3 -3
- package/lib/cjs/src/solana/domain/solanaContextTypes.js.map +1 -1
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
- package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
- package/lib/cjs/src/solanaLifi/data/SolanaLifiDataSource.js +1 -1
- package/lib/cjs/src/solanaLifi/data/SolanaLifiDataSource.js.map +1 -1
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.js +1 -1
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.js.map +3 -3
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
- package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
- package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.js +1 -1
- package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.js.map +2 -2
- package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
- package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
- package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
- package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
- package/lib/cjs/src/typed-data/utils/getSchemaHash.js +2 -0
- package/lib/cjs/src/typed-data/utils/getSchemaHash.js.map +7 -0
- package/lib/cjs/src/typed-data/utils/getSchemaHash.test.js +2 -0
- package/lib/cjs/src/typed-data/utils/getSchemaHash.test.js.map +7 -0
- package/lib/esm/package.json +1 -1
- package/lib/esm/src/DefaultContextModule.js +1 -1
- package/lib/esm/src/DefaultContextModule.js.map +3 -3
- package/lib/esm/src/di.js +1 -1
- package/lib/esm/src/di.js.map +3 -3
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
- package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
- package/lib/esm/src/gated-signing/data/GatedDescriptorDataSource.js +1 -0
- package/lib/esm/src/gated-signing/data/GatedDescriptorDataSource.js.map +7 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js +2 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +7 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +2 -0
- package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +7 -0
- package/lib/esm/src/gated-signing/data/dto/GatedDappsDto.js +1 -0
- package/lib/esm/src/gated-signing/data/dto/GatedDappsDto.js.map +7 -0
- package/lib/esm/src/gated-signing/di/gatedSigningModuleFactory.js +2 -0
- package/lib/esm/src/gated-signing/di/gatedSigningModuleFactory.js.map +7 -0
- package/lib/esm/src/gated-signing/di/gatedSigningTypes.js +2 -0
- package/lib/esm/src/gated-signing/di/gatedSigningTypes.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.test.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningContextLoader.test.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.js.map +7 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js +2 -0
- package/lib/esm/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.js.map +7 -0
- package/lib/esm/src/index.js +1 -1
- package/lib/esm/src/index.js.map +2 -2
- package/lib/esm/src/pki/model/KeyId.js +1 -1
- package/lib/esm/src/pki/model/KeyId.js.map +2 -2
- package/lib/esm/src/pki/model/KeyUsage.js +1 -1
- package/lib/esm/src/pki/model/KeyUsage.js.map +2 -2
- package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
- package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
- package/lib/esm/src/shared/model/SolanaContextTypes.js.map +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.js +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.js.map +2 -2
- package/lib/esm/src/shared/utils/KeyUsageMapper.test.js +1 -1
- package/lib/esm/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
- package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.js +1 -1
- package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.js.map +3 -3
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
- package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.js +1 -1
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.js.map +3 -3
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
- package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
- package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.js +1 -1
- package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.js.map +2 -2
- package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
- package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
- package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
- package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
- package/lib/esm/src/typed-data/utils/getSchemaHash.js +2 -0
- package/lib/esm/src/typed-data/utils/getSchemaHash.js.map +7 -0
- package/lib/esm/src/typed-data/utils/getSchemaHash.test.js +2 -0
- package/lib/esm/src/typed-data/utils/getSchemaHash.test.js.map +7 -0
- package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
- package/lib/types/src/di.d.ts.map +1 -1
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts +2 -0
- package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts.map +1 -1
- package/lib/types/src/gated-signing/data/GatedDescriptorDataSource.d.ts +20 -0
- package/lib/types/src/gated-signing/data/GatedDescriptorDataSource.d.ts.map +1 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts +13 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts.map +1 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.test.d.ts +2 -0
- package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.test.d.ts.map +1 -0
- package/lib/types/src/gated-signing/data/dto/GatedDappsDto.d.ts +15 -0
- package/lib/types/src/gated-signing/data/dto/GatedDappsDto.d.ts.map +1 -0
- package/lib/types/src/gated-signing/di/gatedSigningModuleFactory.d.ts +3 -0
- package/lib/types/src/gated-signing/di/gatedSigningModuleFactory.d.ts.map +1 -0
- package/lib/types/src/gated-signing/di/gatedSigningTypes.d.ts +6 -0
- package/lib/types/src/gated-signing/di/gatedSigningTypes.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.d.ts +22 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.test.d.ts +2 -0
- package/lib/types/src/gated-signing/domain/GatedSigningContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.d.ts +27 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.d.ts.map +1 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.d.ts +2 -0
- package/lib/types/src/gated-signing/domain/GatedSigningTypedDataContextLoader.test.d.ts.map +1 -0
- package/lib/types/src/index.d.ts +5 -0
- package/lib/types/src/index.d.ts.map +1 -1
- package/lib/types/src/pki/model/KeyId.d.ts +3 -1
- package/lib/types/src/pki/model/KeyId.d.ts.map +1 -1
- package/lib/types/src/pki/model/KeyUsage.d.ts +3 -1
- package/lib/types/src/pki/model/KeyUsage.d.ts.map +1 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts +2 -1
- package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
- package/lib/types/src/shared/model/SolanaContextTypes.d.ts +33 -3
- package/lib/types/src/shared/model/SolanaContextTypes.d.ts.map +1 -1
- package/lib/types/src/shared/utils/KeyUsageMapper.d.ts.map +1 -1
- package/lib/types/src/solana/domain/DefaultSolanaContextLoader.d.ts +4 -1
- package/lib/types/src/solana/domain/DefaultSolanaContextLoader.d.ts.map +1 -1
- package/lib/types/src/solana/domain/solanaContextTypes.d.ts +2 -2
- package/lib/types/src/solana/domain/solanaContextTypes.d.ts.map +1 -1
- package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts +3 -1
- package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts.map +1 -1
- package/lib/types/src/solanaLifi/data/SolanaLifiDataSource.d.ts +2 -5
- package/lib/types/src/solanaLifi/data/SolanaLifiDataSource.d.ts.map +1 -1
- package/lib/types/src/solanaLifi/domain/SolanaLifiContextLoader.d.ts +10 -8
- package/lib/types/src/solanaLifi/domain/SolanaLifiContextLoader.d.ts.map +1 -1
- package/lib/types/src/solanaToken/domain/SolanaTokenContextLoader.d.ts +4 -9
- package/lib/types/src/solanaToken/domain/SolanaTokenContextLoader.d.ts.map +1 -1
- package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +0 -1
- package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
- package/lib/types/src/typed-data/utils/getSchemaHash.d.ts +12 -0
- package/lib/types/src/typed-data/utils/getSchemaHash.d.ts.map +1 -0
- package/lib/types/src/typed-data/utils/getSchemaHash.test.d.ts +2 -0
- package/lib/types/src/typed-data/utils/getSchemaHash.test.d.ts.map +1 -0
- 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/typed-data/data/HttpTypedDataDataSource.test.ts"],
|
|
4
|
-
"sourcesContent": ["import axios from \"axios\";\nimport { Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport { TypedDataCalldataParamPresence } from \"@/shared/model/TypedDataClearSignContext\";\nimport { HttpTypedDataDataSource } from \"@/typed-data/data/HttpTypedDataDataSource\";\nimport { type TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type FiltersDto, type InstructionField } from \"./FiltersDto\";\n\nvi.mock(\"axios\");\n\nexport const buildDescriptor = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nexport const buildDescriptorCalldata = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nconst config = {\n web3checks: {\n url: \"web3checksUrl\",\n },\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n },\n originToken: \"originToken\",\n} as ContextModuleConfig;\ndescribe(\"HttpTypedDataDataSource\", () => {\n let datasource: TypedDataDataSource;\n\n const TEST_TYPES = {\n PermitSingle: [\n {\n name: \"details\",\n type: \"PermitDetails\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"sigDeadline\",\n type: \"uint256\",\n },\n ],\n PermitDetails: [\n {\n type: \"address\",\n name: \"token\",\n },\n {\n name: \"amount\",\n type: \"uint160\",\n },\n {\n name: \"expiration\",\n type: \"uint48\",\n },\n {\n name: \"nonce\",\n type: \"uint48\",\n },\n ],\n EIP712Domain: [\n {\n name: \"name\",\n type: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n };\n\n beforeAll(() => {\n datasource = new HttpTypedDataDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x00\",\n version: \"v2\",\n schema: {},\n });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: version,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n }),\n );\n });\n\n it(\"should return V2 filters when axios response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Spender name\",\n format: \"trusted-name\",\n field_path: \"details.spender\",\n name_types: [\"contract\"],\n name_sources: [\"cal\", \"local\", \"ens\"],\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n tokenIndex: 0,\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"trusted-name\",\n displayName: \"Spender name\",\n path: \"details.spender\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n types: [\"contract\"],\n sources: [\"cal\", \"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 0,\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"datetime\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V2 filters with calldatas when axios response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Multisig transaction\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14084d756c7469736967207472616e73616374696f6e\",\n signatures: {\n prod: \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n type: \"message\",\n },\n {\n display_name: \"Operation type\",\n format: \"raw\",\n field_path: \"operation\",\n descriptor:\n \"48000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146f7065726174696f6e4f7065726174696f6e2074797065\",\n signatures: {\n prod: \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n value_filter_flag: true,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n spender_filter_flag: \"verifying_contract\",\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n calldata_index: 0,\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-callee\",\n field_path: \"to\",\n calldata_index: 0,\n descriptor:\n \"4d000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14746f00\",\n signatures: {\n prod: \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-amount\",\n field_path: \"value\",\n calldata_index: 0,\n descriptor:\n \"6e000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1476616c756500\",\n signatures: {\n prod: \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n type: \"field\",\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n calldatasInfos: {\n 0: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n },\n filters: [\n {\n type: \"raw\",\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n {\n type: \"calldata-value\",\n displayName: \"Transaction\",\n path: \"data\",\n calldataIndex: 0,\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n {\n type: \"calldata-callee\",\n displayName: \"Transaction\",\n path: \"to\",\n calldataIndex: 0,\n signature:\n \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n {\n type: \"calldata-amount\",\n displayName: \"Transaction\",\n path: \"value\",\n calldataIndex: 0,\n signature:\n \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V1 filters when axios response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"raw\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no typed data filters for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is not found\", async () => {\n const filtersDTO = buildDescriptor([]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is undefined\", async () => {\n const filtersDTO = buildDescriptor(\n undefined as unknown as InstructionField[],\n );\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if no message info is found\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if message info display name is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field path is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n // field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field display_name is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field signatures.prod is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n test: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on token fileds with coin ref to null\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: null,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on trusted names without sources and types\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"trusted-name\",\n field_path: \"details.token\",\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata info with flags undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata field with calldata_index undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n });\n});\n"],
|
|
5
|
-
"mappings": "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AA+B,QAC3C,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,iCAA+B,kBAC5C,UACE,gJACJ,CACF,EACA,QAAS,CACP,CACE,KAAM,MACN,YAAa,iBACb,KAAM,YACN,UACE,gJACJ,EACA,CACE,KAAM,iBACN,YAAa,cACb,KAAM,OACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,kBACN,YAAa,cACb,KAAM,KACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,kBACN,YAAa,cACb,KAAM,QACN,cAAe,EACf,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,0DAA2D,SAAY,CAExE,MAAMD,EAAajB,EAAgB,CACjC,CACE,aAAc,UACd,oBAAqB,EACrB,WACE,qIACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,SACR,EACA,CACE,aAAc,mBACd,OAAQ,QACR,WAAY,gBACZ,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,EACA,CACE,aAAc,mBACd,OAAQ,SACR,WAAY,iBACZ,SAAU,EACV,WACE,iLACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,qBACd,OAAQ,MACR,WAAY,UACZ,WACE,uKACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,kBACd,OAAQ,WACR,WAAY,qBACZ,WACE,uLACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EACD,GAAG,MAAM,EAAAgB,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMC,CAAW,CAAC,EAGjE,MAAMC,EAAS,MAAMP,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQC,CACV,CAAC,EAGD,OAAOM,CAAM,EAAE,WACb,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,8IACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,MACN,YAAa,mBACb,KAAM,gBACN,UACE,8IACJ,EACA,CACE,KAAM,MACN,YAA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",
|
|
6
|
-
"names": ["HttpTypedDataDataSource_test_exports", "__export", "buildDescriptor", "buildDescriptorCalldata", "__toCommonJS", "import_axios", "import_purify_ts", "import_HttpHeaders", "import_TypedDataClearSignContext", "import_HttpTypedDataDataSource", "import_package", "instructions", "config", "datasource", "TEST_TYPES", "version", "PACKAGE", "requestSpy", "axios", "filtersDTO", "result"]
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport { TypedDataCalldataParamPresence } from \"@/shared/model/TypedDataClearSignContext\";\nimport { HttpTypedDataDataSource } from \"@/typed-data/data/HttpTypedDataDataSource\";\nimport { type TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type FiltersDto, type InstructionField } from \"./FiltersDto\";\n\nvi.mock(\"axios\");\n\nexport const buildDescriptor = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nexport const buildDescriptorCalldata = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nconst config = {\n web3checks: {\n url: \"web3checksUrl\",\n },\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n },\n originToken: \"originToken\",\n} as ContextModuleConfig;\ndescribe(\"HttpTypedDataDataSource\", () => {\n let datasource: TypedDataDataSource;\n\n const TEST_TYPES = {\n PermitSingle: [\n {\n name: \"details\",\n type: \"PermitDetails\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"sigDeadline\",\n type: \"uint256\",\n },\n ],\n PermitDetails: [\n {\n type: \"address\",\n name: \"token\",\n },\n {\n name: \"amount\",\n type: \"uint160\",\n },\n {\n name: \"expiration\",\n type: \"uint48\",\n },\n {\n name: \"nonce\",\n type: \"uint48\",\n },\n ],\n EIP712Domain: [\n {\n name: \"name\",\n type: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n };\n\n beforeAll(() => {\n datasource = new HttpTypedDataDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x00\",\n version: \"v2\",\n schema: {},\n });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: version,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n }),\n );\n });\n\n it(\"should return V2 filters when axios response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Spender name\",\n format: \"trusted-name\",\n field_path: \"details.spender\",\n name_types: [\"contract\"],\n name_sources: [\"cal\", \"local\", \"ens\"],\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n tokenIndex: 0,\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"trusted-name\",\n displayName: \"Spender name\",\n path: \"details.spender\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n types: [\"contract\"],\n sources: [\"cal\", \"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 0,\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"datetime\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V2 filters with calldatas when axios response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Multisig transaction\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14084d756c7469736967207472616e73616374696f6e\",\n signatures: {\n prod: \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n type: \"message\",\n },\n {\n display_name: \"Operation type\",\n format: \"raw\",\n field_path: \"operation\",\n descriptor:\n \"48000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146f7065726174696f6e4f7065726174696f6e2074797065\",\n signatures: {\n prod: \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n value_filter_flag: true,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n spender_filter_flag: \"verifying_contract\",\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n calldata_index: 0,\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-callee\",\n field_path: \"to\",\n calldata_index: 0,\n descriptor:\n \"4d000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14746f00\",\n signatures: {\n prod: \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-amount\",\n field_path: \"value\",\n calldata_index: 0,\n descriptor:\n \"6e000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1476616c756500\",\n signatures: {\n prod: \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n type: \"field\",\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n calldatasInfos: {\n 0: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n },\n filters: [\n {\n type: \"raw\",\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n {\n type: \"calldata-value\",\n displayName: \"Transaction\",\n path: \"data\",\n calldataIndex: 0,\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n {\n type: \"calldata-callee\",\n displayName: \"Transaction\",\n path: \"to\",\n calldataIndex: 0,\n signature:\n \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n {\n type: \"calldata-amount\",\n displayName: \"Transaction\",\n path: \"value\",\n calldataIndex: 0,\n signature:\n \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V1 filters when axios response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"raw\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should find descriptor when match is not in first element of response.data\", async () => {\n const match = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 0,\n descriptor: \"\",\n signatures: { prod: \"sig\" },\n type: \"message\",\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue({\n data: [{ descriptors_eip712: {} }, ...match],\n });\n\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 0,\n signature: \"sig\",\n },\n calldatasInfos: {},\n filters: [],\n }),\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no typed data filters for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is not found\", async () => {\n const filtersDTO = buildDescriptor([]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is undefined\", async () => {\n const filtersDTO = buildDescriptor(\n undefined as unknown as InstructionField[],\n );\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if no message info is found\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if message info display name is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field path is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n // field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field display_name is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field signatures.prod is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n test: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on token fileds with coin ref to null\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: null,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on trusted names without sources and types\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"trusted-name\",\n field_path: \"details.token\",\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata info with flags undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata field with calldata_index undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: filtersDTO });\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n });\n});\n"],
|
|
5
|
+
"mappings": "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AA+B,QAC3C,YAAa,GACb,aAAc,GACd,WAAY,GACZ,YAAa,iCAA+B,kBAC5C,UACE,gJACJ,CACF,EACA,QAAS,CACP,CACE,KAAM,MACN,YAAa,iBACb,KAAM,YACN,UACE,gJACJ,EACA,CACE,KAAM,iBACN,YAAa,cACb,KAAM,OACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,kBACN,YAAa,cACb,KAAM,KACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,kBACN,YAAa,cACb,KAAM,QACN,cAAe,EACf,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,0DAA2D,SAAY,CAExE,MAAMD,EAAajB,EAAgB,CACjC,CACE,aAAc,UACd,oBAAqB,EACrB,WACE,qIACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,SACR,EACA,CACE,aAAc,mBACd,OAAQ,QACR,WAAY,gBACZ,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,EACA,CACE,aAAc,mBACd,OAAQ,SACR,WAAY,iBACZ,SAAU,EACV,WACE,iLACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,qBACd,OAAQ,MACR,WAAY,UACZ,WACE,uKACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,kBACd,OAAQ,WACR,WAAY,qBACZ,WACE,uLACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EACD,GAAG,MAAM,EAAAgB,QAAO,SAAS,EAAE,kBAAkB,CAAE,KAAMC,CAAW,CAAC,EAGjE,MAAMC,EAAS,MAAMP,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQC,CACV,CAAC,EAGD,OAAOM,CAAM,EAAE,WACb,SAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,8IACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,MACN,YAAa,mBACb,KAAM,gBACN,UACE,8IACJ,EACA,CACE,KAAM,MACN,YAA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",
|
|
6
|
+
"names": ["HttpTypedDataDataSource_test_exports", "__export", "buildDescriptor", "buildDescriptorCalldata", "__toCommonJS", "import_axios", "import_purify_ts", "import_HttpHeaders", "import_TypedDataClearSignContext", "import_HttpTypedDataDataSource", "import_package", "instructions", "config", "datasource", "TEST_TYPES", "version", "PACKAGE", "requestSpy", "axios", "filtersDTO", "result", "match"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var p=Object.create;var o=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,i=Object.prototype.hasOwnProperty;var y=(e,t)=>{for(var a in t)o(e,a,{get:t[a],enumerable:!0})},c=(e,t,a,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let m of s(t))!i.call(e,m)&&m!==a&&o(e,m,{get:()=>t[m],enumerable:!(r=h(t,m))||r.enumerable});return e};var d=(e,t,a)=>(a=e!=null?p(S(e)):{},c(t||!e||!e.__esModule?o(a,"default",{value:e,enumerable:!0}):a,e)),f=e=>c(o({},"__esModule",{value:!0}),e);var g={};y(g,{getSchemaHash:()=>T});module.exports=f(g);var n=d(require("crypto-js/sha224"));function D(e){return Object.fromEntries(Object.entries(e).sort(([t],[a])=>t.localeCompare(a)).map(([t,a])=>[t,a.map(r=>({name:r.name,type:r.type}))]))}function T(e){const t=D(e),a=JSON.stringify(t);return(0,n.default)(a).toString()}0&&(module.exports={getSchemaHash});
|
|
2
|
+
//# sourceMappingURL=getSchemaHash.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/typed-data/utils/getSchemaHash.ts"],
|
|
4
|
+
"sourcesContent": ["import SHA224 from \"crypto-js/sha224\";\n\nimport type { TypedDataSchema } from \"@/shared/model/TypedDataContext\";\n\n/**\n * Schema hash is the SHA-224 hex digest of the compact JSON UTF-8 representation\n * of the EIP-712 schema (types object), with keys sorted for deterministic output.\n */\nexport type SchemaHash = string;\n\n/**\n * Sorts the schema by type name and normalizes each type's fields to { name, type }\n * for deterministic JSON serialization.\n */\nfunction sortSchema(schema: TypedDataSchema): TypedDataSchema {\n return Object.fromEntries(\n Object.entries(schema)\n .sort(([aKey], [bKey]) => aKey.localeCompare(bKey))\n .map(([key, value]) => [\n key,\n value.map((v) => ({ name: v.name, type: v.type })),\n ]),\n );\n}\n\n/**\n * Computes the schema hash of an EIP-712 schema.\n * Schema hash is SHA-224 of the compact JSON UTF-8 encoded representation of the schema.\n */\nexport function getSchemaHash(schema: TypedDataSchema): SchemaHash {\n const sortedSchema = sortSchema(schema);\n const schemaStr = JSON.stringify(sortedSchema);\n return SHA224(schemaStr).toString();\n}\n"],
|
|
5
|
+
"mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmB,+BAcnB,SAASC,EAAWC,EAA0C,CAC5D,OAAO,OAAO,YACZ,OAAO,QAAQA,CAAM,EAClB,KAAK,CAAC,CAACC,CAAI,EAAG,CAACC,CAAI,IAAMD,EAAK,cAAcC,CAAI,CAAC,EACjD,IAAI,CAAC,CAACC,EAAKC,CAAK,IAAM,CACrBD,EACAC,EAAM,IAAKC,IAAO,CAAE,KAAMA,EAAE,KAAM,KAAMA,EAAE,IAAK,EAAE,CACnD,CAAC,CACL,CACF,CAMO,SAAST,EAAcI,EAAqC,CACjE,MAAMM,EAAeP,EAAWC,CAAM,EAChCO,EAAY,KAAK,UAAUD,CAAY,EAC7C,SAAO,EAAAE,SAAOD,CAAS,EAAE,SAAS,CACpC",
|
|
6
|
+
"names": ["getSchemaHash_exports", "__export", "getSchemaHash", "__toCommonJS", "import_sha224", "sortSchema", "schema", "aKey", "bKey", "key", "value", "v", "sortedSchema", "schemaStr", "SHA224"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var e=require("vitest"),a=require("./getSchemaHash");(0,e.describe)("getSchemaHash",()=>{(0,e.it)("returns SHA-224 hex digest of compact sorted JSON",()=>{const n=(0,a.getSchemaHash)({Mail:[{name:"from",type:"Person"},{name:"to",type:"Person"},{name:"contents",type:"string"}],Person:[{name:"name",type:"string"},{name:"wallet",type:"address"}]});(0,e.expect)(n).toMatch(/^[a-f0-9]{56}$/),(0,e.expect)(typeof n).toBe("string")}),(0,e.it)("is deterministic: same schema yields same hash",()=>{const t={EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"}],Mail:[{name:"subject",type:"string"}]};(0,e.expect)((0,a.getSchemaHash)(t)).toBe((0,a.getSchemaHash)(t))}),(0,e.it)("sorts schema by type name for canonical representation",()=>{const t={Mail:[{name:"x",type:"string"}],EIP712Domain:[{name:"y",type:"uint256"}]},n={EIP712Domain:[{name:"y",type:"uint256"}],Mail:[{name:"x",type:"string"}]};(0,e.expect)((0,a.getSchemaHash)(t)).toBe((0,a.getSchemaHash)(n))})});
|
|
2
|
+
//# sourceMappingURL=getSchemaHash.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/typed-data/utils/getSchemaHash.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { describe, expect, it } from \"vitest\";\n\nimport type { TypedDataSchema } from \"@/shared/model/TypedDataContext\";\n\nimport { getSchemaHash } from \"./getSchemaHash\";\n\ndescribe(\"getSchemaHash\", () => {\n it(\"returns SHA-224 hex digest of compact sorted JSON\", () => {\n const schema: TypedDataSchema = {\n Mail: [\n { name: \"from\", type: \"Person\" },\n { name: \"to\", type: \"Person\" },\n { name: \"contents\", type: \"string\" },\n ],\n Person: [\n { name: \"name\", type: \"string\" },\n { name: \"wallet\", type: \"address\" },\n ],\n };\n const hash = getSchemaHash(schema);\n expect(hash).toMatch(/^[a-f0-9]{56}$/);\n expect(typeof hash).toBe(\"string\");\n });\n\n it(\"is deterministic: same schema yields same hash\", () => {\n const schema: TypedDataSchema = {\n EIP712Domain: [\n { name: \"name\", type: \"string\" },\n { name: \"chainId\", type: \"uint256\" },\n ],\n Mail: [{ name: \"subject\", type: \"string\" }],\n };\n expect(getSchemaHash(schema)).toBe(getSchemaHash(schema));\n });\n\n it(\"sorts schema by type name for canonical representation\", () => {\n const schemaA: TypedDataSchema = {\n Mail: [{ name: \"x\", type: \"string\" }],\n EIP712Domain: [{ name: \"y\", type: \"uint256\" }],\n };\n const schemaB: TypedDataSchema = {\n EIP712Domain: [{ name: \"y\", type: \"uint256\" }],\n Mail: [{ name: \"x\", type: \"string\" }],\n };\n expect(getSchemaHash(schemaA)).toBe(getSchemaHash(schemaB));\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAAqC,kBAIrCC,EAA8B,8BAE9B,YAAS,gBAAiB,IAAM,IAC9B,MAAG,oDAAqD,IAAM,CAY5D,MAAMC,KAAO,iBAXmB,CAC9B,KAAM,CACJ,CAAE,KAAM,OAAQ,KAAM,QAAS,EAC/B,CAAE,KAAM,KAAM,KAAM,QAAS,EAC7B,CAAE,KAAM,WAAY,KAAM,QAAS,CACrC,EACA,OAAQ,CACN,CAAE,KAAM,OAAQ,KAAM,QAAS,EAC/B,CAAE,KAAM,SAAU,KAAM,SAAU,CACpC,CACF,CACiC,KACjC,UAAOA,CAAI,EAAE,QAAQ,gBAAgB,KACrC,UAAO,OAAOA,CAAI,EAAE,KAAK,QAAQ,CACnC,CAAC,KAED,MAAG,iDAAkD,IAAM,CACzD,MAAMC,EAA0B,CAC9B,aAAc,CACZ,CAAE,KAAM,OAAQ,KAAM,QAAS,EAC/B,CAAE,KAAM,UAAW,KAAM,SAAU,CACrC,EACA,KAAM,CAAC,CAAE,KAAM,UAAW,KAAM,QAAS,CAAC,CAC5C,KACA,aAAO,iBAAcA,CAAM,CAAC,EAAE,QAAK,iBAAcA,CAAM,CAAC,CAC1D,CAAC,KAED,MAAG,yDAA0D,IAAM,CACjE,MAAMC,EAA2B,CAC/B,KAAM,CAAC,CAAE,KAAM,IAAK,KAAM,QAAS,CAAC,EACpC,aAAc,CAAC,CAAE,KAAM,IAAK,KAAM,SAAU,CAAC,CAC/C,EACMC,EAA2B,CAC/B,aAAc,CAAC,CAAE,KAAM,IAAK,KAAM,SAAU,CAAC,EAC7C,KAAM,CAAC,CAAE,KAAM,IAAK,KAAM,QAAS,CAAC,CACtC,KACA,aAAO,iBAAcD,CAAO,CAAC,EAAE,QAAK,iBAAcC,CAAO,CAAC,CAC5D,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_vitest", "import_getSchemaHash", "hash", "schema", "schemaA", "schemaB"]
|
|
7
|
+
}
|
package/lib/esm/package.json
CHANGED
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
59
59
|
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
|
|
60
60
|
},
|
|
61
|
-
"version": "1.
|
|
61
|
+
"version": "1.15.0"
|
|
62
62
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Left as
|
|
1
|
+
import{Left as x}from"purify-ts";import{calldataTypes as m}from"./calldata/di/calldataTypes";import{dynamicNetworkTypes as L}from"./dynamic-network/di/dynamicNetworkTypes";import{trustedNameTypes as i}from"./trusted-name/di/trustedNameTypes";import{externalPluginTypes as y}from"./external-plugin/di/externalPluginTypes";import{gatedSigningTypes as s}from"./gated-signing/di/gatedSigningTypes";import{nftTypes as l}from"./nft/di/nftTypes";import{proxyTypes as c}from"./proxy/di/proxyTypes";import{safeTypes as f}from"./safe/di/safeTypes";import{ClearSignContextType as n}from"./shared/model/ClearSignContext";import{solanaContextTypes as u}from"./solana/di/solanaContextTypes";import{tokenTypes as p}from"./token/di/tokenTypes";import{transactionCheckTypes as C}from"./transaction-check/di/transactionCheckTypes";import{typedDataTypes as g}from"./typed-data/di/typedDataTypes";import{makeContainer as T}from"./di";class H{_container;_loaders;_typedDataLoader;_solanaLoader;_fieldLoaders;constructor(t){this._container=T({config:t}),this._loaders=t.defaultLoaders?this._getDefaultLoaders():[],this._loaders.push(...t.customLoaders),this._fieldLoaders=t.defaultFieldLoaders?this._getDefaultFieldLoaders():[],this._fieldLoaders.push(...t.customFieldLoaders),this._typedDataLoader=t.customTypedDataLoader??this._getDefaultTypedDataLoader(),this._solanaLoader=t.customSolanaLoader??this._getSolanaLoader()}_getDefaultFieldLoaders(){return[this._container.get(l.NftContextFieldLoader),this._container.get(p.TokenContextFieldLoader),this._container.get(i.TrustedNameContextFieldLoader),this._container.get(c.ProxyContextFieldLoader)]}_getDefaultLoaders(){return[this._container.get(y.ExternalPluginContextLoader),this._container.get(i.TrustedNameContextLoader),this._container.get(l.NftContextLoader),this._container.get(p.TokenContextLoader),this._container.get(m.CalldataContextLoader),this._container.get(L.DynamicNetworkContextLoader),this._container.get(f.SafeAddressLoader),this._container.get(s.GatedSigningContextLoader),this._container.get(s.GatedSigningTypedDataContextLoader),this._container.get(C.TransactionCheckContextLoader),this._container.get(C.TypedDataCheckContextLoader)]}_getDefaultTypedDataLoader(){return this._container.get(g.TypedDataContextLoader)}_getSolanaLoader(){try{return this._container.get(u.SolanaContextLoader)}catch{return{load:async t=>x(new Error("[ContextModule] - DefaultContextModule: no SolanaContextLoader bound"))}}}async getContexts(t,e){const o=Object.values(n),r=this._loaders.filter(d=>d.canHandle(t,e??o)).map(d=>d.load(t));return(await Promise.all(r)).flat()}async getFieldContext(t,e){const o=this._fieldLoaders.filter(a=>a.canHandle(t,e));if(o.length===0)return Promise.resolve({type:n.ERROR,error:new Error(`Loader not found for field: ${t} and expected type: ${e}`)});for(const a of o){const r=await a.loadField(t);if(r.type!==n.ERROR)return r}return{type:n.ERROR,error:new Error(`Loader not found for field: ${t} and expected type: ${e}`)}}async getTypedDataFilters(t){return this._typedDataLoader.load(t)}async getSolanaContext(t){return await this._solanaLoader.load(t)}}export{H as DefaultContextModule};
|
|
2
2
|
//# sourceMappingURL=DefaultContextModule.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/DefaultContextModule.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Container } from \"inversify\";\nimport { Left } from \"purify-ts\";\n\nimport { calldataTypes } from \"@/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { proxyTypes } from \"./proxy/di/proxyTypes\";\nimport { safeTypes } from \"./safe/di/safeTypes\";\nimport { type ContextFieldLoader } from \"./shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { transactionCheckTypes } from \"./transaction-check/di/transactionCheckTypes\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _solanaLoader: SolanaContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n\n constructor(args: ContextModuleConfig) {\n this._container = makeContainer({ config: args });\n\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n\n this._fieldLoaders = args.defaultFieldLoaders\n ? this._getDefaultFieldLoaders()\n : [];\n this._fieldLoaders.push(...args.customFieldLoaders);\n\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n tokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n trustedNameTypes.TrustedNameContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n proxyTypes.ProxyContextFieldLoader,\n ),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader<unknown>[] {\n return [\n this._container.get<ContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<ContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<ContextLoader>(nftTypes.NftContextLoader),\n this._container.get<ContextLoader>(tokenTypes.TokenContextLoader),\n this._container.get<ContextLoader>(calldataTypes.CalldataContextLoader),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n this._container.get<ContextLoader>(safeTypes.SafeAddressLoader),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TypedDataCheckContextLoader,\n ),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\n }\n\n public async getContexts(\n input: unknown,\n expectedTypes?: ClearSignContextType[],\n ): Promise<ClearSignContext[]> {\n const allContextTypes = Object.values(ClearSignContextType);\n const loaders = this._loaders.filter((l) =>\n l.canHandle(input, expectedTypes ?? allContextTypes),\n );\n const promises = loaders.map((fetcher) => fetcher.load(input));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getFieldContext<TInput>(\n field: TInput,\n expectedType: ClearSignContextType,\n ): Promise<ClearSignContext> {\n const loaders = this._fieldLoaders.filter((l) =>\n l.canHandle(field, expectedType),\n );\n if (loaders.length === 0) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n });\n }\n\n for (const loader of loaders) {\n const context = await loader.loadField(field);\n if (context.type !== ClearSignContextType.ERROR) {\n return context;\n }\n }\n\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n };\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,OAAS,QAAAA,MAAY,YAErB,OAAS,iBAAAC,MAAqB,8BAC9B,OAAS,uBAAAC,MAA2B,2CAGpC,OAAS,oBAAAC,MAAwB,qCAGjC,OAAS,uBAAAC,MAA2B,2CACpC,OAAS,YAAAC,MAAgB,oBACzB,OAAS,cAAAC,MAAkB,wBAC3B,OAAS,aAAAC,MAAiB,sBAG1B,OAEE,wBAAAC,MACK,kCAEP,OAAS,sBAAAC,MAA0B,iCAGnC,OAAS,cAAAC,MAAkB,wBAC3B,OAAS,yBAAAC,MAA6B,+CACtC,OAAS,kBAAAC,MAAsB,iCAG/B,OAAS,iBAAAC,MAAqB,OAEvB,MAAMC,CAA8C,CACjD,WACA,SACA,iBACA,cACA,cAER,YAAYC,EAA2B,CACrC,KAAK,WAAaF,EAAc,CAAE,OAAQE,CAAK,CAAC,EAEhD,KAAK,SAAWA,EAAK,eAAiB,KAAK,mBAAmB,EAAI,CAAC,EACnE,KAAK,SAAS,KAAK,GAAGA,EAAK,aAAa,EAExC,KAAK,cAAgBA,EAAK,oBACtB,KAAK,wBAAwB,EAC7B,CAAC,EACL,KAAK,cAAc,KAAK,GAAGA,EAAK,kBAAkB,EAElD,KAAK,iBACHA,EAAK,uBAAyB,KAAK,2BAA2B,EAChE,KAAK,cAAgBA,EAAK,oBAAsB,KAAK,iBAAiB,CACxE,CAEQ,yBAAgD,CACtD,MAAO,CACL,KAAK,WAAW,IAAwBV,EAAS,qBAAqB,EACtE,KAAK,WAAW,IACdK,EAAW,uBACb,EACA,KAAK,WAAW,
|
|
6
|
-
"names": ["Left", "calldataTypes", "dynamicNetworkTypes", "trustedNameTypes", "externalPluginTypes", "nftTypes", "proxyTypes", "safeTypes", "ClearSignContextType", "solanaContextTypes", "tokenTypes", "transactionCheckTypes", "typedDataTypes", "makeContainer", "DefaultContextModule", "args", "_ctx", "input", "expectedTypes", "allContextTypes", "promises", "l", "fetcher", "field", "expectedType", "loaders", "loader", "context", "typedData", "transactionContext"]
|
|
4
|
+
"sourcesContent": ["import { type Container } from \"inversify\";\nimport { Left } from \"purify-ts\";\n\nimport { calldataTypes } from \"@/calldata/di/calldataTypes\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { gatedSigningTypes } from \"./gated-signing/di/gatedSigningTypes\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { proxyTypes } from \"./proxy/di/proxyTypes\";\nimport { safeTypes } from \"./safe/di/safeTypes\";\nimport { type ContextFieldLoader } from \"./shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { transactionCheckTypes } from \"./transaction-check/di/transactionCheckTypes\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader<unknown>[];\n private _typedDataLoader: TypedDataContextLoader;\n private _solanaLoader: SolanaContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n\n constructor(args: ContextModuleConfig) {\n this._container = makeContainer({ config: args });\n\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n\n this._fieldLoaders = args.defaultFieldLoaders\n ? this._getDefaultFieldLoaders()\n : [];\n this._fieldLoaders.push(...args.customFieldLoaders);\n\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n tokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n trustedNameTypes.TrustedNameContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n proxyTypes.ProxyContextFieldLoader,\n ),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader<unknown>[] {\n return [\n this._container.get<ContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<ContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<ContextLoader>(nftTypes.NftContextLoader),\n this._container.get<ContextLoader>(tokenTypes.TokenContextLoader),\n this._container.get<ContextLoader>(calldataTypes.CalldataContextLoader),\n this._container.get<ContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n this._container.get<ContextLoader>(safeTypes.SafeAddressLoader),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningContextLoader,\n ),\n this._container.get<ContextLoader>(\n gatedSigningTypes.GatedSigningTypedDataContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TransactionCheckContextLoader,\n ),\n this._container.get<ContextLoader>(\n transactionCheckTypes.TypedDataCheckContextLoader,\n ),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\n }\n\n public async getContexts(\n input: unknown,\n expectedTypes?: ClearSignContextType[],\n ): Promise<ClearSignContext[]> {\n const allContextTypes = Object.values(ClearSignContextType);\n const loaders = this._loaders.filter((l) =>\n l.canHandle(input, expectedTypes ?? allContextTypes),\n );\n const promises = loaders.map((fetcher) => fetcher.load(input));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getFieldContext<TInput>(\n field: TInput,\n expectedType: ClearSignContextType,\n ): Promise<ClearSignContext> {\n const loaders = this._fieldLoaders.filter((l) =>\n l.canHandle(field, expectedType),\n );\n if (loaders.length === 0) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n });\n }\n\n for (const loader of loaders) {\n const context = await loader.loadField(field);\n if (context.type !== ClearSignContextType.ERROR) {\n return context;\n }\n }\n\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n `Loader not found for field: ${field} and expected type: ${expectedType}`,\n ),\n };\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Left", "calldataTypes", "dynamicNetworkTypes", "trustedNameTypes", "externalPluginTypes", "gatedSigningTypes", "nftTypes", "proxyTypes", "safeTypes", "ClearSignContextType", "solanaContextTypes", "tokenTypes", "transactionCheckTypes", "typedDataTypes", "makeContainer", "DefaultContextModule", "args", "_ctx", "input", "expectedTypes", "allContextTypes", "promises", "l", "fetcher", "field", "expectedType", "loaders", "loader", "context", "typedData", "transactionContext"]
|
|
7
7
|
}
|
package/lib/esm/src/di.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Container as t}from"inversify";import{calldataModuleFactory as e}from"./calldata/di/calldataModuleFactory";import{configModuleFactory as a}from"./config/di/configModuleFactory";import{configTypes as m}from"./config/di/configTypes";import{dynamicNetworkModuleFactory as i}from"./dynamic-network/di/dynamicNetworkModuleFactory";import{externalPluginModuleFactory as n}from"./external-plugin/di/externalPluginModuleFactory";import{
|
|
1
|
+
import{Container as t}from"inversify";import{calldataModuleFactory as e}from"./calldata/di/calldataModuleFactory";import{configModuleFactory as a}from"./config/di/configModuleFactory";import{configTypes as m}from"./config/di/configTypes";import{dynamicNetworkModuleFactory as i}from"./dynamic-network/di/dynamicNetworkModuleFactory";import{externalPluginModuleFactory as n}from"./external-plugin/di/externalPluginModuleFactory";import{gatedSigningModuleFactory as l}from"./gated-signing/di/gatedSigningModuleFactory";import{nftModuleFactory as c}from"./nft/di/nftModuleFactory";import{nanoPkiModuleFactory as p}from"./pki/di/pkiModuleFactory";import{proxyModuleFactory as d}from"./proxy/di/proxyModuleFactory";import{safeModuleFactory as u}from"./safe/di/safeModuleFactory";import{solanaContextModuleFactory as y}from"./solana/di/SolanaContextModuleFactory";import{solanaLifiModuleFactory as f}from"./solanaLifi/di/lifiModuleFactory";import{solanaTokenModuleFactory as M}from"./solanaToken/di/tokenModuleFactory";import{tokenModuleFactory as F}from"./token/di/tokenModuleFactory";import{transactionCheckModuleFactory as g}from"./transaction-check/di/transactionCheckModuleFactory";import{trustedNameModuleFactory as s}from"./trusted-name/di/trustedNameModuleFactory";import{typedDataModuleFactory as C}from"./typed-data/di/typedDataModuleFactory";import{uniswapModuleFactory as k}from"./uniswap/di/uniswapModuleFactory";const H=({config:o})=>{const r=new t;return r.bind(m.ContextModuleLoggerFactory).toConstantValue(o.loggerFactory),r.loadSync(a(o),n(),i(),c(),d(o),u(),l(),F(),e(),s(o),C(),p(),k(),g(),y(),M(),f()),r};export{H as makeContainer};
|
|
2
2
|
//# sourceMappingURL=di.js.map
|
package/lib/esm/src/di.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/di.ts"],
|
|
4
|
-
"sourcesContent": ["import { type LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { calldataModuleFactory } from \"@/calldata/di/calldataModuleFactory\";\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { dynamicNetworkModuleFactory } from \"@/dynamic-network/di/dynamicNetworkModuleFactory\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { proxyModuleFactory } from \"@/proxy/di/proxyModuleFactory\";\nimport { safeModuleFactory } from \"@/safe/di/safeModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { solanaLifiModuleFactory } from \"@/solanaLifi/di/lifiModuleFactory\";\nimport { solanaTokenModuleFactory } from \"@/solanaToken/di/tokenModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { transactionCheckModuleFactory } from \"@/transaction-check/di/transactionCheckModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container\n .bind<\n (tag: string) => LoggerPublisherService\n >(configTypes.ContextModuleLoggerFactory)\n .toConstantValue(config.loggerFactory);\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n dynamicNetworkModuleFactory(),\n nftModuleFactory(),\n proxyModuleFactory(config),\n safeModuleFactory(),\n tokenModuleFactory(),\n calldataModuleFactory(),\n trustedNameModuleFactory(config),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n transactionCheckModuleFactory(),\n solanaContextModuleFactory(),\n solanaTokenModuleFactory(),\n solanaLifiModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
-
"mappings": "AACA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,yBAAAC,MAA6B,sCACtC,OAAS,uBAAAC,MAA2B,kCACpC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,oBAAAC,MAAwB,4BACjC,OAAS,wBAAAC,MAA4B,4BACrC,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,qBAAAC,MAAyB,8BAClC,OAAS,8BAAAC,MAAkC,yCAC3C,OAAS,2BAAAC,MAA+B,oCACxC,OAAS,4BAAAC,MAAgC,sCACzC,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,iCAAAC,MAAqC,uDAC9C,OAAS,4BAAAC,MAAgC,6CACzC,OAAS,0BAAAC,MAA8B,yCACvC,OAAS,wBAAAC,MAA4B,oCAM9B,MAAMC,EAAgB,CAAC,CAAE,OAAAC,CAAO,IAAyB,CAC9D,MAAMC,EAAY,
|
|
6
|
-
"names": ["Container", "calldataModuleFactory", "configModuleFactory", "configTypes", "dynamicNetworkModuleFactory", "externalPluginModuleFactory", "nftModuleFactory", "nanoPkiModuleFactory", "proxyModuleFactory", "safeModuleFactory", "solanaContextModuleFactory", "solanaLifiModuleFactory", "solanaTokenModuleFactory", "tokenModuleFactory", "transactionCheckModuleFactory", "trustedNameModuleFactory", "typedDataModuleFactory", "uniswapModuleFactory", "makeContainer", "config", "container"]
|
|
4
|
+
"sourcesContent": ["import { type LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { calldataModuleFactory } from \"@/calldata/di/calldataModuleFactory\";\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { dynamicNetworkModuleFactory } from \"@/dynamic-network/di/dynamicNetworkModuleFactory\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { gatedSigningModuleFactory } from \"@/gated-signing/di/gatedSigningModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { proxyModuleFactory } from \"@/proxy/di/proxyModuleFactory\";\nimport { safeModuleFactory } from \"@/safe/di/safeModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { solanaLifiModuleFactory } from \"@/solanaLifi/di/lifiModuleFactory\";\nimport { solanaTokenModuleFactory } from \"@/solanaToken/di/tokenModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { transactionCheckModuleFactory } from \"@/transaction-check/di/transactionCheckModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container\n .bind<\n (tag: string) => LoggerPublisherService\n >(configTypes.ContextModuleLoggerFactory)\n .toConstantValue(config.loggerFactory);\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n dynamicNetworkModuleFactory(),\n nftModuleFactory(),\n proxyModuleFactory(config),\n safeModuleFactory(),\n gatedSigningModuleFactory(),\n tokenModuleFactory(),\n calldataModuleFactory(),\n trustedNameModuleFactory(config),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n transactionCheckModuleFactory(),\n solanaContextModuleFactory(),\n solanaTokenModuleFactory(),\n solanaLifiModuleFactory(),\n );\n\n return container;\n};\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,yBAAAC,MAA6B,sCACtC,OAAS,uBAAAC,MAA2B,kCACpC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,6BAAAC,MAAiC,+CAC1C,OAAS,oBAAAC,MAAwB,4BACjC,OAAS,wBAAAC,MAA4B,4BACrC,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,qBAAAC,MAAyB,8BAClC,OAAS,8BAAAC,MAAkC,yCAC3C,OAAS,2BAAAC,MAA+B,oCACxC,OAAS,4BAAAC,MAAgC,sCACzC,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,iCAAAC,MAAqC,uDAC9C,OAAS,4BAAAC,MAAgC,6CACzC,OAAS,0BAAAC,MAA8B,yCACvC,OAAS,wBAAAC,MAA4B,oCAM9B,MAAMC,EAAgB,CAAC,CAAE,OAAAC,CAAO,IAAyB,CAC9D,MAAMC,EAAY,IAAIrB,EAEtB,OAAAqB,EACG,KAEClB,EAAY,0BAA0B,EACvC,gBAAgBiB,EAAO,aAAa,EAEvCC,EAAU,SACRnB,EAAoBkB,CAAM,EAC1Bf,EAA4B,EAC5BD,EAA4B,EAC5BG,EAAiB,EACjBE,EAAmBW,CAAM,EACzBV,EAAkB,EAClBJ,EAA0B,EAC1BQ,EAAmB,EACnBb,EAAsB,EACtBe,EAAyBI,CAAM,EAC/BH,EAAuB,EACvBT,EAAqB,EACrBU,EAAqB,EACrBH,EAA8B,EAC9BJ,EAA2B,EAC3BE,EAAyB,EACzBD,EAAwB,CAC1B,EAEOS,CACT",
|
|
6
|
+
"names": ["Container", "calldataModuleFactory", "configModuleFactory", "configTypes", "dynamicNetworkModuleFactory", "externalPluginModuleFactory", "gatedSigningModuleFactory", "nftModuleFactory", "nanoPkiModuleFactory", "proxyModuleFactory", "safeModuleFactory", "solanaContextModuleFactory", "solanaLifiModuleFactory", "solanaTokenModuleFactory", "tokenModuleFactory", "transactionCheckModuleFactory", "trustedNameModuleFactory", "typedDataModuleFactory", "uniswapModuleFactory", "makeContainer", "config", "container"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
1
|
+
var N=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var m=(a,e,o,t)=>{for(var r=t>1?void 0:t?I(e,o):e,n=a.length-1,i;n>=0;n--)(i=a[n])&&(r=(t?i(e,o,r):i(r))||r);return t&&r&&N(e,o,r),r},d=(a,e)=>(o,t)=>e(o,t,a);import{DeviceModelId as k}from"@ledgerhq/device-management-kit";import{inject as s,injectable as D}from"inversify";import{configTypes as C}from"../../config/di/configTypes";import{dynamicNetworkTypes as S}from"../../dynamic-network/di/dynamicNetworkTypes";import{pkiTypes as _}from"../../pki/di/pkiTypes";import{KeyId as x}from"../../pki/model/KeyId";import{KeyUsage as h}from"../../pki/model/KeyUsage";import{ClearSignContextType as g}from"../../shared/model/ClearSignContext";import{HexStringUtils as T}from"../../shared/utils/HexStringUtils";const w="15",v=[g.DYNAMIC_NETWORK,g.DYNAMIC_NETWORK_ICON];let l=class{_networkDataSource;_config;_certificateLoader;logger;constructor(e,o,t,r){this._networkDataSource=e,this._config=o,this._certificateLoader=t,this.logger=r("DynamicNetworkContextLoader")}canHandle(e,o){return typeof e=="object"&&e!==null&&"chainId"in e&&"deviceModelId"in e&&e.deviceModelId!==void 0&&e.deviceModelId!==k.NANO_S&&typeof e.chainId=="number"&&v.every(t=>o.includes(t))}async load(e){const{chainId:o,deviceModelId:t}=e,r=await this._networkDataSource.getDynamicNetworkConfiguration(o),n=await this._certificateLoader.loadCertificate({keyId:x.CalNetwork,keyUsage:h.Network,targetDevice:t}),i=r.caseOf({Left:()=>[],Right:y=>{const p=[],c=y.descriptors[t];if(!c)return[];const f=c.signatures[this._config.cal.mode];if(!f)return[];const u=T.appendSignatureToPayload(c.data,f,w);return p.push({type:g.DYNAMIC_NETWORK,payload:u,certificate:n}),c.icon&&p.push({type:g.DYNAMIC_NETWORK_ICON,payload:c.icon}),p}});return this.logger.debug("load result",{data:{result:i}}),i}};l=m([D(),d(0,s(S.DynamicNetworkDataSource)),d(1,s(C.Config)),d(2,s(_.PkiCertificateLoader)),d(3,s(C.ContextModuleLoggerFactory))],l);export{v as DYNAMIC_NETWORK_CONTEXT_TYPES,l as DynamicNetworkContextLoader};
|
|
2
2
|
//# sourceMappingURL=DynamicNetworkContextLoader.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/dynamic-network/domain/DynamicNetworkContextLoader.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n DeviceModelId,\n LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\nexport type DynamicNetworkContextInput = {\n chainId: number;\n deviceModelId: DeviceModelId;\n};\n\nconst NETWORK_SIGNATURE_TAG = \"15\";\n\
|
|
5
|
-
"mappings": "iOAAA,OACE,iBAAAA,MAEK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAG5B,OAAS,uBAAAC,MAA2B,2CACpC,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,SAAAC,MAAa,oBACtB,OAAS,YAAAC,MAAgB,uBAEzB,OAEE,wBAAAC,MACK,kCACP,OAAS,kBAAAC,MAAsB,gCAO/B,MAAMC,EAAwB,
|
|
6
|
-
"names": ["DeviceModelId", "inject", "injectable", "configTypes", "dynamicNetworkTypes", "pkiTypes", "KeyId", "KeyUsage", "ClearSignContextType", "HexStringUtils", "NETWORK_SIGNATURE_TAG", "
|
|
4
|
+
"sourcesContent": ["import {\n DeviceModelId,\n LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\nexport type DynamicNetworkContextInput = {\n chainId: number;\n deviceModelId: DeviceModelId;\n};\n\nconst NETWORK_SIGNATURE_TAG = \"15\";\n\n/** Context types produced by DynamicNetworkContextLoader (used for getContexts expectedTypes). */\nexport const DYNAMIC_NETWORK_CONTEXT_TYPES: ClearSignContextType[] = [\n ClearSignContextType.DYNAMIC_NETWORK,\n ClearSignContextType.DYNAMIC_NETWORK_ICON,\n];\n\n@injectable()\nexport class DynamicNetworkContextLoader\n implements ContextLoader<DynamicNetworkContextInput>\n{\n private readonly _networkDataSource: DynamicNetworkDataSource;\n private readonly _config: ContextModuleConfig;\n private readonly _certificateLoader: PkiCertificateLoader;\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(dynamicNetworkTypes.DynamicNetworkDataSource)\n networkDataSource: DynamicNetworkDataSource,\n @inject(configTypes.Config)\n config: ContextModuleConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this._networkDataSource = networkDataSource;\n this._config = config;\n this._certificateLoader = certificateLoader;\n this.logger = loggerFactory(\"DynamicNetworkContextLoader\");\n }\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is DynamicNetworkContextInput {\n return (\n typeof input === \"object\" &&\n input !== null &&\n \"chainId\" in input &&\n \"deviceModelId\" in input &&\n input.deviceModelId !== undefined &&\n input.deviceModelId !== DeviceModelId.NANO_S &&\n typeof input.chainId === \"number\" &&\n DYNAMIC_NETWORK_CONTEXT_TYPES.every((type) =>\n expectedTypes.includes(type),\n )\n );\n }\n\n async load(input: DynamicNetworkContextInput): Promise<ClearSignContext[]> {\n const { chainId, deviceModelId } = input;\n\n const networkConfig =\n await this._networkDataSource.getDynamicNetworkConfiguration(chainId);\n\n // Fetch certificate for the network configuration upfront\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: deviceModelId,\n });\n\n const result = networkConfig.caseOf({\n Left: () => [],\n Right: (configuration) => {\n const contexts: ClearSignContext[] = [];\n const descriptor = configuration.descriptors[deviceModelId];\n\n if (!descriptor) {\n return [];\n }\n\n const signature = descriptor.signatures[this._config.cal.mode];\n\n if (!signature) {\n return [];\n }\n\n const configPayload = HexStringUtils.appendSignatureToPayload(\n descriptor.data,\n signature,\n NETWORK_SIGNATURE_TAG,\n );\n\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: configPayload,\n certificate,\n });\n\n // Add icon if available in the descriptor\n if (descriptor.icon) {\n // Icons don't need signatures appended\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: descriptor.icon,\n });\n }\n\n return contexts;\n },\n });\n\n this.logger.debug(\"load result\", { data: { result } });\n return result;\n }\n}\n"],
|
|
5
|
+
"mappings": "iOAAA,OACE,iBAAAA,MAEK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAG5B,OAAS,uBAAAC,MAA2B,2CACpC,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,SAAAC,MAAa,oBACtB,OAAS,YAAAC,MAAgB,uBAEzB,OAEE,wBAAAC,MACK,kCACP,OAAS,kBAAAC,MAAsB,gCAO/B,MAAMC,EAAwB,KAGjBC,EAAwD,CACnEC,EAAqB,gBACrBA,EAAqB,oBACvB,EAGO,IAAMC,EAAN,KAEP,CACmB,mBACA,QACA,mBACT,OAER,YAEEC,EAEAC,EAEAC,EAEAC,EACA,CACA,KAAK,mBAAqBH,EAC1B,KAAK,QAAUC,EACf,KAAK,mBAAqBC,EAC1B,KAAK,OAASC,EAAc,6BAA6B,CAC3D,CAEA,UACEC,EACAC,EACqC,CACrC,OACE,OAAOD,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,kBAAmBA,GACnBA,EAAM,gBAAkB,QACxBA,EAAM,gBAAkBE,EAAc,QACtC,OAAOF,EAAM,SAAY,UACzBP,EAA8B,MAAOU,GACnCF,EAAc,SAASE,CAAI,CAC7B,CAEJ,CAEA,MAAM,KAAKH,EAAgE,CACzE,KAAM,CAAE,QAAAI,EAAS,cAAAC,CAAc,EAAIL,EAE7BM,EACJ,MAAM,KAAK,mBAAmB,+BAA+BF,CAAO,EAGhEG,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAOC,EAAM,WACb,SAAUC,EAAS,QACnB,aAAcJ,CAChB,CAAC,EAEKK,EAASJ,EAAc,OAAO,CAClC,KAAM,IAAM,CAAC,EACb,MAAQK,GAAkB,CACxB,MAAMC,EAA+B,CAAC,EAChCC,EAAaF,EAAc,YAAYN,CAAa,EAE1D,GAAI,CAACQ,EACH,MAAO,CAAC,EAGV,MAAMC,EAAYD,EAAW,WAAW,KAAK,QAAQ,IAAI,IAAI,EAE7D,GAAI,CAACC,EACH,MAAO,CAAC,EAGV,MAAMC,EAAgBC,EAAe,yBACnCH,EAAW,KACXC,EACAtB,CACF,EAEA,OAAAoB,EAAS,KAAK,CACZ,KAAMlB,EAAqB,gBAC3B,QAASqB,EACT,YAAAR,CACF,CAAC,EAGGM,EAAW,MAEbD,EAAS,KAAK,CACZ,KAAMlB,EAAqB,qBAC3B,QAASmB,EAAW,IACtB,CAAC,EAGID,CACT,CACF,CAAC,EAED,YAAK,OAAO,MAAM,cAAe,CAAE,KAAM,CAAE,OAAAF,CAAO,CAAE,CAAC,EAC9CA,CACT,CACF,EAnGaf,EAANsB,EAAA,CADNC,EAAW,EAUPC,EAAA,EAAAC,EAAOC,EAAoB,wBAAwB,GAEnDF,EAAA,EAAAC,EAAOE,EAAY,MAAM,GAEzBH,EAAA,EAAAC,EAAOG,EAAS,oBAAoB,GAEpCJ,EAAA,EAAAC,EAAOE,EAAY,0BAA0B,IAfrC3B",
|
|
6
|
+
"names": ["DeviceModelId", "inject", "injectable", "configTypes", "dynamicNetworkTypes", "pkiTypes", "KeyId", "KeyUsage", "ClearSignContextType", "HexStringUtils", "NETWORK_SIGNATURE_TAG", "DYNAMIC_NETWORK_CONTEXT_TYPES", "ClearSignContextType", "DynamicNetworkContextLoader", "networkDataSource", "config", "certificateLoader", "loggerFactory", "input", "expectedTypes", "DeviceModelId", "type", "chainId", "deviceModelId", "networkConfig", "certificate", "KeyId", "KeyUsage", "result", "configuration", "contexts", "descriptor", "signature", "configPayload", "HexStringUtils", "__decorateClass", "injectable", "__decorateParam", "inject", "dynamicNetworkTypes", "configTypes", "pkiTypes"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=GatedDescriptorDataSource.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var C=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var D=(d,e,t,o)=>{for(var r=o>1?void 0:o?R(e,t):e,s=d.length-1,n;s>=0;s--)(n=d[s])&&(r=(o?n(e,t,r):n(r))||r);return o&&r&&C(e,t,r),r},g=(d,e)=>(t,o)=>e(t,o,d);import l from"axios";import{inject as _,injectable as b}from"inversify";import{Left as c,Right as m}from"purify-ts";import{configTypes as x}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as G,LEDGER_ORIGIN_TOKEN_HEADER as y}from"../../shared/constant/HttpHeaders";import{SIGNATURE_TAG as h}from"../../shared/model/SignatureTags";import{HexStringUtils as E}from"../../shared/utils/HexStringUtils";import w from"../../../package.json";let f=class{constructor(e){this.config=e}async getGatedDescriptor({contractAddress:e,selector:t,chainId:o}){let r;try{r=(await l.request({method:"GET",url:`${this.config.cal.url}/gated_dapps`,params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors,app,category",contracts:e,chain_id:o},headers:{[G]:`context-module/${w.version}`,[y]:this.config.originToken}})).data}catch(i){return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${i}`))}if(!this.isGatedDappsDto(r))return c(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));const s=e.toLowerCase(),n=t.startsWith("0x")?t.slice(2).toLowerCase():t.toLowerCase(),p=`0x${n}`;for(const i of r){const a=i.gated_descriptors?.[s];if(!a)continue;const u=a[n]??a[p]??a[t];if(u?.descriptor)return m({signedDescriptor:E.appendSignatureToPayload(u.descriptor,u.signatures[this.config.cal.mode],h)})}return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and selector ${t}`))}async getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o}){let r;try{r=(await l.request({method:"GET",url:`${this.config.cal.url}/gated_dapps`,params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors",contracts:e,chain_id:o},headers:{[G]:`context-module/${w.version}`,[y]:this.config.originToken}})).data}catch(p){return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${p}`))}if(!this.isGatedDappsDto(r))return c(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));const s=e.toLowerCase(),n=t.toLowerCase();for(const p of r){const i=p.gated_descriptors?.[s];if(!i)continue;const a=i[n];if(a?.descriptor)return m({signedDescriptor:E.appendSignatureToPayload(a.descriptor,a.signatures[this.config.cal.mode],h)})}return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${t}`))}isGatedDappsDto(e){if(!Array.isArray(e)||e.length===0)return!1;for(const t of e)if(!this.isGatedDappsResponseItemDto(t))return!1;return!0}isGatedDappsResponseItemDto(e){if(!e||typeof e!="object")return!1;const t=e;if(!t.gated_descriptors||typeof t.gated_descriptors!="object")return!1;const o=t.gated_descriptors;for(const r of Object.values(o)){if(typeof r!="object"||r===null)return!1;for(const s of Object.values(r))if(!this.isGatedDescriptorEntryDto(s))return!1}return!0}isGatedDescriptorEntryDto(e){if(!e||typeof e!="object")return!1;const t=e;if(typeof t.network!="string"||typeof t.chain_id!="number"||typeof t.address!="string"||typeof t.selector!="string"||typeof t.version!="string"||typeof t.descriptor!="string")return!1;if(t.signatures!==void 0){if(typeof t.signatures!="object"||t.signatures===null)return!1;const o=t.signatures;for(const r of Object.values(o))if(typeof r!="string")return!1}return!0}};f=D([b(),g(0,_(x.Config))],f);export{f as HttpGatedDescriptorDataSource};
|
|
2
|
+
//# sourceMappingURL=HttpGatedDescriptorDataSource.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/gated-signing/data/HttpGatedDescriptorDataSource.ts"],
|
|
4
|
+
"sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport { SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport PACKAGE from \"@root/package.json\";\n\nimport {\n type GatedDappsDto,\n type GatedDappsResponseItemDto,\n type GatedDescriptorEntryDto,\n} from \"./dto/GatedDappsDto\";\nimport {\n type GatedDescriptorDataSource,\n type GetGatedDescriptorForTypedDataParams,\n type GetGatedDescriptorParams,\n type GetGatedDescriptorResponse,\n} from \"./GatedDescriptorDataSource\";\n\n@injectable()\nexport class HttpGatedDescriptorDataSource\n implements GatedDescriptorDataSource\n{\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n }: GetGatedDescriptorParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n const response = await axios.request<GatedDappsDto>({\n method: \"GET\",\n url: `${this.config.cal.url}/gated_dapps`,\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors,app,category\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n dto = response.data;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const selectorWithout0x = selector.startsWith(\"0x\")\n ? selector.slice(2).toLowerCase()\n : selector.toLowerCase();\n const selectorWith0x = `0x${selectorWithout0x}`;\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry =\n byContract[selectorWithout0x] ??\n byContract[selectorWith0x] ??\n byContract[selector];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and selector ${selector}`,\n ),\n );\n }\n\n async getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n }: GetGatedDescriptorForTypedDataParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n const response = await axios.request<GatedDappsDto>({\n method: \"GET\",\n url: `${this.config.cal.url}/gated_dapps`,\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n dto = response.data;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const normalizedSchemaHash = schemaHash.toLowerCase();\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry = byContract[normalizedSchemaHash];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and schema hash ${schemaHash}`,\n ),\n );\n }\n\n private isGatedDappsDto(data: unknown): data is GatedDappsDto {\n if (!Array.isArray(data) || data.length === 0) {\n return false;\n }\n for (const item of data) {\n if (!this.isGatedDappsResponseItemDto(item)) {\n return false;\n }\n }\n return true;\n }\n\n private isGatedDappsResponseItemDto(\n item: unknown,\n ): item is GatedDappsResponseItemDto {\n if (!item || typeof item !== \"object\") {\n return false;\n }\n const obj = item as Record<string, unknown>;\n if (\n !obj[\"gated_descriptors\"] ||\n typeof obj[\"gated_descriptors\"] !== \"object\"\n ) {\n return false;\n }\n const byContract = obj[\"gated_descriptors\"] as Record<string, unknown>;\n for (const selectorsMap of Object.values(byContract)) {\n if (typeof selectorsMap !== \"object\" || selectorsMap === null) {\n return false;\n }\n for (const entry of Object.values(\n selectorsMap as Record<string, unknown>,\n )) {\n if (!this.isGatedDescriptorEntryDto(entry)) {\n return false;\n }\n }\n }\n return true;\n }\n\n private isGatedDescriptorEntryDto(\n entry: unknown,\n ): entry is GatedDescriptorEntryDto {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n const e = entry as Record<string, unknown>;\n if (\n typeof e[\"network\"] !== \"string\" ||\n typeof e[\"chain_id\"] !== \"number\" ||\n typeof e[\"address\"] !== \"string\" ||\n typeof e[\"selector\"] !== \"string\" ||\n typeof e[\"version\"] !== \"string\" ||\n typeof e[\"descriptor\"] !== \"string\"\n ) {\n return false;\n }\n if (e[\"signatures\"] !== undefined) {\n if (typeof e[\"signatures\"] !== \"object\" || e[\"signatures\"] === null) {\n return false;\n }\n const sigs = e[\"signatures\"] as Record<string, unknown>;\n for (const v of Object.values(sigs)) {\n if (typeof v !== \"string\") {\n return false;\n }\n }\n }\n return true;\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "SIGNATURE_TAG", "HexStringUtils", "PACKAGE", "HttpGatedDescriptorDataSource", "config", "contractAddress", "selector", "chainId", "dto", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "error", "Left", "normalizedAddress", "selectorWithout0x", "selectorWith0x", "item", "byContract", "entry", "Right", "HexStringUtils", "SIGNATURE_TAG", "schemaHash", "normalizedSchemaHash", "data", "obj", "selectorsMap", "e", "sigs", "v", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import r from"axios";import{Left as d,Right as l}from"purify-ts";import{HttpGatedDescriptorDataSource as o}from"../../gated-signing/data/HttpGatedDescriptorDataSource";import{LEDGER_CLIENT_VERSION_HEADER as g,LEDGER_ORIGIN_TOKEN_HEADER as w}from"../../shared/constant/HttpHeaders";import v from"../../../package.json";vi.mock("axios");describe("HttpGatedDescriptorDataSource",()=>{const a={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",branch:"next",mode:"prod"},originToken:"test-origin-token"},e="0x1111111254fb6c44bac0bed2854e76f90643097d",n="0xa1251d75",s=1,p="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",u=[{gated_descriptors:{"0x1111111254fb6c44bac0bed2854e76f90643097d":{a1251d75:{network:"ethereum",chain_id:1,address:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}],h=`${p}150100`;beforeEach(()=>{vi.clearAllMocks()}),describe("getGatedDescriptor",()=>{it("should return descriptor on successful request with correct URL and params",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:u});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(r.request).toHaveBeenCalledWith({method:"GET",url:"https://crypto-assets-service.api.ledger.com/v1/gated_dapps",params:{ref:"branch:next",output:"gated_descriptors,app,category",contracts:e,chain_id:s},headers:{[g]:`context-module/${v.version}`,[w]:"test-origin-token"}}),expect(t).toEqual(l({signedDescriptor:h}))}),it("should find descriptor when API response has selector key without 0x prefix",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:u});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:"0xa1251d75",chainId:s});expect(t).toEqual(l({signedDescriptor:h}))}),it("should return Left when response is not an array",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:{gated_descriptors:{}}});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when response is empty array",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[]});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when no descriptor matches contract and selector",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{"0xothercontract":{a1251d75:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:"0xother",selector:"a1251d75",version:"v1"}}}}]});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75")))}),it("should return Left when axios request fails",async()=>{vi.spyOn(r,"request").mockRejectedValue(new Error("Network error"));const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))}),it("should use config.cal.branch in ref param",async()=>{const t={...a,cal:{...a.cal,branch:"main"}};vi.spyOn(r,"request").mockResolvedValue({status:200,data:u}),await new o(t).getGatedDescriptor({contractAddress:e,selector:n,chainId:s}),expect(r.request).toHaveBeenCalledWith(expect.objectContaining({params:expect.objectContaining({ref:"branch:main"})}))}),describe("when response fails DTO validation",()=>{const t=new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response");it("should return Left when array item has no gated_descriptors",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when gated_descriptors is not an object",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:"not-an-object"}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when entry is missing required field (descriptor)",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1"}}}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when entry has wrong type for chain_id",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:"1",address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when entry signatures contains non-string value",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:123}}}}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when array item is null",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[null]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when selectors map value is not an object",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:"not-a-selectors-map"}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))})})}),describe("getGatedDescriptorForTypedData",()=>{const t="4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3",c="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",m=[{gated_descriptors:{[e]:{[t]:{network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1",descriptor:c,signatures:{prod:"00",test:"00"}}}}}],y=`${c}150100`;it("should return descriptor on successful request when keyed by schema hash",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:m});const i=await new o(a).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:s});expect(r.request).toHaveBeenCalledWith({method:"GET",url:"https://crypto-assets-service.api.ledger.com/v1/gated_dapps",params:{ref:"branch:next",output:"gated_descriptors",contracts:e,chain_id:s},headers:{[g]:`context-module/${v.version}`,[w]:"test-origin-token"}}),expect(i).toEqual(l({signedDescriptor:y}))}),it("should return Left when no descriptor matches contract and schema hash",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{other_schema_hash:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1"}}}}]});const i=await new o(a).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:s});expect(i).toEqual(d(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${t}`)))}),it("should return Left when axios request fails",async()=>{vi.spyOn(r,"request").mockRejectedValue(new Error("Network error"));const i=await new o(a).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:s});expect(i).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))})})});
|
|
2
|
+
//# sourceMappingURL=HttpGatedDescriptorDataSource.test.js.map
|