@ledgerhq/context-module 1.12.0 → 1.13.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 (162) 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 +3 -3
  4. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
  6. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  7. package/lib/cjs/src/DefaultContextModule.test.js.map +3 -3
  8. package/lib/cjs/src/calldata/domain/CalldataContextLoader.js +1 -1
  9. package/lib/cjs/src/calldata/domain/CalldataContextLoader.js.map +3 -3
  10. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js +1 -1
  11. package/lib/cjs/src/calldata/domain/CalldataContextLoader.test.js.map +3 -3
  12. package/lib/cjs/src/config/model/ContextModuleBuildArgs.js.map +1 -1
  13. package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
  14. package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
  15. package/lib/cjs/src/di.js +1 -1
  16. package/lib/cjs/src/di.js.map +2 -2
  17. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
  18. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
  19. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  20. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +3 -3
  21. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.js +1 -1
  22. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.js.map +3 -3
  23. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  24. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  25. package/lib/cjs/src/nft/domain/NftContextLoader.js +1 -1
  26. package/lib/cjs/src/nft/domain/NftContextLoader.js.map +3 -3
  27. package/lib/cjs/src/nft/domain/NftContextLoader.test.js +1 -1
  28. package/lib/cjs/src/nft/domain/NftContextLoader.test.js.map +3 -3
  29. package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.js.map +1 -1
  30. package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
  31. package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js.map +3 -3
  32. package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
  33. package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
  34. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
  35. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +3 -3
  36. package/lib/cjs/src/token/domain/TokenContextLoader.js +1 -1
  37. package/lib/cjs/src/token/domain/TokenContextLoader.js.map +3 -3
  38. package/lib/cjs/src/token/domain/TokenContextLoader.test.js +1 -1
  39. package/lib/cjs/src/token/domain/TokenContextLoader.test.js.map +3 -3
  40. package/lib/cjs/src/transaction-check/domain/TransactionCheckContextLoader.js +1 -1
  41. package/lib/cjs/src/transaction-check/domain/TransactionCheckContextLoader.js.map +3 -3
  42. package/lib/cjs/src/transaction-check/domain/TransactionCheckContextLoader.test.js +1 -1
  43. package/lib/cjs/src/transaction-check/domain/TransactionCheckContextLoader.test.js.map +3 -3
  44. package/lib/cjs/src/transaction-check/domain/TypedDataCheckContextLoader.js +1 -1
  45. package/lib/cjs/src/transaction-check/domain/TypedDataCheckContextLoader.js.map +3 -3
  46. package/lib/cjs/src/transaction-check/domain/TypedDataCheckContextLoader.test.js +1 -1
  47. package/lib/cjs/src/transaction-check/domain/TypedDataCheckContextLoader.test.js.map +3 -3
  48. package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
  49. package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
  50. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  51. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  52. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  53. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  54. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  55. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  56. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  57. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  58. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.js +1 -1
  59. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.js.map +3 -3
  60. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  61. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js.map +3 -3
  62. package/lib/esm/package.json +1 -1
  63. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  64. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  65. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  66. package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
  67. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  68. package/lib/esm/src/DefaultContextModule.test.js.map +3 -3
  69. package/lib/esm/src/calldata/domain/CalldataContextLoader.js +1 -1
  70. package/lib/esm/src/calldata/domain/CalldataContextLoader.js.map +3 -3
  71. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js +1 -1
  72. package/lib/esm/src/calldata/domain/CalldataContextLoader.test.js.map +3 -3
  73. package/lib/esm/src/di.js +1 -1
  74. package/lib/esm/src/di.js.map +2 -2
  75. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
  76. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
  77. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  78. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +3 -3
  79. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.js +1 -1
  80. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.js.map +3 -3
  81. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  82. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  83. package/lib/esm/src/nft/domain/NftContextLoader.js +1 -1
  84. package/lib/esm/src/nft/domain/NftContextLoader.js.map +3 -3
  85. package/lib/esm/src/nft/domain/NftContextLoader.test.js +1 -1
  86. package/lib/esm/src/nft/domain/NftContextLoader.test.js.map +3 -3
  87. package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.js.map +1 -1
  88. package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
  89. package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js.map +3 -3
  90. package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
  91. package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +3 -3
  92. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
  93. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +3 -3
  94. package/lib/esm/src/token/domain/TokenContextLoader.js +1 -1
  95. package/lib/esm/src/token/domain/TokenContextLoader.js.map +3 -3
  96. package/lib/esm/src/token/domain/TokenContextLoader.test.js +1 -1
  97. package/lib/esm/src/token/domain/TokenContextLoader.test.js.map +3 -3
  98. package/lib/esm/src/transaction-check/domain/TransactionCheckContextLoader.js +1 -1
  99. package/lib/esm/src/transaction-check/domain/TransactionCheckContextLoader.js.map +3 -3
  100. package/lib/esm/src/transaction-check/domain/TransactionCheckContextLoader.test.js +1 -1
  101. package/lib/esm/src/transaction-check/domain/TransactionCheckContextLoader.test.js.map +3 -3
  102. package/lib/esm/src/transaction-check/domain/TypedDataCheckContextLoader.js +1 -1
  103. package/lib/esm/src/transaction-check/domain/TypedDataCheckContextLoader.js.map +3 -3
  104. package/lib/esm/src/transaction-check/domain/TypedDataCheckContextLoader.test.js +1 -1
  105. package/lib/esm/src/transaction-check/domain/TypedDataCheckContextLoader.test.js.map +3 -3
  106. package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
  107. package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
  108. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  109. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  110. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js +1 -1
  111. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.test.js.map +3 -3
  112. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  113. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  114. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  115. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  116. package/lib/esm/src/uniswap/domain/UniswapContextLoader.js +1 -1
  117. package/lib/esm/src/uniswap/domain/UniswapContextLoader.js.map +3 -3
  118. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  119. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js.map +3 -3
  120. package/lib/types/src/ContextModuleBuilder.d.ts +10 -3
  121. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  122. package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts +3 -2
  123. package/lib/types/src/calldata/domain/CalldataContextLoader.d.ts.map +1 -1
  124. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts +1 -1
  125. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts.map +1 -1
  126. package/lib/types/src/config/model/ContextModuleConfig.d.ts +2 -0
  127. package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
  128. package/lib/types/src/di.d.ts.map +1 -1
  129. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts +3 -2
  130. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts.map +1 -1
  131. package/lib/types/src/external-plugin/domain/ExternalPluginContextLoader.d.ts +3 -2
  132. package/lib/types/src/external-plugin/domain/ExternalPluginContextLoader.d.ts.map +1 -1
  133. package/lib/types/src/nft/domain/NftContextLoader.d.ts +3 -2
  134. package/lib/types/src/nft/domain/NftContextLoader.d.ts.map +1 -1
  135. package/lib/types/src/token/domain/TokenContextLoader.d.ts +3 -2
  136. package/lib/types/src/token/domain/TokenContextLoader.d.ts.map +1 -1
  137. package/lib/types/src/transaction-check/domain/TransactionCheckContextLoader.d.ts +3 -2
  138. package/lib/types/src/transaction-check/domain/TransactionCheckContextLoader.d.ts.map +1 -1
  139. package/lib/types/src/transaction-check/domain/TypedDataCheckContextLoader.d.ts +3 -2
  140. package/lib/types/src/transaction-check/domain/TypedDataCheckContextLoader.d.ts.map +1 -1
  141. package/lib/types/src/trusted-name/di/trustedNameModuleFactory.d.ts +2 -1
  142. package/lib/types/src/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -1
  143. package/lib/types/src/trusted-name/domain/TrustedNameContextLoader.d.ts +3 -2
  144. package/lib/types/src/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -1
  145. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts +3 -1
  146. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts.map +1 -1
  147. package/lib/types/src/uniswap/domain/UniswapContextLoader.d.ts +3 -2
  148. package/lib/types/src/uniswap/domain/UniswapContextLoader.d.ts.map +1 -1
  149. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  150. package/package.json +5 -5
  151. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.js +0 -2
  152. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.js.map +0 -7
  153. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.test.js +0 -2
  154. package/lib/cjs/src/shared/utils/NullLoggerPublisherService.test.js.map +0 -7
  155. package/lib/esm/src/shared/utils/NullLoggerPublisherService.js +0 -2
  156. package/lib/esm/src/shared/utils/NullLoggerPublisherService.js.map +0 -7
  157. package/lib/esm/src/shared/utils/NullLoggerPublisherService.test.js +0 -2
  158. package/lib/esm/src/shared/utils/NullLoggerPublisherService.test.js.map +0 -7
  159. package/lib/types/src/shared/utils/NullLoggerPublisherService.d.ts +0 -3
  160. package/lib/types/src/shared/utils/NullLoggerPublisherService.d.ts.map +0 -1
  161. package/lib/types/src/shared/utils/NullLoggerPublisherService.test.d.ts +0 -2
  162. package/lib/types/src/shared/utils/NullLoggerPublisherService.test.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/trusted-name/domain/TrustedNameContextLoader.test.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport {\n type TrustedNameContextInput,\n TrustedNameContextLoader,\n} from \"@/trusted-name/domain/TrustedNameContextLoader\";\n\ndescribe(\"TrustedNameContextLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TrustedNameContextLoader(\n mockTrustedNameDataSource,\n mockCertificateLoader,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, domain: undefined }, \"missing domain\"],\n [{ ...validInput, challenge: undefined }, \"missing challenge\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing device model\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, domain: \"\" }, \"empty domain\"],\n [{ ...validInput, challenge: \"\" }, \"empty challenge\"],\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, domain: 123 }, \"numeric domain\"],\n [{ ...validInput, challenge: 123 }, \"numeric challenge\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return an error when domain > max length\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return an error when domain is not valid\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello\uD83D\uDC4B\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return a payload\", async () => {\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n targetDevice: DeviceModelId.STAX,\n });\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should return an error when unable to fetch the datasource\", async () => {\n // GIVEN\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // WHEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(Left(new Error(\"error\")));\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_ClearSignContext", "import_TrustedNameContextLoader", "mockTrustedNameDataSource", "mockCertificateLoader", "loader", "mockCertificate", "validInput", "input", "_description", "result"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TrustedNameDataSource } from \"@/trusted-name/data/TrustedNameDataSource\";\nimport {\n type TrustedNameContextInput,\n TrustedNameContextLoader,\n} from \"@/trusted-name/domain/TrustedNameContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"TrustedNameContextLoader\", () => {\n const mockTrustedNameDataSource: TrustedNameDataSource = {\n getDomainNamePayload: vi.fn(),\n getTrustedNamePayload: vi.fn(),\n };\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new TrustedNameContextLoader(\n mockTrustedNameDataSource,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3, 4]),\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n });\n\n it.each([\n [null, \"null input\"],\n [undefined, \"undefined input\"],\n [{}, \"empty object\"],\n [\"string\", \"string input\"],\n [123, \"number input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, domain: undefined }, \"missing domain\"],\n [{ ...validInput, challenge: undefined }, \"missing challenge\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing device model\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n\n it.each([\n [{ ...validInput, domain: \"\" }, \"empty domain\"],\n [{ ...validInput, challenge: \"\" }, \"empty challenge\"],\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, domain: 123 }, \"numeric domain\"],\n [{ ...validInput, challenge: 123 }, \"numeric challenge\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(loader.canHandle(input, [ClearSignContextType.TRUSTED_NAME])).toBe(\n false,\n );\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return an error when domain > max length\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"maxlength-maxlength-maxlength-maxlength-maxlength-maxlength\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return an error when domain is not valid\", async () => {\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello\uD83D\uDC4B\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"[ContextModule] TrustedNameLoader: invalid domain\"),\n },\n ]);\n });\n\n it(\"should return a payload\", async () => {\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n const result = await loader.load(input);\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n targetDevice: DeviceModelId.STAX,\n });\n expect(result).toEqual([\n {\n type: ClearSignContextType.TRUSTED_NAME,\n payload: \"payload\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should return an error when unable to fetch the datasource\", async () => {\n // GIVEN\n const input: TrustedNameContextInput = {\n chainId: 1,\n domain: \"hello.eth\",\n challenge: \"challenge\",\n deviceModelId: DeviceModelId.STAX,\n };\n\n // WHEN\n vi.spyOn(\n mockTrustedNameDataSource,\n \"getDomainNamePayload\",\n ).mockResolvedValue(Left(new Error(\"error\")));\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n { type: ClearSignContextType.ERROR, error: new Error(\"error\") },\n ]);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_ClearSignContext", "import_TrustedNameContextLoader", "mockLoggerFactory", "mockTrustedNameDataSource", "mockCertificateLoader", "loader", "mockCertificate", "validInput", "input", "_description", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var x=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var L=(c,e)=>{for(var r in e)x(c,r,{get:e[r],enumerable:!0})},O=(c,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of _(e))!w.call(c,a)&&a!==r&&x(c,a,{get:()=>e[a],enumerable:!(t=C(e,a))||t.enumerable});return c};var b=c=>O(x({},"__esModule",{value:!0}),c),v=(c,e,r,t)=>{for(var a=t>1?void 0:t?C(e,r):e,n=c.length-1,i;n>=0;n--)(i=c[n])&&(a=(t?i(e,r,a):i(a))||a);return t&&a&&x(e,r,a),a},f=(c,e)=>(r,t)=>e(r,t,c);var E={};L(E,{DefaultTypedDataContextLoader:()=>u});module.exports=b(E);var g=require("@ledgerhq/device-management-kit"),y=require("inversify"),I=require("../../pki/di/pkiTypes"),S=require("../../pki/model/KeyId"),D=require("../../pki/model/KeyUsage"),k=require("../../proxy/di/proxyTypes"),P=require("../../shared/model/ClearSignContext"),T=require("../../shared/model/TypedDataClearSignContext"),F=require("../../token/di/tokenTypes"),A=require("../../typed-data/di/typedDataTypes");let u=class{constructor(e,r,t,a){this.dataSource=e;this.tokenDataSource=r;this.proxyDataSource=t;this._certificateLoader=a}async load(e){let r,t=await this.dataSource.getTypedDataFilters({address:e.verifyingContract,chainId:e.chainId,version:e.version,schema:e.schema});if(t.isLeft()){const{resolvedAddress:s,context:p}=await this.resolveProxy(e);if(p!==void 0&&(r=p,t=await this.dataSource.getTypedDataFilters({address:s,chainId:e.chainId,version:e.version,schema:e.schema})),t.isLeft())return{type:"error",error:t.extract()}}const{messageInfo:a,filters:n,calldatasInfos:i}=t.unsafeCoerce(),o=n.reduce((s,p)=>(s[p.path]=p,s),{}),d=await this._certificateLoader.loadCertificate({keyId:S.KeyId.Erc20MetadataKey,keyUsage:D.KeyUsage.CoinMeta,targetDevice:e.deviceModelId});return{type:"success",messageInfo:a,filters:o,trustedNamesAddresses:this.extractTrustedNames(n,e),tokens:await this.extractTokens(n,e),calldatas:this.extractCalldatas(n,i,e),certificate:d,proxy:r}}async resolveProxy(e){const r=await this.proxyDataSource.getProxyImplementationAddress({calldata:"0x",proxyAddress:e.verifyingContract,chainId:e.chainId,challenge:e.challenge??""});if(r.isLeft())return{resolvedAddress:e.verifyingContract,context:void 0};const t=r.unsafeCoerce(),a=await this._certificateLoader.loadCertificate({keyId:t.keyId,keyUsage:t.keyUsage,targetDevice:e.deviceModelId});return{resolvedAddress:t.implementationAddress,context:{type:P.ClearSignContextType.PROXY_INFO,payload:t.signedDescriptor,certificate:a}}}extractTrustedNames(e,r){return e.filter(t=>t.type==="trusted-name").reduce((t,a)=>{const n=r.fieldsValues.filter(i=>i.path===a.path);if(n.length!==0){const i=n[0],o=this.convertAddressToHexaString(i.value);t[a.path]=o}return t},{})}async extractTokens(e,r){const t={};for(const a of e){if(a.type!=="token"&&a.type!=="amount")continue;const n=a.tokenIndex;if(t[n]===void 0){if(a.type==="token"){const i=r.fieldsValues.filter(s=>s.path===a.path);if(i.length===0)continue;const o=i[0],d=this.convertAddressToHexaString(o.value);if(i.every(s=>this.convertAddressToHexaString(s.value)===d)){const s=r.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:d,chainId:s})).ifRight(m=>{t[n]=m})}}else if(a.type==="amount"&&n===T.VERIFYING_CONTRACT_TOKEN_INDEX){const i=r.verifyingContract,o=r.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:i,chainId:o})).ifRight(s=>{t[n]=s})}}}return t}extractCalldatas(e,r,t){const a=e.reduce((i,o)=>{if(o.type==="calldata-value"||o.type==="calldata-callee"||o.type==="calldata-chain-id"||o.type==="calldata-selector"||o.type==="calldata-amount"||o.type==="calldata-spender"){const d=i[o.calldataIndex];d===void 0?i[o.calldataIndex]=[o]:d.push(o)}return i},{}),n={};for(const i in r){const o=r[i],d=a[i];if(!d)continue;const s=this.extractHexaString(d.find(l=>l.type==="calldata-value"),t,"0x"),p=this.extractHexaString(d.find(l=>l.type==="calldata-selector"),t,s.slice(0,10)),m=this.extractAddress(d.find(l=>l.type==="calldata-callee"),t,o.calleeFlag),R=this.extractAddress(d.find(l=>l.type==="calldata-spender"),t,o.spenderFlag),H=this.extractBigint(d.find(l=>l.type==="calldata-amount"),t,void 0),h=this.extractBigint(d.find(l=>l.type==="calldata-chain-id"),t,void 0),N=h!==void 0&&h<Number.MAX_SAFE_INTEGER?Number(h):t.chainId;n[i]={filter:o,subset:{chainId:N,data:s,selector:p,to:m,value:H,from:R}}}return n}extractHexaString(e,r,t){if(e!==void 0){const a=r.fieldsValues.filter(n=>n.path===e.path);if(a.length!==0)return(0,g.bufferToHexaString)(a[0].value)}return t}extractAddress(e,r,t,a){if(t===T.TypedDataCalldataParamPresence.VerifyingContract)return r.verifyingContract;if(e!==void 0){const n=r.fieldsValues.filter(i=>i.path===e.path);if(n.length!==0)return this.convertAddressToHexaString(n[0].value)}return a}extractBigint(e,r,t){if(e!==void 0){const a=r.fieldsValues.filter(n=>n.path===e.path);if(a.length!==0)return BigInt((0,g.bufferToHexaString)(a[0].value))}return t}convertAddressToHexaString(e){return`0x${Array.from(e,r=>r.toString(16).padStart(2,"0")).join("").padStart(40,"0")}`}};u=v([(0,y.injectable)(),f(0,(0,y.inject)(A.typedDataTypes.TypedDataDataSource)),f(1,(0,y.inject)(F.tokenTypes.TokenDataSource)),f(2,(0,y.inject)(k.proxyTypes.ProxyDataSource)),f(3,(0,y.inject)(I.pkiTypes.PkiCertificateLoader))],u);0&&(module.exports={DefaultTypedDataContextLoader});
1
+ "use strict";var T=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var w=(s,e)=>{for(var r in e)T(s,r,{get:e[r],enumerable:!0})},O=(s,e,r,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of b(e))!_.call(s,a)&&a!==r&&T(s,a,{get:()=>e[a],enumerable:!(t=v(e,a))||t.enumerable});return s};var E=s=>O(T({},"__esModule",{value:!0}),s),S=(s,e,r,t)=>{for(var a=t>1?void 0:t?v(e,r):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(a=(t?o(e,r,a):o(a))||a);return t&&a&&T(e,r,a),a},f=(s,e)=>(r,t)=>e(r,t,s);var V={};w(V,{DefaultTypedDataContextLoader:()=>g});module.exports=E(V);var C=require("@ledgerhq/device-management-kit"),y=require("inversify"),D=require("../../config/di/configTypes"),I=require("../../pki/di/pkiTypes"),k=require("../../pki/model/KeyId"),P=require("../../pki/model/KeyUsage"),F=require("../../proxy/di/proxyTypes"),A=require("../../shared/model/ClearSignContext"),h=require("../../shared/model/TypedDataClearSignContext"),R=require("../../token/di/tokenTypes"),L=require("../../typed-data/di/typedDataTypes");let g=class{constructor(e,r,t,a,n){this.dataSource=e;this.tokenDataSource=r;this.proxyDataSource=t;this._certificateLoader=a;this.logger=n("DefaultTypedDataContextLoader")}logger;async load(e){let r,t=await this.dataSource.getTypedDataFilters({address:e.verifyingContract,chainId:e.chainId,version:e.version,schema:e.schema});if(t.isLeft()){const{resolvedAddress:u,context:p}=await this.resolveProxy(e);if(p!==void 0&&(r=p,t=await this.dataSource.getTypedDataFilters({address:u,chainId:e.chainId,version:e.version,schema:e.schema})),t.isLeft()){const x={type:"error",error:t.extract()};return this.logger.debug("load result",{data:{result:x}}),x}}const{messageInfo:a,filters:n,calldatasInfos:o}=t.unsafeCoerce(),i=n.reduce((u,p)=>(u[p.path]=p,u),{}),d=await this._certificateLoader.loadCertificate({keyId:k.KeyId.Erc20MetadataKey,keyUsage:P.KeyUsage.CoinMeta,targetDevice:e.deviceModelId}),l={type:"success",messageInfo:a,filters:i,trustedNamesAddresses:this.extractTrustedNames(n,e),tokens:await this.extractTokens(n,e),calldatas:this.extractCalldatas(n,o,e),certificate:d,proxy:r};return this.logger.debug("load result",{data:{result:l}}),l}async resolveProxy(e){const r=await this.proxyDataSource.getProxyImplementationAddress({calldata:"0x",proxyAddress:e.verifyingContract,chainId:e.chainId,challenge:e.challenge??""});if(r.isLeft())return{resolvedAddress:e.verifyingContract,context:void 0};const t=r.unsafeCoerce(),a=await this._certificateLoader.loadCertificate({keyId:t.keyId,keyUsage:t.keyUsage,targetDevice:e.deviceModelId});return{resolvedAddress:t.implementationAddress,context:{type:A.ClearSignContextType.PROXY_INFO,payload:t.signedDescriptor,certificate:a}}}extractTrustedNames(e,r){return e.filter(t=>t.type==="trusted-name").reduce((t,a)=>{const n=r.fieldsValues.filter(o=>o.path===a.path);if(n.length!==0){const o=n[0],i=this.convertAddressToHexaString(o.value);t[a.path]=i}return t},{})}async extractTokens(e,r){const t={};for(const a of e){if(a.type!=="token"&&a.type!=="amount")continue;const n=a.tokenIndex;if(t[n]===void 0){if(a.type==="token"){const o=r.fieldsValues.filter(l=>l.path===a.path);if(o.length===0)continue;const i=o[0],d=this.convertAddressToHexaString(i.value);if(o.every(l=>this.convertAddressToHexaString(l.value)===d)){const l=r.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:d,chainId:l})).ifRight(p=>{t[n]=p})}}else if(a.type==="amount"&&n===h.VERIFYING_CONTRACT_TOKEN_INDEX){const o=r.verifyingContract,i=r.chainId;(await this.tokenDataSource.getTokenInfosPayload({address:o,chainId:i})).ifRight(l=>{t[n]=l})}}}return t}extractCalldatas(e,r,t){const a=e.reduce((o,i)=>{if(i.type==="calldata-value"||i.type==="calldata-callee"||i.type==="calldata-chain-id"||i.type==="calldata-selector"||i.type==="calldata-amount"||i.type==="calldata-spender"){const d=o[i.calldataIndex];d===void 0?o[i.calldataIndex]=[i]:d.push(i)}return o},{}),n={};for(const o in r){const i=r[o],d=a[o];if(!d)continue;const l=this.extractHexaString(d.find(c=>c.type==="calldata-value"),t,"0x"),u=this.extractHexaString(d.find(c=>c.type==="calldata-selector"),t,l.slice(0,10)),p=this.extractAddress(d.find(c=>c.type==="calldata-callee"),t,i.calleeFlag),x=this.extractAddress(d.find(c=>c.type==="calldata-spender"),t,i.spenderFlag),H=this.extractBigint(d.find(c=>c.type==="calldata-amount"),t,void 0),m=this.extractBigint(d.find(c=>c.type==="calldata-chain-id"),t,void 0),N=m!==void 0&&m<Number.MAX_SAFE_INTEGER?Number(m):t.chainId;n[o]={filter:i,subset:{chainId:N,data:l,selector:u,to:p,value:H,from:x}}}return n}extractHexaString(e,r,t){if(e!==void 0){const a=r.fieldsValues.filter(n=>n.path===e.path);if(a.length!==0)return(0,C.bufferToHexaString)(a[0].value)}return t}extractAddress(e,r,t,a){if(t===h.TypedDataCalldataParamPresence.VerifyingContract)return r.verifyingContract;if(e!==void 0){const n=r.fieldsValues.filter(o=>o.path===e.path);if(n.length!==0)return this.convertAddressToHexaString(n[0].value)}return a}extractBigint(e,r,t){if(e!==void 0){const a=r.fieldsValues.filter(n=>n.path===e.path);if(a.length!==0)return BigInt((0,C.bufferToHexaString)(a[0].value))}return t}convertAddressToHexaString(e){return`0x${Array.from(e,r=>r.toString(16).padStart(2,"0")).join("").padStart(40,"0")}`}};g=S([(0,y.injectable)(),f(0,(0,y.inject)(L.typedDataTypes.TypedDataDataSource)),f(1,(0,y.inject)(R.tokenTypes.TokenDataSource)),f(2,(0,y.inject)(F.proxyTypes.ProxyDataSource)),f(3,(0,y.inject)(I.pkiTypes.PkiCertificateLoader)),f(4,(0,y.inject)(D.configTypes.ContextModuleLoggerFactory))],g);0&&(module.exports={DefaultTypedDataContextLoader});
2
2
  //# sourceMappingURL=DefaultTypedDataContextLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/typed-data/domain/DefaultTypedDataContextLoader.ts"],
4
- "sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\nimport { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type {\n TypedDataCalldataIndex,\n TypedDataCalldataInfo,\n TypedDataClearSignContext,\n TypedDataFilter,\n TypedDataFilterCalldata,\n TypedDataFilterCalldataInfo,\n TypedDataFilterPath,\n TypedDataToken,\n TypedDataTokenIndex,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport {\n TypedDataCalldataParamPresence,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { typedDataTypes } from \"@/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/typed-data/domain/TypedDataContextLoader\";\n\ntype ResolvedProxy = {\n resolvedAddress: string;\n context?: ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>;\n};\n\n@injectable()\nexport class DefaultTypedDataContextLoader implements TypedDataContextLoader {\n constructor(\n @inject(typedDataTypes.TypedDataDataSource)\n private dataSource: TypedDataDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n @inject(proxyTypes.ProxyDataSource)\n private proxyDataSource: ProxyDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n ) {}\n\n async load(typedData: TypedDataContext): Promise<TypedDataClearSignContext> {\n // Get the typed data filters from the data source\n let proxy:\n | ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>\n | undefined = undefined;\n let data = await this.dataSource.getTypedDataFilters({\n address: typedData.verifyingContract,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n\n // If there was an error getting the typed data filters, try to resolve a proxy at that address\n if (data.isLeft()) {\n const { resolvedAddress, context } = await this.resolveProxy(typedData);\n if (context !== undefined) {\n proxy = context;\n data = await this.dataSource.getTypedDataFilters({\n address: resolvedAddress,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n }\n // If there was stil an error, return immediately\n if (data.isLeft()) {\n return {\n type: \"error\",\n error: data.extract(),\n };\n }\n }\n\n // Else, extract the message info and filters\n const { messageInfo, filters, calldatasInfos } = data.unsafeCoerce();\n const mappedFilters = filters.reduce(\n (acc, filter) => {\n acc[filter.path] = filter;\n return acc;\n },\n {} as Record<TypedDataFilterPath, TypedDataFilter>,\n );\n\n // Try to fetch the certificate if available\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.Erc20MetadataKey,\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: typedData.deviceModelId,\n });\n\n return {\n type: \"success\",\n messageInfo,\n filters: mappedFilters,\n trustedNamesAddresses: this.extractTrustedNames(filters, typedData),\n tokens: await this.extractTokens(filters, typedData),\n calldatas: this.extractCalldatas(filters, calldatasInfos, typedData),\n certificate,\n proxy,\n };\n }\n\n private async resolveProxy(\n typedData: TypedDataContext,\n ): Promise<ResolvedProxy> {\n // Try to resolve the proxy\n const proxyDelegateCall =\n await this.proxyDataSource.getProxyImplementationAddress({\n calldata: \"0x\",\n proxyAddress: typedData.verifyingContract,\n chainId: typedData.chainId,\n challenge: typedData.challenge ?? \"\",\n });\n\n // Early return on failure\n if (proxyDelegateCall.isLeft()) {\n return {\n resolvedAddress: typedData.verifyingContract,\n context: undefined,\n };\n }\n\n // Fetch descriptor on success\n const proxyData = proxyDelegateCall.unsafeCoerce();\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: proxyData.keyId,\n keyUsage: proxyData.keyUsage,\n targetDevice: typedData.deviceModelId,\n });\n return {\n resolvedAddress: proxyData.implementationAddress,\n context: {\n type: ClearSignContextType.PROXY_INFO,\n payload: proxyData.signedDescriptor,\n certificate,\n },\n };\n }\n\n private extractTrustedNames(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Record<TypedDataFilterPath, HexaString> {\n return filters\n .filter((filter) => filter.type === \"trusted-name\")\n .reduce(\n (acc, filter) => {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n acc[filter.path] = address;\n }\n return acc;\n },\n {} as Record<TypedDataFilterPath, HexaString>,\n );\n }\n\n private async extractTokens(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Promise<Record<TypedDataTokenIndex, TypedDataToken>> {\n const mappedTokens: Record<TypedDataTokenIndex, TypedDataToken> = {};\n for (const filter of filters) {\n if (filter.type !== \"token\" && filter.type !== \"amount\") {\n continue; // no token reference\n }\n const tokenIndex = filter.tokenIndex;\n if (mappedTokens[tokenIndex] !== undefined) {\n continue; // Already fetched for a previous filter\n }\n\n // If the filter is a token, get token address from typed message values, and fetch descriptor\n if (filter.type === \"token\") {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length === 0) {\n // No value matching the referenced token. It may be located in an empty array.\n continue;\n }\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n\n // Arrays with different tokens are not supported since there is only 1 tokenIndex per filter.\n // Only fetch tokens if all values are the same.\n if (\n values.every(\n (entry) => this.convertAddressToHexaString(entry.value) === address,\n )\n ) {\n // Fetch descriptor\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n\n // If the filter is an amount with a reference to the verifyingContract, fetch verifyingContract descriptor.\n // This is because descriptors data-sources should be compatible with Ledger devices specifications:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n else if (\n filter.type === \"amount\" &&\n tokenIndex === VERIFYING_CONTRACT_TOKEN_INDEX\n ) {\n const address = typedData.verifyingContract;\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n return mappedTokens;\n }\n\n private extractCalldatas(\n filters: TypedDataFilter[],\n calldatasInfos: Record<TypedDataCalldataIndex, TypedDataFilterCalldataInfo>,\n typedData: TypedDataContext,\n ): Record<TypedDataCalldataIndex, TypedDataCalldataInfo> {\n // Map filters per calldataIndex\n const calldataFilters = filters.reduce(\n (acc, filter) => {\n if (\n filter.type === \"calldata-value\" ||\n filter.type === \"calldata-callee\" ||\n filter.type === \"calldata-chain-id\" ||\n filter.type === \"calldata-selector\" ||\n filter.type === \"calldata-amount\" ||\n filter.type === \"calldata-spender\"\n ) {\n const array = acc[filter.calldataIndex];\n if (array === undefined) {\n acc[filter.calldataIndex] = [filter];\n } else {\n array.push(filter);\n }\n }\n return acc;\n },\n {} as Record<TypedDataCalldataIndex, TypedDataFilterCalldata[]>,\n );\n\n // Iterate over calldatas\n const mappedCalldatas: Record<\n TypedDataCalldataIndex,\n TypedDataCalldataInfo\n > = {};\n for (const calldataIndex in calldatasInfos) {\n const infos = calldatasInfos[calldataIndex]!;\n const filters = calldataFilters[calldataIndex];\n if (!filters) {\n continue;\n }\n\n // Get data\n const data = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-value\"),\n typedData,\n \"0x\",\n );\n\n // Get selector\n const selector = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-selector\"),\n typedData,\n data.slice(0, 10),\n );\n\n // Get to\n const to = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-callee\"),\n typedData,\n infos.calleeFlag,\n );\n\n // Get from\n const from = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-spender\"),\n typedData,\n infos.spenderFlag,\n );\n\n // Get amount\n const value = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-amount\"),\n typedData,\n undefined,\n );\n\n // Get chainId\n const chainIdBigint = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-chain-id\"),\n typedData,\n undefined,\n );\n const chainId =\n chainIdBigint !== undefined && chainIdBigint < Number.MAX_SAFE_INTEGER\n ? Number(chainIdBigint)\n : typedData.chainId;\n\n mappedCalldatas[calldataIndex] = {\n filter: infos,\n subset: {\n chainId,\n data,\n selector,\n to,\n value,\n from,\n },\n };\n }\n return mappedCalldatas;\n }\n\n private extractHexaString(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: string,\n ): string {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return bufferToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractAddress(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n presenceFlag: TypedDataCalldataParamPresence,\n defaultValue?: string,\n ): string | undefined {\n if (presenceFlag === TypedDataCalldataParamPresence.VerifyingContract) {\n return typedData.verifyingContract;\n } else if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return this.convertAddressToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractBigint(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: bigint | undefined,\n ): bigint | undefined {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return BigInt(bufferToHexaString(values[0]!.value));\n }\n }\n return defaultValue;\n }\n\n private convertAddressToHexaString(address: Uint8Array): HexaString {\n // Address size is 20 bytes so 40 characters, padded with zeros on the left\n return `0x${Array.from(address, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n )\n .join(\"\")\n .padStart(40, \"0\")}`;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["DefaultTypedDataContextLoader_exports", "__export", "DefaultTypedDataContextLoader", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_proxyTypes", "import_ClearSignContext", "import_TypedDataClearSignContext", "import_tokenTypes", "import_typedDataTypes", "DefaultTypedDataContextLoader", "dataSource", "tokenDataSource", "proxyDataSource", "_certificateLoader", "typedData", "proxy", "data", "resolvedAddress", "context", "messageInfo", "filters", "calldatasInfos", "mappedFilters", "acc", "filter", "certificate", "proxyDelegateCall", "proxyData", "values", "entry", "value", "address", "mappedTokens", "tokenIndex", "chainId", "p", "calldataFilters", "array", "mappedCalldatas", "calldataIndex", "infos", "selector", "to", "from", "chainIdBigint", "defaultValue", "presenceFlag", "byte", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\nimport {\n bufferToHexaString,\n LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport type { ProxyDataSource } from \"@/proxy/data/ProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport type {\n TypedDataCalldataIndex,\n TypedDataCalldataInfo,\n TypedDataClearSignContext,\n TypedDataFilter,\n TypedDataFilterCalldata,\n TypedDataFilterCalldataInfo,\n TypedDataFilterPath,\n TypedDataToken,\n TypedDataTokenIndex,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport {\n TypedDataCalldataParamPresence,\n VERIFYING_CONTRACT_TOKEN_INDEX,\n} from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport type { TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/token/di/tokenTypes\";\nimport type { TypedDataDataSource } from \"@/typed-data/data/TypedDataDataSource\";\nimport { typedDataTypes } from \"@/typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"@/typed-data/domain/TypedDataContextLoader\";\n\ntype ResolvedProxy = {\n resolvedAddress: string;\n context?: ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>;\n};\n\n@injectable()\nexport class DefaultTypedDataContextLoader implements TypedDataContextLoader {\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(typedDataTypes.TypedDataDataSource)\n private dataSource: TypedDataDataSource,\n @inject(tokenTypes.TokenDataSource)\n private tokenDataSource: TokenDataSource,\n @inject(proxyTypes.ProxyDataSource)\n private proxyDataSource: ProxyDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private _certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"DefaultTypedDataContextLoader\");\n }\n\n async load(typedData: TypedDataContext): Promise<TypedDataClearSignContext> {\n // Get the typed data filters from the data source\n let proxy:\n | ClearSignContextSuccess<ClearSignContextType.PROXY_INFO>\n | undefined = undefined;\n let data = await this.dataSource.getTypedDataFilters({\n address: typedData.verifyingContract,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n\n // If there was an error getting the typed data filters, try to resolve a proxy at that address\n if (data.isLeft()) {\n const { resolvedAddress, context } = await this.resolveProxy(typedData);\n if (context !== undefined) {\n proxy = context;\n data = await this.dataSource.getTypedDataFilters({\n address: resolvedAddress,\n chainId: typedData.chainId,\n version: typedData.version,\n schema: typedData.schema,\n });\n }\n // If there was still an error, return immediately\n if (data.isLeft()) {\n const result: TypedDataClearSignContext = {\n type: \"error\",\n error: data.extract(),\n };\n this.logger.debug(\"load result\", { data: { result } });\n return result;\n }\n }\n\n // Else, extract the message info and filters\n const { messageInfo, filters, calldatasInfos } = data.unsafeCoerce();\n const mappedFilters = filters.reduce(\n (acc, filter) => {\n acc[filter.path] = filter;\n return acc;\n },\n {} as Record<TypedDataFilterPath, TypedDataFilter>,\n );\n\n // Try to fetch the certificate if available\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.Erc20MetadataKey,\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: typedData.deviceModelId,\n });\n\n const result: TypedDataClearSignContext = {\n type: \"success\",\n messageInfo,\n filters: mappedFilters,\n trustedNamesAddresses: this.extractTrustedNames(filters, typedData),\n tokens: await this.extractTokens(filters, typedData),\n calldatas: this.extractCalldatas(filters, calldatasInfos, typedData),\n certificate,\n proxy,\n };\n\n this.logger.debug(\"load result\", { data: { result } });\n return result;\n }\n\n private async resolveProxy(\n typedData: TypedDataContext,\n ): Promise<ResolvedProxy> {\n // Try to resolve the proxy\n const proxyDelegateCall =\n await this.proxyDataSource.getProxyImplementationAddress({\n calldata: \"0x\",\n proxyAddress: typedData.verifyingContract,\n chainId: typedData.chainId,\n challenge: typedData.challenge ?? \"\",\n });\n\n // Early return on failure\n if (proxyDelegateCall.isLeft()) {\n return {\n resolvedAddress: typedData.verifyingContract,\n context: undefined,\n };\n }\n\n // Fetch descriptor on success\n const proxyData = proxyDelegateCall.unsafeCoerce();\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: proxyData.keyId,\n keyUsage: proxyData.keyUsage,\n targetDevice: typedData.deviceModelId,\n });\n return {\n resolvedAddress: proxyData.implementationAddress,\n context: {\n type: ClearSignContextType.PROXY_INFO,\n payload: proxyData.signedDescriptor,\n certificate,\n },\n };\n }\n\n private extractTrustedNames(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Record<TypedDataFilterPath, HexaString> {\n return filters\n .filter((filter) => filter.type === \"trusted-name\")\n .reduce(\n (acc, filter) => {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n acc[filter.path] = address;\n }\n return acc;\n },\n {} as Record<TypedDataFilterPath, HexaString>,\n );\n }\n\n private async extractTokens(\n filters: TypedDataFilter[],\n typedData: TypedDataContext,\n ): Promise<Record<TypedDataTokenIndex, TypedDataToken>> {\n const mappedTokens: Record<TypedDataTokenIndex, TypedDataToken> = {};\n for (const filter of filters) {\n if (filter.type !== \"token\" && filter.type !== \"amount\") {\n continue; // no token reference\n }\n const tokenIndex = filter.tokenIndex;\n if (mappedTokens[tokenIndex] !== undefined) {\n continue; // Already fetched for a previous filter\n }\n\n // If the filter is a token, get token address from typed message values, and fetch descriptor\n if (filter.type === \"token\") {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length === 0) {\n // No value matching the referenced token. It may be located in an empty array.\n continue;\n }\n const value = values[0]!;\n const address = this.convertAddressToHexaString(value.value);\n\n // Arrays with different tokens are not supported since there is only 1 tokenIndex per filter.\n // Only fetch tokens if all values are the same.\n if (\n values.every(\n (entry) => this.convertAddressToHexaString(entry.value) === address,\n )\n ) {\n // Fetch descriptor\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n\n // If the filter is an amount with a reference to the verifyingContract, fetch verifyingContract descriptor.\n // This is because descriptors data-sources should be compatible with Ledger devices specifications:\n // https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#amount-join-value\n else if (\n filter.type === \"amount\" &&\n tokenIndex === VERIFYING_CONTRACT_TOKEN_INDEX\n ) {\n const address = typedData.verifyingContract;\n const chainId = typedData.chainId;\n const payload = await this.tokenDataSource.getTokenInfosPayload({\n address,\n chainId,\n });\n payload.ifRight((p) => {\n mappedTokens[tokenIndex] = p;\n });\n }\n }\n return mappedTokens;\n }\n\n private extractCalldatas(\n filters: TypedDataFilter[],\n calldatasInfos: Record<TypedDataCalldataIndex, TypedDataFilterCalldataInfo>,\n typedData: TypedDataContext,\n ): Record<TypedDataCalldataIndex, TypedDataCalldataInfo> {\n // Map filters per calldataIndex\n const calldataFilters = filters.reduce(\n (acc, filter) => {\n if (\n filter.type === \"calldata-value\" ||\n filter.type === \"calldata-callee\" ||\n filter.type === \"calldata-chain-id\" ||\n filter.type === \"calldata-selector\" ||\n filter.type === \"calldata-amount\" ||\n filter.type === \"calldata-spender\"\n ) {\n const array = acc[filter.calldataIndex];\n if (array === undefined) {\n acc[filter.calldataIndex] = [filter];\n } else {\n array.push(filter);\n }\n }\n return acc;\n },\n {} as Record<TypedDataCalldataIndex, TypedDataFilterCalldata[]>,\n );\n\n // Iterate over calldatas\n const mappedCalldatas: Record<\n TypedDataCalldataIndex,\n TypedDataCalldataInfo\n > = {};\n for (const calldataIndex in calldatasInfos) {\n const infos = calldatasInfos[calldataIndex]!;\n const filters = calldataFilters[calldataIndex];\n if (!filters) {\n continue;\n }\n\n // Get data\n const data = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-value\"),\n typedData,\n \"0x\",\n );\n\n // Get selector\n const selector = this.extractHexaString(\n filters.find((filter) => filter.type === \"calldata-selector\"),\n typedData,\n data.slice(0, 10),\n );\n\n // Get to\n const to = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-callee\"),\n typedData,\n infos.calleeFlag,\n );\n\n // Get from\n const from = this.extractAddress(\n filters.find((filter) => filter.type === \"calldata-spender\"),\n typedData,\n infos.spenderFlag,\n );\n\n // Get amount\n const value = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-amount\"),\n typedData,\n undefined,\n );\n\n // Get chainId\n const chainIdBigint = this.extractBigint(\n filters.find((filter) => filter.type === \"calldata-chain-id\"),\n typedData,\n undefined,\n );\n const chainId =\n chainIdBigint !== undefined && chainIdBigint < Number.MAX_SAFE_INTEGER\n ? Number(chainIdBigint)\n : typedData.chainId;\n\n mappedCalldatas[calldataIndex] = {\n filter: infos,\n subset: {\n chainId,\n data,\n selector,\n to,\n value,\n from,\n },\n };\n }\n return mappedCalldatas;\n }\n\n private extractHexaString(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: string,\n ): string {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return bufferToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractAddress(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n presenceFlag: TypedDataCalldataParamPresence,\n defaultValue?: string,\n ): string | undefined {\n if (presenceFlag === TypedDataCalldataParamPresence.VerifyingContract) {\n return typedData.verifyingContract;\n } else if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return this.convertAddressToHexaString(values[0]!.value);\n }\n }\n return defaultValue;\n }\n\n private extractBigint(\n filter: TypedDataFilter | undefined,\n typedData: TypedDataContext,\n defaultValue: bigint | undefined,\n ): bigint | undefined {\n if (filter !== undefined) {\n const values = typedData.fieldsValues.filter(\n (entry) => entry.path === filter.path,\n );\n if (values.length !== 0) {\n return BigInt(bufferToHexaString(values[0]!.value));\n }\n }\n return defaultValue;\n }\n\n private convertAddressToHexaString(address: Uint8Array): HexaString {\n // Address size is 20 bytes so 40 characters, padded with zeros on the left\n return `0x${Array.from(address, (byte) =>\n byte.toString(16).padStart(2, \"0\"),\n )\n .join(\"\")\n .padStart(40, \"0\")}`;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["DefaultTypedDataContextLoader_exports", "__export", "DefaultTypedDataContextLoader", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_configTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_proxyTypes", "import_ClearSignContext", "import_TypedDataClearSignContext", "import_tokenTypes", "import_typedDataTypes", "DefaultTypedDataContextLoader", "dataSource", "tokenDataSource", "proxyDataSource", "_certificateLoader", "loggerFactory", "typedData", "proxy", "data", "resolvedAddress", "context", "result", "messageInfo", "filters", "calldatasInfos", "mappedFilters", "acc", "filter", "certificate", "proxyDelegateCall", "proxyData", "values", "entry", "value", "address", "mappedTokens", "tokenIndex", "chainId", "p", "calldataFilters", "array", "mappedCalldatas", "calldataIndex", "infos", "selector", "to", "from", "chainIdBigint", "defaultValue", "presenceFlag", "byte", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),i=require("../../shared/model/ClearSignContext"),s=require("../../shared/model/TypedDataClearSignContext"),x=require("../../typed-data/domain/DefaultTypedDataContextLoader");describe("TypedDataContextLoader",()=>{const o=vi.fn(),r=vi.fn(),t=vi.fn(),l={getTokenInfosPayload:vi.fn()},m={getTypedDataFilters:t},y={getProxyImplementationAddress:o},g={loadCertificate:r},f=new x.DefaultTypedDataContextLoader(m,l,y,g),n={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"}]},b=[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"details.amount",value:Uint8Array.from([18])},{path:"spender",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([18])}],p={SafeTx:[{name:"to",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"},{name:"selector",type:"bytes"},{name:"chainId",type:"uint256"},{name:"operation",type:"uint8"}],EIP712Domain:[{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},u=[{path:"to",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"spender",value:Uint8Array.from([140,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"value",value:Uint8Array.from([14,235,224,180,14,128,0])},{path:"data",value:Uint8Array.from([106,118,18,2,0,0,0,0,0,0,0,0,0,0,0,0,35,248,171,252,40,36,195,151,204,179,218,137,174,119,41,132,16,125,219,153])},{path:"selector",value:Uint8Array.from([119,136,153,170])},{path:"chainId",value:Uint8Array.from([18,52])},{path:"operation",value:Uint8Array.from([1])}];beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(l,"getTokenInfosPayload").mockImplementation(({address:a})=>Promise.resolve((0,d.Right)(`payload-${a}`))),o.mockResolvedValue((0,d.Left)(new Error("No proxy")))}),describe("load function",()=>{it("success with referenced token",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"}]})));const e=await f.load(a);expect(t).toHaveBeenCalledWith(expect.objectContaining({address:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:0,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}})}),it("success with referenced token verifying contract",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with calldata",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:u,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.Present,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"},{type:"calldata-chain-id",displayName:"Transaction",path:"chainId",calldataIndex:0,signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:0,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-spender",displayName:"Transaction",path:"spender",calldataIndex:0,signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"},to:{displayName:"Transaction",path:"to",signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8",calldataIndex:0,type:"calldata-callee"},value:{displayName:"Transaction",path:"value",signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-amount"},chainId:{displayName:"Transaction",path:"chainId",signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-chain-id"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-selector"},spender:{displayName:"Transaction",path:"spender",signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-spender"}}})}),it("success with several calldatas",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:u,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},1:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:1,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x6a761202",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}},1:{filter:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x778899aa",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:1,type:"calldata-selector"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"}}})}),it("success with proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};o.mockResolvedValueOnce((0,d.Right)({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0",keyId:"testKeyId",KeyUsage:"testKeyUsage"})),r.mockResolvedValue(void 0),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(t).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:i.ClearSignContextType.PROXY_INFO,payload:"0x123456789abcdef0",certificate:void 0},filters:{}})}),it("success with proxy and certificate",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};o.mockResolvedValueOnce((0,d.Right)({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0",keyId:"testKeyId",KeyUsage:"testKeyUsage"})),r.mockResolvedValueOnce({keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}).mockResolvedValueOnce({keyUsageNumber:2,payload:new Uint8Array([1,2,3,4])}),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(t).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:i.ClearSignContextType.PROXY_INFO,payload:"0x123456789abcdef0",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}},certificate:{keyUsageNumber:2,payload:new Uint8Array([1,2,3,4])},filters:{}})}),it("should return an error if filters are unavailable",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error"))));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(1),expect(e).toEqual({type:"error",error:new Error("error")})}),it("should return an error if filters are unavailable in the proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};o.mockResolvedValueOnce((0,d.Right)({delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"})),r.mockResolvedValue(void 0),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error"))));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(e).toEqual({type:"error",error:new Error("error")})}),it("success with a trusted name",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"trusted-name",displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{"details.token.[]":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}}})}),it("success with unavailable tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(l,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,d.Left)(new Error("token error"))));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with several identic tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},...b],deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(l,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,d.Left)(new Error("token error"))));const e=await f.load(a);expect(l.getTokenInfosPayload).toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("success with several different tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,255])},...b],deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await f.load(a);expect(l.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff",chainId:1}),expect(l.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("should ignore the token if value is not found",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.badtoken",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await f.load(a);expect(e.type).toEqual("success"),e.type==="success"&&(expect(e.filters["details.badtoken"]?.displayName).toEqual("Amount allowance"),expect(e.tokens).toEqual({}))})})});
1
+ "use strict";var c=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),i=require("../../shared/model/ClearSignContext"),s=require("../../shared/model/TypedDataClearSignContext"),x=require("../../typed-data/domain/DefaultTypedDataContextLoader");const v=()=>({debug:vi.fn(),info:vi.fn(),warn:vi.fn(),error:vi.fn(),subscribers:[]});describe("TypedDataContextLoader",()=>{const l=vi.fn(),r=vi.fn(),t=vi.fn(),o={getTokenInfosPayload:vi.fn()},m={getTypedDataFilters:t},y={getProxyImplementationAddress:l},g={loadCertificate:r},f=new x.DefaultTypedDataContextLoader(m,o,y,g,v),n={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"}]},b=[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"details.amount",value:Uint8Array.from([18])},{path:"spender",value:Uint8Array.from([18])},{path:"details.expiration",value:Uint8Array.from([18])}],p={SafeTx:[{name:"to",type:"address"},{name:"spender",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"},{name:"selector",type:"bytes"},{name:"chainId",type:"uint256"},{name:"operation",type:"uint8"}],EIP712Domain:[{name:"chainId",type:"uint256"},{name:"verifyingContract",type:"address"}]},u=[{path:"to",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"spender",value:Uint8Array.from([140,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},{path:"value",value:Uint8Array.from([14,235,224,180,14,128,0])},{path:"data",value:Uint8Array.from([106,118,18,2,0,0,0,0,0,0,0,0,0,0,0,0,35,248,171,252,40,36,195,151,204,179,218,137,174,119,41,132,16,125,219,153])},{path:"selector",value:Uint8Array.from([119,136,153,170])},{path:"chainId",value:Uint8Array.from([18,52])},{path:"operation",value:Uint8Array.from([1])}];beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(({address:a})=>Promise.resolve((0,d.Right)(`payload-${a}`))),l.mockResolvedValue((0,d.Left)(new Error("No proxy")))}),describe("load function",()=>{it("success with referenced token",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:0,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"},{type:"raw",displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb"},{type:"datetime",displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b"}]})));const e=await f.load(a);expect(t).toHaveBeenCalledWith(expect.objectContaining({address:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:4,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:0,type:"amount"},"details.expiration":{displayName:"Approval expire",path:"details.expiration",signature:"3044022056b3381e4540629ad73bc434ec49d80523234b82f62340fbb77157fb0eb21a680220459fe9cf6ca309f9c7dfc6d4711fea1848dba661563c57f77b3c2dc480b3a63b",type:"datetime"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"},spender:{displayName:"Approve to spender",path:"spender",signature:"3044022033e5713d9cb9bc375b56a9fb53b736c81ea3c4ac5cfb2d3ca7f8b8f0558fe2430220543ca4fef6d6f725f29e343f167fe9dd582aa856ecb5797259050eb990a1befb",type:"raw"}}})}),it("success with referenced token verifying contract",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"},{type:"amount",displayName:"Amount allowance",path:"details.amount",tokenIndex:255,signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{0:"payload-0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",255:"payload-0x000000000022d473030f116ddee9f6b43ac78ba3"},calldatas:{},proxy:void 0,filters:{"details.amount":{displayName:"Amount allowance",path:"details.amount",signature:"304402201a46e6b4ef89eaf9fcf4945d053bfc5616a826400fd758312fbbe976bafc07ec022025a9b408722baf983ee053f90179c75b0c55bb0668f437d55493e36069bbd5a3",tokenIndex:255,type:"amount"},"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with calldata",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:u,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.Present,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"},{type:"calldata-chain-id",displayName:"Transaction",path:"chainId",calldataIndex:0,signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:0,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"},{type:"calldata-spender",displayName:"Transaction",path:"spender",calldataIndex:0,signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.Present,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.Present,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:4660,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x8ceb23fd6bc0add59e62ac25578270cff1b9f619",selector:"0x778899aa",to:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",value:4200000000000000n}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"},to:{displayName:"Transaction",path:"to",signature:"30440220796cc549e363c5bc9f9d5bda894cf4cda11f157519f673d2b4a8b3ce716a8fba0220663c888d764084072856fe654ff425bffe671c2550068c64be9eddd6c84178b8",calldataIndex:0,type:"calldata-callee"},value:{displayName:"Transaction",path:"value",signature:"3044022021601a55098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-amount"},chainId:{displayName:"Transaction",path:"chainId",signature:"3044022021601a56098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-chain-id"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-selector"},spender:{displayName:"Transaction",path:"spender",signature:"3044022021601a58098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:0,type:"calldata-spender"}}})}),it("success with several calldatas",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:p,challenge:"1234",fieldsValues:u,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},calldatasInfos:{0:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},1:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"}},filters:[{type:"raw",displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b"},{type:"calldata-value",displayName:"Transaction",path:"data",calldataIndex:0,signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a"},{type:"calldata-selector",displayName:"Transaction",path:"selector",calldataIndex:1,signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Multisig transaction",filtersCount:4,signature:"304402206553ac5a2ce6bb17b94f3ec559fb037af0b742d62c001d8938aad709accd71ed022075ce87c3eb65e605f0ce0b2bc4bf960498bacf109a499807d1a7906d9c78c9c4"},trustedNamesAddresses:{},tokens:{},calldatas:{0:{filter:{calldataIndex:0,displayName:"Transaction",valueFlag:!0,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!1,selectorFlag:!1,amountFlag:!0,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3045022100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x6a76120200000000000000000000000023f8abfc2824c397ccb3da89ae772984107ddb99",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x6a761202",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}},1:{filter:{calldataIndex:1,displayName:"Transaction 2",valueFlag:!1,calleeFlag:s.TypedDataCalldataParamPresence.VerifyingContract,chainIdFlag:!0,selectorFlag:!0,amountFlag:!1,spenderFlag:s.TypedDataCalldataParamPresence.VerifyingContract,signature:"3056122100d8496ab69152efeef6a923a3ebd225334ad65dcb985814994243be7bc09bf27e02206314835816908dd6d51d3cbb0f9465d91d7ddc9104b34dd6c4247f65c551836e"},subset:{chainId:1,data:"0x",from:"0x000000000022d473030f116ddee9f6b43ac78ba3",selector:"0x778899aa",to:"0x000000000022d473030f116ddee9f6b43ac78ba3",value:void 0}}},proxy:void 0,filters:{data:{displayName:"Transaction",path:"data",signature:"3044022031a3398014238d098643893885e4b8c2152a56b01c34516edda1065df62258d1022057f094a83e938be32ca70d73616af8c57cdb8846a7a71b21be5504fa74cfc53a",calldataIndex:0,type:"calldata-value"},selector:{displayName:"Transaction",path:"selector",signature:"3044022021601a57098d35e5e78cbe3e76e519b1e626b903859d07982260fcf789abb52902204cd67475175f3b3a13a34156ef5edd5f711c890e1b9886b099a5480ff18a4d5f",calldataIndex:1,type:"calldata-selector"},operation:{displayName:"Operation type",path:"operation",signature:"3045022100fb9f3e7bab8ac0cd9a5722389a19d1ebdd39d7a6da6e374724a46eebee6896bc022070e991bb022111ed448540511b7fa4f70d5e92b0a3866d75cfc9d3cf1cf75d9b",type:"raw"}}})}),it("success with proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};l.mockResolvedValueOnce((0,d.Right)({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0",keyId:"testKeyId",KeyUsage:"testKeyUsage"})),r.mockResolvedValue(void 0),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(t).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:i.ClearSignContextType.PROXY_INFO,payload:"0x123456789abcdef0",certificate:void 0},filters:{}})}),it("success with proxy and certificate",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};l.mockResolvedValueOnce((0,d.Right)({implementationAddress:"0x987654321fedcba0",signedDescriptor:"0x123456789abcdef0",keyId:"testKeyId",KeyUsage:"testKeyUsage"})),r.mockResolvedValueOnce({keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}).mockResolvedValueOnce({keyUsageNumber:2,payload:new Uint8Array([1,2,3,4])}),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[]})));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(t).toHaveBeenLastCalledWith(expect.objectContaining({address:"0x987654321fedcba0",chainId:1})),expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},proxy:{type:i.ClearSignContextType.PROXY_INFO,payload:"0x123456789abcdef0",certificate:{keyUsageNumber:1,payload:new Uint8Array([1,2,3,4])}},certificate:{keyUsageNumber:2,payload:new Uint8Array([1,2,3,4])},filters:{}})}),it("should return an error if filters are unavailable",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error"))));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(1),expect(e).toEqual({type:"error",error:new Error("error")})}),it("should return an error if filters are unavailable in the proxy",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};l.mockResolvedValueOnce((0,d.Right)({delegateAddresses:["0x987654321fedcba0"],signedDescriptor:"0x123456789abcdef0"})),r.mockResolvedValue(void 0),t.mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error")))).mockResolvedValueOnce(Promise.resolve((0,d.Left)(new Error("error"))));const e=await f.load(a);expect(t).toHaveBeenCalledTimes(2),expect(e).toEqual({type:"error",error:new Error("error")})}),it("success with a trusted name",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"trusted-name",displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002"}]})));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{"details.token.[]":"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619"},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",types:["contract"],sources:["local","ens"],typesAndSourcesPayload:"010203010002",type:"trusted-name"}}})}),it("success with unavailable tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,d.Left)(new Error("token error"))));const e=await f.load(a);expect(e).toEqual({type:"success",messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},trustedNamesAddresses:{},tokens:{},calldatas:{},filters:{"details.token.[]":{displayName:"Amount allowance",path:"details.token.[]",signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733",tokenIndex:0,type:"token"}}})}),it("success with several identic tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,25])},...b],deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]}))),vi.spyOn(o,"getTokenInfosPayload").mockImplementation(()=>Promise.resolve((0,d.Left)(new Error("token error"))));const e=await f.load(a);expect(o.getTokenInfosPayload).toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("success with several different tokens",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:[{path:"details.token.[]",value:Uint8Array.from([124,235,35,253,107,192,173,213,158,98,172,37,87,130,112,207,241,185,246,255])},...b],deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.token.[]",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await f.load(a);expect(o.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f6ff",chainId:1}),expect(o.getTokenInfosPayload).not.toHaveBeenCalledWith({address:"0x7ceb23fd6bc0add59e62ac25578270cff1b9f619",chainId:1}),expect(e.type).toEqual("success")}),it("should ignore the token if value is not found",async()=>{const a={verifyingContract:"0x000000000022d473030f116ddee9f6b43ac78ba3",chainId:1,version:"v2",schema:n,challenge:"1234",fieldsValues:b,deviceModelId:c.DeviceModelId.STAX};t.mockResolvedValueOnce(Promise.resolve((0,d.Right)({messageInfo:{displayName:"Permit2",filtersCount:2,signature:"3045022100e3c597d13d28a87a88b0239404c668373cf5063362f2a81d09eed4582941dfe802207669aabb504fd5b95b2734057f6b8bbf51f14a69a5f9bdf658a5952cefbf44d3"},calldatasInfos:{},filters:[{type:"token",displayName:"Amount allowance",path:"details.badtoken",tokenIndex:0,signature:"3044022075103b38995e031d1ebbfe38ac6603bec32854b5146a664e49b4cc4f460c1da6022029f4b0fd1f3b7995ffff1627d4b57f27888a2dcc9b3a4e85c37c67571092c733"}]})));const e=await f.load(a);expect(e.type).toEqual("success"),e.type==="success"&&(expect(e.filters["details.badtoken"]?.displayName).toEqual("Amount allowance"),expect(e.tokens).toEqual({}))})})});
2
2
  //# sourceMappingURL=DefaultTypedDataContextLoader.test.js.map