@ledgerhq/context-module 2.2.0 → 2.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  3. package/lib/cjs/src/ContextModuleBuilder.js.map +2 -2
  4. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.test.js.map +2 -2
  6. package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  7. package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
  8. package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  9. package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  10. package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  11. package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  12. package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  13. package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
  14. package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  15. package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  16. package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
  17. package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
  18. package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  19. package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  20. package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  21. package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
  22. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +1 -1
  23. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +1 -1
  24. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +1 -1
  25. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +2 -2
  26. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +1 -1
  27. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +2 -2
  28. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +1 -1
  29. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +3 -3
  30. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +1 -1
  31. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +3 -3
  32. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js +1 -1
  33. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +3 -3
  34. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +1 -1
  35. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +3 -3
  36. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +1 -1
  37. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +2 -2
  38. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +1 -1
  39. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +2 -2
  40. package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
  41. package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
  42. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.js +1 -1
  43. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.js.map +3 -3
  44. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
  45. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +3 -3
  46. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js.map +1 -1
  47. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js.map +2 -2
  48. package/lib/cjs/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.js +1 -1
  49. package/lib/cjs/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.js.map +2 -2
  50. package/lib/cjs/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.test.js +1 -1
  51. package/lib/cjs/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.test.js.map +2 -2
  52. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  53. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  54. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +1 -1
  55. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +1 -1
  56. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +1 -1
  57. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +2 -2
  58. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +1 -1
  59. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +2 -2
  60. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  61. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  62. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  63. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  64. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  65. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  66. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  67. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  68. package/lib/esm/package.json +1 -1
  69. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  70. package/lib/esm/src/ContextModuleBuilder.js.map +2 -2
  71. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  72. package/lib/esm/src/ContextModuleBuilder.test.js.map +2 -2
  73. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  74. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
  75. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  76. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  77. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  78. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  79. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  80. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
  81. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  82. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  83. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
  84. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
  85. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  86. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  87. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  88. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
  89. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +1 -1
  90. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +1 -1
  91. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +1 -1
  92. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +2 -2
  93. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +1 -1
  94. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +2 -2
  95. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +1 -1
  96. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +3 -3
  97. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +1 -1
  98. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +3 -3
  99. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js +1 -1
  100. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +3 -3
  101. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +1 -1
  102. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +3 -3
  103. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +1 -1
  104. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +2 -2
  105. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +1 -1
  106. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +2 -2
  107. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
  108. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
  109. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.js +1 -1
  110. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.js.map +3 -3
  111. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
  112. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +3 -3
  113. package/lib/esm/src/modules/solana/model/SolanaPayloads.js.map +2 -2
  114. package/lib/esm/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.js +1 -1
  115. package/lib/esm/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.js.map +2 -2
  116. package/lib/esm/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.test.js +1 -1
  117. package/lib/esm/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.test.js.map +2 -2
  118. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  119. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  120. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +1 -1
  121. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +1 -1
  122. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +1 -1
  123. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +2 -2
  124. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +1 -1
  125. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +2 -2
  126. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  127. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  128. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  129. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  130. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  131. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  132. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  133. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  134. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  135. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts.map +1 -1
  136. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts +50 -56
  137. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts.map +1 -1
  138. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts +4 -1
  139. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts.map +1 -1
  140. package/lib/types/src/modules/solana/lifi/domain/LifiContextLoader.d.ts.map +1 -1
  141. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts +5 -1
  142. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts.map +1 -1
  143. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts +6 -6
  144. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts.map +1 -1
  145. package/lib/types/src/modules/solana/owner-info/data/HttpOwnerInfoDataSource.d.ts.map +1 -1
  146. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  147. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -1
  148. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  149. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.ts"],
4
- "sourcesContent": ["import {\n DeviceModelId,\n type DmkNetworkClient,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left } from \"purify-ts\";\n\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type CalldataDescriptorDataSource } from \"@/index\";\nimport type {\n CalldataEnumV1,\n CalldataFieldV1,\n CalldataTransactionInfoV1,\n} from \"@/modules/ethereum/calldata/data/dto/CalldataDto\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\n\nimport { HttpCalldataDescriptorDataSource } from \"./HttpCalldataDescriptorDataSource\";\n\nconst config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"test\",\n branch: \"main\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpCalldataDescriptorDataSource\", () => {\n let datasource: CalldataDescriptorDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n let transactionInfo: CalldataTransactionInfoV1;\n let enums: CalldataEnumV1;\n let fieldToken: CalldataFieldV1;\n let fieldTrustedName: CalldataFieldV1;\n let fieldNft: CalldataFieldV1;\n let fieldAmount: CalldataFieldV1;\n let fieldDatetime: CalldataFieldV1;\n let fieldUnit: CalldataFieldV1;\n let fieldDuration: CalldataFieldV1;\n let fieldEnum: CalldataFieldV1;\n let fieldCalldata: CalldataFieldV1;\n const certificateLoaderMock = {\n loadCertificate: vi.fn(),\n };\n\n beforeEach(() => {\n httpMock = { get: vi.fn() };\n datasource = new HttpCalldataDescriptorDataSource(\n config,\n certificateLoaderMock as unknown as PkiCertificateLoader,\n \"dapps\",\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n beforeAll(() => {\n vi.clearAllMocks();\n\n transactionInfo = {\n descriptor: {\n data: \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c\",\n signatures: {\n test: \"3045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n },\n },\n };\n enums = {\n \"0\": {\n \"1\": {\n data: \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c65\",\n signatures: {\n test: \"3045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582\",\n },\n },\n \"2\": {\n data: \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c65\",\n signatures: {\n test: \"3045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523\",\n },\n },\n },\n };\n\n fieldAmount = createFieldWithoutReference(\"FROM\", \"UFIXED\", \"AMOUNT\", \"06\");\n fieldDatetime = createFieldWithoutReference(\n \"TO\",\n \"FIXED\",\n \"DATETIME\",\n \"07\",\n );\n fieldUnit = createFieldWithoutReference(\"TO\", \"BOOL\", \"UNIT\", \"08\");\n fieldDuration = createFieldWithoutReference(\n \"VALUE\",\n \"INT\",\n \"DURATION\",\n \"09\",\n );\n fieldToken = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n weight: 1,\n },\n {\n type: \"LEAF\",\n leaf_type: \"DYNAMIC_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"TOKEN_AMOUNT\",\n token: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n weight: 1,\n },\n {\n type: \"LEAF\",\n leaf_type: \"DYNAMIC_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n },\n descriptor:\n \"0001000112416d6f756e7420746f20776974686472617702010203580001000115000100010101020120030a000100010200010401030215000100010105020114030a000100010200000401030420ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05034d6178\",\n };\n fieldTrustedName = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"CONTAINER\",\n value: \"TO\",\n },\n type_family: \"STRING\",\n type_size: 20,\n },\n type: \"TRUSTED_NAME\",\n types: [\"eoa\"],\n sources: [\"ens\", \"unstoppable_domain\"],\n },\n descriptor:\n \"000100010c546f20726563697069656e7402010803230001000115000100010105020114030a00010001020002040103020101030402030402\",\n };\n fieldNft = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n weight: 2,\n },\n {\n type: \"LEAF\",\n leaf_type: \"TUPLE_LEAF\",\n },\n {\n type: \"SLICE\",\n end: 2,\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 20,\n },\n collection: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leaf_type: \"ARRAY_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n },\n ],\n },\n type_family: \"INT\",\n type_size: 20,\n },\n type: \"NFT\",\n },\n descriptor:\n \"000100010c546f20726563697069656e7402010803230001000115000100010105020114\",\n };\n fieldEnum = {\n param: {\n id: 0,\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [],\n },\n type_family: \"BYTES\",\n type_size: 20,\n },\n type: \"ENUM\",\n },\n descriptor:\n \"000100010c546f20726563697069656e7402010803230001000115000100010105020112\",\n };\n fieldCalldata = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 32,\n },\n callee: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n weight: 1,\n },\n {\n type: \"LEAF\",\n leaf_type: \"DYNAMIC_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n selector: {\n type: \"path\",\n binary_path: {\n type: \"CONTAINER\",\n value: \"FROM\",\n },\n type_family: \"BYTES\",\n type_size: 4,\n },\n amount: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leaf_type: \"TUPLE_LEAF\",\n },\n ],\n },\n type_family: \"UINT\",\n type_size: 32,\n },\n spender: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"SLICE\",\n start: 0,\n end: 20,\n },\n {\n type: \"LEAF\",\n leaf_type: \"ARRAY_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"CALLDATA\",\n },\n descriptor:\n \"000100010c43616c6c64617461207465737402010803230001000115000100010105020114\",\n };\n });\n\n function createFieldWithoutReference(\n binary_path: string,\n type_family: string,\n type: string,\n descriptor: string,\n ): CalldataFieldV1 {\n return {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"CONTAINER\",\n value: binary_path,\n },\n type_family,\n type_size: 32,\n },\n type,\n },\n descriptor,\n } as CalldataFieldV1;\n }\n\n function createCalldata(\n calldataTransactionInfo: CalldataTransactionInfoV1,\n calldataEnums: CalldataEnumV1,\n fields: unknown[],\n ): unknown {\n return {\n descriptors_calldata: {\n \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\": {\n \"0x69328dec\": {\n type: \"calldata\",\n version: \"v1\",\n transaction_info: calldataTransactionInfo,\n enums: calldataEnums,\n fields: fields,\n },\n },\n },\n };\n }\n\n it.each([[\"dapps\"], [\"tokens\"]])(\n \"should call http.get with the correct url for endpoint '%s'\",\n async (endpoint) => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n const customDataSource = new HttpCalldataDescriptorDataSource(\n config,\n certificateLoaderMock as unknown as PkiCertificateLoader,\n endpoint,\n httpMock as unknown as DmkNetworkClient,\n );\n\n // WHEN\n await customDataSource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/${endpoint}`,\n {\n params: {\n output: \"descriptors_calldata\",\n chain_id: 1,\n contracts: \"0x0abc\",\n contract_address: \"0x0abc\",\n ref: `branch:${config.cal.branch}`,\n },\n },\n );\n },\n );\n\n it(\"should return an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error(\"boom\"));\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: Error: boom\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no payload is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue({ test: \"\" });\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array\",\n ),\n ),\n );\n });\n\n it(\"should return an error when an empty array is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: No data for contract 0x0abc and selector 0x01ff\",\n ),\n ),\n );\n });\n\n it(\"should return an error when selector is not found\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, enums, [fieldToken]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x01fe\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x01fe\",\n ),\n ),\n );\n });\n\n it(\"Calldata with fields references and enums\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, enums, [\n fieldToken,\n fieldTrustedName,\n fieldNft,\n fieldEnum,\n ]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dEc\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582\",\n type: \"ethereumEnum\",\n id: 0,\n value: 1,\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523\",\n type: \"ethereumEnum\",\n id: 0,\n value: 2,\n },\n {\n payload: fieldToken.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumToken\",\n valuePath: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ],\n },\n },\n {\n payload: fieldTrustedName.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumTrustedName\",\n valuePath: \"TO\",\n types: [\"eoa\"],\n sources: [\"ens\", \"unstoppable_domain\"],\n },\n },\n {\n payload: fieldNft.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumNft\",\n valuePath: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"ARRAY_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n },\n ],\n },\n },\n {\n payload: fieldEnum.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumEnum\",\n valuePath: [],\n id: 0,\n },\n },\n ]);\n });\n\n it(\"Calldata with fields references and enums with certificates\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, enums, [\n fieldToken,\n fieldTrustedName,\n fieldNft,\n fieldEnum,\n ]);\n const certificate: PkiCertificate = {\n keyUsageNumber: 11,\n payload: new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x15, 0x04, 0x05, 0x06, 0x07, 0x08,\n ]),\n };\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValueOnce(\n certificate,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dEc\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n // certificate is added to the transactionInfo\n certificate,\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582\",\n type: \"ethereumEnum\",\n id: 0,\n value: 1,\n // certificate is added also to the enum\n certificate,\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523\",\n type: \"ethereumEnum\",\n id: 0,\n value: 2,\n // certificate is added also to the enum\n certificate,\n },\n {\n payload: fieldToken.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumToken\",\n valuePath: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ],\n },\n },\n {\n payload: fieldTrustedName.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumTrustedName\",\n valuePath: \"TO\",\n types: [\"eoa\"],\n sources: [\"ens\", \"unstoppable_domain\"],\n },\n },\n {\n payload: fieldNft.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumNft\",\n valuePath: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"ARRAY_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n },\n ],\n },\n },\n {\n payload: fieldEnum.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumEnum\",\n valuePath: [],\n id: 0,\n },\n },\n ]);\n });\n\n it(\"Calldata without fields references\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [fieldAmount, fieldDatetime, fieldUnit, fieldDuration],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldAmount.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDatetime.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldUnit.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDuration.descriptor,\n },\n ]);\n });\n\n it(\"Calldata on third array element\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [fieldAmount, fieldDatetime, fieldUnit, fieldDuration],\n );\n httpMock.get.mockResolvedValue([{}, {}, calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldAmount.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDatetime.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldUnit.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDuration.descriptor,\n },\n ]);\n });\n\n it(\"Calldata without fields references and transaction info signature length % 2 different from 0\", async () => {\n // GIVEN\n const newTransactionInfo: CalldataTransactionInfoV1 = {\n descriptor: {\n data: transactionInfo.descriptor.data,\n signatures: {\n test: transactionInfo.descriptor.signatures.test + \"0\",\n },\n },\n };\n const calldataDTO = createCalldata(\n newTransactionInfo,\n [],\n [fieldAmount, fieldDatetime, fieldUnit, fieldDuration],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff4803045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f0\",\n type: \"ethereumTransactionInfo\",\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldAmount.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDatetime.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldUnit.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDuration.descriptor,\n },\n ]);\n });\n\n it(\"Calldata with token fields references as constants\", async () => {\n // GIVEN\n const field = {\n name: \"Amount to exchange\",\n param: {\n type: \"TOKEN_AMOUNT\",\n token: {\n raw: \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\",\n type: \"constant\",\n value: \"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84\",\n version: 1,\n type_size: 20,\n type_family: \"ADDRESS\",\n },\n value: {\n type: \"path\",\n version: 1,\n abi_path: {\n type: \"data\",\n absolute: true,\n elements: [\n {\n type: \"field\",\n identifier: \"_stETHAmount\",\n },\n ],\n },\n type_size: 32,\n binary_path: {\n type: \"DATA\",\n version: 1,\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"UINT\",\n },\n version: 1,\n },\n version: 1,\n descriptor:\n \"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f0001010101050201140514ae7ab96520de3a18e5e111b5eaab095312d7fe84\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: field.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumToken\",\n value: \"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84\",\n },\n },\n ]);\n });\n\n it(\"Calldata with collection fields references as constants\", async () => {\n // GIVEN\n const field = {\n name: \"Collection ID\",\n param: {\n type: \"NFT\",\n collection: {\n raw: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n type: \"constant\",\n value: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n version: 1,\n type_size: 20,\n type_family: \"ADDRESS\",\n },\n value: {\n type: \"path\",\n version: 1,\n abi_path: {\n type: \"data\",\n absolute: true,\n elements: [\n {\n type: \"field\",\n identifier: \"_collectionId\",\n },\n ],\n },\n type_size: 20,\n binary_path: {\n type: \"DATA\",\n version: 1,\n elements: [\n {\n type: \"ARRAY\",\n weight: 2,\n },\n {\n type: \"LEAF\",\n leaf_type: \"TUPLE_LEAF\",\n },\n {\n type: \"SLICE\",\n end: 2,\n },\n ],\n },\n type_family: \"BYTES\",\n },\n version: 1,\n },\n version: 1,\n descriptor:\n \"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f00010101010502011405147d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: field.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumNft\",\n value: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n },\n },\n ]);\n });\n\n it(\"Calldata with CALLDATA fields references\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, [], [fieldCalldata]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: fieldCalldata.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"calldata\",\n valuePath: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ],\n callee: [\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ],\n selector: \"FROM\",\n amount: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"TUPLE_LEAF\",\n },\n ],\n spender: [\n {\n type: \"SLICE\",\n start: 0,\n end: 20,\n },\n {\n type: \"LEAF\",\n leafType: \"ARRAY_LEAF\",\n },\n ],\n },\n },\n ]);\n });\n\n it(\"Calldata with CALLDATA fields references without optional properties\", async () => {\n // GIVEN\n const fieldCalldataMinimal = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 32,\n },\n callee: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 32,\n },\n type: \"CALLDATA\",\n },\n descriptor:\n \"000100010c43616c6c64617461207465737402010803230001000115000100010105020114\",\n };\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [fieldCalldataMinimal],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: fieldCalldataMinimal.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"calldata\",\n valuePath: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ],\n callee: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ],\n selector: undefined,\n amount: undefined,\n spender: undefined,\n chainId: undefined,\n },\n },\n ]);\n });\n\n it(\"should return an error when calldata is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = {\n descriptors_calldata: {\n \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\": {\n \"0x69328dec\": {\n type: \"calldat\",\n version: \"v1\",\n transaction_info: transactionInfo,\n enums: enums,\n fields: [fieldToken],\n },\n },\n },\n };\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when transactionInfo is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n {\n descriptor: {\n data: \"1234\",\n signatures: {\n prod: \"1234\",\n },\n },\n },\n enums,\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when enum is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [\"badEnum\"] as unknown as CalldataEnumV1,\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when enum does not contain a signature\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n { 0: { 1: { data: \"1234\" } } } as unknown as CalldataEnumV1,\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when enum contain the wrong signature\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n {\n 0: {\n 1: {\n data: \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010106067374626c65\",\n signatures: {\n prod: \"wrongSignature\", // prod instead of test signature\n },\n },\n },\n },\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [{ descriptor: 3 }],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field value is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: \"TO\",\n type_family: \"UNKNOWN\",\n type_size: 20,\n },\n type: \"DATETIME\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field container path is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: \"UNKNOWN\",\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"DATETIME\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field calldata path is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: {\n elements: [\n {\n type: \"UNKNOWN\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"DATETIME\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field type is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: \"TO\",\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"UNKNOWN\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAGO,2CACPC,EAAqB,qBAYrBC,EAAiD,8CAEjD,MAAMC,EAAS,CACb,IAAK,CACH,IAAK,kDACL,KAAM,OACN,OAAQ,MACV,EACA,YAAa,aACf,EAEA,SAAS,mCAAoC,IAAM,CACjD,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAwB,CAC5B,gBAAiB,GAAG,GAAG,CACzB,EAEA,WAAW,IAAM,CACfZ,EAAW,CAAE,IAAK,GAAG,GAAG,CAAE,EAC1BD,EAAa,IAAI,mCACfD,EACAc,EACA,QACAZ,CACF,CACF,CAAC,EAED,UAAU,IAAM,CACd,GAAG,cAAc,EAEjBC,EAAkB,CAChB,WAAY,CACV,KAAM,6PACN,WAAY,CACV,KAAM,gJACR,CACF,CACF,EACAC,EAAQ,CACN,EAAK,CACH,EAAK,CACH,KAAM,iHACN,WAAY,CACV,KAAM,gJACR,CACF,EACA,EAAK,CACH,KAAM,qHACN,WAAY,CACV,KAAM,gJACR,CACF,CACF,CACF,EAEAI,EAAcO,EAA4B,OAAQ,SAAU,SAAU,IAAI,EAC1EN,EAAgBM,EACd,KACA,QACA,WACA,IACF,EACAL,EAAYK,EAA4B,KAAM,OAAQ,OAAQ,IAAI,EAClEJ,EAAgBI,EACd,QACA,MACA,WACA,IACF,EACAV,EAAa,CACX,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,EACP,IAAK,EACL,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,cACb,CACF,CACF,EACA,YAAa,UACb,UAAW,EACb,EACA,KAAM,eACN,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,EACP,IAAK,EACL,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,cACb,CACF,CACF,EACA,YAAa,UACb,UAAW,EACb,CACF,EACA,WACE,0OACJ,EACAC,EAAmB,CACjB,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,YACN,MAAO,IACT,EACA,YAAa,SACb,UAAW,EACb,EACA,KAAM,eACN,MAAO,CAAC,KAAK,EACb,QAAS,CAAC,MAAO,oBAAoB,CACvC,EACA,WACE,oHACJ,EACAC,EAAW,CACT,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,YACb,EACA,CACE,KAAM,QACN,IAAK,CACP,CACF,CACF,EACA,YAAa,QACb,UAAW,EACb,EACA,WAAY,CACV,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,KACR,EACA,CACE,KAAM,OACN,UAAW,YACb,EACA,CACE,KAAM,QACN,MAAO,CACT,CACF,CACF,EACA,YAAa,MACb,UAAW,EACb,EACA,KAAM,KACR,EACA,WACE,0EACJ,EACAK,EAAY,CACV,MAAO,CACL,GAAI,EACJ,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CAAC,CACb,EACA,YAAa,QACb,UAAW,EACb,EACA,KAAM,MACR,EACA,WACE,0EACJ,EACAC,EAAgB,CACd,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,aACb,CACF,CACF,EACA,YAAa,QACb,UAAW,EACb,EACA,OAAQ,CACN,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,cACb,CACF,CACF,EACA,YAAa,UACb,UAAW,EACb,EACA,SAAU,CACR,KAAM,OACN,YAAa,CACX,KAAM,YACN,MAAO,MACT,EACA,YAAa,QACb,UAAW,CACb,EACA,OAAQ,CACN,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,KACR,EACA,CACE,KAAM,OACN,UAAW,YACb,CACF,CACF,EACA,YAAa,OACb,UAAW,EACb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",
4
+ "sourcesContent": ["import {\n DeviceModelId,\n type DmkNetworkClient,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left } from \"purify-ts\";\n\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type CalldataDescriptorDataSource } from \"@/index\";\nimport type {\n CalldataEnumV1,\n CalldataFieldV1,\n CalldataTransactionInfoV1,\n} from \"@/modules/ethereum/calldata/data/dto/CalldataDto\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\n\nimport { HttpCalldataDescriptorDataSource } from \"./HttpCalldataDescriptorDataSource\";\n\nconst config = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"test\",\n branch: \"main\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpCalldataDescriptorDataSource\", () => {\n let datasource: CalldataDescriptorDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n let transactionInfo: CalldataTransactionInfoV1;\n let enums: CalldataEnumV1;\n let fieldToken: CalldataFieldV1;\n let fieldTrustedName: CalldataFieldV1;\n let fieldNft: CalldataFieldV1;\n let fieldAmount: CalldataFieldV1;\n let fieldDatetime: CalldataFieldV1;\n let fieldUnit: CalldataFieldV1;\n let fieldDuration: CalldataFieldV1;\n let fieldEnum: CalldataFieldV1;\n let fieldCalldata: CalldataFieldV1;\n const certificateLoaderMock = {\n loadCertificate: vi.fn(),\n };\n\n beforeEach(() => {\n httpMock = { get: vi.fn() };\n datasource = new HttpCalldataDescriptorDataSource(\n config,\n certificateLoaderMock as unknown as PkiCertificateLoader,\n \"dapps\",\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n beforeAll(() => {\n vi.clearAllMocks();\n\n transactionInfo = {\n descriptor: {\n data: \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c\",\n signatures: {\n test: \"3045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n },\n },\n };\n enums = {\n \"0\": {\n \"1\": {\n data: \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c65\",\n signatures: {\n test: \"3045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582\",\n },\n },\n \"2\": {\n data: \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c65\",\n signatures: {\n test: \"3045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523\",\n },\n },\n },\n };\n\n fieldAmount = createFieldWithoutReference(\"FROM\", \"UFIXED\", \"AMOUNT\", \"06\");\n fieldDatetime = createFieldWithoutReference(\n \"TO\",\n \"FIXED\",\n \"DATETIME\",\n \"07\",\n );\n fieldUnit = createFieldWithoutReference(\"TO\", \"BOOL\", \"UNIT\", \"08\");\n fieldDuration = createFieldWithoutReference(\n \"VALUE\",\n \"INT\",\n \"DURATION\",\n \"09\",\n );\n fieldToken = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n weight: 1,\n },\n {\n type: \"LEAF\",\n leaf_type: \"DYNAMIC_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"TOKEN_AMOUNT\",\n token: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n weight: 1,\n },\n {\n type: \"LEAF\",\n leaf_type: \"DYNAMIC_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n },\n descriptor:\n \"0001000112416d6f756e7420746f20776974686472617702010203580001000115000100010101020120030a000100010200010401030215000100010105020114030a000100010200000401030420ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05034d6178\",\n };\n fieldTrustedName = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"CONTAINER\",\n value: \"TO\",\n },\n type_family: \"STRING\",\n type_size: 20,\n },\n type: \"TRUSTED_NAME\",\n types: [\"eoa\"],\n sources: [\"ens\", \"unstoppable_domain\"],\n },\n descriptor:\n \"000100010c546f20726563697069656e7402010803230001000115000100010105020114030a00010001020002040103020101030402030402\",\n };\n fieldNft = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n weight: 2,\n },\n {\n type: \"LEAF\",\n leaf_type: \"TUPLE_LEAF\",\n },\n {\n type: \"SLICE\",\n end: 2,\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 20,\n },\n collection: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leaf_type: \"ARRAY_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n },\n ],\n },\n type_family: \"INT\",\n type_size: 20,\n },\n type: \"NFT\",\n },\n descriptor:\n \"000100010c546f20726563697069656e7402010803230001000115000100010105020114\",\n };\n fieldEnum = {\n param: {\n id: 0,\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [],\n },\n type_family: \"BYTES\",\n type_size: 20,\n },\n type: \"ENUM\",\n },\n descriptor:\n \"000100010c546f20726563697069656e7402010803230001000115000100010105020112\",\n };\n fieldCalldata = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 32,\n },\n callee: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"ARRAY\",\n weight: 1,\n },\n {\n type: \"LEAF\",\n leaf_type: \"DYNAMIC_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n selector: {\n type: \"path\",\n binary_path: {\n type: \"CONTAINER\",\n value: \"FROM\",\n },\n type_family: \"BYTES\",\n type_size: 4,\n },\n amount: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leaf_type: \"TUPLE_LEAF\",\n },\n ],\n },\n type_family: \"UINT\",\n type_size: 32,\n },\n spender: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"SLICE\",\n start: 0,\n end: 20,\n },\n {\n type: \"LEAF\",\n leaf_type: \"ARRAY_LEAF\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"CALLDATA\",\n },\n descriptor:\n \"000100010c43616c6c64617461207465737402010803230001000115000100010105020114\",\n };\n });\n\n function createFieldWithoutReference(\n binary_path: string,\n type_family: string,\n type: string,\n descriptor: string,\n ): CalldataFieldV1 {\n return {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"CONTAINER\",\n value: binary_path,\n },\n type_family,\n type_size: 32,\n },\n type,\n },\n descriptor,\n } as CalldataFieldV1;\n }\n\n function createCalldata(\n calldataTransactionInfo: CalldataTransactionInfoV1,\n calldataEnums: CalldataEnumV1,\n fields: unknown[],\n ): unknown {\n return {\n descriptors_calldata: {\n \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\": {\n \"0x69328dec\": {\n type: \"calldata\",\n version: \"v1\",\n transaction_info: calldataTransactionInfo,\n enums: calldataEnums,\n fields: fields,\n },\n },\n },\n };\n }\n\n it.each([[\"dapps\"], [\"tokens\"]])(\n \"should call http.get with the correct url for endpoint '%s'\",\n async (endpoint) => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n const customDataSource = new HttpCalldataDescriptorDataSource(\n config,\n certificateLoaderMock as unknown as PkiCertificateLoader,\n endpoint,\n httpMock as unknown as DmkNetworkClient,\n );\n\n // WHEN\n await customDataSource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/${endpoint}`,\n {\n params: {\n output: \"descriptors_calldata\",\n chain_id: 1,\n contracts: \"0x0abc\",\n contract_address: \"0x0abc\",\n ref: `branch:${config.cal.branch}`,\n },\n },\n );\n },\n );\n\n it(\"should return an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error(\"boom\"));\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: Error: boom\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no payload is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue({ test: \"\" });\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array\",\n ),\n ),\n );\n });\n\n it(\"should return an error when an empty array is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: No data for contract 0x0abc and selector 0x01ff\",\n ),\n ),\n );\n });\n\n it(\"should return an error when selector is not found\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, enums, [fieldToken]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x01fe\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x01fe\",\n ),\n ),\n );\n });\n\n it(\"Calldata with fields references and enums\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, enums, [\n fieldToken,\n fieldTrustedName,\n fieldNft,\n fieldEnum,\n ]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dEc\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582\",\n type: \"ethereumEnum\",\n id: 0,\n value: 1,\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523\",\n type: \"ethereumEnum\",\n id: 0,\n value: 2,\n },\n {\n payload: fieldToken.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumToken\",\n valuePath: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ],\n },\n },\n {\n payload: fieldTrustedName.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumTrustedName\",\n valuePath: \"TO\",\n types: [\"eoa\"],\n sources: [\"ens\", \"unstoppable_domain\"],\n },\n },\n {\n payload: fieldNft.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumNft\",\n valuePath: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"ARRAY_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n },\n ],\n },\n },\n {\n payload: fieldEnum.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumEnum\",\n valuePath: [],\n id: 0,\n },\n },\n ]);\n });\n\n it(\"Calldata with fields references and enums with certificates\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, enums, [\n fieldToken,\n fieldTrustedName,\n fieldNft,\n fieldEnum,\n ]);\n const certificate: PkiCertificate = {\n keyUsageNumber: 11,\n payload: new Uint8Array([\n 0x01, 0x02, 0x03, 0x04, 0x15, 0x04, 0x05, 0x06, 0x07, 0x08,\n ]),\n };\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValueOnce(\n certificate,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80B7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dEc\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n // certificate is added to the transactionInfo\n certificate,\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec0401000501010606737461626c6581ff473045022100862e724db664f5d94484928a6a5963268a22cd8178ad36e8c4ff13769ac5c27e0220079da2b6e86810156f6b5955b8190bc016c2fe813d27fcb878a9b99658546582\",\n type: \"ethereumEnum\",\n id: 0,\n value: 1,\n // certificate is added also to the enum\n certificate,\n },\n {\n payload:\n \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010206087661726961626c6581ff473045022100b838ee3d597d6bad2533606cef7335f6c8a45b46d5717803e646777f6c8a6897022074f04b82c3dad8445bb6230ab762010c5fc6ee06198fd3e54752287cbf95c523\",\n type: \"ethereumEnum\",\n id: 0,\n value: 2,\n // certificate is added also to the enum\n certificate,\n },\n {\n payload: fieldToken.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumToken\",\n valuePath: [\n {\n type: \"ARRAY\",\n start: 0,\n end: 5,\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ],\n },\n },\n {\n payload: fieldTrustedName.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumTrustedName\",\n valuePath: \"TO\",\n types: [\"eoa\"],\n sources: [\"ens\", \"unstoppable_domain\"],\n },\n },\n {\n payload: fieldNft.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumNft\",\n valuePath: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"ARRAY_LEAF\",\n },\n {\n type: \"SLICE\",\n start: 1,\n },\n ],\n },\n },\n {\n payload: fieldEnum.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumEnum\",\n valuePath: [],\n id: 0,\n },\n },\n ]);\n });\n\n it(\"Calldata without fields references\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [fieldAmount, fieldDatetime, fieldUnit, fieldDuration],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldAmount.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDatetime.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldUnit.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDuration.descriptor,\n },\n ]);\n });\n\n it(\"Calldata on third array element\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [fieldAmount, fieldDatetime, fieldUnit, fieldDuration],\n );\n httpMock.get.mockResolvedValue([{}, {}, calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldAmount.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDatetime.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldUnit.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDuration.descriptor,\n },\n ]);\n });\n\n it(\"Calldata without fields references and transaction info signature length % 2 different from 0\", async () => {\n // GIVEN\n const newTransactionInfo: CalldataTransactionInfoV1 = {\n descriptor: {\n data: transactionInfo.descriptor.data,\n signatures: {\n test: transactionInfo.descriptor.signatures.test + \"0\",\n },\n },\n };\n const calldataDTO = createCalldata(\n newTransactionInfo,\n [],\n [fieldAmount, fieldDatetime, fieldUnit, fieldDuration],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff4803045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f0\",\n type: \"ethereumTransactionInfo\",\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldAmount.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDatetime.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldUnit.descriptor,\n },\n {\n type: \"ethereumTransactionFieldDescription\",\n payload: fieldDuration.descriptor,\n },\n ]);\n });\n\n it(\"Calldata with token fields references as constants\", async () => {\n // GIVEN\n const field = {\n name: \"Amount to exchange\",\n param: {\n type: \"TOKEN_AMOUNT\",\n token: {\n raw: \"0xae7ab96520de3a18e5e111b5eaab095312d7fe84\",\n type: \"constant\",\n value: \"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84\",\n version: 1,\n type_size: 20,\n type_family: \"ADDRESS\",\n },\n value: {\n type: \"path\",\n version: 1,\n abi_path: {\n type: \"data\",\n absolute: true,\n elements: [\n {\n type: \"field\",\n identifier: \"_stETHAmount\",\n },\n ],\n },\n type_size: 32,\n binary_path: {\n type: \"DATA\",\n version: 1,\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"UINT\",\n },\n version: 1,\n },\n version: 1,\n descriptor:\n \"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f0001010101050201140514ae7ab96520de3a18e5e111b5eaab095312d7fe84\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: field.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumToken\",\n value: \"0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84\",\n },\n },\n ]);\n });\n\n it(\"Calldata with collection fields references as constants\", async () => {\n // GIVEN\n const field = {\n name: \"Collection ID\",\n param: {\n type: \"NFT\",\n collection: {\n raw: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n type: \"constant\",\n value: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n version: 1,\n type_size: 20,\n type_family: \"ADDRESS\",\n },\n value: {\n type: \"path\",\n version: 1,\n abi_path: {\n type: \"data\",\n absolute: true,\n elements: [\n {\n type: \"field\",\n identifier: \"_collectionId\",\n },\n ],\n },\n type_size: 20,\n binary_path: {\n type: \"DATA\",\n version: 1,\n elements: [\n {\n type: \"ARRAY\",\n weight: 2,\n },\n {\n type: \"LEAF\",\n leaf_type: \"TUPLE_LEAF\",\n },\n {\n type: \"SLICE\",\n end: 2,\n },\n ],\n },\n type_family: \"BYTES\",\n },\n version: 1,\n },\n version: 1,\n descriptor:\n \"0001010112416d6f756e7420746f2065786368616e6765020102033b0001010115000101010101020120030a00010101020000040103021f00010101010502011405147d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: field.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"ethereumNft\",\n value: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n },\n },\n ]);\n });\n\n it(\"Calldata with CALLDATA fields references\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(transactionInfo, [], [fieldCalldata]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: fieldCalldata.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"calldata\",\n valuePath: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ],\n callee: [\n {\n type: \"ARRAY\",\n itemSize: 1,\n },\n {\n type: \"LEAF\",\n leafType: \"DYNAMIC_LEAF\",\n },\n ],\n selector: \"FROM\",\n amount: [\n {\n type: \"REF\",\n },\n {\n type: \"LEAF\",\n leafType: \"TUPLE_LEAF\",\n },\n ],\n spender: [\n {\n type: \"SLICE\",\n start: 0,\n end: 20,\n },\n {\n type: \"LEAF\",\n leafType: \"ARRAY_LEAF\",\n },\n ],\n },\n },\n ]);\n });\n\n it(\"Calldata with CALLDATA fields references without optional properties\", async () => {\n // GIVEN\n const fieldCalldataMinimal = {\n param: {\n value: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 32,\n },\n callee: {\n type: \"path\",\n binary_path: {\n type: \"DATA\",\n elements: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leaf_type: \"STATIC_LEAF\",\n },\n ],\n },\n type_family: \"BYTES\",\n type_size: 32,\n },\n type: \"CALLDATA\",\n },\n descriptor:\n \"000100010c43616c6c64617461207465737402010803230001000115000100010105020114\",\n };\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [fieldCalldataMinimal],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result.extract()).toEqual([\n {\n payload:\n \"0001000108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04207d5e9ed0004b8035b164edd9d78c37415ad6b1d123be4943d0abd5a50035cae3050857697468647261770604416176650708416176652044414f081068747470733a2f2f616176652e636f6d0a045fc4ba9c81ff473045022100eb67599abfd9c7360b07599a2a2cb769c6e3f0f74e1e52444d788c8f577a16d20220402e92b0adbf97d890fa2f9654bc30c7bd70dacabe870f160e6842d9eb73d36f\",\n type: \"ethereumTransactionInfo\",\n },\n {\n payload: fieldCalldataMinimal.descriptor,\n type: \"ethereumTransactionFieldDescription\",\n reference: {\n type: \"calldata\",\n valuePath: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ],\n callee: [\n {\n type: \"TUPLE\",\n offset: 0,\n },\n {\n type: \"LEAF\",\n leafType: \"STATIC_LEAF\",\n },\n ],\n selector: undefined,\n amount: undefined,\n spender: undefined,\n chainId: undefined,\n },\n },\n ]);\n });\n\n it(\"should return an error when calldata is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = {\n descriptors_calldata: {\n \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\": {\n \"0x69328dec\": {\n type: \"calldat\",\n version: \"v1\",\n transaction_info: transactionInfo,\n enums: enums,\n fields: [fieldToken],\n },\n },\n },\n };\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when transactionInfo is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n {\n descriptor: {\n data: \"1234\",\n signatures: {\n prod: \"1234\",\n },\n },\n },\n enums,\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when enum is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [\"badEnum\"] as unknown as CalldataEnumV1,\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when enum does not contain a signature\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n { 0: { 1: { data: \"1234\" } } } as unknown as CalldataEnumV1,\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when enum contain the wrong signature\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n {\n 0: {\n 1: {\n data: \"0001010108000000000000000102147d2768de32b0b80b7a3454c06bdac94a69ddc7a9030469328dec04010005010106067374626c65\",\n signatures: {\n prod: \"wrongSignature\", // prod instead of test signature\n },\n },\n },\n },\n [fieldToken],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field is not correctly formatted\", async () => {\n // GIVEN\n const calldataDTO = createCalldata(\n transactionInfo,\n [],\n [{ descriptor: 3 }],\n );\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field value is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: \"TO\",\n type_family: \"UNKNOWN\",\n type_size: 20,\n },\n type: \"DATETIME\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field container path is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: \"UNKNOWN\",\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"DATETIME\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field calldata path is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: {\n elements: [\n {\n type: \"UNKNOWN\",\n },\n ],\n },\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"DATETIME\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n\n it(\"should return an error when field type is not correctly formatted\", async () => {\n // GIVEN\n const field = {\n param: {\n value: {\n binary_path: \"TO\",\n type_family: \"ADDRESS\",\n type_size: 20,\n },\n type: \"UNKNOWN\",\n },\n descriptor: \"000100010c546f20726563697069667\",\n };\n const calldataDTO = createCalldata(transactionInfo, [], [field]);\n httpMock.get.mockResolvedValue([calldataDTO]);\n vi.spyOn(certificateLoaderMock, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await datasource.getCalldataDescriptors({\n deviceModelId: DeviceModelId.FLEX,\n chainId: 1,\n address: \"0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9\",\n selector: \"0x69328dec\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract 0x7d2768de32b0b80b7a3454c06bdac94a69ddc7a9 and selector 0x69328dec\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAGO,2CACPC,EAAqB,qBAYrBC,EAAiD,8CAEjD,MAAMC,EAAS,CACb,IAAK,CACH,IAAK,2CACL,KAAM,OACN,OAAQ,MACV,EACA,YAAa,aACf,EAEA,SAAS,mCAAoC,IAAM,CACjD,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAwB,CAC5B,gBAAiB,GAAG,GAAG,CACzB,EAEA,WAAW,IAAM,CACfZ,EAAW,CAAE,IAAK,GAAG,GAAG,CAAE,EAC1BD,EAAa,IAAI,mCACfD,EACAc,EACA,QACAZ,CACF,CACF,CAAC,EAED,UAAU,IAAM,CACd,GAAG,cAAc,EAEjBC,EAAkB,CAChB,WAAY,CACV,KAAM,6PACN,WAAY,CACV,KAAM,gJACR,CACF,CACF,EACAC,EAAQ,CACN,EAAK,CACH,EAAK,CACH,KAAM,iHACN,WAAY,CACV,KAAM,gJACR,CACF,EACA,EAAK,CACH,KAAM,qHACN,WAAY,CACV,KAAM,gJACR,CACF,CACF,CACF,EAEAI,EAAcO,EAA4B,OAAQ,SAAU,SAAU,IAAI,EAC1EN,EAAgBM,EACd,KACA,QACA,WACA,IACF,EACAL,EAAYK,EAA4B,KAAM,OAAQ,OAAQ,IAAI,EAClEJ,EAAgBI,EACd,QACA,MACA,WACA,IACF,EACAV,EAAa,CACX,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,EACP,IAAK,EACL,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,cACb,CACF,CACF,EACA,YAAa,UACb,UAAW,EACb,EACA,KAAM,eACN,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,MAAO,EACP,IAAK,EACL,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,cACb,CACF,CACF,EACA,YAAa,UACb,UAAW,EACb,CACF,EACA,WACE,0OACJ,EACAC,EAAmB,CACjB,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,YACN,MAAO,IACT,EACA,YAAa,SACb,UAAW,EACb,EACA,KAAM,eACN,MAAO,CAAC,KAAK,EACb,QAAS,CAAC,MAAO,oBAAoB,CACvC,EACA,WACE,oHACJ,EACAC,EAAW,CACT,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,YACb,EACA,CACE,KAAM,QACN,IAAK,CACP,CACF,CACF,EACA,YAAa,QACb,UAAW,EACb,EACA,WAAY,CACV,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,KACR,EACA,CACE,KAAM,OACN,UAAW,YACb,EACA,CACE,KAAM,QACN,MAAO,CACT,CACF,CACF,EACA,YAAa,MACb,UAAW,EACb,EACA,KAAM,KACR,EACA,WACE,0EACJ,EACAK,EAAY,CACV,MAAO,CACL,GAAI,EACJ,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CAAC,CACb,EACA,YAAa,QACb,UAAW,EACb,EACA,KAAM,MACR,EACA,WACE,0EACJ,EACAC,EAAgB,CACd,MAAO,CACL,MAAO,CACL,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,aACb,CACF,CACF,EACA,YAAa,QACb,UAAW,EACb,EACA,OAAQ,CACN,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,QACN,OAAQ,CACV,EACA,CACE,KAAM,OACN,UAAW,cACb,CACF,CACF,EACA,YAAa,UACb,UAAW,EACb,EACA,SAAU,CACR,KAAM,OACN,YAAa,CACX,KAAM,YACN,MAAO,MACT,EACA,YAAa,QACb,UAAW,CACb,EACA,OAAQ,CACN,KAAM,OACN,YAAa,CACX,KAAM,OACN,SAAU,CACR,CACE,KAAM,KACR,EACA,CACE,KAAM,OACN,UAAW,YACb,CACF,CACF,EACA,YAAa,OACb,UAAW,EACb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",
6
6
  "names": ["import_device_management_kit", "import_purify_ts", "import_HttpCalldataDescriptorDataSource", "config", "datasource", "httpMock", "transactionInfo", "enums", "fieldToken", "fieldTrustedName", "fieldNft", "fieldAmount", "fieldDatetime", "fieldUnit", "fieldDuration", "fieldEnum", "fieldCalldata", "certificateLoaderMock", "createFieldWithoutReference", "binary_path", "type_family", "type", "descriptor", "createCalldata", "calldataTransactionInfo", "calldataEnums", "fields", "endpoint", "result", "calldataDTO", "certificate", "newTransactionInfo", "field", "fieldCalldataMinimal"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=require("purify-ts"),e=require("vitest"),d=require("./HttpDynamicNetworkDataSource");(0,e.describe)("HttpNetworkDataSource",()=>{let r,a;const i={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"}},c=[{id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"}},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"}}}}];(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),a={get:e.vi.fn()},r=new d.HttpDynamicNetworkDataSource(i,a)}),(0,e.describe)("getNetworkConfiguration",()=>{(0,e.it)("should return network configuration successfully",async()=>{a.get.mockResolvedValue(c);const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(a.get).toHaveBeenCalledWith(`${i.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:1}}),(0,e.expect)(t).toEqual((0,n.Right)({id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"},icon:void 0},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"},icon:void 0}}}))}),(0,e.it)("should return error when network data is not found",async()=>{a.get.mockResolvedValue([]);const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should return error when network data is undefined",async()=>{a.get.mockResolvedValue(null);const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should return error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error("Network error"));const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Network error")))}),(0,e.it)("should return generic error when http.get throws non-Error",async()=>{a.get.mockRejectedValue("String error");const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Failed to fetch network configuration")))}),(0,e.it)("should handle invalid data - missing id",async()=>{const t=[{descriptors:{}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - missing descriptors",async()=>{const t=[{id:"ethereum"}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - missing data field",async()=>{const t=[{id:"ethereum",descriptors:{flex:{descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - missing signatures",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1"}}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid signatures - missing prod",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"sig2"}}}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should include icons when available",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}},stax:{data:"0x0102",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig3",test:"sig4"}}},icons:{flex:"icon1",stax:"icon2"}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o.isRight()).toBe(!0);const s=o.unsafeCoerce();(0,e.expect)(s.descriptors.flex.icon).toBe("icon1"),(0,e.expect)(s.descriptors.stax.icon).toBe("icon2")}),(0,e.it)("should transform data correctly for Polygon chain ID",async()=>{a.get.mockResolvedValue(c);const t=await r.getDynamicNetworkConfiguration(137);(0,e.expect)(a.get).toHaveBeenCalledWith(`${i.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:137}}),(0,e.expect)(t.isRight()).toBe(!0);const o=t.unsafeCoerce();(0,e.expect)(Object.keys(o.descriptors)).toEqual(["flex","stax"])}),(0,e.it)("should handle invalid data - null data",async()=>{const t=[null];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should handle invalid data - non-object data",async()=>{const t=["string_instead_of_object"];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - icons as string instead of object",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:"should_be_object_not_string"}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - icons as number instead of object (line 93)",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:123}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - null descriptor (line 103)",async()=>{const t=[{id:"ethereum",descriptors:{flex:null}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - non-object descriptor (line 103)",async()=>{const t=[{id:"ethereum",descriptors:{flex:"should_be_object_not_string"}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))})})});
1
+ "use strict";var n=require("purify-ts"),e=require("vitest"),d=require("./HttpDynamicNetworkDataSource");(0,e.describe)("HttpNetworkDataSource",()=>{let r,a;const i={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"}},c=[{id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"}},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"}}}}];(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),a={get:e.vi.fn()},r=new d.HttpDynamicNetworkDataSource(i,a)}),(0,e.describe)("getNetworkConfiguration",()=>{(0,e.it)("should return network configuration successfully",async()=>{a.get.mockResolvedValue(c);const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(a.get).toHaveBeenCalledWith(`${i.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:1}}),(0,e.expect)(t).toEqual((0,n.Right)({id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"},icon:void 0},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"},icon:void 0}}}))}),(0,e.it)("should return error when network data is not found",async()=>{a.get.mockResolvedValue([]);const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should return error when network data is undefined",async()=>{a.get.mockResolvedValue(null);const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should return error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error("Network error"));const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Network error")))}),(0,e.it)("should return generic error when http.get throws non-Error",async()=>{a.get.mockRejectedValue("String error");const t=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(t).toEqual((0,n.Left)(new Error("Failed to fetch network configuration")))}),(0,e.it)("should handle invalid data - missing id",async()=>{const t=[{descriptors:{}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - missing descriptors",async()=>{const t=[{id:"ethereum"}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - missing data field",async()=>{const t=[{id:"ethereum",descriptors:{flex:{descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - missing signatures",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1"}}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid signatures - missing prod",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"sig2"}}}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should include icons when available",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}},stax:{data:"0x0102",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig3",test:"sig4"}}},icons:{flex:"icon1",stax:"icon2"}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o.isRight()).toBe(!0);const s=o.unsafeCoerce();(0,e.expect)(s.descriptors.flex.icon).toBe("icon1"),(0,e.expect)(s.descriptors.stax.icon).toBe("icon2")}),(0,e.it)("should transform data correctly for Polygon chain ID",async()=>{a.get.mockResolvedValue(c);const t=await r.getDynamicNetworkConfiguration(137);(0,e.expect)(a.get).toHaveBeenCalledWith(`${i.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:137}}),(0,e.expect)(t.isRight()).toBe(!0);const o=t.unsafeCoerce();(0,e.expect)(Object.keys(o.descriptors)).toEqual(["flex","stax"])}),(0,e.it)("should handle invalid data - null data",async()=>{const t=[null];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Network configuration not found for chain ID: 1")))}),(0,e.it)("should handle invalid data - non-object data",async()=>{const t=["string_instead_of_object"];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - icons as string instead of object",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:"should_be_object_not_string"}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid data - icons as number instead of object (line 93)",async()=>{const t=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:123}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - null descriptor (line 103)",async()=>{const t=[{id:"ethereum",descriptors:{flex:null}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))}),(0,e.it)("should handle invalid descriptor - non-object descriptor (line 103)",async()=>{const t=[{id:"ethereum",descriptors:{flex:"should_be_object_not_string"}}];a.get.mockResolvedValue(t);const o=await r.getDynamicNetworkConfiguration(1);(0,e.expect)(o).toEqual((0,n.Left)(new Error("Invalid network configuration response for chain ID: 1")))})})});
2
2
  //# sourceMappingURL=HttpDynamicNetworkDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpDynamicNetworkDataSource } from \"./HttpDynamicNetworkDataSource\";\n\ndescribe(\"HttpNetworkDataSource\", () => {\n let datasource: HttpDynamicNetworkDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const mockConfig: ContextModuleServiceConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const mockNetworkData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n },\n },\n },\n ];\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpDynamicNetworkDataSource(\n mockConfig,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getNetworkConfiguration\", () => {\n it(\"should return network configuration successfully\", async () => {\n httpMock.get.mockResolvedValue(mockNetworkData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${mockConfig.cal.url}/networks`,\n {\n params: {\n output: \"id,descriptors,icons\",\n chain_id: 1,\n },\n },\n );\n\n expect(result).toEqual(\n Right({\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n icon: undefined,\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n icon: undefined,\n },\n },\n }),\n );\n });\n\n it(\"should return error when network data is not found\", async () => {\n httpMock.get.mockResolvedValue([]);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when network data is undefined\", async () => {\n httpMock.get.mockResolvedValue(null);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when http.get throws an error\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(Left(new Error(\"Network error\")));\n });\n\n it(\"should return generic error when http.get throws non-Error\", async () => {\n httpMock.get.mockRejectedValue(\"String error\");\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Failed to fetch network configuration\")),\n );\n });\n\n it(\"should handle invalid data - missing id\", async () => {\n const invalidData = [\n {\n // Missing id\n descriptors: {},\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - missing descriptors\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n // Missing descriptors\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing data field\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n // Missing data\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: { prod: \"sig1\", test: \"sig2\" },\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing signatures\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n // Missing signatures\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid signatures - missing prod\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n // Missing prod\n test: \"sig2\",\n },\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should include icons when available\", async () => {\n const dataWithIcons = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n stax: {\n data: \"0x0102\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig3\",\n test: \"sig4\",\n },\n },\n },\n icons: {\n flex: \"icon1\",\n stax: \"icon2\",\n },\n },\n ];\n httpMock.get.mockResolvedValue(dataWithIcons);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(configuration.descriptors.flex.icon).toBe(\"icon1\");\n expect(configuration.descriptors.stax.icon).toBe(\"icon2\");\n });\n\n it(\"should transform data correctly for Polygon chain ID\", async () => {\n httpMock.get.mockResolvedValue(mockNetworkData);\n\n const result = await datasource.getDynamicNetworkConfiguration(137);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${mockConfig.cal.url}/networks`,\n {\n params: {\n output: \"id,descriptors,icons\",\n chain_id: 137,\n },\n },\n );\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(Object.keys(configuration.descriptors)).toEqual([\"flex\", \"stax\"]);\n });\n\n it(\"should handle invalid data - null data\", async () => {\n const invalidData = [null];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should handle invalid data - non-object data\", async () => {\n const invalidData = [\"string_instead_of_object\"];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as string instead of object\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: \"should_be_object_not_string\",\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as number instead of object (line 93)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: 123,\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - null descriptor (line 103)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: null,\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - non-object descriptor (line 103)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: \"should_be_object_not_string\",\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpDynamicNetworkDataSource } from \"./HttpDynamicNetworkDataSource\";\n\ndescribe(\"HttpNetworkDataSource\", () => {\n let datasource: HttpDynamicNetworkDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const mockConfig: ContextModuleServiceConfig = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const mockNetworkData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n },\n },\n },\n ];\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpDynamicNetworkDataSource(\n mockConfig,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getNetworkConfiguration\", () => {\n it(\"should return network configuration successfully\", async () => {\n httpMock.get.mockResolvedValue(mockNetworkData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${mockConfig.cal.url}/networks`,\n {\n params: {\n output: \"id,descriptors,icons\",\n chain_id: 1,\n },\n },\n );\n\n expect(result).toEqual(\n Right({\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n icon: undefined,\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n icon: undefined,\n },\n },\n }),\n );\n });\n\n it(\"should return error when network data is not found\", async () => {\n httpMock.get.mockResolvedValue([]);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when network data is undefined\", async () => {\n httpMock.get.mockResolvedValue(null);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when http.get throws an error\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(Left(new Error(\"Network error\")));\n });\n\n it(\"should return generic error when http.get throws non-Error\", async () => {\n httpMock.get.mockRejectedValue(\"String error\");\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Failed to fetch network configuration\")),\n );\n });\n\n it(\"should handle invalid data - missing id\", async () => {\n const invalidData = [\n {\n // Missing id\n descriptors: {},\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - missing descriptors\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n // Missing descriptors\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing data field\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n // Missing data\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: { prod: \"sig1\", test: \"sig2\" },\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing signatures\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n // Missing signatures\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid signatures - missing prod\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n // Missing prod\n test: \"sig2\",\n },\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should include icons when available\", async () => {\n const dataWithIcons = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n stax: {\n data: \"0x0102\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig3\",\n test: \"sig4\",\n },\n },\n },\n icons: {\n flex: \"icon1\",\n stax: \"icon2\",\n },\n },\n ];\n httpMock.get.mockResolvedValue(dataWithIcons);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(configuration.descriptors.flex.icon).toBe(\"icon1\");\n expect(configuration.descriptors.stax.icon).toBe(\"icon2\");\n });\n\n it(\"should transform data correctly for Polygon chain ID\", async () => {\n httpMock.get.mockResolvedValue(mockNetworkData);\n\n const result = await datasource.getDynamicNetworkConfiguration(137);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${mockConfig.cal.url}/networks`,\n {\n params: {\n output: \"id,descriptors,icons\",\n chain_id: 137,\n },\n },\n );\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(Object.keys(configuration.descriptors)).toEqual([\"flex\", \"stax\"]);\n });\n\n it(\"should handle invalid data - null data\", async () => {\n const invalidData = [null];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should handle invalid data - non-object data\", async () => {\n const invalidData = [\"string_instead_of_object\"];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as string instead of object\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: \"should_be_object_not_string\",\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as number instead of object (line 93)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: 123,\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - null descriptor (line 103)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: null,\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - non-object descriptor (line 103)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: \"should_be_object_not_string\",\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_purify_ts", "import_vitest", "import_HttpDynamicNetworkDataSource", "datasource", "httpMock", "mockConfig", "mockNetworkData", "result", "invalidData", "dataWithIcons", "configuration"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var i=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),m=require("../../../../modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader"),g=require("../../../../modules/multichain/pki/model/KeyId"),k=require("../../../../modules/multichain/pki/model/KeyUsage"),r=require("../../../../shared/model/ClearSignContext");const N=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("DynamicNetworkContextLoader",()=>{const d={getDynamicNetworkConfiguration:vi.fn()},f={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"}},u={loadCertificate:vi.fn()},y={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},a=new m.DynamicNetworkContextLoader(d,f,u,N),c=e=>({data:"",descriptorType:"",descriptorVersion:"",signatures:{prod:"",test:""},icon:void 0,...e}),l=(e={})=>({[i.DeviceModelId.NANO_S]:c(),[i.DeviceModelId.NANO_SP]:c(),[i.DeviceModelId.NANO_X]:c(),[i.DeviceModelId.STAX]:c(),[i.DeviceModelId.FLEX]:c(),[i.DeviceModelId.APEX]:c(),...e});beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(u,"loadCertificate").mockResolvedValue(y)}),describe("canHandle function",()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX};it("should return true for valid input",()=>{expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_TOKEN])).toBe(!1),expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK])).toBe(!1),expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(o,t)=>{expect(a.canHandle(o,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)}),it.each([[{...e,chainId:void 0},"missing chainId"],[{...e,deviceModelId:void 0},"missing deviceModelId"]])("should return false for %s",(o,t)=>{expect(a.canHandle(o,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)}),it.each([[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"],[{...e,deviceModelId:i.DeviceModelId.NANO_S},"NANO_S deviceModelId"]])("should return false for %s",(o,t)=>{expect(a.canHandle(o,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)})}),describe("load function",()=>{it("should return empty array when network data source returns error",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Left)(new Error("Network error")));const o=await a.load(e);expect(o).toEqual([]),expect(d.getDynamicNetworkConfiguration).toHaveBeenCalledWith(1)}),it("should return empty array when descriptor for device model is not found",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX},t={id:"ethereum",descriptors:l({flex:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0}),stax:void 0})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(t));const n=await a.load(e);expect(n).toEqual([])}),it("should return empty array when signature for mode is not found",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX},o={id:"ethereum",descriptors:l({stax:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"",test:"test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toEqual([])}),it("should return context with network configuration when all data is available",async()=>{const e={chainId:137,deviceModelId:i.DeviceModelId.STAX},o={id:"polygon",descriptors:l({stax:c({data:"0x0101080201015101012308000000000000008952",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toHaveLength(1),expect(t[0]).toMatchObject({type:r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,certificate:y});const n=t[0];n&&"payload"in n&&expect(n.payload).toContain("0x0101080201015101012308000000000000008952"),expect(u.loadCertificate).toHaveBeenCalledWith({keyId:g.KeyId.CalNetwork,keyUsage:k.KeyUsage.Network,targetDevice:i.DeviceModelId.STAX})}),it("should include icon context when icon is available",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX},o={id:"ethereum",descriptors:l({stax:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:"icon-hex-data"})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toHaveLength(2),expect(t[0]).toMatchObject({type:r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,certificate:y});const n=t[0];n&&"payload"in n&&expect(n.payload).toEqual(expect.any(String)),expect(t[1]).toMatchObject({type:r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON});const p=t[1];p&&"payload"in p&&expect(p.payload).toBe("icon-hex-data")}),it("should handle multiple device models correctly",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.FLEX},o={id:"ethereum",descriptors:l({flex:c({data:"0xFLEX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"flex-prod-sig",test:"flex-test-sig"},icon:void 0}),stax:c({data:"0xSTAX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"stax-prod-sig",test:"stax-test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toHaveLength(1);const n=t[0];n&&"payload"in n&&(expect(n.payload).toContain("0xFLEX"),expect(n.payload).toContain("flex-prod-sig"))}),it("should use test mode signature when configured",async()=>{const e=new m.DynamicNetworkContextLoader(d,{...f,cal:{...f.cal,mode:"test"}},u,N),o={chainId:1,deviceModelId:i.DeviceModelId.STAX},t={id:"ethereum",descriptors:l({stax:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(t));const n=await e.load(o);expect(n).toHaveLength(1);const p=n[0];p&&"payload"in p&&expect(p.payload).toContain("test-sig")})})});
1
+ "use strict";var i=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),m=require("../../../../modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader"),g=require("../../../../modules/multichain/pki/model/KeyId"),k=require("../../../../modules/multichain/pki/model/KeyUsage"),r=require("../../../../shared/model/ClearSignContext");const N=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("DynamicNetworkContextLoader",()=>{const d={getDynamicNetworkConfiguration:vi.fn()},f={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"}},u={loadCertificate:vi.fn()},y={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},a=new m.DynamicNetworkContextLoader(d,f,u,N),c=e=>({data:"",descriptorType:"",descriptorVersion:"",signatures:{prod:"",test:""},icon:void 0,...e}),l=(e={})=>({[i.DeviceModelId.NANO_S]:c(),[i.DeviceModelId.NANO_SP]:c(),[i.DeviceModelId.NANO_X]:c(),[i.DeviceModelId.STAX]:c(),[i.DeviceModelId.FLEX]:c(),[i.DeviceModelId.APEX]:c(),...e});beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(u,"loadCertificate").mockResolvedValue(y)}),describe("canHandle function",()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX};it("should return true for valid input",()=>{expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!0)}),it("should return false for invalid expected type",()=>{expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_TOKEN])).toBe(!1),expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK])).toBe(!1),expect(a.canHandle(e,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"]])("should return false for %s",(o,t)=>{expect(a.canHandle(o,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)}),it.each([[{...e,chainId:void 0},"missing chainId"],[{...e,deviceModelId:void 0},"missing deviceModelId"]])("should return false for %s",(o,t)=>{expect(a.canHandle(o,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)}),it.each([[{...e,chainId:"1"},"string chainId"],[{...e,chainId:null},"null chainId"],[{...e,deviceModelId:i.DeviceModelId.NANO_S},"NANO_S deviceModelId"]])("should return false for %s",(o,t)=>{expect(a.canHandle(o,[r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON])).toBe(!1)})}),describe("load function",()=>{it("should return empty array when network data source returns error",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Left)(new Error("Network error")));const o=await a.load(e);expect(o).toEqual([]),expect(d.getDynamicNetworkConfiguration).toHaveBeenCalledWith(1)}),it("should return empty array when descriptor for device model is not found",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX},t={id:"ethereum",descriptors:l({flex:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0}),stax:void 0})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(t));const n=await a.load(e);expect(n).toEqual([])}),it("should return empty array when signature for mode is not found",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX},o={id:"ethereum",descriptors:l({stax:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"",test:"test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toEqual([])}),it("should return context with network configuration when all data is available",async()=>{const e={chainId:137,deviceModelId:i.DeviceModelId.STAX},o={id:"polygon",descriptors:l({stax:c({data:"0x0101080201015101012308000000000000008952",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toHaveLength(1),expect(t[0]).toMatchObject({type:r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,certificate:y});const n=t[0];n&&"payload"in n&&expect(n.payload).toContain("0x0101080201015101012308000000000000008952"),expect(u.loadCertificate).toHaveBeenCalledWith({keyId:g.KeyId.CalNetwork,keyUsage:k.KeyUsage.Network,targetDevice:i.DeviceModelId.STAX})}),it("should include icon context when icon is available",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.STAX},o={id:"ethereum",descriptors:l({stax:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:"icon-hex-data"})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toHaveLength(2),expect(t[0]).toMatchObject({type:r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,certificate:y});const n=t[0];n&&"payload"in n&&expect(n.payload).toEqual(expect.any(String)),expect(t[1]).toMatchObject({type:r.ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON});const p=t[1];p&&"payload"in p&&expect(p.payload).toBe("icon-hex-data")}),it("should handle multiple device models correctly",async()=>{const e={chainId:1,deviceModelId:i.DeviceModelId.FLEX},o={id:"ethereum",descriptors:l({flex:c({data:"0xFLEX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"flex-prod-sig",test:"flex-test-sig"},icon:void 0}),stax:c({data:"0xSTAX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"stax-prod-sig",test:"stax-test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(o));const t=await a.load(e);expect(t).toHaveLength(1);const n=t[0];n&&"payload"in n&&(expect(n.payload).toContain("0xFLEX"),expect(n.payload).toContain("flex-prod-sig"))}),it("should use test mode signature when configured",async()=>{const e=new m.DynamicNetworkContextLoader(d,{...f,cal:{...f.cal,mode:"test"}},u,N),o={chainId:1,deviceModelId:i.DeviceModelId.STAX},t={id:"ethereum",descriptors:l({stax:c({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0})})};vi.spyOn(d,"getDynamicNetworkConfiguration").mockResolvedValue((0,s.Right)(t));const n=await e.load(o);expect(n).toHaveLength(1);const p=n[0];p&&"payload"in p&&expect(p.payload).toContain("test-sig")})})});
2
2
  //# sourceMappingURL=DynamicNetworkContextLoader.test.js.map