@ledgerhq/context-module 2.2.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) 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.test.js +1 -1
  43. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +2 -2
  44. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js.map +1 -1
  45. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  46. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  47. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +1 -1
  48. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +1 -1
  49. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +1 -1
  50. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +2 -2
  51. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +1 -1
  52. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +2 -2
  53. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  54. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  55. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  56. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  57. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +1 -1
  58. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +1 -1
  59. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  60. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  61. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  62. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  63. package/lib/esm/package.json +1 -1
  64. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  65. package/lib/esm/src/ContextModuleBuilder.js.map +2 -2
  66. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  67. package/lib/esm/src/ContextModuleBuilder.test.js.map +2 -2
  68. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  69. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
  70. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  71. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  72. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  73. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  74. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  75. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
  76. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  77. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  78. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
  79. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
  80. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  81. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  82. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  83. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
  84. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +1 -1
  85. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +1 -1
  86. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +1 -1
  87. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +2 -2
  88. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +1 -1
  89. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +2 -2
  90. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +1 -1
  91. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +3 -3
  92. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +1 -1
  93. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +3 -3
  94. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js +1 -1
  95. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +3 -3
  96. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +1 -1
  97. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +3 -3
  98. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +1 -1
  99. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +2 -2
  100. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +1 -1
  101. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +2 -2
  102. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
  103. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
  104. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
  105. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +2 -2
  106. package/lib/esm/src/modules/solana/model/SolanaPayloads.js.map +1 -1
  107. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  108. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  109. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +1 -1
  110. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +1 -1
  111. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +1 -1
  112. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +2 -2
  113. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +1 -1
  114. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +2 -2
  115. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  116. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  117. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  118. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  119. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  120. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  121. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  122. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  123. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  124. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts.map +1 -1
  125. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts +50 -56
  126. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts.map +1 -1
  127. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts +4 -1
  128. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts.map +1 -1
  129. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts +3 -5
  130. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts.map +1 -1
  131. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts +1 -1
  132. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  133. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts +0 -1
  134. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -1
  135. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts +0 -1
  136. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -1
  137. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  138. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/token/data/HttpTokenDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTokenDataSource } from \"@/modules/ethereum/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/modules/ethereum/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/modules/ethereum/token/data/TokenDto\";\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call the expected CAL tokens URL with params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/v1/tokens\",\n {\n params: {\n contract_address: \"0x00\",\n chain_id: 1,\n output: \"descriptor\",\n ref: \"branch:main\",\n },\n },\n );\n });\n\n it(\"should return a string when response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123\",\n );\n });\n\n it(\"should return a string when response is correct with a prefixed ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"tUSDC\",\n descriptor: {\n data: \"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123\",\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(null);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{}]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{ live_signature: \"0x0\", ticker: \"USDC\" }]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when network client throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
- "mappings": "AACA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,oDAIpC,SAAS,sBAAuB,IAAM,CACpC,IAAIC,EACAC,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjB,MAAMC,EAAS,CACb,IAAK,CACH,IAAK,kDACL,KAAM,OACN,OAAQ,MACV,CACF,EACAD,EAAW,CAAE,IAAK,GAAG,GAAG,CAAE,EAC1BD,EAAa,IAAID,EACfG,EACAD,CACF,CACF,CAAC,EAED,GAAG,sDAAuD,SAAY,CAEpEA,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,QAAS,OAAQ,QAAS,CAAE,CAAC,EAGrE,OAAOC,EAAS,GAAG,EAAE,qBACnB,yDACA,CACE,OAAQ,CACN,iBAAkB,OAClB,SAAU,EACV,OAAQ,aACR,IAAK,aACP,CACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAEhE,MAAME,EAAqB,CACzB,OAAQ,OACR,WAAY,CACV,KAAM,mEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,wEACF,CACF,CAAC,EAED,GAAG,yEAA0E,SAAY,CAEvF,MAAMD,EAAqB,CACzB,OAAQ,QACR,WAAY,CACV,KAAM,uEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,4EACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DH,EAAS,IAAI,kBAAkB,IAAI,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DG,EAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,2CAA4C,SAAY,CAEzDG,EAAS,IAAI,kBAAkB,CAAC,CAAE,eAAgB,MAAO,OAAQ,MAAO,CAAC,CAAC,EAG1E,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAE3EG,EAAS,IAAI,kBAAkB,IAAI,KAAO,EAG1C,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,yEACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTokenDataSource } from \"@/modules/ethereum/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/modules/ethereum/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/modules/ethereum/token/data/TokenDto\";\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n const config = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call the expected CAL tokens URL with params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://global.api.prd.ledger.com/cal/v1/tokens\",\n {\n params: {\n contract_address: \"0x00\",\n chain_id: 1,\n output: \"descriptor\",\n ref: \"branch:main\",\n },\n },\n );\n });\n\n it(\"should return a string when response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123\",\n );\n });\n\n it(\"should return a string when response is correct with a prefixed ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"tUSDC\",\n descriptor: {\n data: \"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123\",\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(null);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{}]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{ live_signature: \"0x0\", ticker: \"USDC\" }]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when network client throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "AACA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,oDAIpC,SAAS,sBAAuB,IAAM,CACpC,IAAIC,EACAC,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjB,MAAMC,EAAS,CACb,IAAK,CACH,IAAK,2CACL,KAAM,OACN,OAAQ,MACV,CACF,EACAD,EAAW,CAAE,IAAK,GAAG,GAAG,CAAE,EAC1BD,EAAa,IAAID,EACfG,EACAD,CACF,CACF,CAAC,EAED,GAAG,sDAAuD,SAAY,CAEpEA,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,QAAS,OAAQ,QAAS,CAAE,CAAC,EAGrE,OAAOC,EAAS,GAAG,EAAE,qBACnB,kDACA,CACE,OAAQ,CACN,iBAAkB,OAClB,SAAU,EACV,OAAQ,aACR,IAAK,aACP,CACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAEhE,MAAME,EAAqB,CACzB,OAAQ,OACR,WAAY,CACV,KAAM,mEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,wEACF,CACF,CAAC,EAED,GAAG,yEAA0E,SAAY,CAEvF,MAAMD,EAAqB,CACzB,OAAQ,QACR,WAAY,CACV,KAAM,uEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,4EACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DH,EAAS,IAAI,kBAAkB,IAAI,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DG,EAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,2CAA4C,SAAY,CAEzDG,EAAS,IAAI,kBAAkB,CAAC,CAAE,eAAgB,MAAO,OAAQ,MAAO,CAAC,CAAC,EAG1E,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAE3EG,EAAS,IAAI,kBAAkB,IAAI,KAAO,EAG1C,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,yEACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
6
  "names": ["Left", "HttpTokenDataSource", "datasource", "httpMock", "config", "tokenDTO", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as s,Right as r}from"purify-ts";import{HttpTrustedNameDataSource as d}from"../../../../modules/ethereum/trusted-name/data/HttpTrustedNameDataSource";const n={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"},metadataServiceDomain:{url:"https://nft.api.live.ledger.com"},originToken:"originToken"};describe("HttpTrustedNameDataSource",()=>{let t,a;beforeEach(()=>{vi.clearAllMocks(),a={get:vi.fn()},t=new d(n,a)}),describe("getDomainNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getDomainNamePayload({chainId:137,challenge:"9876",domain:"hello.eth"}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,{params:{types:"eoa",sources:"ens",challenge:"9876"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getDomainNamePayload({chainId:137,challenge:"challenge",domain:"hello.eth"});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})}),describe("getTrustedNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"5678",sources:["ens","crypto_asset_list"],types:["eoa"]}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,{params:{types:"eoa",sources:"ens,crypto_asset_list",challenge:"5678"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return an error when no keys are returned",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}}};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),it("should return a payload with a signature",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload153012345",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})})});
1
+ import{Left as s,Right as r}from"purify-ts";import{HttpTrustedNameDataSource as d}from"../../../../modules/ethereum/trusted-name/data/HttpTrustedNameDataSource";const n={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"},metadataServiceDomain:{url:"https://nft.api.live.ledger.com"},originToken:"originToken"};describe("HttpTrustedNameDataSource",()=>{let t,a;beforeEach(()=>{vi.clearAllMocks(),a={get:vi.fn()},t=new d(n,a)}),describe("getDomainNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getDomainNamePayload({chainId:137,challenge:"9876",domain:"hello.eth"}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,{params:{types:"eoa",sources:"ens",challenge:"9876"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getDomainNamePayload({chainId:137,challenge:"challenge",domain:"hello.eth"});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})}),describe("getTrustedNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"5678",sources:["ens","crypto_asset_list"],types:["eoa"]}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,{params:{types:"eoa",sources:"ens,crypto_asset_list",challenge:"5678"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return an error when no keys are returned",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}}};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),it("should return a payload with a signature",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload153012345",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})})});
2
2
  //# sourceMappingURL=HttpTrustedNameDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource\";\nimport { type TrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/TrustedNameDataSource\";\n\nconst config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger.com\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpTrustedNameDataSource\", () => {\n let datasource: TrustedNameDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTrustedNameDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getDomainNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"9876\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,\n {\n params: { types: \"eoa\", sources: \"ens\", challenge: \"9876\" },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\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\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"challenge\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n });\n\n describe(\"getTrustedNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"5678\",\n sources: [\"ens\", \"crypto_asset_list\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,\n {\n params: {\n types: \"eoa\",\n sources: \"ens,crypto_asset_list\",\n challenge: \"5678\",\n },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\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\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no keys are returned\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n it(\"should return a payload with a signature\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload153012345\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\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\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource\";\nimport { type TrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/TrustedNameDataSource\";\n\nconst config = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger.com\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpTrustedNameDataSource\", () => {\n let datasource: TrustedNameDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTrustedNameDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getDomainNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"9876\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,\n {\n params: { types: \"eoa\", sources: \"ens\", challenge: \"9876\" },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\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\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"challenge\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n });\n\n describe(\"getTrustedNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"5678\",\n sources: [\"ens\", \"crypto_asset_list\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,\n {\n params: {\n types: \"eoa\",\n sources: \"ens,crypto_asset_list\",\n challenge: \"5678\",\n },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\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\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no keys are returned\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n it(\"should return a payload with a signature\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload153012345\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["Left", "Right", "HttpTrustedNameDataSource", "config", "datasource", "httpMock", "result", "responseData"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Right as b}from"purify-ts";import{TypedDataCalldataParamPresence as r}from"../../../../modules/ethereum/model/TypedDataClearSignContext";import{HttpTypedDataDataSource as i}from"../../../../modules/ethereum/typed-data/data/HttpTypedDataDataSource";const f=d=>[{descriptors_eip712:{"0x000000000022d473030f116ddee9f6b43ac78ba3":{"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3":{instructions:d}}}}],s=d=>[{descriptors_eip712:{"0x000000000022d473030f116ddee9f6b43ac78ba3":{"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3":{instructions:d}}}}],n={web3checks:{url:"web3checksUrl"},cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod"},originToken:"originToken"};describe("HttpTypedDataDataSource",()=>{let d,t;const c={PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{type:"address",name:"token"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}],EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]};beforeEach(()=>{vi.clearAllMocks(),t={get:vi.fn()},d=new i(n,t)}),it("should call the network client with the expected URL and params",async()=>{t.get.mockResolvedValue([]),await d.getTypedDataFilters({chainId:1,address:"0x00",version:"v2",schema:{}}),expect(t.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/v1/dapps",expect.objectContaining({params:expect.objectContaining({contracts:"0x00",chain_id:1,output:"descriptors_eip712",descriptors_eip712_version:"v2",descriptors_eip712:"<set>"})}))}),it("should return V2 filters when fetch response is correct",async()=>{const a=f([{display_name:"Permit2",field_mappers_count:4,descriptor:"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432",signatures:{prod:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},type:"message"},{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"},{display_name:"Spender name",format:"trusted-name",field_path:"details.spender",name_types:["contract"],name_sources:["cal","local","ens"],descriptor:"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54"},type:"field"},{display_name:"Amount allowance",format:"amount",field_path:"details.amount",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},type:"field"},{display_name:"Approve to spender",format:"raw",field_path:"spender",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572",signatures:{prod:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},type:"field"},{display_name:"Approval expire",format:"datetime",field_path:"details.expiration",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265",signatures:{prod:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022D473030F116DDEE9F6B43AC78BA3",version:"v2",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token",tokenIndex:0,signature:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},{type:"trusted-name",displayName:"Spender name",path:"details.spender",signature:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54",types:["contract"],sources:["cal","local","ens"],typesAndSourcesPayload:"010203010002"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"}]}))}),it("should return V2 filters with calldatas when fetch response is correct",async()=>{const a=s([{display_name:"Multisig transaction",field_mappers_count:4,descriptor:"b7000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14084d756c7469736967207472616e73616374696f6e",signatures:{prod:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},type:"message"},{display_name:"Operation type",format:"raw",field_path:"operation",descriptor:"48000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146f7065726174696f6e4f7065726174696f6e2074797065",signatures:{prod:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},type:"field"},{display_name:"Transaction",calldata_index:0,value_filter_flag:!0,callee_filter_flag:"present",chain_id_filter_flag:!1,selector_filter_flag:!1,amount_filter_flag:!0,spender_filter_flag:"verifying_contract",descriptor:"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102",signatures:{prod:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},type:"calldata"},{display_name:"Transaction",format:"calldata-value",field_path:"data",calldata_index:0,descriptor:"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100",signatures:{prod:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},type:"field"},{display_name:"Transaction",format:"calldata-callee",field_path:"to",calldata_index:0,descriptor:"4d000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14746f00",signatures:{prod:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8"},type:"field"},{display_name:"Transaction",format:"calldata-amount",field_path:"value",calldata_index:0,descriptor:"6e000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1476616c756500",signatures:{prod:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022D473030F116DDEE9F6B43AC78BA3",version:"v2",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:r.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:r.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-callee",displayName:"Transaction",path:"to",calldataIndex:0,signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8"},{type:"calldata-amount",displayName:"Transaction",path:"value",calldataIndex:0,signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]}))}),it("should return V1 filters when fetch response is correct",async()=>{const a=f([{display_name:"Permit2",field_mappers_count:4,descriptor:"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432",signatures:{prod:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},type:"message"},{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"},{display_name:"Amount allowance",format:"amount",field_path:"details.amount",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},type:"field"},{display_name:"Approve to spender",format:"raw",field_path:"spender",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572",signatures:{prod:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},type:"field"},{display_name:"Approval expire",format:"datetime",field_path:"details.expiration",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265",signatures:{prod:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},calldatasInfos:{},filters:[{type:"raw",displayName:"Amount allowance",path:"details.token",signature:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},{type:"raw",displayName:"Amount allowance",path:"details.amount",signature:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},{type:"raw",displayName:"Approval expire",path:"details.expiration",signature:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"}]}))}),it("should find descriptor when match is not in first element of response.data",async()=>{const a=f([{display_name:"Permit2",field_mappers_count:0,descriptor:"",signatures:{prod:"sig"},type:"message"}]);t.get.mockResolvedValue([{descriptors_eip712:{}},...a]);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022D473030F116DDEE9F6B43AC78BA3",version:"v2",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Permit2",filtersCount:0,signature:"sig"},calldatasInfos:{},filters:[]}))}),it("should return an error when data is empty",async()=>{t.get.mockResolvedValue(null);const a=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(a.isLeft()).toEqual(!0),expect(a.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no typed data filters for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error when schema is not found",async()=>{const a=f([]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error when schema is undefined",async()=>{const a=f(void 0);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if no message info is found",async()=>{const a=f([{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if message info display name is missing",async()=>{const a=f([{field_mappers_count:4,descriptor:"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432",signatures:{prod:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},type:"message"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if field path is invalid",async()=>{const a=f([{display_name:"Amount allowance",format:"token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if field display_name is invalid",async()=>{const a=f([{format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if field signatures.prod is missing",async()=>{const a=f([{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{test:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on token fileds with coin ref to null",async()=>{const a=f([{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:null,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on trusted names without sources and types",async()=>{const a=f([{display_name:"Amount allowance",format:"trusted-name",field_path:"details.token",descriptor:"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on calldata info with flags undefined",async()=>{const a=s([{display_name:"Transaction",calldata_index:0,callee_filter_flag:"present",chain_id_filter_flag:!1,selector_filter_flag:!1,amount_filter_flag:!0,descriptor:"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102",signatures:{prod:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},type:"calldata"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on calldata field with calldata_index undefined",async()=>{const a=s([{display_name:"Transaction",format:"calldata-value",field_path:"data",descriptor:"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100",signatures:{prod:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error when network client throws",async()=>{t.get.mockRejectedValue(new Error("error"));const a=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(a.isLeft()).toEqual(!0)})});export{f as buildDescriptor,s as buildDescriptorCalldata};
1
+ import{Right as b}from"purify-ts";import{TypedDataCalldataParamPresence as s}from"../../../../modules/ethereum/model/TypedDataClearSignContext";import{HttpTypedDataDataSource as i}from"../../../../modules/ethereum/typed-data/data/HttpTypedDataDataSource";const f=d=>[{descriptors_eip712:{"0x000000000022d473030f116ddee9f6b43ac78ba3":{"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3":{instructions:d}}}}],r=d=>[{descriptors_eip712:{"0x000000000022d473030f116ddee9f6b43ac78ba3":{"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3":{instructions:d}}}}],n={web3checks:{url:"web3checksUrl"},cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod"},originToken:"originToken"};describe("HttpTypedDataDataSource",()=>{let d,t;const c={PermitSingle:[{name:"details",type:"PermitDetails"},{name:"spender",type:"address"},{name:"sigDeadline",type:"uint256"}],PermitDetails:[{type:"address",name:"token"},{name:"amount",type:"uint160"},{name:"expiration",type:"uint48"},{name:"nonce",type:"uint48"}],EIP712Domain:[{name:"name",type:"string"},{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]};beforeEach(()=>{vi.clearAllMocks(),t={get:vi.fn()},d=new i(n,t)}),it("should call the network client with the expected URL and params",async()=>{t.get.mockResolvedValue([]),await d.getTypedDataFilters({chainId:1,address:"0x00",version:"v2",schema:{}}),expect(t.get).toHaveBeenCalledWith("https://global.api.prd.ledger.com/cal/v1/dapps",expect.objectContaining({params:expect.objectContaining({contracts:"0x00",chain_id:1,output:"descriptors_eip712",descriptors_eip712_version:"v2",descriptors_eip712:"<set>"})}))}),it("should return V2 filters when fetch response is correct",async()=>{const a=f([{display_name:"Permit2",field_mappers_count:4,descriptor:"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432",signatures:{prod:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},type:"message"},{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"},{display_name:"Spender name",format:"trusted-name",field_path:"details.spender",name_types:["contract"],name_sources:["cal","local","ens"],descriptor:"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54"},type:"field"},{display_name:"Amount allowance",format:"amount",field_path:"details.amount",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},type:"field"},{display_name:"Approve to spender",format:"raw",field_path:"spender",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572",signatures:{prod:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},type:"field"},{display_name:"Approval expire",format:"datetime",field_path:"details.expiration",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265",signatures:{prod:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022D473030F116DDEE9F6B43AC78BA3",version:"v2",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token",tokenIndex:0,signature:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},{type:"trusted-name",displayName:"Spender name",path:"details.spender",signature:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54",types:["contract"],sources:["cal","local","ens"],typesAndSourcesPayload:"010203010002"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"}]}))}),it("should return V2 filters with calldatas when fetch response is correct",async()=>{const a=r([{display_name:"Multisig transaction",field_mappers_count:4,descriptor:"b7000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14084d756c7469736967207472616e73616374696f6e",signatures:{prod:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},type:"message"},{display_name:"Operation type",format:"raw",field_path:"operation",descriptor:"48000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146f7065726174696f6e4f7065726174696f6e2074797065",signatures:{prod:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},type:"field"},{display_name:"Transaction",calldata_index:0,value_filter_flag:!0,callee_filter_flag:"present",chain_id_filter_flag:!1,selector_filter_flag:!1,amount_filter_flag:!0,spender_filter_flag:"verifying_contract",descriptor:"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102",signatures:{prod:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},type:"calldata"},{display_name:"Transaction",format:"calldata-value",field_path:"data",calldata_index:0,descriptor:"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100",signatures:{prod:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},type:"field"},{display_name:"Transaction",format:"calldata-callee",field_path:"to",calldata_index:0,descriptor:"4d000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14746f00",signatures:{prod:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8"},type:"field"},{display_name:"Transaction",format:"calldata-amount",field_path:"value",calldata_index:0,descriptor:"6e000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1476616c756500",signatures:{prod:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022D473030F116DDEE9F6B43AC78BA3",version:"v2",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-callee",displayName:"Transaction",path:"to",calldataIndex:0,signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8"},{type:"calldata-amount",displayName:"Transaction",path:"value",calldataIndex:0,signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]}))}),it("should return V1 filters when fetch response is correct",async()=>{const a=f([{display_name:"Permit2",field_mappers_count:4,descriptor:"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432",signatures:{prod:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},type:"message"},{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"},{display_name:"Amount allowance",format:"amount",field_path:"details.amount",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},type:"field"},{display_name:"Approve to spender",format:"raw",field_path:"spender",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572",signatures:{prod:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},type:"field"},{display_name:"Approval expire",format:"datetime",field_path:"details.expiration",descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265",signatures:{prod:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},calldatasInfos:{},filters:[{type:"raw",displayName:"Amount allowance",path:"details.token",signature:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},{type:"raw",displayName:"Amount allowance",path:"details.amount",signature:"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f"},{type:"raw",displayName:"Approval expire",path:"details.expiration",signature:"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff"}]}))}),it("should find descriptor when match is not in first element of response.data",async()=>{const a=f([{display_name:"Permit2",field_mappers_count:0,descriptor:"",signatures:{prod:"sig"},type:"message"}]);t.get.mockResolvedValue([{descriptors_eip712:{}},...a]);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022D473030F116DDEE9F6B43AC78BA3",version:"v2",schema:c});expect(e).toEqual(b({messageInfo:{displayName:"Permit2",filtersCount:0,signature:"sig"},calldatasInfos:{},filters:[]}))}),it("should return an error when data is empty",async()=>{t.get.mockResolvedValue(null);const a=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(a.isLeft()).toEqual(!0),expect(a.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no typed data filters for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error when schema is not found",async()=>{const a=f([]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error when schema is undefined",async()=>{const a=f(void 0);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if no message info is found",async()=>{const a=f([{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if message info display name is missing",async()=>{const a=f([{field_mappers_count:4,descriptor:"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432",signatures:{prod:"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce"},type:"message"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if field path is invalid",async()=>{const a=f([{display_name:"Amount allowance",format:"token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if field display_name is invalid",async()=>{const a=f([{format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error if field signatures.prod is missing",async()=>{const a=f([{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:0,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{test:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on token fileds with coin ref to null",async()=>{const a=f([{display_name:"Amount allowance",format:"token",field_path:"details.token",coin_ref:null,descriptor:"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on trusted names without sources and types",async()=>{const a=f([{display_name:"Amount allowance",format:"trusted-name",field_path:"details.token",descriptor:"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002",signatures:{prod:"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on calldata info with flags undefined",async()=>{const a=r([{display_name:"Transaction",calldata_index:0,callee_filter_flag:"present",chain_id_filter_flag:!1,selector_filter_flag:!1,amount_filter_flag:!0,descriptor:"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102",signatures:{prod:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},type:"calldata"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error on calldata field with calldata_index undefined",async()=>{const a=r([{display_name:"Transaction",format:"calldata-value",field_path:"data",descriptor:"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100",signatures:{prod:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},type:"field"}]);t.get.mockResolvedValue(a);const e=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v2",schema:c});expect(e.isLeft()).toEqual(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3"))}),it("should return an error when network client throws",async()=>{t.get.mockRejectedValue(new Error("error"));const a=await d.getTypedDataFilters({chainId:1,address:"0x000000000022d473030f116ddee9f6b43ac78ba3",version:"v1",schema:c});expect(a.isLeft()).toEqual(!0)})});export{f as buildDescriptor,r as buildDescriptorCalldata};
2
2
  //# sourceMappingURL=HttpTypedDataDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { TypedDataCalldataParamPresence } from \"@/modules/ethereum/model/TypedDataClearSignContext\";\nimport { HttpTypedDataDataSource } from \"@/modules/ethereum/typed-data/data/HttpTypedDataDataSource\";\nimport { type TypedDataDataSource } from \"@/modules/ethereum/typed-data/data/TypedDataDataSource\";\n\nimport { type FiltersDto, type InstructionField } from \"./FiltersDto\";\n\nexport const buildDescriptor = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nexport const buildDescriptorCalldata = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nconst config = {\n web3checks: {\n url: \"web3checksUrl\",\n },\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\ndescribe(\"HttpTypedDataDataSource\", () => {\n let datasource: TypedDataDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n const TEST_TYPES = {\n PermitSingle: [\n {\n name: \"details\",\n type: \"PermitDetails\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"sigDeadline\",\n type: \"uint256\",\n },\n ],\n PermitDetails: [\n {\n type: \"address\",\n name: \"token\",\n },\n {\n name: \"amount\",\n type: \"uint160\",\n },\n {\n name: \"expiration\",\n type: \"uint48\",\n },\n {\n name: \"nonce\",\n type: \"uint48\",\n },\n ],\n EIP712Domain: [\n {\n name: \"name\",\n type: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTypedDataDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call the network client with the expected URL and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x00\",\n version: \"v2\",\n schema: {},\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/v1/dapps\",\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params: expect.objectContaining({\n contracts: \"0x00\",\n chain_id: 1,\n output: \"descriptors_eip712\",\n descriptors_eip712_version: \"v2\",\n descriptors_eip712: \"<set>\",\n }),\n }),\n );\n });\n\n it(\"should return V2 filters when fetch response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Spender name\",\n format: \"trusted-name\",\n field_path: \"details.spender\",\n name_types: [\"contract\"],\n name_sources: [\"cal\", \"local\", \"ens\"],\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n tokenIndex: 0,\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"trusted-name\",\n displayName: \"Spender name\",\n path: \"details.spender\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n types: [\"contract\"],\n sources: [\"cal\", \"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 0,\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"datetime\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V2 filters with calldatas when fetch response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Multisig transaction\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14084d756c7469736967207472616e73616374696f6e\",\n signatures: {\n prod: \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n type: \"message\",\n },\n {\n display_name: \"Operation type\",\n format: \"raw\",\n field_path: \"operation\",\n descriptor:\n \"48000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146f7065726174696f6e4f7065726174696f6e2074797065\",\n signatures: {\n prod: \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n value_filter_flag: true,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n spender_filter_flag: \"verifying_contract\",\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n calldata_index: 0,\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-callee\",\n field_path: \"to\",\n calldata_index: 0,\n descriptor:\n \"4d000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14746f00\",\n signatures: {\n prod: \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-amount\",\n field_path: \"value\",\n calldata_index: 0,\n descriptor:\n \"6e000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1476616c756500\",\n signatures: {\n prod: \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n type: \"field\",\n },\n ]);\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n calldatasInfos: {\n 0: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n },\n filters: [\n {\n type: \"raw\",\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n {\n type: \"calldata-value\",\n displayName: \"Transaction\",\n path: \"data\",\n calldataIndex: 0,\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n {\n type: \"calldata-callee\",\n displayName: \"Transaction\",\n path: \"to\",\n calldataIndex: 0,\n signature:\n \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n {\n type: \"calldata-amount\",\n displayName: \"Transaction\",\n path: \"value\",\n calldataIndex: 0,\n signature:\n \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V1 filters when fetch response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"raw\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should find descriptor when match is not in first element of response.data\", async () => {\n const match = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 0,\n descriptor: \"\",\n signatures: { prod: \"sig\" },\n type: \"message\",\n },\n ]);\n httpMock.get.mockResolvedValue([{ descriptors_eip712: {} }, ...match]);\n\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 0,\n signature: \"sig\",\n },\n calldatasInfos: {},\n filters: [],\n }),\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(null);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no typed data filters for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is not found\", async () => {\n const filtersDTO = buildDescriptor([]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is undefined\", async () => {\n const filtersDTO = buildDescriptor(\n undefined as unknown as InstructionField[],\n );\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if no message info is found\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if message info display name is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field path is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n // field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field display_name is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field signatures.prod is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n test: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on token fileds with coin ref to null\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: null,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on trusted names without sources and types\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"trusted-name\",\n field_path: \"details.token\",\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata info with flags undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata field with calldata_index undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when network client throws\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n });\n});\n"],
5
- "mappings": "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,YAAa,cACb,KAAM,KACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,kBACN,YAAa,cACb,KAAM,QACN,cAAe,EACf,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,0DAA2D,SAAY,CAExE,MAAMS,EAAaP,EAAgB,CACjC,CACE,aAAc,UACd,oBAAqB,EACrB,WACE,qIACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,SACR,EACA,CACE,aAAc,mBACd,OAAQ,QACR,WAAY,gBACZ,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,EACA,CACE,aAAc,mBACd,OAAQ,SACR,WAAY,iBACZ,SAAU,EACV,WACE,iLACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,qBACd,OAAQ,MACR,WAAY,UACZ,WACE,uKACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,kBACd,OAAQ,WACR,WAAY,qBACZ,WACE,uLACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EACDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,CAAM,EAAE,QACbX,EAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,8IACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,MACN,YAAa,mBACb,KAAM,gBACN,UACE,8IACJ,EACA,CACE,KAAM,MACN,YAAa,mBACb,KAAM,iBACN,UACE,gJACJ,EACA,CACE,KAAM,MACN,YAAa,qBACb,KAAM,UACN,UACE,gJACJ,EACA,CACE,KAAM,MACN,YAAa,kBACb,KAAM,qBACN,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,6EAA8E,SAAY,CAC3F,MAAMY,EAAQT,EAAgB,CAC5B,CACE,aAAc,UACd,oBAAqB,EACrB,WAAY,GACZ,WAAY,CAAE,KAAM,KAAM,EAC1B,KAAM,SACR,CACF,CAAC,EACDK,EAAS,IAAI,kBAAkB,CAAC,CAAE,mBAAoB,CAAC,CAAE,EAAG,GAAGI,CAAK,CAAC,EAErE,MAAMD,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAED,OAAOE,CAAM,EAAE,QACbX,EAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UAAW,KACb,EACA,eAAgB,CAAC,EACjB,QAAS,CAAC,CACZ,CAAC,CACH,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DQ,EAAS,IAAI,kBAAkB,IAAI,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,sMACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAChE,MAAMD,EAAaP,EAAgB,CAAC,CAAC,EAErCK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,gMACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAChE,MAAMD,EAAaP,EACjB,MACF,EAEAK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,gMACF,CACF,CACF,CAAC,EAED,GAAG,qDAAsD,SAAY,CACnE,MAAMD,EAAaP,EAAgB,CACjC,CACE,aAAc,mBACd,OAAQ,QACR,WAAY,gBACZ,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EAEDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,gMACF,CACF,CACF,CAAC,EAED,GAAG,iEAAkE,SAAY,CAC/E,MAAMD,EAAaP,EAAgB,CACjC,CAEE,oBAAqB,EACrB,WACE,qIACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,SACR,CACF,CAAC,EAEDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAChE,MAAMD,EAAaP,EAAgB,CACjC,CACE,aAAc,mBACd,OAAQ,QAER,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EAEDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,0DAA2D,SAAY,CACxE,MAAMD,EAAaP,EAAgB,CACjC,CAEE,OAAQ,QACR,WAAY,gBACZ,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EAEDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAC3E,MAAMD,EAAaP,EAAgB,CACjC,CACE,aAAc,mBACd,OAAQ,QACR,WAAY,gBACZ,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EAEDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,+DAAgE,SAAY,CAC7E,MAAMD,EAAaP,EAAgB,CACjC,CACE,aAAc,mBACd,OAAQ,QACR,WAAY,gBACZ,SAAU,KACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EAEDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,oEAAqE,SAAY,CAClF,MAAMD,EAAaP,EAAgB,CACjC,CACE,aAAc,mBACd,OAAQ,eACR,WAAY,gBACZ,WACE,yJACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EAEDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,+DAAgE,SAAY,CAC7E,MAAMD,EAAaL,EAAwB,CACzC,CACE,aAAc,cACd,eAAgB,EAChB,mBAAoB,UACpB,qBAAsB,GACtB,qBAAsB,GACtB,mBAAoB,GACpB,WACE,mIACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,UACR,CACF,CAAC,EAEDG,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,yEAA0E,SAAY,CACvF,MAAMD,EAAaL,EAAwB,CACzC,CACE,aAAc,cACd,OAAQ,iBACR,WAAY,OACZ,WACE,+HACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EAEDG,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,EACpC,OAAOA,EAAO,QAAQ,CAAC,EAAE,QACvB,IAAI,MACF,yMACF,CACF,CACF,CAAC,EAED,GAAG,oDAAqD,SAAY,CAElEH,EAAS,IAAI,kBAAkB,IAAI,MAAM,OAAO,CAAC,EAGjD,MAAMG,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,EAAO,OAAO,CAAC,EAAE,QAAQ,EAAI,CACtC,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { TypedDataCalldataParamPresence } from \"@/modules/ethereum/model/TypedDataClearSignContext\";\nimport { HttpTypedDataDataSource } from \"@/modules/ethereum/typed-data/data/HttpTypedDataDataSource\";\nimport { type TypedDataDataSource } from \"@/modules/ethereum/typed-data/data/TypedDataDataSource\";\n\nimport { type FiltersDto, type InstructionField } from \"./FiltersDto\";\n\nexport const buildDescriptor = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nexport const buildDescriptorCalldata = (\n instructions: InstructionField[],\n): FiltersDto[] => [\n {\n descriptors_eip712: {\n \"0x000000000022d473030f116ddee9f6b43ac78ba3\": {\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\": {\n instructions,\n },\n },\n },\n },\n];\n\nconst config = {\n web3checks: {\n url: \"web3checksUrl\",\n },\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\ndescribe(\"HttpTypedDataDataSource\", () => {\n let datasource: TypedDataDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n const TEST_TYPES = {\n PermitSingle: [\n {\n name: \"details\",\n type: \"PermitDetails\",\n },\n {\n name: \"spender\",\n type: \"address\",\n },\n {\n name: \"sigDeadline\",\n type: \"uint256\",\n },\n ],\n PermitDetails: [\n {\n type: \"address\",\n name: \"token\",\n },\n {\n name: \"amount\",\n type: \"uint160\",\n },\n {\n name: \"expiration\",\n type: \"uint48\",\n },\n {\n name: \"nonce\",\n type: \"uint48\",\n },\n ],\n EIP712Domain: [\n {\n name: \"name\",\n type: \"string\",\n },\n {\n name: \"chainId\",\n type: \"uint256\",\n },\n {\n name: \"verifyingContract\",\n type: \"address\",\n },\n ],\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTypedDataDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call the network client with the expected URL and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x00\",\n version: \"v2\",\n schema: {},\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://global.api.prd.ledger.com/cal/v1/dapps\",\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params: expect.objectContaining({\n contracts: \"0x00\",\n chain_id: 1,\n output: \"descriptors_eip712\",\n descriptors_eip712_version: \"v2\",\n descriptors_eip712: \"<set>\",\n }),\n }),\n );\n });\n\n it(\"should return V2 filters when fetch response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Spender name\",\n format: \"trusted-name\",\n field_path: \"details.spender\",\n name_types: [\"contract\"],\n name_sources: [\"cal\", \"local\", \"ens\"],\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"token\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n tokenIndex: 0,\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"trusted-name\",\n displayName: \"Spender name\",\n path: \"details.spender\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d54\",\n types: [\"contract\"],\n sources: [\"cal\", \"local\", \"ens\"],\n typesAndSourcesPayload: \"010203010002\",\n },\n {\n type: \"amount\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n tokenIndex: 0,\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"datetime\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V2 filters with calldatas when fetch response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Multisig transaction\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14084d756c7469736967207472616e73616374696f6e\",\n signatures: {\n prod: \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n type: \"message\",\n },\n {\n display_name: \"Operation type\",\n format: \"raw\",\n field_path: \"operation\",\n descriptor:\n \"48000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146f7065726174696f6e4f7065726174696f6e2074797065\",\n signatures: {\n prod: \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n value_filter_flag: true,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n spender_filter_flag: \"verifying_contract\",\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n calldata_index: 0,\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-callee\",\n field_path: \"to\",\n calldata_index: 0,\n descriptor:\n \"4d000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c14746f00\",\n signatures: {\n prod: \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n type: \"field\",\n },\n {\n display_name: \"Transaction\",\n format: \"calldata-amount\",\n field_path: \"value\",\n calldata_index: 0,\n descriptor:\n \"6e000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1476616c756500\",\n signatures: {\n prod: \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n type: \"field\",\n },\n ]);\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Multisig transaction\",\n filtersCount: 4,\n signature:\n \"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4\",\n },\n calldatasInfos: {\n 0: {\n calldataIndex: 0,\n displayName: \"Transaction\",\n valueFlag: true,\n calleeFlag: TypedDataCalldataParamPresence.Present,\n chainIdFlag: false,\n selectorFlag: false,\n amountFlag: true,\n spenderFlag: TypedDataCalldataParamPresence.VerifyingContract,\n signature:\n \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n },\n filters: [\n {\n type: \"raw\",\n displayName: \"Operation type\",\n path: \"operation\",\n signature:\n \"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b\",\n },\n {\n type: \"calldata-value\",\n displayName: \"Transaction\",\n path: \"data\",\n calldataIndex: 0,\n signature:\n \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n {\n type: \"calldata-callee\",\n displayName: \"Transaction\",\n path: \"to\",\n calldataIndex: 0,\n signature:\n \"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8\",\n },\n {\n type: \"calldata-amount\",\n displayName: \"Transaction\",\n path: \"value\",\n calldataIndex: 0,\n signature:\n \"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f\",\n },\n ],\n }),\n );\n });\n\n it(\"should return V1 filters when fetch response is correct\", async () => {\n // GIVEN\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n {\n display_name: \"Amount allowance\",\n format: \"amount\",\n field_path: \"details.amount\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e616d6f756e74416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approve to spender\",\n format: \"raw\",\n field_path: \"spender\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df37370656e646572417070726f766520746f207370656e646572\",\n signatures: {\n prod: \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n type: \"field\",\n },\n {\n display_name: \"Approval expire\",\n format: \"datetime\",\n field_path: \"details.expiration\",\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e65787069726174696f6e417070726f76616c20657870697265\",\n signatures: {\n prod: \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n type: \"field\",\n },\n ]);\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 4,\n signature:\n \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n calldatasInfos: {},\n filters: [\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.token\",\n signature:\n \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n {\n type: \"raw\",\n displayName: \"Amount allowance\",\n path: \"details.amount\",\n signature:\n \"30450221008f9e2f33b35872e63b2024a6d4938525c6e72364604da2d5e21b3d7fa44cac8a02207d4fe42c9d3994a322dae99adc2c56157435c177c51831103fdaf3cef12bb19f\",\n },\n {\n type: \"raw\",\n displayName: \"Approve to spender\",\n path: \"spender\",\n signature:\n \"3045022100dddb92141e3b3f21dafb60c8d5093e28b25a8dc4f926ed501b6d2021203f68bc02201abca405540e72b5b70120a428967b776edb8a88ebd9b1d7aa320c3df602027f\",\n },\n {\n type: \"raw\",\n displayName: \"Approval expire\",\n path: \"details.expiration\",\n signature:\n \"3044022060a11c1b15d07e7172e2e68a4e4aa5cbd3b5af900907634b1bce58000eab9fb502201e40963d9e2b00948ce16d3817756329e11a81e8b14b762adff68db4b3a4b8ff\",\n },\n ],\n }),\n );\n });\n\n it(\"should find descriptor when match is not in first element of response.data\", async () => {\n const match = buildDescriptor([\n {\n display_name: \"Permit2\",\n field_mappers_count: 0,\n descriptor: \"\",\n signatures: { prod: \"sig\" },\n type: \"message\",\n },\n ]);\n httpMock.get.mockResolvedValue([{ descriptors_eip712: {} }, ...match]);\n\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022D473030F116DDEE9F6B43AC78BA3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n expect(result).toEqual(\n Right({\n messageInfo: {\n displayName: \"Permit2\",\n filtersCount: 0,\n signature: \"sig\",\n },\n calldatasInfos: {},\n filters: [],\n }),\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(null);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no typed data filters for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is not found\", async () => {\n const filtersDTO = buildDescriptor([]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when schema is undefined\", async () => {\n const filtersDTO = buildDescriptor(\n undefined as unknown as InstructionField[],\n );\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if no message info is found\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n },\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: no message info for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if message info display name is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Permit2\",\n field_mappers_count: 4,\n descriptor:\n \"b7000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3045065726d697432\",\n signatures: {\n prod: \"304402201675b7d8507b40de5136c386815afdad8012cb8e3f0e0a126c758d6fbb3f6b0f0220595cbfeeab7591d0eebe40f0e4ea8ea53beeaf89ee50b7faf97f97bdf36abbce\",\n },\n type: \"message\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field path is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n // field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field display_name is invalid\", async () => {\n const filtersDTO = buildDescriptor([\n {\n // display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error if field signatures.prod is missing\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: 0,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n test: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on token fileds with coin ref to null\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"token\",\n field_path: \"details.token\",\n coin_ref: null,\n descriptor:\n \"48000000000000a4b1000000000022d473030f116ddee9f6b43ac78ba34d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df364657461696c732e746f6b656e416d6f756e7420616c6c6f77616e6365\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on trusted names without sources and types\", async () => {\n const filtersDTO = buildDescriptor([\n {\n display_name: \"Amount allowance\",\n format: \"trusted-name\",\n field_path: \"details.token\",\n descriptor:\n \"2c000000000000a4b1ff970a61a04b1ca14834a43f5de4533ebddb5cc8d4dd8410bdcf861c48d353f8e3a9b738282a0fd9ba7239f59baa90997370656e6465725370656e64657202010002\",\n signatures: {\n prod: \"30440220238723d4ddd47baf829d547802a2017476bf68e03d0b920fd46aa543de81d5b902206123218eae82c5f898454c45262e5b0b839dc9d84b2b0926fe14e8218b5b0d53\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata info with flags undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n calldata_index: 0,\n callee_filter_flag: \"present\",\n chain_id_filter_flag: false,\n selector_filter_flag: false,\n amount_filter_flag: true,\n descriptor:\n \"37000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c1400010100000102\",\n signatures: {\n prod: \"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e\",\n },\n type: \"calldata\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error on calldata field with calldata_index undefined\", async () => {\n const filtersDTO = buildDescriptorCalldata([\n {\n display_name: \"Transaction\",\n format: \"calldata-value\",\n field_path: \"data\",\n descriptor:\n \"42000000000000000141675c099f32341bf84bfc5382af534df5c7461a76c51ae1c9c8eb1e9fe51d0ed8b1c65c044466a7bcb1c9f7a0f33c146461746100\",\n signatures: {\n prod: \"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a\",\n },\n type: \"field\",\n } as unknown as InstructionField,\n ]);\n // GIVEN\n httpMock.get.mockResolvedValue(filtersDTO);\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v2\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpTypedDataDataSource: invalid typed data field for address 0x000000000022d473030f116ddee9f6b43ac78ba3 on chain 1 for schema 4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3`,\n ),\n );\n });\n\n it(\"should return an error when network client throws\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getTypedDataFilters({\n chainId: 1,\n address: \"0x000000000022d473030f116ddee9f6b43ac78ba3\",\n version: \"v1\",\n schema: TEST_TYPES,\n });\n\n // THEN\n expect(result.isLeft()).toEqual(true);\n });\n});\n"],
5
+ "mappings": "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,YAAa,cACb,KAAM,KACN,cAAe,EACf,UACE,8IACJ,EACA,CACE,KAAM,kBACN,YAAa,cACb,KAAM,QACN,cAAe,EACf,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,0DAA2D,SAAY,CAExE,MAAMS,EAAaP,EAAgB,CACjC,CACE,aAAc,UACd,oBAAqB,EACrB,WACE,qIACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,SACR,EACA,CACE,aAAc,mBACd,OAAQ,QACR,WAAY,gBACZ,SAAU,EACV,WACE,+KACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,EACA,CACE,aAAc,mBACd,OAAQ,SACR,WAAY,iBACZ,SAAU,EACV,WACE,iLACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,qBACd,OAAQ,MACR,WAAY,UACZ,WACE,uKACF,WAAY,CACV,KAAM,gJACR,EACA,KAAM,OACR,EACA,CACE,aAAc,kBACd,OAAQ,WACR,WAAY,qBACZ,WACE,uLACF,WAAY,CACV,KAAM,8IACR,EACA,KAAM,OACR,CACF,CAAC,EACDK,EAAS,IAAI,kBAAkBE,CAAU,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,oBAAoB,CAClD,QAAS,EACT,QAAS,6CACT,QAAS,KACT,OAAQE,CACV,CAAC,EAGD,OAAOE,CAAM,EAAE,QACbX,EAAM,CACJ,YAAa,CACX,YAAa,UACb,aAAc,EACd,UACE,8IACJ,EACA,eAAgB,CAAC,EACjB,QAAS,CACP,CACE,KAAM,MACN,YAAa,mBACb,KAAM,gBACN,UACE,8IACJ,EACA,CACE,KAAM,MACN,YAAa,mBACb,KAAM,iBACN,UACE,gJACJ,EACA,CACE,KAAM,MACN,YAAa,qBACb,KAAM,UACN,UACE,gJACJ,EACA,CACE,KAAM,MACN,YAAa,kBACb,KAAM,qBACN,UACE,8IACJ,CACF,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,6EAA8E,SAAY,CAC3F,MAAMY,EAAQT,EAAgB,CAC5B,CACE,aAAc,UACd,oBAAqB,EACrB,WAAY,GACZ,W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",
6
6
  "names": ["Right", "TypedDataCalldataParamPresence", "HttpTypedDataDataSource", "buildDescriptor", "instructions", "buildDescriptorCalldata", "config", "datasource", "httpMock", "TEST_TYPES", "filtersDTO", "result", "match"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var f=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var c=(n,o,e,i)=>{for(var r=i>1?void 0:i?d(o,e):o,s=n.length-1,t;s>=0;s--)(t=n[s])&&(r=(i?t(o,e,r):t(r))||r);return i&&r&&f(o,e,r),r},u=(n,o)=>(e,i)=>o(e,i,n);import{inject as m,injectable as R}from"inversify";import{Left as a,Right as y}from"purify-ts";import{configTypes as D}from"../../../../config/di/configTypes";import{networkTypes as h}from"../../../../shared/network/di/networkTypes";import{HexStringUtils as C}from"../../../../shared/utils/HexStringUtils";import{signedDescriptorDtoCodec as k}from"../../../../shared/utils/signedDescriptorDto";import{u8Codec as $}from"../../../../shared/utils/uIntCodec";let p=class{constructor(o,e){this.config=o;this.http=e}async getAltResolution({altAddress:o,entryIndex:e,challenge:i}){const r=$.decode(e);if(r.isLeft())return a(new Error(`[ContextModule] HttpAltResolutionDataSource: invalid entryIndex (got ${e}): ${r.leftOrDefault("")}`));let s;try{s=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/alt-resolution/${o}/${e}`,{params:{challenge:i}})}catch(t){const l=t instanceof Error?t.message:String(t);return a(new Error(`[ContextModule] HttpAltResolutionDataSource: Failed to fetch ALT resolution: ${l}`))}return k.decode(s).caseOf({Left:t=>a(new Error(`[ContextModule] HttpAltResolutionDataSource: malformed response for (${o}, ${e}): ${t}`)),Right:t=>{let l;try{l=C.hexToBytes(t.signedDescriptor)}catch(g){return a(new Error(`[ContextModule] HttpAltResolutionDataSource: invalid hex in signedDescriptor for (${o}, ${e}): ${g.message}`))}return y({altAddress:o,entryIndex:e,descriptor:l,keyId:t.keyId,keyUsage:t.keyUsage})}})}};p=c([R(),u(0,m(D.Config)),u(1,m(h.NetworkClient))],p);export{p as HttpAltResolutionDataSource};
1
+ var g=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var c=(n,o,e,i)=>{for(var r=i>1?void 0:i?d(o,e):o,s=n.length-1,t;s>=0;s--)(t=n[s])&&(r=(i?t(o,e,r):t(r))||r);return i&&r&&g(o,e,r),r},p=(n,o)=>(e,i)=>o(e,i,n);import{inject as m,injectable as R}from"inversify";import{Left as a,Right as y}from"purify-ts";import{configTypes as D}from"../../../../config/di/configTypes";import{networkTypes as h}from"../../../../shared/network/di/networkTypes";import{HexStringUtils as C}from"../../../../shared/utils/HexStringUtils";import{signedDescriptorDtoCodec as A}from"../../../../shared/utils/signedDescriptorDto";import{u8Codec as k}from"../../../../shared/utils/uIntCodec";let u=class{constructor(o,e){this.config=o;this.http=e}async getAltResolution({altAddress:o,entryIndex:e,challenge:i}){const r=k.decode(e);if(r.isLeft())return a(new Error(`[ContextModule] HttpAltResolutionDataSource: invalid entryIndex (got ${e}): ${r.leftOrDefault("")}`));let s;try{s=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/alt-resolution/${o}/${e}`,{params:{challenge:i}})}catch(t){const l=t instanceof Error?t.message:String(t);return a(new Error(`[ContextModule] HttpAltResolutionDataSource: Failed to fetch ALT resolution: ${l}`))}return A.decode(s).caseOf({Left:t=>a(new Error(`[ContextModule] HttpAltResolutionDataSource: malformed response for (${o}, ${e}): ${t}`)),Right:t=>{let l;try{l=C.hexToBytes(t.signedDescriptor)}catch(f){return a(new Error(`[ContextModule] HttpAltResolutionDataSource: invalid hex in signedDescriptor for (${o}, ${e}): ${f.message}`))}return y({altAddress:o,entryIndex:e,descriptor:l,keyId:t.keyId,keyUsage:t.keyUsage})}})}};u=c([R(),p(0,m(D.Config)),p(1,m(h.NetworkClient))],u);export{u as HttpAltResolutionDataSource};
2
2
  //# sourceMappingURL=HttpAltResolutionDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.ts"],
4
- "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/shared/network/di/networkTypes\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport { signedDescriptorDtoCodec } from \"@/shared/utils/signedDescriptorDto\";\nimport { u8Codec } from \"@/shared/utils/uIntCodec\";\n\nimport {\n type AltResolutionDataSource,\n type AltResolutionResult,\n type GetAltResolutionParams,\n} from \"./AltResolutionDataSource\";\n\ntype AltResolutionResponseDto = {\n descriptorType?: string;\n descriptorVersion?: string;\n alt_address?: string;\n entry_index?: number;\n resolved_address?: string;\n signedDescriptor: string;\n keyId: string;\n keyUsage: string;\n};\n\n@injectable()\nexport class HttpAltResolutionDataSource implements AltResolutionDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getAltResolution({\n altAddress,\n entryIndex,\n challenge,\n }: GetAltResolutionParams): Promise<Either<Error, AltResolutionResult>> {\n const entryIndexResult = u8Codec.decode(entryIndex);\n if (entryIndexResult.isLeft()) {\n return Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: invalid entryIndex (got ${entryIndex}): ${entryIndexResult.leftOrDefault(\"\")}`,\n ),\n );\n }\n\n let dto: AltResolutionResponseDto;\n try {\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/solana/alt-resolution/${altAddress}/${entryIndex}`,\n { params: { challenge } },\n )) as AltResolutionResponseDto;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: Failed to fetch ALT resolution: ${reason}`,\n ),\n );\n }\n\n return signedDescriptorDtoCodec\n .decode(dto)\n .caseOf<Either<Error, AltResolutionResult>>({\n Left: (error) =>\n Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: malformed response for (${altAddress}, ${entryIndex}): ${error}`,\n ),\n ),\n Right: (validated) => {\n let descriptor: Uint8Array;\n try {\n descriptor = HexStringUtils.hexToBytes(validated.signedDescriptor);\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: invalid hex in signedDescriptor for (${altAddress}, ${entryIndex}): ${(error as Error).message}`,\n ),\n );\n }\n\n return Right({\n altAddress,\n entryIndex,\n descriptor,\n keyId: validated.keyId,\n keyUsage: validated.keyUsage,\n });\n },\n });\n }\n}\n"],
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/shared/network/di/networkTypes\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport { signedDescriptorDtoCodec } from \"@/shared/utils/signedDescriptorDto\";\nimport { u8Codec } from \"@/shared/utils/uIntCodec\";\n\nimport {\n type AltResolutionDataSource,\n type AltResolutionResult,\n type GetAltResolutionParams,\n} from \"./AltResolutionDataSource\";\n\ntype AltResolutionResponseDto = {\n descriptorType?: string;\n descriptorVersion?: number;\n altAddress?: string;\n entryIndex?: number;\n resolvedAddress?: string;\n signedDescriptor: string;\n keyId: string;\n keyUsage: string;\n};\n\n@injectable()\nexport class HttpAltResolutionDataSource implements AltResolutionDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getAltResolution({\n altAddress,\n entryIndex,\n challenge,\n }: GetAltResolutionParams): Promise<Either<Error, AltResolutionResult>> {\n const entryIndexResult = u8Codec.decode(entryIndex);\n if (entryIndexResult.isLeft()) {\n return Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: invalid entryIndex (got ${entryIndex}): ${entryIndexResult.leftOrDefault(\"\")}`,\n ),\n );\n }\n\n let dto: AltResolutionResponseDto;\n try {\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/solana/alt-resolution/${altAddress}/${entryIndex}`,\n { params: { challenge } },\n )) as AltResolutionResponseDto;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: Failed to fetch ALT resolution: ${reason}`,\n ),\n );\n }\n\n return signedDescriptorDtoCodec\n .decode(dto)\n .caseOf<Either<Error, AltResolutionResult>>({\n Left: (error) =>\n Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: malformed response for (${altAddress}, ${entryIndex}): ${error}`,\n ),\n ),\n Right: (validated) => {\n let descriptor: Uint8Array;\n try {\n descriptor = HexStringUtils.hexToBytes(validated.signedDescriptor);\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpAltResolutionDataSource: invalid hex in signedDescriptor for (${altAddress}, ${entryIndex}): ${(error as Error).message}`,\n ),\n );\n }\n\n return Right({\n altAddress,\n entryIndex,\n descriptor,\n keyId: validated.keyId,\n keyUsage: validated.keyUsage,\n });\n },\n });\n }\n}\n"],
5
5
  "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,gBAAAC,MAAoB,mCAC7B,OAAS,kBAAAC,MAAsB,gCAC/B,OAAS,4BAAAC,MAAgC,qCACzC,OAAS,WAAAC,MAAe,2BAoBjB,IAAMC,EAAN,KAAqE,CAC1E,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAa,iBAAiB,CAC5B,WAAAC,EACA,WAAAC,EACA,UAAAC,CACF,EAAwE,CACtE,MAAMC,EAAmBC,EAAQ,OAAOH,CAAU,EAClD,GAAIE,EAAiB,OAAO,EAC1B,OAAOE,EACL,IAAI,MACF,wEAAwEJ,CAAU,MAAME,EAAiB,cAAc,EAAE,CAAC,EAC5H,CACF,EAGF,IAAIG,EACJ,GAAI,CACFA,EAAO,MAAM,KAAK,KAAK,IACrB,GAAG,KAAK,OAAO,sBAAsB,GAAG,6BAA6BN,CAAU,IAAIC,CAAU,GAC7F,CAAE,OAAQ,CAAE,UAAAC,CAAU,CAAE,CAC1B,CACF,OAASK,EAAO,CACd,MAAMC,EAASD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EACpE,OAAOF,EACL,IAAI,MACF,gFAAgFG,CAAM,EACxF,CACF,CACF,CAEA,OAAOC,EACJ,OAAOH,CAAG,EACV,OAA2C,CAC1C,KAAOC,GACLF,EACE,IAAI,MACF,wEAAwEL,CAAU,KAAKC,CAAU,MAAMM,CAAK,EAC9G,CACF,EACF,MAAQG,GAAc,CACpB,IAAIC,EACJ,GAAI,CACFA,EAAaC,EAAe,WAAWF,EAAU,gBAAgB,CACnE,OAASH,EAAO,CACd,OAAOF,EACL,IAAI,MACF,qFAAqFL,CAAU,KAAKC,CAAU,MAAOM,EAAgB,OAAO,EAC9I,CACF,CACF,CAEA,OAAOM,EAAM,CACX,WAAAb,EACA,WAAAC,EACA,WAAAU,EACA,MAAOD,EAAU,MACjB,SAAUA,EAAU,QACtB,CAAC,CACH,CACF,CAAC,CACL,CACF,EApEab,EAANiB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,GAEzBF,EAAA,EAAAC,EAAOE,EAAa,aAAa,IAJzBtB",
6
6
  "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "HexStringUtils", "signedDescriptorDtoCodec", "u8Codec", "HttpAltResolutionDataSource", "config", "http", "altAddress", "entryIndex", "challenge", "entryIndexResult", "u8Codec", "Left", "dto", "error", "reason", "signedDescriptorDtoCodec", "validated", "descriptor", "HexStringUtils", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var V=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var y=(m,t,a,e)=>{for(var n=e>1?void 0:e?A(t,a):t,u=m.length-1,o;u>=0;u--)(o=m[u])&&(n=(e?o(t,a,n):o(n))||n);return e&&n&&V(t,a,n),n},p=(m,t)=>(a,e)=>t(a,e,m);import{inject as g,injectable as M}from"inversify";import{array as L,Codec as x,optional as T,string as f}from"purify-ts";import{configTypes as v}from"../../../../config/di/configTypes";import{pkiTypes as w}from"../../../../modules/multichain/pki/di/pkiTypes";import{KeyId as N}from"../../../../modules/multichain/pki/model/KeyId";import{KeyUsage as P}from"../../../../modules/multichain/pki/model/KeyUsage";import{instructionInfoTypes as k}from"../../../../modules/solana/instruction-info/di/instructionInfoTypes";import{ClearSignContextType as d}from"../../../../shared/model/ClearSignContext";import{loadCertificateResult as O}from"../../../../shared/utils/certificateResult";import{deviceModelIdCodec as U}from"../../../../shared/utils/deviceModelIdCodec";import{u16Codec as _}from"../../../../shared/utils/uIntCodec";const b=[d.SOLANA_ENUM_VARIANT],D="solana-mainnet",$=x.interface({programId:f,enumId:f,variantIndex:_}),K=x.interface({deviceModelId:U,selections:L($),network:T(f)});let I=class{constructor(t,a,e,n){this.dataSource=t;this.config=a;this.certificateLoader=e;this.logger=n("EnumVariantContextLoader")}logger;canHandle(t,a){return b.every(e=>a.includes(e))?K.decode(t).caseOf({Left:()=>!1,Right:({selections:e})=>e.length>0&&e.every(n=>n.programId.length>0&&n.enumId.length>0)}):!1}async load(t){const a=t.network||D,e=Array.from(new Set(t.selections.map(r=>r.programId)));this.logger.debug("[load] Fetching enum variants",{data:{network:a,programCount:e.length,selectionCount:t.selections.length}});const n=O(this.certificateLoader,{keyId:N.TokenMetadataKey,keyUsage:P.CoinMeta,targetDevice:t.deviceModelId}),u=Promise.all(e.map(r=>this.dataSource.getInstructionInfo({programId:r,network:a}))),[o,S]=await Promise.all([n,u]);if(!o.ok||!o.value){const r=o.ok?new Error("[ContextModule] EnumVariantContextLoader: certificate is missing"):o.error;return this.logger.warn("[load] ENUM_VARIANT certificate unavailable",{data:{error:r.message}}),t.selections.map(()=>({type:d.ERROR,error:r}))}const E=o.value,R=new Map(e.map((r,s)=>[r,S[s]])),C=this.config.cal.mode??"prod";return t.selections.map(r=>{const s=R.get(r.programId);if(!s){const i=new Error(`[ContextModule] EnumVariantContextLoader: no CAL response for program ${r.programId}`);return this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,error:i.message}}),{type:d.ERROR,error:i}}return s.caseOf({Left:i=>(this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,error:i.message}}),{type:d.ERROR,error:i}),Right:i=>{const c=this.lookupVariant(i,r);if(!c){const l=new Error(`[ContextModule] EnumVariantContextLoader: CAL has no enum variant for (${r.programId}, ${r.enumId}, ${r.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT not found in CAL response",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex}}),{type:d.ERROR,error:l}}if(!c.descriptor.signature){const l=new Error(`[ContextModule] EnumVariantContextLoader: missing '${C}' signature for (${r.programId}, ${r.enumId}, ${r.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT missing signature",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,mode:C}}),{type:d.ERROR,error:l}}const h={programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,descriptor:c.descriptor};return{type:d.SOLANA_ENUM_VARIANT,payload:h,certificate:E}}})})}lookupVariant(t,a){return t.enumVariants.find(e=>e.enumId===a.enumId&&e.variantIndex===a.variantIndex)}};I=y([M(),p(0,g(k.InstructionInfoDataSource)),p(1,g(v.Config)),p(2,g(w.PkiCertificateLoader)),p(3,g(v.ContextModuleLoggerFactory))],I);export{I as EnumVariantContextLoader};
1
+ var V=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var y=(m,t,a,e)=>{for(var n=e>1?void 0:e?A(t,a):t,u=m.length-1,o;u>=0;u--)(o=m[u])&&(n=(e?o(t,a,n):o(n))||n);return e&&n&&V(t,a,n),n},p=(m,t)=>(a,e)=>t(a,e,m);import{inject as g,injectable as L}from"inversify";import{array as M,Codec as x,optional as T,string as f}from"purify-ts";import{configTypes as v}from"../../../../config/di/configTypes";import{pkiTypes as w}from"../../../../modules/multichain/pki/di/pkiTypes";import{KeyId as N}from"../../../../modules/multichain/pki/model/KeyId";import{KeyUsage as P}from"../../../../modules/multichain/pki/model/KeyUsage";import{instructionInfoTypes as k}from"../../../../modules/solana/instruction-info/di/instructionInfoTypes";import{ClearSignContextType as d}from"../../../../shared/model/ClearSignContext";import{loadCertificateResult as O}from"../../../../shared/utils/certificateResult";import{deviceModelIdCodec as U}from"../../../../shared/utils/deviceModelIdCodec";import{u16Codec as _}from"../../../../shared/utils/uIntCodec";const b=[d.SOLANA_ENUM_VARIANT],D="solana-mainnet",$=x.interface({programId:f,enumId:f,variantIndex:_}),K=x.interface({deviceModelId:U,selections:M($),network:T(f)});let I=class{constructor(t,a,e,n){this.dataSource=t;this.config=a;this.certificateLoader=e;this.logger=n("EnumVariantContextLoader")}logger;canHandle(t,a){return b.every(e=>a.includes(e))?K.decode(t).caseOf({Left:()=>!1,Right:({selections:e})=>e.length>0&&e.every(n=>n.programId.length>0&&n.enumId.length>0)}):!1}async load(t){const a=t.network||D,e=Array.from(new Set(t.selections.map(r=>r.programId)));this.logger.debug("[load] Fetching enum variants",{data:{network:a,programCount:e.length,selectionCount:t.selections.length}});const n=O(this.certificateLoader,{keyId:N.CalCalldataKey,keyUsage:P.Calldata,targetDevice:t.deviceModelId}),u=Promise.all(e.map(r=>this.dataSource.getInstructionInfo({programId:r,network:a}))),[o,S]=await Promise.all([n,u]);if(!o.ok||!o.value){const r=o.ok?new Error("[ContextModule] EnumVariantContextLoader: certificate is missing"):o.error;return this.logger.warn("[load] ENUM_VARIANT certificate unavailable",{data:{error:r.message}}),t.selections.map(()=>({type:d.ERROR,error:r}))}const E=o.value,R=new Map(e.map((r,s)=>[r,S[s]])),C=this.config.cal.mode??"prod";return t.selections.map(r=>{const s=R.get(r.programId);if(!s){const i=new Error(`[ContextModule] EnumVariantContextLoader: no CAL response for program ${r.programId}`);return this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,error:i.message}}),{type:d.ERROR,error:i}}return s.caseOf({Left:i=>(this.logger.warn("[load] ENUM_VARIANT fetch failed",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,error:i.message}}),{type:d.ERROR,error:i}),Right:i=>{const l=this.lookupVariant(i,r);if(!l){const c=new Error(`[ContextModule] EnumVariantContextLoader: CAL has no enum variant for (${r.programId}, ${r.enumId}, ${r.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT not found in CAL response",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex}}),{type:d.ERROR,error:c}}if(!l.descriptor.signature){const c=new Error(`[ContextModule] EnumVariantContextLoader: missing '${C}' signature for (${r.programId}, ${r.enumId}, ${r.variantIndex})`);return this.logger.warn("[load] ENUM_VARIANT missing signature",{data:{programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,mode:C}}),{type:d.ERROR,error:c}}const h={programId:r.programId,enumId:r.enumId,variantIndex:r.variantIndex,descriptor:l.descriptor};return{type:d.SOLANA_ENUM_VARIANT,payload:h,certificate:E}}})})}lookupVariant(t,a){return t.enumVariants.find(e=>e.enumId===a.enumId&&e.variantIndex===a.variantIndex)}};I=y([L(),p(0,g(k.InstructionInfoDataSource)),p(1,g(v.Config)),p(2,g(w.PkiCertificateLoader)),p(3,g(v.ContextModuleLoggerFactory))],I);export{I as EnumVariantContextLoader};
2
2
  //# sourceMappingURL=EnumVariantContextLoader.js.map