@ledgerhq/context-module 1.8.0 → 1.9.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 (130) hide show
  1. package/lib/cjs/package.json +2 -2
  2. package/lib/cjs/src/DefaultContextModule.js +1 -1
  3. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  4. package/lib/cjs/src/di.js +1 -1
  5. package/lib/cjs/src/di.js.map +3 -3
  6. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.js +1 -1
  7. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.js.map +3 -3
  8. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  9. package/lib/cjs/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  10. package/lib/cjs/src/pki/model/KeyUsage.js +1 -1
  11. package/lib/cjs/src/pki/model/KeyUsage.js.map +2 -2
  12. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js +2 -0
  13. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js.map +7 -0
  14. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js +2 -0
  15. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js.map +7 -0
  16. package/lib/cjs/src/safe/data/SafeAccountDataSource.js +2 -0
  17. package/lib/cjs/src/safe/data/SafeAccountDataSource.js.map +7 -0
  18. package/lib/cjs/src/safe/data/dto/SafeAccountDto.js +2 -0
  19. package/lib/cjs/src/safe/data/dto/SafeAccountDto.js.map +7 -0
  20. package/lib/cjs/src/safe/di/safeModuleFactory.js +2 -0
  21. package/lib/cjs/src/safe/di/safeModuleFactory.js.map +7 -0
  22. package/lib/cjs/src/safe/di/safeModuleFactory.test.js +2 -0
  23. package/lib/cjs/src/safe/di/safeModuleFactory.test.js.map +7 -0
  24. package/lib/cjs/src/safe/di/safeTypes.js +2 -0
  25. package/lib/cjs/src/safe/di/safeTypes.js.map +7 -0
  26. package/lib/cjs/src/safe/domain/SafeAddressLoader.js +2 -0
  27. package/lib/cjs/src/safe/domain/SafeAddressLoader.js.map +7 -0
  28. package/lib/cjs/src/safe/domain/SafeAddressLoader.test.js +2 -0
  29. package/lib/cjs/src/safe/domain/SafeAddressLoader.test.js.map +7 -0
  30. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  31. package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
  32. package/lib/cjs/src/shared/utils/KeyUsageMapper.js +1 -1
  33. package/lib/cjs/src/shared/utils/KeyUsageMapper.js.map +2 -2
  34. package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js +1 -1
  35. package/lib/cjs/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
  36. package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
  37. package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +2 -2
  38. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js +1 -1
  39. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +2 -2
  40. package/lib/cjs/src/uniswap/constants/uniswap.js +1 -1
  41. package/lib/cjs/src/uniswap/constants/uniswap.js.map +3 -3
  42. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.js +1 -1
  43. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.js.map +3 -3
  44. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  45. package/lib/cjs/src/uniswap/domain/UniswapContextLoader.test.js.map +2 -2
  46. package/lib/esm/package.json +2 -2
  47. package/lib/esm/src/DefaultContextModule.js +1 -1
  48. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  49. package/lib/esm/src/di.js +1 -1
  50. package/lib/esm/src/di.js.map +3 -3
  51. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.js +1 -1
  52. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.js.map +3 -3
  53. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js +1 -1
  54. package/lib/esm/src/external-plugin/domain/ExternalPluginContextLoader.test.js.map +3 -3
  55. package/lib/esm/src/pki/model/KeyUsage.js +1 -1
  56. package/lib/esm/src/pki/model/KeyUsage.js.map +2 -2
  57. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js +2 -0
  58. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js.map +7 -0
  59. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js +2 -0
  60. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js.map +7 -0
  61. package/lib/esm/src/safe/data/SafeAccountDataSource.js +1 -0
  62. package/lib/esm/src/safe/data/SafeAccountDataSource.js.map +7 -0
  63. package/lib/esm/src/safe/data/dto/SafeAccountDto.js +1 -0
  64. package/lib/esm/src/safe/data/dto/SafeAccountDto.js.map +7 -0
  65. package/lib/esm/src/safe/di/safeModuleFactory.js +2 -0
  66. package/lib/esm/src/safe/di/safeModuleFactory.js.map +7 -0
  67. package/lib/esm/src/safe/di/safeModuleFactory.test.js +2 -0
  68. package/lib/esm/src/safe/di/safeModuleFactory.test.js.map +7 -0
  69. package/lib/esm/src/safe/di/safeTypes.js +2 -0
  70. package/lib/esm/src/safe/di/safeTypes.js.map +7 -0
  71. package/lib/esm/src/safe/domain/SafeAddressLoader.js +2 -0
  72. package/lib/esm/src/safe/domain/SafeAddressLoader.js.map +7 -0
  73. package/lib/esm/src/safe/domain/SafeAddressLoader.test.js +2 -0
  74. package/lib/esm/src/safe/domain/SafeAddressLoader.test.js.map +7 -0
  75. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  76. package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
  77. package/lib/esm/src/shared/utils/KeyUsageMapper.js +1 -1
  78. package/lib/esm/src/shared/utils/KeyUsageMapper.js.map +2 -2
  79. package/lib/esm/src/shared/utils/KeyUsageMapper.test.js +1 -1
  80. package/lib/esm/src/shared/utils/KeyUsageMapper.test.js.map +2 -2
  81. package/lib/esm/src/token/data/HttpTokenDataSource.js +1 -1
  82. package/lib/esm/src/token/data/HttpTokenDataSource.js.map +2 -2
  83. package/lib/esm/src/token/data/HttpTokenDataSource.test.js +1 -1
  84. package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +2 -2
  85. package/lib/esm/src/uniswap/constants/uniswap.js +1 -1
  86. package/lib/esm/src/uniswap/constants/uniswap.js.map +3 -3
  87. package/lib/esm/src/uniswap/domain/UniswapContextLoader.js +1 -1
  88. package/lib/esm/src/uniswap/domain/UniswapContextLoader.js.map +3 -3
  89. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js +1 -1
  90. package/lib/esm/src/uniswap/domain/UniswapContextLoader.test.js.map +3 -3
  91. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  92. package/lib/types/src/di.d.ts.map +1 -1
  93. package/lib/types/src/external-plugin/domain/ExternalPluginContextLoader.d.ts +9 -1
  94. package/lib/types/src/external-plugin/domain/ExternalPluginContextLoader.d.ts.map +1 -1
  95. package/lib/types/src/pki/model/KeyUsage.d.ts +2 -1
  96. package/lib/types/src/pki/model/KeyUsage.d.ts.map +1 -1
  97. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts +11 -0
  98. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts.map +1 -0
  99. package/lib/types/src/safe/data/HttpSafeAccountDataSource.test.d.ts +2 -0
  100. package/lib/types/src/safe/data/HttpSafeAccountDataSource.test.d.ts.map +1 -0
  101. package/lib/types/src/safe/data/SafeAccountDataSource.d.ts +20 -0
  102. package/lib/types/src/safe/data/SafeAccountDataSource.d.ts.map +1 -0
  103. package/lib/types/src/safe/data/dto/SafeAccountDto.d.ts +10 -0
  104. package/lib/types/src/safe/data/dto/SafeAccountDto.d.ts.map +1 -0
  105. package/lib/types/src/safe/di/safeModuleFactory.d.ts +3 -0
  106. package/lib/types/src/safe/di/safeModuleFactory.d.ts.map +1 -0
  107. package/lib/types/src/safe/di/safeModuleFactory.test.d.ts +2 -0
  108. package/lib/types/src/safe/di/safeModuleFactory.test.d.ts.map +1 -0
  109. package/lib/types/src/safe/di/safeTypes.d.ts +5 -0
  110. package/lib/types/src/safe/di/safeTypes.d.ts.map +1 -0
  111. package/lib/types/src/safe/domain/SafeAddressLoader.d.ts +19 -0
  112. package/lib/types/src/safe/domain/SafeAddressLoader.d.ts.map +1 -0
  113. package/lib/types/src/safe/domain/SafeAddressLoader.test.d.ts +2 -0
  114. package/lib/types/src/safe/domain/SafeAddressLoader.test.d.ts.map +1 -0
  115. package/lib/types/src/shared/model/ClearSignContext.d.ts +3 -1
  116. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  117. package/lib/types/src/shared/utils/KeyUsageMapper.d.ts.map +1 -1
  118. package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
  119. package/lib/types/src/uniswap/constants/uniswap.d.ts +0 -1
  120. package/lib/types/src/uniswap/constants/uniswap.d.ts.map +1 -1
  121. package/lib/types/src/uniswap/domain/UniswapContextLoader.d.ts +0 -8
  122. package/lib/types/src/uniswap/domain/UniswapContextLoader.d.ts.map +1 -1
  123. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  124. package/package.json +3 -3
  125. package/lib/cjs/src/uniswap/constants/plugin.js +0 -2
  126. package/lib/cjs/src/uniswap/constants/plugin.js.map +0 -7
  127. package/lib/esm/src/uniswap/constants/plugin.js +0 -2
  128. package/lib/esm/src/uniswap/constants/plugin.js.map +0 -7
  129. package/lib/types/src/uniswap/constants/plugin.d.ts +0 -3
  130. package/lib/types/src/uniswap/constants/plugin.d.ts.map +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/safe/data/HttpSafeAccountDataSource.test.ts"],
4
+ "sourcesContent": ["import { type HexaString } from \"@ledgerhq/device-management-kit\";\nimport axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpSafeAccountDataSource } from \"@/safe/data/HttpSafeAccountDataSource\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpSafeAccountDataSource\", () => {\n const config: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleConfig;\n\n const validSafeAccountDto = {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n };\n\n const validsafeContractAddress: HexaString =\n \"0x1234567890123456789012345678901234567890\";\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getDescriptors\", () => {\n it(\"should return safe account descriptors on successful request\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n params: {\n challenge: \"0xabcdef\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should work with different chain IDs\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 137, // Polygon\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/137/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n\n it(\"should work with different safe addresses\", async () => {\n // GIVEN\n const params = {\n safeContractAddress:\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as HexaString,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\",\n }),\n );\n });\n\n it(\"should work with different challenges\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0x123456789\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0x123456789\",\n },\n }),\n );\n });\n\n it(\"should return error when response data is empty\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when response data is undefined\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: undefined,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.signedDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyId is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyUsage is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor fields are invalid\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: 123, // wrong type\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: \"invalid-string\",\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: null,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios request fails\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios throws an exception\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"timeout\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should handle empty string values in descriptors\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signersDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signers: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n }),\n );\n });\n\n it(\"should correctly parse response with long descriptor values\", async () => {\n // GIVEN\n const longValue = \"a\".repeat(1000);\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should use correct origin token from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"custom-origin-token\",\n } as ContextModuleConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-origin-token\",\n }),\n }),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"test-token\",\n } as ContextModuleConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_axios", "import_purify_ts", "import_HttpSafeAccountDataSource", "import_HttpHeaders", "import_package", "config", "validSafeAccountDto", "validsafeContractAddress", "params", "axios", "result", "PACKAGE", "longValue", "customConfig"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var o=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var p=(r,e,s,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of n(e))!i.call(r,t)&&t!==s&&o(r,t,{get:()=>e[t],enumerable:!(a=c(e,t))||a.enumerable});return r};var f=r=>p(o({},"__esModule",{value:!0}),r);var g={};module.exports=f(g);
2
+ //# sourceMappingURL=SafeAccountDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/safe/data/SafeAccountDataSource.ts"],
4
+ "sourcesContent": ["import { type HexaString } from \"@ledgerhq/device-management-kit\";\nimport { type Either } from \"purify-ts\";\n\nexport type GetSafeAccountParams = {\n safeContractAddress: HexaString;\n chainId: number;\n challenge: string;\n};\n\nexport type SafeDescriptor = {\n signedDescriptor: string;\n keyId: string;\n keyUsage: string;\n};\n\nexport type GetSafeAccountResponse = {\n account: SafeDescriptor;\n signers: SafeDescriptor;\n};\n\nexport interface SafeAccountDataSource {\n getDescriptors(\n params: GetSafeAccountParams,\n ): Promise<Either<Error, GetSafeAccountResponse>>;\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["SafeAccountDataSource_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var s=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var n=(t,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of p(e))!D.call(t,r)&&r!==i&&s(t,r,{get:()=>e[r],enumerable:!(o=c(e,r))||o.enumerable});return t};var a=t=>n(s({},"__esModule",{value:!0}),t);var g={};module.exports=a(g);
2
+ //# sourceMappingURL=SafeAccountDto.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/safe/data/dto/SafeAccountDto.ts"],
4
+ "sourcesContent": ["export type SafeAccountDto = {\n accountDescriptor: SafeDescriptorDto;\n signersDescriptor: SafeDescriptorDto;\n};\n\nexport type SafeDescriptorDto = {\n signedDescriptor: string;\n keyId: string;\n keyUsage: string;\n};\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["SafeAccountDto_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var i=(o,e)=>{for(var t in e)a(o,t,{get:e[t],enumerable:!0})},n=(o,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of S(e))!u.call(o,r)&&r!==t&&a(o,r,{get:()=>e[r],enumerable:!(s=c(e,r))||s.enumerable});return o};var A=o=>n(a({},"__esModule",{value:!0}),o);var y={};i(y,{safeModuleFactory:()=>l});module.exports=A(y);var d=require("inversify"),m=require("../../safe/data/HttpSafeAccountDataSource"),p=require("../../safe/domain/SafeAddressLoader"),f=require("./safeTypes");const l=()=>new d.ContainerModule(({bind:o})=>{o(f.safeTypes.SafeAddressDataSource).to(m.HttpSafeAccountDataSource),o(f.safeTypes.SafeAddressLoader).to(p.SafeAddressLoader)});0&&(module.exports={safeModuleFactory});
2
+ //# sourceMappingURL=safeModuleFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/safe/di/safeModuleFactory.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpSafeAccountDataSource } from \"@/safe/data/HttpSafeAccountDataSource\";\nimport { SafeAddressLoader } from \"@/safe/domain/SafeAddressLoader\";\n\nimport { safeTypes } from \"./safeTypes\";\n\nexport const safeModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(safeTypes.SafeAddressDataSource).to(HttpSafeAccountDataSource);\n bind(safeTypes.SafeAddressLoader).to(SafeAddressLoader);\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAA0C,iDAC1CC,EAAkC,2CAElCC,EAA0B,uBAEnB,MAAML,EAAoB,IAC/B,IAAI,kBAAgB,CAAC,CAAE,KAAAM,CAAK,IAAM,CAChCA,EAAK,YAAU,qBAAqB,EAAE,GAAG,2BAAyB,EAClEA,EAAK,YAAU,iBAAiB,EAAE,GAAG,mBAAiB,CACxD,CAAC",
6
+ "names": ["safeModuleFactory_exports", "__export", "safeModuleFactory", "__toCommonJS", "import_inversify", "import_HttpSafeAccountDataSource", "import_SafeAddressLoader", "import_safeTypes", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("vitest"),o=require("./safeModuleFactory");(0,e.describe)("safeModuleFactory",()=>{(0,e.it)("should be defined",()=>{expect(o.safeModuleFactory).toBeDefined()})});
2
+ //# sourceMappingURL=safeModuleFactory.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/safe/di/safeModuleFactory.test.ts"],
4
+ "sourcesContent": ["import { describe, it } from \"vitest\";\n\nimport { safeModuleFactory } from \"./safeModuleFactory\";\n\ndescribe(\"safeModuleFactory\", () => {\n it(\"should be defined\", () => {\n expect(safeModuleFactory).toBeDefined();\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAA6B,kBAE7BC,EAAkC,kCAElC,YAAS,oBAAqB,IAAM,IAClC,MAAG,oBAAqB,IAAM,CAC5B,OAAO,mBAAiB,EAAE,YAAY,CACxC,CAAC,CACH,CAAC",
6
+ "names": ["import_vitest", "import_safeModuleFactory"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var d=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var t=Object.prototype.hasOwnProperty;var A=(a,e)=>{for(var s in e)d(a,s,{get:e[s],enumerable:!0})},c=(a,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of f(e))!t.call(a,r)&&r!==s&&d(a,r,{get:()=>e[r],enumerable:!(o=S(e,r))||o.enumerable});return a};var y=a=>c(d({},"__esModule",{value:!0}),a);var l={};A(l,{safeTypes:()=>b});module.exports=y(l);const b={SafeAddressDataSource:Symbol.for("SafeAddressDataSource"),SafeAddressLoader:Symbol.for("SafeAddressLoader")};0&&(module.exports={safeTypes});
2
+ //# sourceMappingURL=safeTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/safe/di/safeTypes.ts"],
4
+ "sourcesContent": ["export const safeTypes = {\n SafeAddressDataSource: Symbol.for(\"SafeAddressDataSource\"),\n SafeAddressLoader: Symbol.for(\"SafeAddressLoader\"),\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAY,CACvB,sBAAuB,OAAO,IAAI,uBAAuB,EACzD,kBAAmB,OAAO,IAAI,mBAAmB,CACnD",
6
+ "names": ["safeTypes_exports", "__export", "safeTypes", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var f=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var k=(o,e)=>{for(var t in e)f(o,t,{get:e[t],enumerable:!0})},A=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of x(e))!I.call(o,a)&&a!==t&&f(o,a,{get:()=>e[a],enumerable:!(r=y(e,a))||r.enumerable});return o};var h=o=>A(f({},"__esModule",{value:!0}),o),C=(o,e,t,r)=>{for(var a=r>1?void 0:r?y(e,t):e,d=o.length-1,i;d>=0;d--)(i=o[d])&&(a=(r?i(e,t,a):i(a))||a);return r&&a&&f(e,t,a),a},p=(o,e)=>(t,r)=>e(t,r,o);var D={};k(D,{SafeAddressLoader:()=>c});module.exports=h(D);var S=require("@ledgerhq/device-management-kit"),s=require("inversify"),g=require("../../pki/di/pkiTypes"),m=require("../../safe/di/safeTypes"),n=require("../../shared/model/ClearSignContext");const u=[n.ClearSignContextType.SAFE,n.ClearSignContextType.SIGNER];let c=class{constructor(e,t){this._dataSource=e;this._certificateLoader=t}canHandle(e,t){return t.every(r=>u.includes(r))&&typeof e=="object"&&e!==null&&"safeContractAddress"in e&&(0,S.isHexaString)(e.safeContractAddress)&&e.safeContractAddress!=="0x"&&"chainId"in e&&typeof e.chainId=="number"&&"deviceModelId"in e&&e.deviceModelId!==void 0&&"challenge"in e&&typeof e.challenge=="string"&&e.challenge.length>0}async load({safeContractAddress:e,chainId:t,deviceModelId:r,challenge:a}){return(await this._dataSource.getDescriptors({safeContractAddress:e,chainId:t,challenge:a})).caseOf({Left:i=>Promise.resolve([{type:n.ClearSignContextType.ERROR,error:i}]),Right:async({account:i,signers:l})=>[{type:n.ClearSignContextType.SAFE,payload:i.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:i.keyId,keyUsage:i.keyUsage,targetDevice:r})},{type:n.ClearSignContextType.SIGNER,payload:l.signedDescriptor,certificate:await this._certificateLoader.loadCertificate({keyId:l.keyId,keyUsage:l.keyUsage,targetDevice:r})}]})}};c=C([(0,s.injectable)(),p(0,(0,s.inject)(m.safeTypes.SafeAddressDataSource)),p(1,(0,s.inject)(g.pkiTypes.PkiCertificateLoader))],c);0&&(module.exports={SafeAddressLoader});
2
+ //# sourceMappingURL=SafeAddressLoader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/safe/domain/SafeAddressLoader.ts"],
4
+ "sourcesContent": ["import {\n DeviceModelId,\n HexaString,\n isHexaString,\n} 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 type {\n GetSafeAccountResponse,\n SafeAccountDataSource,\n} from \"@/safe/data/SafeAccountDataSource\";\nimport { safeTypes } from \"@/safe/di/safeTypes\";\nimport { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport type SafeAddressContextInput = {\n safeContractAddress: HexaString;\n chainId: number;\n deviceModelId: DeviceModelId;\n challenge: string;\n};\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n];\n\n@injectable()\nexport class SafeAddressLoader\n implements ContextLoader<SafeAddressContextInput>\n{\n constructor(\n @inject(safeTypes.SafeAddressDataSource)\n private readonly _dataSource: SafeAccountDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n ) {}\n\n canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SafeAddressContextInput {\n return (\n expectedTypes.every((type) => SUPPORTED_TYPES.includes(type)) &&\n typeof input === \"object\" &&\n input !== null &&\n \"safeContractAddress\" in input &&\n isHexaString(input.safeContractAddress) &&\n input.safeContractAddress !== \"0x\" &&\n \"chainId\" in input &&\n typeof input.chainId === \"number\" &&\n \"deviceModelId\" in input &&\n input.deviceModelId !== undefined &&\n \"challenge\" in input &&\n typeof input.challenge === \"string\" &&\n input.challenge.length > 0\n );\n }\n\n async load({\n safeContractAddress,\n chainId,\n deviceModelId,\n challenge,\n }: SafeAddressContextInput): Promise<ClearSignContext[]> {\n const descriptors = await this._dataSource.getDescriptors({\n safeContractAddress,\n chainId,\n challenge,\n });\n\n return descriptors.caseOf({\n Left: (error): Promise<ClearSignContext[]> =>\n Promise.resolve([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]),\n Right: async ({\n account,\n signers,\n }: GetSafeAccountResponse): Promise<ClearSignContext[]> => [\n {\n type: ClearSignContextType.SAFE,\n payload: account.signedDescriptor,\n certificate: await this._certificateLoader.loadCertificate({\n keyId: account.keyId,\n keyUsage: account.keyUsage,\n targetDevice: deviceModelId,\n }),\n },\n {\n type: ClearSignContextType.SIGNER,\n payload: signers.signedDescriptor,\n certificate: await this._certificateLoader.loadCertificate({\n keyId: signers.keyId,\n keyUsage: signers.keyUsage,\n targetDevice: deviceModelId,\n }),\n },\n ],\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAIO,2CACPC,EAAmC,qBAEnCC,EAAyB,6BAMzBC,EAA0B,+BAE1BC,EAGO,2CASP,MAAMC,EAA0C,CAC9C,uBAAqB,KACrB,uBAAqB,MACvB,EAGO,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EACjB,CAHiB,iBAAAD,EAEA,wBAAAC,CAChB,CAEH,UACEC,EACAC,EACkC,CAClC,OACEA,EAAc,MAAOC,GAASN,EAAgB,SAASM,CAAI,CAAC,GAC5D,OAAOF,GAAU,UACjBA,IAAU,MACV,wBAAyBA,MACzB,gBAAaA,EAAM,mBAAmB,GACtCA,EAAM,sBAAwB,MAC9B,YAAaA,GACb,OAAOA,EAAM,SAAY,UACzB,kBAAmBA,GACnBA,EAAM,gBAAkB,QACxB,cAAeA,GACf,OAAOA,EAAM,WAAc,UAC3BA,EAAM,UAAU,OAAS,CAE7B,CAEA,MAAM,KAAK,CACT,oBAAAG,EACA,QAAAC,EACA,cAAAC,EACA,UAAAC,CACF,EAAyD,CAOvD,OANoB,MAAM,KAAK,YAAY,eAAe,CACxD,oBAAAH,EACA,QAAAC,EACA,UAAAE,CACF,CAAC,GAEkB,OAAO,CACxB,KAAOC,GACL,QAAQ,QAAQ,CACd,CACE,KAAM,uBAAqB,MAC3B,MAAAA,CACF,CACF,CAAC,EACH,MAAO,MAAO,CACZ,QAAAC,EACA,QAAAC,CACF,IAA2D,CACzD,CACE,KAAM,uBAAqB,KAC3B,QAASD,EAAQ,iBACjB,YAAa,MAAM,KAAK,mBAAmB,gBAAgB,CACzD,MAAOA,EAAQ,MACf,SAAUA,EAAQ,SAClB,aAAcH,CAChB,CAAC,CACH,EACA,CACE,KAAM,uBAAqB,OAC3B,QAASI,EAAQ,iBACjB,YAAa,MAAM,KAAK,mBAAmB,gBAAgB,CACzD,MAAOA,EAAQ,MACf,SAAUA,EAAQ,SAClB,aAAcJ,CAChB,CAAC,CACH,CACF,CACF,CAAC,CACH,CACF,EA5EaR,EAANa,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,YAAU,qBAAqB,GAEtCA,EAAA,eAAO,WAAS,oBAAoB,IAN5Bd",
6
+ "names": ["SafeAddressLoader_exports", "__export", "SafeAddressLoader", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_pkiTypes", "import_safeTypes", "import_ClearSignContext", "SUPPORTED_TYPES", "SafeAddressLoader", "_dataSource", "_certificateLoader", "input", "expectedTypes", "type", "safeContractAddress", "chainId", "deviceModelId", "challenge", "error", "account", "signers", "__decorateClass", "__decorateParam"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var o=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),u=require("../../safe/domain/SafeAddressLoader"),e=require("../../shared/model/ClearSignContext");describe("SafeAddressLoader",()=>{const n={getDescriptors:vi.fn()},r={loadCertificate:vi.fn()},s=new u.SafeAddressLoader(n,r),l={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},i={account:{signedDescriptor:"safe-descriptor-payload",keyId:"safe-key-id",keyUsage:"safe-key-usage"},signers:{signedDescriptor:"signers-descriptor-payload",keyId:"signers-key-id",keyUsage:"signers-key-usage"}};beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(r,"loadCertificate").mockResolvedValue(l)}),describe("canHandle function",()=>{const t={safeContractAddress:"0x1234567890123456789012345678901234567890",chainId:1,deviceModelId:o.DeviceModelId.FLEX,challenge:"0xabcdef"};it("should return true for valid input with SAFE and SIGNER types",()=>{expect(s.canHandle(t,[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0)}),it("should return true when expected types are subset of SAFE and SIGNER",()=>{expect(s.canHandle(t,[e.ClearSignContextType.SAFE])).toBe(!0),expect(s.canHandle(t,[e.ClearSignContextType.SIGNER])).toBe(!0)}),it("should return false when expected types include unsupported types",()=>{expect(s.canHandle(t,[e.ClearSignContextType.TOKEN])).toBe(!1),expect(s.canHandle(t,[e.ClearSignContextType.NFT])).toBe(!1)}),it("should return false when expected types include other types besides SAFE and SIGNER",()=>{expect(s.canHandle(t,[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER,e.ClearSignContextType.TOKEN])).toBe(!1)}),it.each([[null,"null input"],[void 0,"undefined input"],[{},"empty object"],["string","string input"],[123,"number input"],[[],"array input"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!1)}),it.each([[{...t,safeContractAddress:void 0},"missing safeContractAddress"],[{...t,chainId:void 0},"missing chainId"],[{...t,deviceModelId:void 0},"missing deviceModelId"],[{...t,challenge:void 0},"missing challenge"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!1)}),it.each([[{...t,safeContractAddress:"invalid-hex"},"invalid safeContractAddress hex"],[{...t,safeContractAddress:"0x"},"empty safeContractAddress (0x)"],[{...t,safeContractAddress:"not-hex"},"non-hex safeContractAddress"],[{...t,safeContractAddress:123},"number safeContractAddress"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!1)}),it.each([[{...t,chainId:"1"},"string chainId"],[{...t,chainId:null},"null chainId"],[{...t,chainId:void 0},"undefined chainId"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!1)}),it.each([[{...t,challenge:""},"empty challenge string"],[{...t,challenge:123},"number challenge"],[{...t,challenge:null},"null challenge"]])("should return false for %s",(a,c)=>{expect(s.canHandle(a,[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!1)}),it("should return true for different device models",()=>{expect(s.canHandle({...t,deviceModelId:o.DeviceModelId.NANO_S},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.DeviceModelId.NANO_SP},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.DeviceModelId.NANO_X},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.DeviceModelId.STAX},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0),expect(s.canHandle({...t,deviceModelId:o.DeviceModelId.FLEX},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0)}),it("should return true for different chain IDs",()=>{expect(s.canHandle({...t,chainId:1},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0),expect(s.canHandle({...t,chainId:137},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0),expect(s.canHandle({...t,chainId:10},[e.ClearSignContextType.SAFE,e.ClearSignContextType.SIGNER])).toBe(!0)})}),describe("load function",()=>{const t={safeContractAddress:"0x1234567890123456789012345678901234567890",chainId:1,deviceModelId:o.DeviceModelId.FLEX,challenge:"0xabcdef"};it("should return SAFE and SIGNER contexts with certificates",async()=>{vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(i));const a=await s.load(t);expect(n.getDescriptors).toHaveBeenCalledWith({safeContractAddress:"0x1234567890123456789012345678901234567890",chainId:1,challenge:"0xabcdef"}),expect(r.loadCertificate).toHaveBeenCalledTimes(2),expect(r.loadCertificate).toHaveBeenNthCalledWith(1,{keyId:"safe-key-id",keyUsage:"safe-key-usage",targetDevice:o.DeviceModelId.FLEX}),expect(r.loadCertificate).toHaveBeenNthCalledWith(2,{keyId:"signers-key-id",keyUsage:"signers-key-usage",targetDevice:o.DeviceModelId.FLEX}),expect(a).toEqual([{type:e.ClearSignContextType.SAFE,payload:"safe-descriptor-payload",certificate:l},{type:e.ClearSignContextType.SIGNER,payload:"signers-descriptor-payload",certificate:l}])}),it("should return SAFE and SIGNER contexts without certificates when loadCertificate returns undefined",async()=>{vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(i)),vi.spyOn(r,"loadCertificate").mockResolvedValue(void 0);const a=await s.load(t);expect(a).toEqual([{type:e.ClearSignContextType.SAFE,payload:"safe-descriptor-payload",certificate:void 0},{type:e.ClearSignContextType.SIGNER,payload:"signers-descriptor-payload",certificate:void 0}])}),it("should return ERROR context when data source returns Left",async()=>{const a=new Error("Failed to get safe account descriptors");vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Left)(a));const c=await s.load(t);expect(c).toEqual([{type:e.ClearSignContextType.ERROR,error:a}]),expect(r.loadCertificate).not.toHaveBeenCalled()}),it("should work with different device models",async()=>{const a={...t,deviceModelId:o.DeviceModelId.NANO_S};vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(i));const c=await s.load(a);expect(r.loadCertificate).toHaveBeenCalledWith(expect.objectContaining({targetDevice:o.DeviceModelId.NANO_S})),expect(c).toHaveLength(2),expect(c[0]?.type).toBe(e.ClearSignContextType.SAFE),expect(c[1]?.type).toBe(e.ClearSignContextType.SIGNER)}),it("should work with different chain IDs",async()=>{const a={...t,chainId:137};vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(i)),await s.load(a),expect(n.getDescriptors).toHaveBeenCalledWith(expect.objectContaining({chainId:137}))}),it("should work with different safe addresses",async()=>{const a={...t,safeContractAddress:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"};vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(i)),await s.load(a),expect(n.getDescriptors).toHaveBeenCalledWith(expect.objectContaining({safeContractAddress:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"}))}),it("should handle different certificate data for account and signers",async()=>{const a={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},c={keyUsageNumber:2,payload:new Uint8Array([4,5,6])};vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(i)),vi.spyOn(r,"loadCertificate").mockResolvedValueOnce(a).mockResolvedValueOnce(c);const p=await s.load(t);expect(p).toEqual([{type:e.ClearSignContextType.SAFE,payload:"safe-descriptor-payload",certificate:a},{type:e.ClearSignContextType.SIGNER,payload:"signers-descriptor-payload",certificate:c}])}),it("should handle empty descriptor payloads",async()=>{const a={account:{signedDescriptor:"",keyId:"key-id",keyUsage:"key-usage"},signers:{signedDescriptor:"",keyId:"key-id",keyUsage:"key-usage"}};vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(a));const c=await s.load(t);expect(c).toEqual([{type:e.ClearSignContextType.SAFE,payload:"",certificate:l},{type:e.ClearSignContextType.SIGNER,payload:"",certificate:l}])}),it("should handle long descriptor payloads",async()=>{const a="a".repeat(1e3),c={account:{signedDescriptor:a,keyId:"key-id",keyUsage:"key-usage"},signers:{signedDescriptor:a,keyId:"key-id",keyUsage:"key-usage"}};vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Right)(c));const p=await s.load(t);expect(p[0].payload).toBe(a),expect(p[1].payload).toBe(a)}),it("should handle data source errors gracefully",async()=>{const a=new Error("Network error");vi.spyOn(n,"getDescriptors").mockResolvedValue((0,d.Left)(a));const c=await s.load(t);expect(c).toEqual([{type:e.ClearSignContextType.ERROR,error:new Error("Network error")}])})})});
2
+ //# sourceMappingURL=SafeAddressLoader.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/safe/domain/SafeAddressLoader.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 {\n type GetSafeAccountResponse,\n type SafeAccountDataSource,\n} from \"@/safe/data/SafeAccountDataSource\";\nimport {\n type SafeAddressContextInput,\n SafeAddressLoader,\n} from \"@/safe/domain/SafeAddressLoader\";\nimport {\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\ndescribe(\"SafeAddressLoader\", () => {\n const mockSafeAccountDataSource: SafeAccountDataSource = {\n getDescriptors: vi.fn(),\n };\n const mockPkiCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n const loader = new SafeAddressLoader(\n mockSafeAccountDataSource,\n mockPkiCertificateLoader,\n );\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n };\n\n const mockSafeAccountResponse: GetSafeAccountResponse = {\n account: {\n signedDescriptor: \"safe-descriptor-payload\",\n keyId: \"safe-key-id\",\n keyUsage: \"safe-key-usage\",\n },\n signers: {\n signedDescriptor: \"signers-descriptor-payload\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.spyOn(mockPkiCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: SafeAddressContextInput = {\n safeContractAddress: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n deviceModelId: DeviceModelId.FLEX,\n challenge: \"0xabcdef\",\n };\n\n it(\"should return true for valid input with SAFE and SIGNER types\", () => {\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(true);\n });\n\n it(\"should return true when expected types are subset of SAFE and SIGNER\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.SAFE])).toBe(\n true,\n );\n expect(loader.canHandle(validInput, [ClearSignContextType.SIGNER])).toBe(\n true,\n );\n });\n\n it(\"should return false when expected types include unsupported types\", () => {\n expect(loader.canHandle(validInput, [ClearSignContextType.TOKEN])).toBe(\n false,\n );\n expect(loader.canHandle(validInput, [ClearSignContextType.NFT])).toBe(\n false,\n );\n });\n\n it(\"should return false when expected types include other types besides SAFE and SIGNER\", () => {\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ClearSignContextType.TOKEN,\n ]),\n ).toBe(false);\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 [[], \"array input\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [\n { ...validInput, safeContractAddress: undefined },\n \"missing safeContractAddress\",\n ],\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n [{ ...validInput, challenge: undefined }, \"missing challenge\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [\n { ...validInput, safeContractAddress: \"invalid-hex\" },\n \"invalid safeContractAddress hex\",\n ],\n [\n { ...validInput, safeContractAddress: \"0x\" },\n \"empty safeContractAddress (0x)\",\n ],\n [\n { ...validInput, safeContractAddress: \"not-hex\" },\n \"non-hex safeContractAddress\",\n ],\n [\n { ...validInput, safeContractAddress: 123 },\n \"number safeContractAddress\",\n ],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [{ ...validInput, chainId: undefined }, \"undefined chainId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [{ ...validInput, challenge: \"\" }, \"empty challenge string\"],\n [{ ...validInput, challenge: 123 }, \"number challenge\"],\n [{ ...validInput, challenge: null }, \"null challenge\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(false);\n });\n\n it(\"should return true for different device models\", () => {\n expect(\n loader.canHandle(\n { ...validInput, deviceModelId: DeviceModelId.NANO_S },\n [ClearSignContextType.SAFE, ClearSignContextType.SIGNER],\n ),\n ).toBe(true);\n expect(\n loader.canHandle(\n { ...validInput, deviceModelId: DeviceModelId.NANO_SP },\n [ClearSignContextType.SAFE, ClearSignContextType.SIGNER],\n ),\n ).toBe(true);\n expect(\n loader.canHandle(\n { ...validInput, deviceModelId: DeviceModelId.NANO_X },\n [ClearSignContextType.SAFE, ClearSignContextType.SIGNER],\n ),\n ).toBe(true);\n expect(\n loader.canHandle({ ...validInput, deviceModelId: DeviceModelId.STAX }, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(true);\n expect(\n loader.canHandle({ ...validInput, deviceModelId: DeviceModelId.FLEX }, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(true);\n });\n\n it(\"should return true for different chain IDs\", () => {\n expect(\n loader.canHandle({ ...validInput, chainId: 1 }, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(true);\n expect(\n loader.canHandle({ ...validInput, chainId: 137 }, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(true);\n expect(\n loader.canHandle({ ...validInput, chainId: 10 }, [\n ClearSignContextType.SAFE,\n ClearSignContextType.SIGNER,\n ]),\n ).toBe(true);\n });\n });\n\n describe(\"load function\", () => {\n const input: SafeAddressContextInput = {\n safeContractAddress: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n deviceModelId: DeviceModelId.FLEX,\n challenge: \"0xabcdef\",\n };\n\n it(\"should return SAFE and SIGNER contexts with certificates\", async () => {\n // GIVEN\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(mockSafeAccountResponse),\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(mockSafeAccountDataSource.getDescriptors).toHaveBeenCalledWith({\n safeContractAddress: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n challenge: \"0xabcdef\",\n });\n expect(mockPkiCertificateLoader.loadCertificate).toHaveBeenCalledTimes(2);\n expect(mockPkiCertificateLoader.loadCertificate).toHaveBeenNthCalledWith(\n 1,\n {\n keyId: \"safe-key-id\",\n keyUsage: \"safe-key-usage\",\n targetDevice: DeviceModelId.FLEX,\n },\n );\n expect(mockPkiCertificateLoader.loadCertificate).toHaveBeenNthCalledWith(\n 2,\n {\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n targetDevice: DeviceModelId.FLEX,\n },\n );\n expect(result).toEqual([\n {\n type: ClearSignContextType.SAFE,\n payload: \"safe-descriptor-payload\",\n certificate: mockCertificate,\n },\n {\n type: ClearSignContextType.SIGNER,\n payload: \"signers-descriptor-payload\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should return SAFE and SIGNER contexts without certificates when loadCertificate returns undefined\", async () => {\n // GIVEN\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(mockSafeAccountResponse),\n );\n vi.spyOn(mockPkiCertificateLoader, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n {\n type: ClearSignContextType.SAFE,\n payload: \"safe-descriptor-payload\",\n certificate: undefined,\n },\n {\n type: ClearSignContextType.SIGNER,\n payload: \"signers-descriptor-payload\",\n certificate: undefined,\n },\n ]);\n });\n\n it(\"should return ERROR context when data source returns Left\", async () => {\n // GIVEN\n const error = new Error(\"Failed to get safe account descriptors\");\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n expect(mockPkiCertificateLoader.loadCertificate).not.toHaveBeenCalled();\n });\n\n it(\"should work with different device models\", async () => {\n // GIVEN\n const inputNanoS = { ...input, deviceModelId: DeviceModelId.NANO_S };\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(mockSafeAccountResponse),\n );\n\n // WHEN\n const result = await loader.load(inputNanoS);\n\n // THEN\n expect(mockPkiCertificateLoader.loadCertificate).toHaveBeenCalledWith(\n expect.objectContaining({\n targetDevice: DeviceModelId.NANO_S,\n }),\n );\n expect(result).toHaveLength(2);\n expect(result[0]?.type).toBe(ClearSignContextType.SAFE);\n expect(result[1]?.type).toBe(ClearSignContextType.SIGNER);\n });\n\n it(\"should work with different chain IDs\", async () => {\n // GIVEN\n const inputPolygon = { ...input, chainId: 137 };\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(mockSafeAccountResponse),\n );\n\n // WHEN\n await loader.load(inputPolygon);\n\n // THEN\n expect(mockSafeAccountDataSource.getDescriptors).toHaveBeenCalledWith(\n expect.objectContaining({\n chainId: 137,\n }),\n );\n });\n\n it(\"should work with different safe addresses\", async () => {\n // GIVEN\n const differentInput = {\n ...input,\n safeContractAddress:\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as const,\n };\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(mockSafeAccountResponse),\n );\n\n // WHEN\n await loader.load(differentInput);\n\n // THEN\n expect(mockSafeAccountDataSource.getDescriptors).toHaveBeenCalledWith(\n expect.objectContaining({\n safeContractAddress: \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\",\n }),\n );\n });\n\n it(\"should handle different certificate data for account and signers\", async () => {\n // GIVEN\n const accountCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([1, 2, 3]),\n };\n const signersCertificate: PkiCertificate = {\n keyUsageNumber: 2,\n payload: new Uint8Array([4, 5, 6]),\n };\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(mockSafeAccountResponse),\n );\n vi.spyOn(mockPkiCertificateLoader, \"loadCertificate\")\n .mockResolvedValueOnce(accountCertificate)\n .mockResolvedValueOnce(signersCertificate);\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n {\n type: ClearSignContextType.SAFE,\n payload: \"safe-descriptor-payload\",\n certificate: accountCertificate,\n },\n {\n type: ClearSignContextType.SIGNER,\n payload: \"signers-descriptor-payload\",\n certificate: signersCertificate,\n },\n ]);\n });\n\n it(\"should handle empty descriptor payloads\", async () => {\n // GIVEN\n const emptyResponse: GetSafeAccountResponse = {\n account: {\n signedDescriptor: \"\",\n keyId: \"key-id\",\n keyUsage: \"key-usage\",\n },\n signers: {\n signedDescriptor: \"\",\n keyId: \"key-id\",\n keyUsage: \"key-usage\",\n },\n };\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(emptyResponse),\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n {\n type: ClearSignContextType.SAFE,\n payload: \"\",\n certificate: mockCertificate,\n },\n {\n type: ClearSignContextType.SIGNER,\n payload: \"\",\n certificate: mockCertificate,\n },\n ]);\n });\n\n it(\"should handle long descriptor payloads\", async () => {\n // GIVEN\n const longPayload = \"a\".repeat(1000);\n const longResponse: GetSafeAccountResponse = {\n account: {\n signedDescriptor: longPayload,\n keyId: \"key-id\",\n keyUsage: \"key-usage\",\n },\n signers: {\n signedDescriptor: longPayload,\n keyId: \"key-id\",\n keyUsage: \"key-usage\",\n },\n };\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Right(longResponse),\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect((result[0] as ClearSignContextSuccess).payload).toBe(longPayload);\n expect((result[1] as ClearSignContextSuccess).payload).toBe(longPayload);\n });\n\n it(\"should handle data source errors gracefully\", async () => {\n // GIVEN\n const error = new Error(\"Network error\");\n vi.spyOn(mockSafeAccountDataSource, \"getDescriptors\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\"Network error\"),\n },\n ]);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_SafeAddressLoader", "import_ClearSignContext", "mockSafeAccountDataSource", "mockPkiCertificateLoader", "loader", "mockCertificate", "mockSafeAccountResponse", "validInput", "input", "_description", "result", "error", "inputNanoS", "inputPolygon", "differentInput", "accountCertificate", "signersCertificate", "emptyResponse", "longPayload", "longResponse"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var l=(r,t)=>{for(var i in t)c(r,i,{get:t[i],enumerable:!0})},y=(r,t,i,T)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of N(t))!E.call(r,n)&&n!==i&&c(r,n,{get:()=>t[n],enumerable:!(T=C(t,n))||T.enumerable});return r};var R=r=>y(c({},"__esModule",{value:!0}),r);var s={};l(s,{ClearSignContextReferenceType:()=>p,ClearSignContextType:()=>o});module.exports=R(s);var o=(e=>(e.TOKEN="token",e.NFT="nft",e.TRUSTED_NAME="trustedName",e.PLUGIN="plugin",e.EXTERNAL_PLUGIN="externalPlugin",e.TRANSACTION_INFO="transactionInfo",e.PROXY_INFO="proxyInfo",e.ENUM="enum",e.TRANSACTION_FIELD_DESCRIPTION="transactionFieldDescription",e.WEB3_CHECK="web3Check",e.DYNAMIC_NETWORK="dynamicNetwork",e.DYNAMIC_NETWORK_ICON="dynamicNetworkIcon",e.ERROR="error",e))(o||{}),p=(a=>(a.TOKEN="token",a.NFT="nft",a.TRUSTED_NAME="trustedName",a.ENUM="enum",a.CALLDATA="calldata",a))(p||{});0&&(module.exports={ClearSignContextReferenceType,ClearSignContextType});
1
+ "use strict";var c=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var R=(r,t)=>{for(var i in t)c(r,i,{get:t[i],enumerable:!0})},l=(r,t,i,T)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of p(t))!C.call(r,n)&&n!==i&&c(r,n,{get:()=>t[n],enumerable:!(T=o(t,n))||T.enumerable});return r};var s=r=>l(c({},"__esModule",{value:!0}),r);var y={};R(y,{ClearSignContextReferenceType:()=>N,ClearSignContextType:()=>E});module.exports=s(y);var E=(e=>(e.TOKEN="token",e.NFT="nft",e.TRUSTED_NAME="trustedName",e.PLUGIN="plugin",e.EXTERNAL_PLUGIN="externalPlugin",e.TRANSACTION_INFO="transactionInfo",e.PROXY_INFO="proxyInfo",e.ENUM="enum",e.TRANSACTION_FIELD_DESCRIPTION="transactionFieldDescription",e.WEB3_CHECK="web3Check",e.DYNAMIC_NETWORK="dynamicNetwork",e.DYNAMIC_NETWORK_ICON="dynamicNetworkIcon",e.ERROR="error",e.SAFE="safe",e.SIGNER="signer",e))(E||{}),N=(a=>(a.TOKEN="token",a.NFT="nft",a.TRUSTED_NAME="trustedName",a.ENUM="enum",a.CALLDATA="calldata",a))(N||{});0&&(module.exports={ClearSignContextReferenceType,ClearSignContextType});
2
2
  //# sourceMappingURL=ClearSignContext.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/model/ClearSignContext.ts"],
4
- "sourcesContent": ["import { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\n\nimport { type GenericPath } from \"./GenericPath\";\n\nexport enum ClearSignContextType {\n TOKEN = \"token\",\n NFT = \"nft\",\n TRUSTED_NAME = \"trustedName\",\n PLUGIN = \"plugin\",\n EXTERNAL_PLUGIN = \"externalPlugin\",\n TRANSACTION_INFO = \"transactionInfo\",\n PROXY_INFO = \"proxyInfo\",\n ENUM = \"enum\",\n TRANSACTION_FIELD_DESCRIPTION = \"transactionFieldDescription\",\n WEB3_CHECK = \"web3Check\",\n DYNAMIC_NETWORK = \"dynamicNetwork\",\n DYNAMIC_NETWORK_ICON = \"dynamicNetworkIcon\",\n ERROR = \"error\",\n}\n\nexport enum ClearSignContextReferenceType {\n TOKEN = ClearSignContextType.TOKEN,\n NFT = ClearSignContextType.NFT,\n TRUSTED_NAME = ClearSignContextType.TRUSTED_NAME,\n ENUM = ClearSignContextType.ENUM,\n CALLDATA = \"calldata\",\n}\n\nexport type ClearSignContextReference<\n Type extends ClearSignContextReferenceType = ClearSignContextReferenceType,\n> = Type extends ClearSignContextReferenceType.ENUM\n ? {\n type: ClearSignContextReferenceType.ENUM;\n valuePath: GenericPath;\n id: number; // enum id to reference\n }\n : Type extends ClearSignContextReferenceType.TRUSTED_NAME\n ? {\n type: ClearSignContextReferenceType.TRUSTED_NAME;\n valuePath: GenericPath;\n types: string[];\n sources: string[];\n }\n : Type extends ClearSignContextReferenceType.CALLDATA\n ? {\n type: ClearSignContextReferenceType.CALLDATA;\n callee: GenericPath;\n valuePath: GenericPath;\n selector?: GenericPath;\n amount?: GenericPath;\n spender?: GenericPath;\n chainId?: GenericPath;\n }\n :\n | {\n type: Type;\n valuePath: GenericPath;\n value?: never;\n }\n | {\n type: Type;\n valuePath?: never;\n value: string;\n };\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\nexport type ClearSignContextSuccess<\n T extends Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n > = ClearSignContextSuccessType,\n> = T extends ClearSignContextType.ENUM\n ? {\n type: ClearSignContextType.ENUM;\n id: number;\n payload: string;\n value: number;\n certificate?: PkiCertificate;\n }\n : T extends ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION\n ? {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION;\n payload: string;\n reference?: ClearSignContextReference;\n certificate?: PkiCertificate;\n }\n : {\n type: T;\n payload: string;\n certificate?: PkiCertificate;\n };\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mCAAAE,EAAA,yBAAAC,IAAA,eAAAC,EAAAJ,GAIO,IAAKG,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,OAAS,SACTA,EAAA,gBAAkB,iBAClBA,EAAA,iBAAmB,kBACnBA,EAAA,WAAa,YACbA,EAAA,KAAO,OACPA,EAAA,8BAAgC,8BAChCA,EAAA,WAAa,YACbA,EAAA,gBAAkB,iBAClBA,EAAA,qBAAuB,qBACvBA,EAAA,MAAQ,QAbEA,OAAA,IAgBAD,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,KAAO,OACPA,EAAA,SAAW,WALDA,OAAA",
4
+ "sourcesContent": ["import { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\n\nimport { type GenericPath } from \"./GenericPath\";\n\nexport enum ClearSignContextType {\n TOKEN = \"token\",\n NFT = \"nft\",\n TRUSTED_NAME = \"trustedName\",\n PLUGIN = \"plugin\",\n EXTERNAL_PLUGIN = \"externalPlugin\",\n TRANSACTION_INFO = \"transactionInfo\",\n PROXY_INFO = \"proxyInfo\",\n ENUM = \"enum\",\n TRANSACTION_FIELD_DESCRIPTION = \"transactionFieldDescription\",\n WEB3_CHECK = \"web3Check\",\n DYNAMIC_NETWORK = \"dynamicNetwork\",\n DYNAMIC_NETWORK_ICON = \"dynamicNetworkIcon\",\n ERROR = \"error\",\n SAFE = \"safe\",\n SIGNER = \"signer\",\n}\n\nexport enum ClearSignContextReferenceType {\n TOKEN = ClearSignContextType.TOKEN,\n NFT = ClearSignContextType.NFT,\n TRUSTED_NAME = ClearSignContextType.TRUSTED_NAME,\n ENUM = ClearSignContextType.ENUM,\n CALLDATA = \"calldata\",\n}\n\nexport type ClearSignContextReference<\n Type extends ClearSignContextReferenceType = ClearSignContextReferenceType,\n> = Type extends ClearSignContextReferenceType.ENUM\n ? {\n type: ClearSignContextReferenceType.ENUM;\n valuePath: GenericPath;\n id: number; // enum id to reference\n }\n : Type extends ClearSignContextReferenceType.TRUSTED_NAME\n ? {\n type: ClearSignContextReferenceType.TRUSTED_NAME;\n valuePath: GenericPath;\n types: string[];\n sources: string[];\n }\n : Type extends ClearSignContextReferenceType.CALLDATA\n ? {\n type: ClearSignContextReferenceType.CALLDATA;\n callee: GenericPath;\n valuePath: GenericPath;\n selector?: GenericPath;\n amount?: GenericPath;\n spender?: GenericPath;\n chainId?: GenericPath;\n }\n :\n | {\n type: Type;\n valuePath: GenericPath;\n value?: never;\n }\n | {\n type: Type;\n valuePath?: never;\n value: string;\n };\n\nexport type ClearSignContextSuccessType = Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n>;\n\nexport type ClearSignContextSuccess<\n T extends Exclude<\n ClearSignContextType,\n ClearSignContextType.ERROR\n > = ClearSignContextSuccessType,\n> = T extends ClearSignContextType.ENUM\n ? {\n type: ClearSignContextType.ENUM;\n id: number;\n payload: string;\n value: number;\n certificate?: PkiCertificate;\n }\n : T extends ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION\n ? {\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION;\n payload: string;\n reference?: ClearSignContextReference;\n certificate?: PkiCertificate;\n }\n : {\n type: T;\n payload: string;\n certificate?: PkiCertificate;\n };\n\nexport type ClearSignContextError = {\n type: ClearSignContextType.ERROR;\n error: Error;\n};\n\nexport type ClearSignContext = ClearSignContextSuccess | ClearSignContextError;\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mCAAAE,EAAA,yBAAAC,IAAA,eAAAC,EAAAJ,GAIO,IAAKG,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,OAAS,SACTA,EAAA,gBAAkB,iBAClBA,EAAA,iBAAmB,kBACnBA,EAAA,WAAa,YACbA,EAAA,KAAO,OACPA,EAAA,8BAAgC,8BAChCA,EAAA,WAAa,YACbA,EAAA,gBAAkB,iBAClBA,EAAA,qBAAuB,qBACvBA,EAAA,MAAQ,QACRA,EAAA,KAAO,OACPA,EAAA,OAAS,SAfCA,OAAA,IAkBAD,OACVA,EAAA,MAAQ,QACRA,EAAA,IAAM,MACNA,EAAA,aAAe,cACfA,EAAA,KAAO,OACPA,EAAA,SAAW,WALDA,OAAA",
6
6
  "names": ["ClearSignContext_exports", "__export", "ClearSignContextReferenceType", "ClearSignContextType", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var c=(t,a)=>{for(var s in a)i(t,s,{get:a[s],enumerable:!0})},p=(t,a,s,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of u(a))!o.call(t,r)&&r!==s&&i(t,r,{get:()=>a[r],enumerable:!(n=g(a,r))||n.enumerable});return t};var l=t=>p(i({},"__esModule",{value:!0}),t);var y={};c(y,{KeyUsageMapper:()=>m});module.exports=l(y);var e=require("../../pki/model/KeyUsage");class m{static keyUsageMap=new Map([[e.KeyUsage.GenuineCheck,1],[e.KeyUsage.ExchangePayload,2],[e.KeyUsage.NftMeta,3],[e.KeyUsage.TrustedName,4],[e.KeyUsage.BackupProvider,5],[e.KeyUsage.ProtectOrchestrator,6],[e.KeyUsage.PluginMeta,7],[e.KeyUsage.CoinMeta,8],[e.KeyUsage.SeedIdAuth,9],[e.KeyUsage.TxSimulationSigner,10],[e.KeyUsage.Calldata,11],[e.KeyUsage.Network,12]]);static mapKeyUsageForFirmware(a){return Object.values(e.KeyUsage).includes(a)?this.keyUsageMap.get(a)??-1:-1}}0&&(module.exports={KeyUsageMapper});
1
+ "use strict";var i=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var c=(t,a)=>{for(var s in a)i(t,s,{get:a[s],enumerable:!0})},p=(t,a,s,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of u(a))!o.call(t,r)&&r!==s&&i(t,r,{get:()=>a[r],enumerable:!(n=g(a,r))||n.enumerable});return t};var l=t=>p(i({},"__esModule",{value:!0}),t);var y={};c(y,{KeyUsageMapper:()=>m});module.exports=l(y);var e=require("../../pki/model/KeyUsage");class m{static keyUsageMap=new Map([[e.KeyUsage.GenuineCheck,1],[e.KeyUsage.ExchangePayload,2],[e.KeyUsage.NftMeta,3],[e.KeyUsage.TrustedName,4],[e.KeyUsage.BackupProvider,5],[e.KeyUsage.ProtectOrchestrator,6],[e.KeyUsage.PluginMeta,7],[e.KeyUsage.CoinMeta,8],[e.KeyUsage.SeedIdAuth,9],[e.KeyUsage.TxSimulationSigner,10],[e.KeyUsage.Calldata,11],[e.KeyUsage.Network,12],[e.KeyUsage.LESMultisig,14]]);static mapKeyUsageForFirmware(a){return Object.values(e.KeyUsage).includes(a)?this.keyUsageMap.get(a)??-1:-1}}0&&(module.exports={KeyUsageMapper});
2
2
  //# sourceMappingURL=KeyUsageMapper.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/utils/KeyUsageMapper.ts"],
4
- "sourcesContent": ["import { KeyUsage } from \"@/pki/model/KeyUsage\";\n\nexport class KeyUsageMapper {\n private static keyUsageMap = new Map<KeyUsage, number>([\n [KeyUsage.GenuineCheck, 1],\n [KeyUsage.ExchangePayload, 2],\n [KeyUsage.NftMeta, 3],\n [KeyUsage.TrustedName, 4],\n [KeyUsage.BackupProvider, 5],\n [KeyUsage.ProtectOrchestrator, 6],\n [KeyUsage.PluginMeta, 7],\n [KeyUsage.CoinMeta, 8],\n [KeyUsage.SeedIdAuth, 9],\n [KeyUsage.TxSimulationSigner, 10],\n [KeyUsage.Calldata, 11],\n [KeyUsage.Network, 12],\n ]);\n\n static mapKeyUsageForFirmware(keyUsage: string): number {\n if (Object.values(KeyUsage).includes(keyUsage as KeyUsage)) {\n return this.keyUsageMap.get(keyUsage as KeyUsage) ?? -1;\n }\n return -1;\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyB,gCAElB,MAAMF,CAAe,CAC1B,OAAe,YAAc,IAAI,IAAsB,CACrD,CAAC,WAAS,aAAc,CAAC,EACzB,CAAC,WAAS,gBAAiB,CAAC,EAC5B,CAAC,WAAS,QAAS,CAAC,EACpB,CAAC,WAAS,YAAa,CAAC,EACxB,CAAC,WAAS,eAAgB,CAAC,EAC3B,CAAC,WAAS,oBAAqB,CAAC,EAChC,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,SAAU,CAAC,EACrB,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,mBAAoB,EAAE,EAChC,CAAC,WAAS,SAAU,EAAE,EACtB,CAAC,WAAS,QAAS,EAAE,CACvB,CAAC,EAED,OAAO,uBAAuBG,EAA0B,CACtD,OAAI,OAAO,OAAO,UAAQ,EAAE,SAASA,CAAoB,EAChD,KAAK,YAAY,IAAIA,CAAoB,GAAK,GAEhD,EACT,CACF",
4
+ "sourcesContent": ["import { KeyUsage } from \"@/pki/model/KeyUsage\";\n\nexport class KeyUsageMapper {\n private static keyUsageMap = new Map<KeyUsage, number>([\n [KeyUsage.GenuineCheck, 1],\n [KeyUsage.ExchangePayload, 2],\n [KeyUsage.NftMeta, 3],\n [KeyUsage.TrustedName, 4],\n [KeyUsage.BackupProvider, 5],\n [KeyUsage.ProtectOrchestrator, 6],\n [KeyUsage.PluginMeta, 7],\n [KeyUsage.CoinMeta, 8],\n [KeyUsage.SeedIdAuth, 9],\n [KeyUsage.TxSimulationSigner, 10],\n [KeyUsage.Calldata, 11],\n [KeyUsage.Network, 12],\n [KeyUsage.LESMultisig, 14],\n ]);\n\n static mapKeyUsageForFirmware(keyUsage: string): number {\n if (Object.values(KeyUsage).includes(keyUsage as KeyUsage)) {\n return this.keyUsageMap.get(keyUsage as KeyUsage) ?? -1;\n }\n return -1;\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyB,gCAElB,MAAMF,CAAe,CAC1B,OAAe,YAAc,IAAI,IAAsB,CACrD,CAAC,WAAS,aAAc,CAAC,EACzB,CAAC,WAAS,gBAAiB,CAAC,EAC5B,CAAC,WAAS,QAAS,CAAC,EACpB,CAAC,WAAS,YAAa,CAAC,EACxB,CAAC,WAAS,eAAgB,CAAC,EAC3B,CAAC,WAAS,oBAAqB,CAAC,EAChC,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,SAAU,CAAC,EACrB,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,mBAAoB,EAAE,EAChC,CAAC,WAAS,SAAU,EAAE,EACtB,CAAC,WAAS,QAAS,EAAE,EACrB,CAAC,WAAS,YAAa,EAAE,CAC3B,CAAC,EAED,OAAO,uBAAuBG,EAA0B,CACtD,OAAI,OAAO,OAAO,UAAQ,EAAE,SAASA,CAAoB,EAChD,KAAK,YAAY,IAAIA,CAAoB,GAAK,GAEhD,EACT,CACF",
6
6
  "names": ["KeyUsageMapper_exports", "__export", "KeyUsageMapper", "__toCommonJS", "import_KeyUsage", "keyUsage"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("../../pki/model/KeyUsage"),r=require("../../shared/utils/KeyUsageMapper");describe("KeyUsageMapper",()=>{describe("mapKeyUsageForFirmware",()=>{it.each([[e.KeyUsage.GenuineCheck,1],[e.KeyUsage.ExchangePayload,2],[e.KeyUsage.NftMeta,3],[e.KeyUsage.TrustedName,4],[e.KeyUsage.BackupProvider,5],[e.KeyUsage.ProtectOrchestrator,6],[e.KeyUsage.PluginMeta,7],[e.KeyUsage.CoinMeta,8],[e.KeyUsage.SeedIdAuth,9],[e.KeyUsage.TxSimulationSigner,10],[e.KeyUsage.Calldata,11],[e.KeyUsage.Network,12]])("should map key usage %s to %i",(a,t)=>{const o=r.KeyUsageMapper.mapKeyUsageForFirmware(a);expect(o).toEqual(t)}),it("should return -1 when key usage is not found",()=>{const a=r.KeyUsageMapper.mapKeyUsageForFirmware("unknown");expect(a).toEqual(-1)})})});
1
+ "use strict";var e=require("../../pki/model/KeyUsage"),r=require("../../shared/utils/KeyUsageMapper");describe("KeyUsageMapper",()=>{describe("mapKeyUsageForFirmware",()=>{it.each([[e.KeyUsage.GenuineCheck,1],[e.KeyUsage.ExchangePayload,2],[e.KeyUsage.NftMeta,3],[e.KeyUsage.TrustedName,4],[e.KeyUsage.BackupProvider,5],[e.KeyUsage.ProtectOrchestrator,6],[e.KeyUsage.PluginMeta,7],[e.KeyUsage.CoinMeta,8],[e.KeyUsage.SeedIdAuth,9],[e.KeyUsage.TxSimulationSigner,10],[e.KeyUsage.Calldata,11],[e.KeyUsage.Network,12],[e.KeyUsage.LESMultisig,14]])("should map key usage %s to %i",(a,t)=>{const o=r.KeyUsageMapper.mapKeyUsageForFirmware(a);expect(o).toEqual(t)}),it("should return -1 when key usage is not found",()=>{const a=r.KeyUsageMapper.mapKeyUsageForFirmware("unknown");expect(a).toEqual(-1)})})});
2
2
  //# sourceMappingURL=KeyUsageMapper.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/utils/KeyUsageMapper.test.ts"],
4
- "sourcesContent": ["import { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { KeyUsageMapper } from \"@/shared/utils/KeyUsageMapper\";\n\ndescribe(\"KeyUsageMapper\", () => {\n describe(\"mapKeyUsageForFirmware\", () => {\n it.each([\n [KeyUsage.GenuineCheck, 1],\n [KeyUsage.ExchangePayload, 2],\n [KeyUsage.NftMeta, 3],\n [KeyUsage.TrustedName, 4],\n [KeyUsage.BackupProvider, 5],\n [KeyUsage.ProtectOrchestrator, 6],\n [KeyUsage.PluginMeta, 7],\n [KeyUsage.CoinMeta, 8],\n [KeyUsage.SeedIdAuth, 9],\n [KeyUsage.TxSimulationSigner, 10],\n [KeyUsage.Calldata, 11],\n [KeyUsage.Network, 12],\n ])(`should map key usage %s to %i`, (keyUsage, expected) => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(keyUsage);\n\n // THEN\n expect(result).toEqual(expected);\n });\n\n it(\"should return -1 when key usage is not found\", () => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(\n \"unknown\" as KeyUsage,\n );\n\n // THEN\n expect(result).toEqual(-1);\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAAyB,gCACzBC,EAA+B,yCAE/B,SAAS,iBAAkB,IAAM,CAC/B,SAAS,yBAA0B,IAAM,CACvC,GAAG,KAAK,CACN,CAAC,WAAS,aAAc,CAAC,EACzB,CAAC,WAAS,gBAAiB,CAAC,EAC5B,CAAC,WAAS,QAAS,CAAC,EACpB,CAAC,WAAS,YAAa,CAAC,EACxB,CAAC,WAAS,eAAgB,CAAC,EAC3B,CAAC,WAAS,oBAAqB,CAAC,EAChC,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,SAAU,CAAC,EACrB,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,mBAAoB,EAAE,EAChC,CAAC,WAAS,SAAU,EAAE,EACtB,CAAC,WAAS,QAAS,EAAE,CACvB,CAAC,EAAE,gCAAiC,CAACC,EAAUC,IAAa,CAE1D,MAAMC,EAAS,iBAAe,uBAAuBF,CAAQ,EAG7D,OAAOE,CAAM,EAAE,QAAQD,CAAQ,CACjC,CAAC,EAED,GAAG,+CAAgD,IAAM,CAEvD,MAAMC,EAAS,iBAAe,uBAC5B,SACF,EAGA,OAAOA,CAAM,EAAE,QAAQ,EAAE,CAC3B,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { KeyUsageMapper } from \"@/shared/utils/KeyUsageMapper\";\n\ndescribe(\"KeyUsageMapper\", () => {\n describe(\"mapKeyUsageForFirmware\", () => {\n it.each([\n [KeyUsage.GenuineCheck, 1],\n [KeyUsage.ExchangePayload, 2],\n [KeyUsage.NftMeta, 3],\n [KeyUsage.TrustedName, 4],\n [KeyUsage.BackupProvider, 5],\n [KeyUsage.ProtectOrchestrator, 6],\n [KeyUsage.PluginMeta, 7],\n [KeyUsage.CoinMeta, 8],\n [KeyUsage.SeedIdAuth, 9],\n [KeyUsage.TxSimulationSigner, 10],\n [KeyUsage.Calldata, 11],\n [KeyUsage.Network, 12],\n [KeyUsage.LESMultisig, 14],\n ])(`should map key usage %s to %i`, (keyUsage, expected) => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(keyUsage);\n\n // THEN\n expect(result).toEqual(expected);\n });\n\n it(\"should return -1 when key usage is not found\", () => {\n // WHEN\n const result = KeyUsageMapper.mapKeyUsageForFirmware(\n \"unknown\" as KeyUsage,\n );\n\n // THEN\n expect(result).toEqual(-1);\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAAyB,gCACzBC,EAA+B,yCAE/B,SAAS,iBAAkB,IAAM,CAC/B,SAAS,yBAA0B,IAAM,CACvC,GAAG,KAAK,CACN,CAAC,WAAS,aAAc,CAAC,EACzB,CAAC,WAAS,gBAAiB,CAAC,EAC5B,CAAC,WAAS,QAAS,CAAC,EACpB,CAAC,WAAS,YAAa,CAAC,EACxB,CAAC,WAAS,eAAgB,CAAC,EAC3B,CAAC,WAAS,oBAAqB,CAAC,EAChC,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,SAAU,CAAC,EACrB,CAAC,WAAS,WAAY,CAAC,EACvB,CAAC,WAAS,mBAAoB,EAAE,EAChC,CAAC,WAAS,SAAU,EAAE,EACtB,CAAC,WAAS,QAAS,EAAE,EACrB,CAAC,WAAS,YAAa,EAAE,CAC3B,CAAC,EAAE,gCAAiC,CAACC,EAAUC,IAAa,CAE1D,MAAMC,EAAS,iBAAe,uBAAuBF,CAAQ,EAG7D,OAAOE,CAAM,EAAE,QAAQD,CAAQ,CACjC,CAAC,EAED,GAAG,+CAAgD,IAAM,CAEvD,MAAMC,EAAS,iBAAe,uBAC5B,SACF,EAGA,OAAOA,CAAM,EAAE,QAAQ,EAAE,CAC3B,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_KeyUsage", "import_KeyUsageMapper", "keyUsage", "expected", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var T=Object.create;var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var D=(r,t)=>{for(var e in t)s(r,e,{get:t[e],enumerable:!0})},p=(r,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of x(t))!_.call(r,o)&&o!==e&&s(r,o,{get:()=>t[o],enumerable:!(n=d(t,o))||n.enumerable});return r};var g=(r,t,e)=>(e=r!=null?T(y(r)):{},p(t||!r||!r.__esModule?s(e,"default",{value:r,enumerable:!0}):e,r)),G=r=>p(s({},"__esModule",{value:!0}),r),l=(r,t,e,n)=>{for(var o=n>1?void 0:n?d(t,e):t,i=r.length-1,m;i>=0;i--)(m=r[i])&&(o=(n?m(t,e,o):m(o))||o);return n&&o&&s(t,e,o),o},u=(r,t)=>(e,n)=>t(e,n,r);var I={};D(I,{HttpTokenDataSource:()=>a});module.exports=G(I);var h=g(require("axios")),f=require("inversify"),c=require("purify-ts"),k=require("../../config/di/configTypes"),E=require("../../shared/constant/HttpHeaders"),C=g(require("../../../package.json"));let a=class{constructor(t){this.config=t}async getTokenInfosPayload({chainId:t,address:e}){try{const o=(await h.default.request({method:"GET",url:`${this.config.cal.url}/tokens`,params:{contract_address:e,chain_id:t,output:"descriptor,ticker",ref:`branch:${this.config.cal.branch}`},headers:{[E.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${C.default.version}`}})).data?.[0];if(!o||!o.ticker||!o.descriptor||!o.descriptor.data||!o.descriptor.signatures||typeof o.descriptor.signatures[this.config.cal.mode]!="string")return(0,c.Left)(new Error(`[ContextModule] HttpTokenDataSource: no token metadata for address ${e} on chain ${t}`));const i=o.ticker.length.toString(16).padStart(2,"0");return(0,c.Right)([i,o.descriptor.data,o.descriptor.signatures[this.config.cal.mode]].join(""))}catch{return(0,c.Left)(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};a=l([(0,f.injectable)(),u(0,(0,f.inject)(k.configTypes.Config))],a);0&&(module.exports={HttpTokenDataSource});
1
+ "use strict";var T=Object.create;var s=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var D=(r,o)=>{for(var e in o)s(r,e,{get:o[e],enumerable:!0})},p=(r,o,e,n)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of x(o))!_.call(r,t)&&t!==e&&s(r,t,{get:()=>o[t],enumerable:!(n=d(o,t))||n.enumerable});return r};var g=(r,o,e)=>(e=r!=null?T(y(r)):{},p(o||!r||!r.__esModule?s(e,"default",{value:r,enumerable:!0}):e,r)),G=r=>p(s({},"__esModule",{value:!0}),r),l=(r,o,e,n)=>{for(var t=n>1?void 0:n?d(o,e):o,i=r.length-1,m;i>=0;i--)(m=r[i])&&(t=(n?m(o,e,t):m(t))||t);return n&&t&&s(o,e,t),t},u=(r,o)=>(e,n)=>o(e,n,r);var I={};D(I,{HttpTokenDataSource:()=>a});module.exports=G(I);var h=g(require("axios")),f=require("inversify"),c=require("purify-ts"),E=require("../../config/di/configTypes"),k=require("../../shared/constant/HttpHeaders"),C=g(require("../../../package.json"));let a=class{constructor(o){this.config=o}async getTokenInfosPayload({chainId:o,address:e}){try{const t=(await h.default.request({method:"GET",url:`${this.config.cal.url}/tokens`,params:{contract_address:e,chain_id:o,output:"descriptor",ref:`branch:${this.config.cal.branch}`},headers:{[k.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${C.default.version}`}})).data?.[0];if(!t||!t.descriptor||!t.descriptor.data||!t.descriptor.signatures||typeof t.descriptor.signatures[this.config.cal.mode]!="string")return(0,c.Left)(new Error(`[ContextModule] HttpTokenDataSource: no token metadata for address ${e} on chain ${o}`));const i=(t.descriptor.data.length/2-20-4-4).toString(16).padStart(2,"0");return(0,c.Right)([i,t.descriptor.data,t.descriptor.signatures[this.config.cal.mode]].join(""))}catch{return(0,c.Left)(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};a=l([(0,f.injectable)(),u(0,(0,f.inject)(E.configTypes.Config))],a);0&&(module.exports={HttpTokenDataSource});
2
2
  //# sourceMappingURL=HttpTokenDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/token/data/HttpTokenDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { GetTokenInfosParams, TokenDataSource } from \"./TokenDataSource\";\nimport { TokenDto } from \"./TokenDto\";\n\n@injectable()\nexport class HttpTokenDataSource implements TokenDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n public async getTokenInfosPayload({\n chainId,\n address,\n }: GetTokenInfosParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<TokenDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/tokens`,\n params: {\n contract_address: address,\n chain_id: chainId,\n output: \"descriptor,ticker\",\n ref: `branch:${this.config.cal.branch}`,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n });\n const tokenInfos = response.data?.[0];\n\n if (\n !tokenInfos ||\n !tokenInfos.ticker ||\n !tokenInfos.descriptor ||\n !tokenInfos.descriptor.data ||\n !tokenInfos.descriptor.signatures ||\n typeof tokenInfos.descriptor.signatures[this.config.cal.mode] !==\n \"string\"\n ) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenDataSource: no token metadata for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n // 1 byte for the length of the ticker\n const tickerLengthBuff = tokenInfos.ticker.length\n .toString(16)\n .padStart(2, \"0\");\n\n return Right(\n [\n tickerLengthBuff,\n tokenInfos.descriptor.data,\n tokenInfos.descriptor.signatures[this.config.cal.mode],\n ].join(\"\"),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n );\n }\n }\n}\n"],
5
- "mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAE5BC,EAA6C,yCAC7CC,EAAoB,iCAMb,IAAMC,EAAN,KAAqD,CAC1D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CACH,MAAa,qBAAqB,CAChC,QAAAC,EACA,QAAAC,CACF,EAAwD,CACtD,GAAI,CAcF,MAAMC,GAbW,MAAM,EAAAC,QAAM,QAAoB,CAC/C,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,UAC3B,OAAQ,CACN,iBAAkBF,EAClB,SAAUD,EACV,OAAQ,oBACR,IAAK,UAAU,KAAK,OAAO,IAAI,MAAM,EACvC,EACA,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAI,QAAQ,OAAO,EACnE,CACF,CAAC,GAC2B,OAAO,CAAC,EAEpC,GACE,CAACF,GACD,CAACA,EAAW,QACZ,CAACA,EAAW,YACZ,CAACA,EAAW,WAAW,MACvB,CAACA,EAAW,WAAW,YACvB,OAAOA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,GAC1D,SAEF,SAAO,QACL,IAAI,MACF,sEAAsED,CAAO,aAAaD,CAAO,EACnG,CACF,EAIF,MAAMK,EAAmBH,EAAW,OAAO,OACxC,SAAS,EAAE,EACX,SAAS,EAAG,GAAG,EAElB,SAAO,SACL,CACEG,EACAH,EAAW,WAAW,KACtBA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,CACvD,EAAE,KAAK,EAAE,CACX,CACF,MAAiB,CACf,SAAO,QACL,IAAI,MACF,yEACF,CACF,CACF,CACF,CACF,EA5DaJ,EAANQ,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,cAAY,MAAM,IAFjBT",
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { GetTokenInfosParams, TokenDataSource } from \"./TokenDataSource\";\nimport { TokenDto } from \"./TokenDto\";\n\n@injectable()\nexport class HttpTokenDataSource implements TokenDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n public async getTokenInfosPayload({\n chainId,\n address,\n }: GetTokenInfosParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<TokenDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/tokens`,\n params: {\n contract_address: address,\n chain_id: chainId,\n output: \"descriptor\",\n ref: `branch:${this.config.cal.branch}`,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n });\n const tokenInfos = response.data?.[0];\n\n if (\n !tokenInfos ||\n !tokenInfos.descriptor ||\n !tokenInfos.descriptor.data ||\n !tokenInfos.descriptor.signatures ||\n typeof tokenInfos.descriptor.signatures[this.config.cal.mode] !==\n \"string\"\n ) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenDataSource: no token metadata for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n // According to documentation: https://github.com/LedgerHQ/app-ethereum/blob/develop/doc/ethapp.adoc#provide-erc-20-token-information\n // Signed descriptor is composed of:\n // ticker || address (20 bytes) || number of decimals (4 bytes) || chainId (4 bytes)\n const tickerLengthBuff = (\n tokenInfos.descriptor.data.length / 2 -\n 20 -\n 4 -\n 4\n )\n .toString(16)\n .padStart(2, \"0\");\n\n return Right(\n [\n tickerLengthBuff,\n tokenInfos.descriptor.data,\n tokenInfos.descriptor.signatures[this.config.cal.mode],\n ].join(\"\"),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n );\n }\n }\n}\n"],
5
+ "mappings": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAE5BC,EAA6C,yCAC7CC,EAAoB,iCAMb,IAAMC,EAAN,KAAqD,CAC1D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CACH,MAAa,qBAAqB,CAChC,QAAAC,EACA,QAAAC,CACF,EAAwD,CACtD,GAAI,CAcF,MAAMC,GAbW,MAAM,EAAAC,QAAM,QAAoB,CAC/C,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,UAC3B,OAAQ,CACN,iBAAkBF,EAClB,SAAUD,EACV,OAAQ,aACR,IAAK,UAAU,KAAK,OAAO,IAAI,MAAM,EACvC,EACA,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAI,QAAQ,OAAO,EACnE,CACF,CAAC,GAC2B,OAAO,CAAC,EAEpC,GACE,CAACF,GACD,CAACA,EAAW,YACZ,CAACA,EAAW,WAAW,MACvB,CAACA,EAAW,WAAW,YACvB,OAAOA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,GAC1D,SAEF,SAAO,QACL,IAAI,MACF,sEAAsED,CAAO,aAAaD,CAAO,EACnG,CACF,EAMF,MAAMK,GACJH,EAAW,WAAW,KAAK,OAAS,EACpC,GACA,EACA,GAEC,SAAS,EAAE,EACX,SAAS,EAAG,GAAG,EAElB,SAAO,SACL,CACEG,EACAH,EAAW,WAAW,KACtBA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,CACvD,EAAE,KAAK,EAAE,CACX,CACF,MAAiB,CACf,SAAO,QACL,IAAI,MACF,yEACF,CACF,CACF,CACF,CACF,EAlEaJ,EAANQ,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,cAAY,MAAM,IAFjBT",
6
6
  "names": ["HttpTokenDataSource_exports", "__export", "HttpTokenDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_configTypes", "import_HttpHeaders", "import_package", "HttpTokenDataSource", "config", "chainId", "address", "tokenInfos", "axios", "PACKAGE", "tickerLengthBuff", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var p=Object.create;var d=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var f=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of m(e))!h.call(t,r)&&r!==o&&d(t,r,{get:()=>e[r],enumerable:!(s=k(e,r))||s.enumerable});return t};var i=(t,e,o)=>(o=t!=null?p(x(t)):{},f(e||!t||!t.__esModule?d(o,"default",{value:t,enumerable:!0}):o,t));var a=i(require("axios")),n=require("purify-ts"),c=require("../../shared/constant/HttpHeaders"),u=require("../../token/data/HttpTokenDataSource"),l=i(require("../../../package.json"));vi.mock("axios");describe("HttpTokenDataSource",()=>{let t;beforeAll(()=>{const e={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}};t=new u.HttpTokenDataSource(e),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const e=`context-module/${l.default.version}`,o=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(a.default,"request").mockImplementation(o),await t.getTokenInfosPayload({address:"0x00",chainId:1}),expect(o).toHaveBeenCalledWith(expect.objectContaining({headers:{[c.LEDGER_CLIENT_VERSION_HEADER]:e}}))}),it("should return a string when axios response is correct",async()=>{const e={ticker:"USDC",descriptor:{data:"55534443000000000800000001",signatures:{prod:"0123"}}};vi.spyOn(a.default,"request").mockResolvedValue({data:[e]});const o=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(o.extract()).toEqual("04555344430000000008000000010123")}),it("should return an error when data is empty",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:void 0});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,n.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no signature",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:[{}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,n.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no ticker",async()=>{const e={ticker:"USDC",descriptor:{data:"55534443000000000800000001",signatures:{test:"0123"}}};vi.spyOn(a.default,"request").mockResolvedValue({data:[e]});const o=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(o).toEqual((0,n.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no decimals",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:[{live_signature:"0x0",ticker:"USDC"}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,n.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return an error when axios throws an error",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error);const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,n.Left)(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
1
+ "use strict";var p=Object.create;var c=Object.defineProperty;var k=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var h=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of m(e))!f.call(t,n)&&n!==o&&c(t,n,{get:()=>e[n],enumerable:!(s=k(e,n))||s.enumerable});return t};var d=(t,e,o)=>(o=t!=null?p(x(t)):{},h(e||!t||!t.__esModule?c(o,"default",{value:t,enumerable:!0}):o,t));var a=d(require("axios")),r=require("purify-ts"),i=require("../../shared/constant/HttpHeaders"),l=require("../../token/data/HttpTokenDataSource"),u=d(require("../../../package.json"));vi.mock("axios");describe("HttpTokenDataSource",()=>{let t;beforeAll(()=>{const e={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}};t=new l.HttpTokenDataSource(e),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const e=`context-module/${u.default.version}`,o=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(a.default,"request").mockImplementation(o),await t.getTokenInfosPayload({address:"0x00",chainId:1}),expect(o).toHaveBeenCalledWith(expect.objectContaining({headers:{[i.LEDGER_CLIENT_VERSION_HEADER]:e}}))}),it("should return a string when axios response is correct",async()=>{const e={ticker:"USDC",descriptor:{data:"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089",signatures:{prod:"0123"}}};vi.spyOn(a.default,"request").mockResolvedValue({data:[e]});const o=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(o.extract()).toEqual("04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123")}),it("should return a string when axios response is correct with a prefixed ticker",async()=>{const e={ticker:"tUSDC",descriptor:{data:"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7",signatures:{prod:"0123"}}};vi.spyOn(a.default,"request").mockResolvedValue({data:[e]});const o=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(o.extract()).toEqual("067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123")}),it("should return an error when data is empty",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:void 0});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no signature",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:[{}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no decimals",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({data:[{live_signature:"0x0",ticker:"USDC"}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return an error when axios throws an error",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error);const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
2
2
  //# sourceMappingURL=HttpTokenDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/token/data/HttpTokenDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport { HttpTokenDataSource } from \"@/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/token/data/TokenDto\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n datasource = new HttpTokenDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n });\n\n it(\"should return a string when axios response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"55534443000000000800000001\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\"04555344430000000008000000010123\");\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [{}] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"55534443000000000800000001\",\n signatures: {\n test: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({\n data: [{ live_signature: \"0x0\", ticker: \"USDC\" }],\n });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport { HttpTokenDataSource } from \"@/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/token/data/TokenDto\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n datasource = new HttpTokenDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n });\n\n it(\"should return a string when axios response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123\",\n );\n });\n\n it(\"should return a string when axios response is correct with a prefixed ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"tUSDC\",\n descriptor: {\n data: \"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123\",\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [{}] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({\n data: [{ live_signature: \"0x0\", ticker: \"USDC\" }],\n });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_axios", "import_purify_ts", "import_HttpHeaders", "import_HttpTokenDataSource", "import_package", "datasource", "config", "version", "PACKAGE", "requestSpy", "axios", "tokenDTO", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var R=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var t=(A,T)=>{for(var P in T)R(A,P,{get:T[P],enumerable:!0})},o=(A,T,P,S)=>{if(T&&typeof T=="object"||typeof T=="function")for(let E of W(T))!a.call(A,E)&&E!==P&&R(A,E,{get:()=>T[E],enumerable:!(S=C(T,E))||S.enumerable});return A};var p=A=>o(R({},"__esModule",{value:!0}),A);var d={};t(d,{UNISWAP_COMMANDS:()=>n,UNISWAP_EXECUTE_ABI:()=>M,UNISWAP_EXECUTE_SELECTOR:()=>e,UNISWAP_SWAP_COMMANDS:()=>U,UNISWAP_UNIVERSAL_ROUTER_ADDRESS:()=>N,UniswapSupportedCommand:()=>I});module.exports=p(d);const M=["function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable"],N="0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad",e="0x3593564c";var I=(_=>(_.V2_SWAP_EXACT_IN="V2_SWAP_EXACT_IN",_.V2_SWAP_EXACT_OUT="V2_SWAP_EXACT_OUT",_.V3_SWAP_EXACT_IN="V3_SWAP_EXACT_IN",_.V3_SWAP_EXACT_OUT="V3_SWAP_EXACT_OUT",_.WRAP_ETH="WRAP_ETH",_.UNWRAP_ETH="UNWRAP_ETH",_.PERMIT2_PERMIT="PERMIT2_PERMIT",_.PERMIT2_TRANSFER_FROM="PERMIT2_TRANSFER_FROM",_.PERMIT2_PERMIT_BATCH="PERMIT2_PERMIT_BATCH",_.PERMIT2_TRANSFER_FROM_BATCH="PERMIT2_TRANSFER_FROM_BATCH",_.PAY_PORTION="PAY_PORTION",_.SWEEP="SWEEP",_))(I||{});const n={"0x08":"V2_SWAP_EXACT_IN","0x09":"V2_SWAP_EXACT_OUT","0x00":"V3_SWAP_EXACT_IN","0x01":"V3_SWAP_EXACT_OUT","0x0b":"WRAP_ETH","0x0c":"UNWRAP_ETH","0x0a":"PERMIT2_PERMIT","0x0d":"PERMIT2_TRANSFER_FROM","0x02":"PERMIT2_PERMIT_BATCH","0x03":"PERMIT2_TRANSFER_FROM_BATCH","0x06":"PAY_PORTION","0x04":"SWEEP"},U=["V2_SWAP_EXACT_IN","V2_SWAP_EXACT_OUT","V3_SWAP_EXACT_IN","V3_SWAP_EXACT_OUT"];0&&(module.exports={UNISWAP_COMMANDS,UNISWAP_EXECUTE_ABI,UNISWAP_EXECUTE_SELECTOR,UNISWAP_SWAP_COMMANDS,UNISWAP_UNIVERSAL_ROUTER_ADDRESS,UniswapSupportedCommand});
1
+ "use strict";var R=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var t=Object.prototype.hasOwnProperty;var M=(A,T)=>{for(var P in T)R(A,P,{get:T[P],enumerable:!0})},p=(A,T,P,S)=>{if(T&&typeof T=="object"||typeof T=="function")for(let E of W(T))!t.call(A,E)&&E!==P&&R(A,E,{get:()=>T[E],enumerable:!(S=C(T,E))||S.enumerable});return A};var a=A=>p(R({},"__esModule",{value:!0}),A);var O={};M(O,{UNISWAP_COMMANDS:()=>o,UNISWAP_EXECUTE_ABI:()=>e,UNISWAP_EXECUTE_SELECTOR:()=>n,UNISWAP_SWAP_COMMANDS:()=>N,UniswapSupportedCommand:()=>I});module.exports=a(O);const e=["function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable"],n="0x3593564c";var I=(_=>(_.V2_SWAP_EXACT_IN="V2_SWAP_EXACT_IN",_.V2_SWAP_EXACT_OUT="V2_SWAP_EXACT_OUT",_.V3_SWAP_EXACT_IN="V3_SWAP_EXACT_IN",_.V3_SWAP_EXACT_OUT="V3_SWAP_EXACT_OUT",_.WRAP_ETH="WRAP_ETH",_.UNWRAP_ETH="UNWRAP_ETH",_.PERMIT2_PERMIT="PERMIT2_PERMIT",_.PERMIT2_TRANSFER_FROM="PERMIT2_TRANSFER_FROM",_.PERMIT2_PERMIT_BATCH="PERMIT2_PERMIT_BATCH",_.PERMIT2_TRANSFER_FROM_BATCH="PERMIT2_TRANSFER_FROM_BATCH",_.PAY_PORTION="PAY_PORTION",_.SWEEP="SWEEP",_))(I||{});const o={"0x08":"V2_SWAP_EXACT_IN","0x09":"V2_SWAP_EXACT_OUT","0x00":"V3_SWAP_EXACT_IN","0x01":"V3_SWAP_EXACT_OUT","0x0b":"WRAP_ETH","0x0c":"UNWRAP_ETH","0x0a":"PERMIT2_PERMIT","0x0d":"PERMIT2_TRANSFER_FROM","0x02":"PERMIT2_PERMIT_BATCH","0x03":"PERMIT2_TRANSFER_FROM_BATCH","0x06":"PAY_PORTION","0x04":"SWEEP"},N=["V2_SWAP_EXACT_IN","V2_SWAP_EXACT_OUT","V3_SWAP_EXACT_IN","V3_SWAP_EXACT_OUT"];0&&(module.exports={UNISWAP_COMMANDS,UNISWAP_EXECUTE_ABI,UNISWAP_EXECUTE_SELECTOR,UNISWAP_SWAP_COMMANDS,UniswapSupportedCommand});
2
2
  //# sourceMappingURL=uniswap.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/uniswap/constants/uniswap.ts"],
4
- "sourcesContent": ["import { type HexaString } from \"@ledgerhq/device-management-kit\";\n\nexport const UNISWAP_EXECUTE_ABI = [\n \"function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable\",\n];\n\nexport const UNISWAP_UNIVERSAL_ROUTER_ADDRESS =\n \"0x3fc91a3afd70395cd496c647d5a6cc9d4b2b7fad\";\nexport const UNISWAP_EXECUTE_SELECTOR = \"0x3593564c\";\n\nexport enum UniswapSupportedCommand {\n V2_SWAP_EXACT_IN = \"V2_SWAP_EXACT_IN\",\n V2_SWAP_EXACT_OUT = \"V2_SWAP_EXACT_OUT\",\n V3_SWAP_EXACT_IN = \"V3_SWAP_EXACT_IN\",\n V3_SWAP_EXACT_OUT = \"V3_SWAP_EXACT_OUT\",\n WRAP_ETH = \"WRAP_ETH\",\n UNWRAP_ETH = \"UNWRAP_ETH\",\n PERMIT2_PERMIT = \"PERMIT2_PERMIT\",\n PERMIT2_TRANSFER_FROM = \"PERMIT2_TRANSFER_FROM\",\n PERMIT2_PERMIT_BATCH = \"PERMIT2_PERMIT_BATCH\",\n PERMIT2_TRANSFER_FROM_BATCH = \"PERMIT2_TRANSFER_FROM_BATCH\",\n PAY_PORTION = \"PAY_PORTION\",\n SWEEP = \"SWEEP\",\n}\n\nexport const UNISWAP_COMMANDS: Record<HexaString, UniswapSupportedCommand> = {\n \"0x08\": UniswapSupportedCommand.V2_SWAP_EXACT_IN,\n \"0x09\": UniswapSupportedCommand.V2_SWAP_EXACT_OUT,\n \"0x00\": UniswapSupportedCommand.V3_SWAP_EXACT_IN,\n \"0x01\": UniswapSupportedCommand.V3_SWAP_EXACT_OUT,\n \"0x0b\": UniswapSupportedCommand.WRAP_ETH,\n \"0x0c\": UniswapSupportedCommand.UNWRAP_ETH,\n \"0x0a\": UniswapSupportedCommand.PERMIT2_PERMIT,\n \"0x0d\": UniswapSupportedCommand.PERMIT2_TRANSFER_FROM,\n \"0x02\": UniswapSupportedCommand.PERMIT2_PERMIT_BATCH,\n \"0x03\": UniswapSupportedCommand.PERMIT2_TRANSFER_FROM_BATCH,\n \"0x06\": UniswapSupportedCommand.PAY_PORTION,\n \"0x04\": UniswapSupportedCommand.SWEEP,\n};\n\nexport const UNISWAP_SWAP_COMMANDS: UniswapSupportedCommand[] = [\n UniswapSupportedCommand.V2_SWAP_EXACT_IN,\n UniswapSupportedCommand.V2_SWAP_EXACT_OUT,\n UniswapSupportedCommand.V3_SWAP_EXACT_IN,\n UniswapSupportedCommand.V3_SWAP_EXACT_OUT,\n];\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,wBAAAC,EAAA,6BAAAC,EAAA,0BAAAC,EAAA,qCAAAC,EAAA,4BAAAC,IAAA,eAAAC,EAAAR,GAEO,MAAMG,EAAsB,CACjC,uGACF,EAEaG,EACX,6CACWF,EAA2B,aAEjC,IAAKG,OACVA,EAAA,iBAAmB,mBACnBA,EAAA,kBAAoB,oBACpBA,EAAA,iBAAmB,mBACnBA,EAAA,kBAAoB,oBACpBA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,sBAAwB,wBACxBA,EAAA,qBAAuB,uBACvBA,EAAA,4BAA8B,8BAC9BA,EAAA,YAAc,cACdA,EAAA,MAAQ,QAZEA,OAAA,IAeL,MAAML,EAAgE,CAC3E,OAAQ,mBACR,OAAQ,oBACR,OAAQ,mBACR,OAAQ,oBACR,OAAQ,WACR,OAAQ,aACR,OAAQ,iBACR,OAAQ,wBACR,OAAQ,uBACR,OAAQ,8BACR,OAAQ,cACR,OAAQ,OACV,EAEaG,EAAmD,CAC9D,mBACA,oBACA,mBACA,mBACF",
6
- "names": ["uniswap_exports", "__export", "UNISWAP_COMMANDS", "UNISWAP_EXECUTE_ABI", "UNISWAP_EXECUTE_SELECTOR", "UNISWAP_SWAP_COMMANDS", "UNISWAP_UNIVERSAL_ROUTER_ADDRESS", "UniswapSupportedCommand", "__toCommonJS"]
4
+ "sourcesContent": ["import { type HexaString } from \"@ledgerhq/device-management-kit\";\n\nexport const UNISWAP_EXECUTE_ABI = [\n \"function execute(bytes calldata commands, bytes[] calldata inputs, uint256 deadline) external payable\",\n];\n\nexport const UNISWAP_EXECUTE_SELECTOR = \"0x3593564c\";\n\nexport enum UniswapSupportedCommand {\n V2_SWAP_EXACT_IN = \"V2_SWAP_EXACT_IN\",\n V2_SWAP_EXACT_OUT = \"V2_SWAP_EXACT_OUT\",\n V3_SWAP_EXACT_IN = \"V3_SWAP_EXACT_IN\",\n V3_SWAP_EXACT_OUT = \"V3_SWAP_EXACT_OUT\",\n WRAP_ETH = \"WRAP_ETH\",\n UNWRAP_ETH = \"UNWRAP_ETH\",\n PERMIT2_PERMIT = \"PERMIT2_PERMIT\",\n PERMIT2_TRANSFER_FROM = \"PERMIT2_TRANSFER_FROM\",\n PERMIT2_PERMIT_BATCH = \"PERMIT2_PERMIT_BATCH\",\n PERMIT2_TRANSFER_FROM_BATCH = \"PERMIT2_TRANSFER_FROM_BATCH\",\n PAY_PORTION = \"PAY_PORTION\",\n SWEEP = \"SWEEP\",\n}\n\nexport const UNISWAP_COMMANDS: Record<HexaString, UniswapSupportedCommand> = {\n \"0x08\": UniswapSupportedCommand.V2_SWAP_EXACT_IN,\n \"0x09\": UniswapSupportedCommand.V2_SWAP_EXACT_OUT,\n \"0x00\": UniswapSupportedCommand.V3_SWAP_EXACT_IN,\n \"0x01\": UniswapSupportedCommand.V3_SWAP_EXACT_OUT,\n \"0x0b\": UniswapSupportedCommand.WRAP_ETH,\n \"0x0c\": UniswapSupportedCommand.UNWRAP_ETH,\n \"0x0a\": UniswapSupportedCommand.PERMIT2_PERMIT,\n \"0x0d\": UniswapSupportedCommand.PERMIT2_TRANSFER_FROM,\n \"0x02\": UniswapSupportedCommand.PERMIT2_PERMIT_BATCH,\n \"0x03\": UniswapSupportedCommand.PERMIT2_TRANSFER_FROM_BATCH,\n \"0x06\": UniswapSupportedCommand.PAY_PORTION,\n \"0x04\": UniswapSupportedCommand.SWEEP,\n};\n\nexport const UNISWAP_SWAP_COMMANDS: UniswapSupportedCommand[] = [\n UniswapSupportedCommand.V2_SWAP_EXACT_IN,\n UniswapSupportedCommand.V2_SWAP_EXACT_OUT,\n UniswapSupportedCommand.V3_SWAP_EXACT_IN,\n UniswapSupportedCommand.V3_SWAP_EXACT_OUT,\n];\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,EAAA,wBAAAC,EAAA,6BAAAC,EAAA,0BAAAC,EAAA,4BAAAC,IAAA,eAAAC,EAAAP,GAEO,MAAMG,EAAsB,CACjC,uGACF,EAEaC,EAA2B,aAEjC,IAAKE,OACVA,EAAA,iBAAmB,mBACnBA,EAAA,kBAAoB,oBACpBA,EAAA,iBAAmB,mBACnBA,EAAA,kBAAoB,oBACpBA,EAAA,SAAW,WACXA,EAAA,WAAa,aACbA,EAAA,eAAiB,iBACjBA,EAAA,sBAAwB,wBACxBA,EAAA,qBAAuB,uBACvBA,EAAA,4BAA8B,8BAC9BA,EAAA,YAAc,cACdA,EAAA,MAAQ,QAZEA,OAAA,IAeL,MAAMJ,EAAgE,CAC3E,OAAQ,mBACR,OAAQ,oBACR,OAAQ,mBACR,OAAQ,oBACR,OAAQ,WACR,OAAQ,aACR,OAAQ,iBACR,OAAQ,wBACR,OAAQ,uBACR,OAAQ,8BACR,OAAQ,cACR,OAAQ,OACV,EAEaG,EAAmD,CAC9D,mBACA,oBACA,mBACA,mBACF",
6
+ "names": ["uniswap_exports", "__export", "UNISWAP_COMMANDS", "UNISWAP_EXECUTE_ABI", "UNISWAP_EXECUTE_SELECTOR", "UNISWAP_SWAP_COMMANDS", "UniswapSupportedCommand", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var g=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var N=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var H=(i,e)=>{for(var t in e)g(i,t,{get:e[t],enumerable:!0})},b=(i,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of N(e))!w.call(i,n)&&n!==t&&g(i,n,{get:()=>e[n],enumerable:!(a=D(e,n))||a.enumerable});return i};var k=i=>b(g({},"__esModule",{value:!0}),i),T=(i,e,t,a)=>{for(var n=a>1?void 0:a?D(e,t):e,r=i.length-1,d;r>=0;r--)(d=i[r])&&(n=(a?d(e,t,n):d(n))||n);return a&&n&&g(e,t,n),n},C=(i,e)=>(t,a)=>e(t,a,i);var v={};H(v,{UniswapContextLoader:()=>S});module.exports=k(v);var o=require("@ledgerhq/device-management-kit"),_=require("ethers"),u=require("inversify"),l=require("purify-ts"),p=require("../../shared/model/ClearSignContext"),U=require("../../token/di/tokenTypes"),f=require("../../uniswap/constants/plugin"),s=require("../../uniswap/constants/uniswap"),h=require("../../uniswap/di/uniswapTypes");const R=[p.ClearSignContextType.EXTERNAL_PLUGIN,p.ClearSignContextType.TOKEN];let S=class{constructor(e,t){this.commandDecoderDataSource=e;this.tokenDataSource=t}canHandle(e,t){return typeof e=="object"&&e!==null&&"to"in e&&"data"in e&&"selector"in e&&"chainId"in e&&typeof e.chainId=="number"&&(0,o.isHexaString)(e.data)&&e.data!=="0x"&&(0,o.isHexaString)(e.selector)&&e.selector===s.UNISWAP_EXECUTE_SELECTOR&&(0,o.isHexaString)(e.to)&&e.to===s.UNISWAP_UNIVERSAL_ROUTER_ADDRESS&&R.every(a=>t.includes(a))}async load(e){const{data:t,chainId:a}=e,n=this._buildUniswapPluginCommandData(),r=await this._extractClearSignContexts(t,a);return r.length>0?[n,...r]:[]}_buildUniswapPluginCommandData(){const e=new o.ByteArrayBuilder().add8BitUIntToData(f.UNISWAP_PLUGIN_NAME.length).addAsciiStringToData(f.UNISWAP_PLUGIN_NAME).addBufferToData((0,o.hexaStringToBuffer)(s.UNISWAP_UNIVERSAL_ROUTER_ADDRESS)).addBufferToData((0,o.hexaStringToBuffer)(s.UNISWAP_EXECUTE_SELECTOR)).addBufferToData((0,o.hexaStringToBuffer)(f.UNISWAP_PLUGIN_SIGNATURE)).build();return{type:p.ClearSignContextType.EXTERNAL_PLUGIN,payload:(0,o.bufferToHexaString)(e,!1)}}async _extractClearSignContexts(e,t){try{const n=new _.Interface(s.UNISWAP_EXECUTE_ABI).parseTransaction({data:e}),r=n?.args[0],d=n?.args[1];if(!(0,o.isHexaString)(r)||!this._isHexaStringArray(d))return[];const x=this._extractCommands(r).orDefault([]);if(r.length===0||d.length!==x.length)return[];const y=x.reduce((c,m,P)=>{const I=d[P],E=this.commandDecoderDataSource.decode(m,I,t);return c.push([m,E]),c},[]);if(!this._isChainingSwapSupported(y))return[];const A=[...new Set(y.flatMap(([,c])=>c))];return(await Promise.all(A.map(c=>this.tokenDataSource.getTokenInfosPayload({address:c,chainId:t})))).map(c=>c.caseOf({Left:m=>({type:p.ClearSignContextType.ERROR,error:m}),Right:m=>({type:p.ClearSignContextType.TOKEN,payload:m})}))}catch{return[]}}_extractCommands(e){return l.Maybe.fromNullable(e.slice(2).match(/../g)).map(t=>t.map(a=>`0x${a}`)).map(t=>t.map(a=>s.UNISWAP_COMMANDS[a])).chain(t=>t.every(a=>a!==void 0)?l.Maybe.of(t):l.Nothing)}_isChainingSwapSupported(e){let t,a;for(const[n,r]of e){if(!s.UNISWAP_SWAP_COMMANDS.includes(n))continue;const d=n.slice(0,2);if(t&&(t!==r[0]||a!==d))return!1;t=r[r.length-1],a=d}return!0}_isHexaStringArray(e){return Array.isArray(e)&&e.every(t=>typeof t=="string"&&(0,o.isHexaString)(t))}};S=T([(0,u.injectable)(),C(0,(0,u.inject)(h.uniswapTypes.CommandDecoderDataSource)),C(1,(0,u.inject)(U.tokenTypes.TokenDataSource))],S);0&&(module.exports={UniswapContextLoader});
1
+ "use strict";var l=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var E=(r,e)=>{for(var t in e)l(r,t,{get:e[t],enumerable:!0})},U=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of I(e))!k.call(r,a)&&a!==t&&l(r,a,{get:()=>e[a],enumerable:!(n=y(e,a))||n.enumerable});return r};var N=r=>U(l({},"__esModule",{value:!0}),r),h=(r,e,t,n)=>{for(var a=n>1?void 0:n?y(e,t):e,o=r.length-1,i;o>=0;o--)(i=r[o])&&(a=(n?i(e,t,a):i(a))||a);return n&&a&&l(e,t,a),a},f=(r,e)=>(t,n)=>e(t,n,r);var v={};E(v,{UniswapContextLoader:()=>p});module.exports=N(v);var m=require("@ledgerhq/device-management-kit"),D=require("ethers"),S=require("inversify"),u=require("purify-ts"),C=require("../../shared/model/ClearSignContext"),w=require("../../token/di/tokenTypes"),c=require("../../uniswap/constants/uniswap"),T=require("../../uniswap/di/uniswapTypes");const b=[C.ClearSignContextType.TOKEN];let p=class{constructor(e,t){this.commandDecoderDataSource=e;this.tokenDataSource=t}canHandle(e,t){return typeof e=="object"&&e!==null&&"data"in e&&"selector"in e&&"chainId"in e&&typeof e.chainId=="number"&&(0,m.isHexaString)(e.data)&&e.data!=="0x"&&(0,m.isHexaString)(e.selector)&&e.selector===c.UNISWAP_EXECUTE_SELECTOR&&b.every(n=>t.includes(n))}async load(e){const{data:t,chainId:n}=e;return await this._extractClearSignContexts(t,n)}async _extractClearSignContexts(e,t){try{const a=new D.Interface(c.UNISWAP_EXECUTE_ABI).parseTransaction({data:e}),o=a?.args[0],i=a?.args[1];if(!(0,m.isHexaString)(o)||!this._isHexaStringArray(i))return[];const g=this._extractCommands(o).orDefault([]);if(o.length===0||i.length!==g.length)return[];const x=g.reduce((s,d,H)=>{const P=i[H],A=this.commandDecoderDataSource.decode(d,P,t);return s.push([d,A]),s},[]);if(!this._isChainingSwapSupported(x))return[];const _=[...new Set(x.flatMap(([,s])=>s))];return(await Promise.all(_.map(s=>this.tokenDataSource.getTokenInfosPayload({address:s,chainId:t})))).map(s=>s.caseOf({Left:d=>({type:C.ClearSignContextType.ERROR,error:d}),Right:d=>({type:C.ClearSignContextType.TOKEN,payload:d})}))}catch{return[]}}_extractCommands(e){return u.Maybe.fromNullable(e.slice(2).match(/../g)).map(t=>t.map(n=>`0x${n}`)).map(t=>t.map(n=>c.UNISWAP_COMMANDS[n])).chain(t=>t.every(n=>n!==void 0)?u.Maybe.of(t):u.Nothing)}_isChainingSwapSupported(e){let t,n;for(const[a,o]of e){if(!c.UNISWAP_SWAP_COMMANDS.includes(a))continue;const i=a.slice(0,2);if(t&&(t!==o[0]||n!==i))return!1;t=o[o.length-1],n=i}return!0}_isHexaStringArray(e){return Array.isArray(e)&&e.every(t=>typeof t=="string"&&(0,m.isHexaString)(t))}};p=h([(0,S.injectable)(),f(0,(0,S.inject)(T.uniswapTypes.CommandDecoderDataSource)),f(1,(0,S.inject)(w.tokenTypes.TokenDataSource))],p);0&&(module.exports={UniswapContextLoader});
2
2
  //# sourceMappingURL=UniswapContextLoader.js.map