@ledgerhq/context-module 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/lib/cjs/package.json +2 -2
  2. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  3. package/lib/cjs/src/ContextModuleBuilder.js.map +2 -2
  4. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.test.js.map +2 -2
  6. package/lib/cjs/src/DefaultContextModule.js +1 -1
  7. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  8. package/lib/cjs/src/di.js +1 -1
  9. package/lib/cjs/src/di.js.map +3 -3
  10. package/lib/cjs/src/index.js +1 -1
  11. package/lib/cjs/src/index.js.map +2 -2
  12. package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  13. package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
  14. package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  15. package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  16. package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  17. package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  18. package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  19. package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
  20. package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  21. package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  22. package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
  23. package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
  24. package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  25. package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  26. package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  27. package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
  28. package/lib/cjs/src/modules/multichain/pki/model/KeyId.js +1 -1
  29. package/lib/cjs/src/modules/multichain/pki/model/KeyId.js.map +2 -2
  30. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
  31. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
  32. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
  33. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
  34. package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +2 -0
  35. package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
  36. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
  37. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
  38. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
  39. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
  40. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
  41. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
  42. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
  43. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
  44. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
  45. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
  46. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
  47. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
  48. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
  49. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
  50. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
  51. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
  52. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
  53. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
  54. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
  55. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
  56. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
  57. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
  58. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
  59. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
  60. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +2 -0
  61. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
  62. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
  63. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
  64. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
  65. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
  66. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
  67. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
  68. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
  69. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
  70. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
  71. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
  72. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
  73. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
  74. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
  75. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
  76. package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
  77. package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
  78. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
  79. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +2 -2
  80. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  81. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
  82. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js +1 -1
  83. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js.map +1 -1
  84. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js +1 -1
  85. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js.map +3 -3
  86. package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
  87. package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
  88. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
  89. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
  90. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
  91. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
  92. package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js +1 -1
  93. package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js.map +1 -1
  94. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  95. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  96. package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
  97. package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
  98. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
  99. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
  100. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
  101. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
  102. package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +2 -0
  103. package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
  104. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
  105. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
  106. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
  107. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
  108. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
  109. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
  110. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
  111. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
  112. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
  113. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
  114. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
  115. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
  116. package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js +2 -0
  117. package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
  118. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
  119. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
  120. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
  121. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
  122. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
  123. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
  124. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
  125. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
  126. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
  127. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
  128. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
  129. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
  130. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +2 -0
  131. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
  132. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
  133. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
  134. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
  135. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
  136. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
  137. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
  138. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
  139. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
  140. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  141. package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
  142. package/lib/cjs/src/shared/utils/HexStringUtils.js +1 -1
  143. package/lib/cjs/src/shared/utils/HexStringUtils.js.map +3 -3
  144. package/lib/cjs/src/shared/utils/HexStringUtils.test.js +1 -1
  145. package/lib/cjs/src/shared/utils/HexStringUtils.test.js.map +2 -2
  146. package/lib/cjs/src/shared/utils/certificateCache.js +2 -0
  147. package/lib/cjs/src/shared/utils/certificateCache.js.map +7 -0
  148. package/lib/cjs/src/shared/utils/certificateCache.test.js +2 -0
  149. package/lib/cjs/src/shared/utils/certificateCache.test.js.map +7 -0
  150. package/lib/cjs/src/shared/utils/certificateResult.js +2 -0
  151. package/lib/cjs/src/shared/utils/certificateResult.js.map +7 -0
  152. package/lib/cjs/src/shared/utils/certificateResult.test.js +2 -0
  153. package/lib/cjs/src/shared/utils/certificateResult.test.js.map +7 -0
  154. package/lib/cjs/src/shared/utils/challengeBoundLoader.js +2 -0
  155. package/lib/cjs/src/shared/utils/challengeBoundLoader.js.map +7 -0
  156. package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js +2 -0
  157. package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
  158. package/lib/cjs/src/shared/utils/deviceModelIdCodec.js +2 -0
  159. package/lib/cjs/src/shared/utils/deviceModelIdCodec.js.map +7 -0
  160. package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js +2 -0
  161. package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
  162. package/lib/cjs/src/shared/utils/signedDescriptorDto.js +2 -0
  163. package/lib/cjs/src/shared/utils/signedDescriptorDto.js.map +7 -0
  164. package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js +2 -0
  165. package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
  166. package/lib/cjs/src/shared/utils/uIntCodec.js +2 -0
  167. package/lib/cjs/src/shared/utils/uIntCodec.js.map +7 -0
  168. package/lib/cjs/src/shared/utils/uIntCodec.test.js +2 -0
  169. package/lib/cjs/src/shared/utils/uIntCodec.test.js.map +7 -0
  170. package/lib/esm/package.json +2 -2
  171. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  172. package/lib/esm/src/ContextModuleBuilder.js.map +2 -2
  173. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  174. package/lib/esm/src/ContextModuleBuilder.test.js.map +2 -2
  175. package/lib/esm/src/DefaultContextModule.js +1 -1
  176. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  177. package/lib/esm/src/di.js +1 -1
  178. package/lib/esm/src/di.js.map +3 -3
  179. package/lib/esm/src/index.js +1 -1
  180. package/lib/esm/src/index.js.map +2 -2
  181. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  182. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
  183. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  184. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  185. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  186. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  187. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  188. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
  189. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  190. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  191. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
  192. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
  193. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  194. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  195. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  196. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
  197. package/lib/esm/src/modules/multichain/pki/model/KeyId.js +1 -1
  198. package/lib/esm/src/modules/multichain/pki/model/KeyId.js.map +2 -2
  199. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
  200. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
  201. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
  202. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
  203. package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +1 -0
  204. package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
  205. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
  206. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
  207. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
  208. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
  209. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
  210. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
  211. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
  212. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
  213. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
  214. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
  215. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
  216. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
  217. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
  218. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
  219. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
  220. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
  221. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
  222. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
  223. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
  224. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
  225. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
  226. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
  227. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
  228. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
  229. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +1 -0
  230. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
  231. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
  232. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
  233. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
  234. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
  235. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
  236. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
  237. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
  238. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
  239. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
  240. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
  241. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
  242. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
  243. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
  244. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
  245. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
  246. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
  247. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
  248. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +2 -2
  249. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  250. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
  251. package/lib/esm/src/modules/solana/model/SolanaPayloads.js +1 -0
  252. package/lib/esm/src/modules/solana/model/SolanaPayloads.js.map +4 -4
  253. package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
  254. package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
  255. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
  256. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
  257. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
  258. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
  259. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  260. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  261. package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
  262. package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
  263. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
  264. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
  265. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
  266. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
  267. package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +1 -0
  268. package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
  269. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
  270. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
  271. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
  272. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
  273. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
  274. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
  275. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
  276. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
  277. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
  278. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
  279. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
  280. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
  281. package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js +1 -0
  282. package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
  283. package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
  284. package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
  285. package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
  286. package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
  287. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
  288. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
  289. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
  290. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
  291. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
  292. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
  293. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
  294. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
  295. package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +1 -0
  296. package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
  297. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
  298. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
  299. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
  300. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
  301. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
  302. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
  303. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
  304. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
  305. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  306. package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
  307. package/lib/esm/src/shared/utils/HexStringUtils.js +1 -1
  308. package/lib/esm/src/shared/utils/HexStringUtils.js.map +3 -3
  309. package/lib/esm/src/shared/utils/HexStringUtils.test.js +1 -1
  310. package/lib/esm/src/shared/utils/HexStringUtils.test.js.map +2 -2
  311. package/lib/esm/src/shared/utils/certificateCache.js +2 -0
  312. package/lib/esm/src/shared/utils/certificateCache.js.map +7 -0
  313. package/lib/esm/src/shared/utils/certificateCache.test.js +2 -0
  314. package/lib/esm/src/shared/utils/certificateCache.test.js.map +7 -0
  315. package/lib/esm/src/shared/utils/certificateResult.js +2 -0
  316. package/lib/esm/src/shared/utils/certificateResult.js.map +7 -0
  317. package/lib/esm/src/shared/utils/certificateResult.test.js +2 -0
  318. package/lib/esm/src/shared/utils/certificateResult.test.js.map +7 -0
  319. package/lib/esm/src/shared/utils/challengeBoundLoader.js +2 -0
  320. package/lib/esm/src/shared/utils/challengeBoundLoader.js.map +7 -0
  321. package/lib/esm/src/shared/utils/challengeBoundLoader.test.js +2 -0
  322. package/lib/esm/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
  323. package/lib/esm/src/shared/utils/deviceModelIdCodec.js +2 -0
  324. package/lib/esm/src/shared/utils/deviceModelIdCodec.js.map +7 -0
  325. package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js +2 -0
  326. package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
  327. package/lib/esm/src/shared/utils/signedDescriptorDto.js +2 -0
  328. package/lib/esm/src/shared/utils/signedDescriptorDto.js.map +7 -0
  329. package/lib/esm/src/shared/utils/signedDescriptorDto.test.js +2 -0
  330. package/lib/esm/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
  331. package/lib/esm/src/shared/utils/uIntCodec.js +2 -0
  332. package/lib/esm/src/shared/utils/uIntCodec.js.map +7 -0
  333. package/lib/esm/src/shared/utils/uIntCodec.test.js +2 -0
  334. package/lib/esm/src/shared/utils/uIntCodec.test.js.map +7 -0
  335. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  336. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  337. package/lib/types/src/di.d.ts.map +1 -1
  338. package/lib/types/src/index.d.ts +16 -0
  339. package/lib/types/src/index.d.ts.map +1 -1
  340. package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts +1 -0
  341. package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts.map +1 -1
  342. package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts +1 -1
  343. package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts.map +1 -1
  344. package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts +17 -0
  345. package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts.map +1 -0
  346. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts +11 -0
  347. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts.map +1 -0
  348. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts +2 -0
  349. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts.map +1 -0
  350. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts +3 -0
  351. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts.map +1 -0
  352. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts +5 -0
  353. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts.map +1 -0
  354. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts +23 -0
  355. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts.map +1 -0
  356. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts +2 -0
  357. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts.map +1 -0
  358. package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts +3 -0
  359. package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts.map +1 -0
  360. package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts +4 -0
  361. package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts.map +1 -0
  362. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts +45 -0
  363. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts.map +1 -0
  364. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts +2 -0
  365. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts.map +1 -0
  366. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts +11 -0
  367. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts.map +1 -0
  368. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts +2 -0
  369. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts.map +1 -0
  370. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts +32 -0
  371. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts.map +1 -0
  372. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts +129 -0
  373. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts.map +1 -0
  374. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts +26 -0
  375. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts.map +1 -0
  376. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts +2 -0
  377. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts.map +1 -0
  378. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts +3 -0
  379. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts.map +1 -0
  380. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts +5 -0
  381. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts.map +1 -0
  382. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts +39 -0
  383. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts.map +1 -0
  384. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts +2 -0
  385. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts.map +1 -0
  386. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts +33 -2
  387. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts.map +1 -1
  388. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts +8 -1
  389. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts.map +1 -1
  390. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts +124 -0
  391. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts.map +1 -1
  392. package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts +6 -5
  393. package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts.map +1 -1
  394. package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts +2 -5
  395. package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts.map +1 -1
  396. package/lib/types/src/modules/solana/token/domain/TokenContextLoader.d.ts.map +1 -1
  397. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts +11 -0
  398. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts.map +1 -0
  399. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts +2 -0
  400. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts.map +1 -0
  401. package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts +15 -0
  402. package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts.map +1 -0
  403. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts +3 -0
  404. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts.map +1 -0
  405. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts +5 -0
  406. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts.map +1 -0
  407. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts +26 -0
  408. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts.map +1 -0
  409. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts +2 -0
  410. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts.map +1 -0
  411. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts +11 -0
  412. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts.map +1 -0
  413. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts +2 -0
  414. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts.map +1 -0
  415. package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts +24 -0
  416. package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts.map +1 -0
  417. package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts +3 -0
  418. package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts.map +1 -0
  419. package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts +5 -0
  420. package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts.map +1 -0
  421. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts +26 -0
  422. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts.map +1 -0
  423. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts +2 -0
  424. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts.map +1 -0
  425. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts +11 -0
  426. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -0
  427. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts +2 -0
  428. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts.map +1 -0
  429. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts +17 -0
  430. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -0
  431. package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts +3 -0
  432. package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -0
  433. package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts +5 -0
  434. package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts.map +1 -0
  435. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts +28 -0
  436. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -0
  437. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts +2 -0
  438. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts.map +1 -0
  439. package/lib/types/src/shared/model/ClearSignContext.d.ts +7 -1
  440. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  441. package/lib/types/src/shared/utils/HexStringUtils.d.ts +7 -0
  442. package/lib/types/src/shared/utils/HexStringUtils.d.ts.map +1 -1
  443. package/lib/types/src/shared/utils/certificateCache.d.ts +23 -0
  444. package/lib/types/src/shared/utils/certificateCache.d.ts.map +1 -0
  445. package/lib/types/src/shared/utils/certificateCache.test.d.ts +2 -0
  446. package/lib/types/src/shared/utils/certificateCache.test.d.ts.map +1 -0
  447. package/lib/types/src/shared/utils/certificateResult.d.ts +26 -0
  448. package/lib/types/src/shared/utils/certificateResult.d.ts.map +1 -0
  449. package/lib/types/src/shared/utils/certificateResult.test.d.ts +2 -0
  450. package/lib/types/src/shared/utils/certificateResult.test.d.ts.map +1 -0
  451. package/lib/types/src/shared/utils/challengeBoundLoader.d.ts +43 -0
  452. package/lib/types/src/shared/utils/challengeBoundLoader.d.ts.map +1 -0
  453. package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts +2 -0
  454. package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts.map +1 -0
  455. package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts +7 -0
  456. package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts.map +1 -0
  457. package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts +2 -0
  458. package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts.map +1 -0
  459. package/lib/types/src/shared/utils/signedDescriptorDto.d.ts +15 -0
  460. package/lib/types/src/shared/utils/signedDescriptorDto.d.ts.map +1 -0
  461. package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts +2 -0
  462. package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts.map +1 -0
  463. package/lib/types/src/shared/utils/uIntCodec.d.ts +20 -0
  464. package/lib/types/src/shared/utils/uIntCodec.d.ts.map +1 -0
  465. package/lib/types/src/shared/utils/uIntCodec.test.d.ts +2 -0
  466. package/lib/types/src/shared/utils/uIntCodec.test.d.ts.map +1 -0
  467. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  468. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/modules/ethereum/dynamic-network/data/DynamicNetworkDataSource\";\nimport {\n type DynamicNetworkContextInput,\n DynamicNetworkContextLoader,\n} from \"@/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport {\n type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/modules/ethereum/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/modules/multichain/pki/model/KeyId\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"DynamicNetworkContextLoader\", () => {\n const mockNetworkDataSource: DynamicNetworkDataSource = {\n getDynamicNetworkConfiguration: vi.fn(),\n };\n\n const mockConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n const loader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n mockConfig,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n // Helper function to create a mock NetworkDescriptor\n const createMockDescriptor = (\n partial?: Partial<DynamicNetworkDescriptor>,\n ): DynamicNetworkDescriptor => ({\n data: \"\",\n descriptorType: \"\",\n descriptorVersion: \"\",\n signatures: {\n prod: \"\",\n test: \"\",\n },\n icon: undefined,\n ...partial,\n });\n\n const createMockDescriptors = (\n overrides: Partial<Record<DeviceModelId, DynamicNetworkDescriptor>> = {},\n ): Record<DeviceModelId, DynamicNetworkDescriptor> => ({\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.STAX]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.APEX]: createMockDescriptor(),\n ...overrides,\n });\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.ETHEREUM_TOKEN]),\n ).toBe(false);\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ]),\n ).toBe(false);\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\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 ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [\n { ...validInput, deviceModelId: DeviceModelId.NANO_S },\n \"NANO_S deviceModelId\",\n ],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(false);\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return empty array when network data source returns error\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Left(new Error(\"Network error\")));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([]);\n expect(\n mockNetworkDataSource.getDynamicNetworkConfiguration,\n ).toHaveBeenCalledWith(1);\n });\n\n it(\"should return empty array when descriptor for device model is not found\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const descriptors = createMockDescriptors({\n flex: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n stax: undefined as unknown as DynamicNetworkDescriptor,\n });\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors,\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return empty array when signature for mode is not found\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return context with network configuration when all data is available\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 137,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"polygon\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101080201015101012308000000000000008952\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n certificate: mockCertificate,\n });\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\n \"0x0101080201015101012308000000000000008952\",\n );\n }\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: DeviceModelId.STAX,\n });\n });\n\n it(\"should include icon context when icon is available\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: \"icon-hex-data\",\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n certificate: mockCertificate,\n });\n const networkContext = result[0];\n if (networkContext && \"payload\" in networkContext) {\n expect(networkContext.payload).toEqual(expect.any(String));\n }\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n });\n const iconContext = result[1];\n if (iconContext && \"payload\" in iconContext) {\n expect(iconContext.payload).toBe(\"icon-hex-data\");\n }\n });\n\n it(\"should handle multiple device models correctly\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.FLEX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n flex: createMockDescriptor({\n data: \"0xFLEX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"flex-prod-sig\",\n test: \"flex-test-sig\",\n },\n icon: undefined,\n }),\n stax: createMockDescriptor({\n data: \"0xSTAX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"stax-prod-sig\",\n test: \"stax-test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"0xFLEX\");\n expect(context.payload).toContain(\"flex-prod-sig\");\n }\n });\n\n it(\"should use test mode signature when configured\", async () => {\n // GIVEN\n const testModeLoader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n { ...mockConfig, cal: { ...mockConfig.cal, mode: \"test\" } },\n mockCertificateLoader,\n mockLoggerFactory,\n );\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await testModeLoader.load(input);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"test-sig\");\n }\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/modules/ethereum/dynamic-network/data/DynamicNetworkDataSource\";\nimport {\n type DynamicNetworkContextInput,\n DynamicNetworkContextLoader,\n} from \"@/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport {\n type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/modules/ethereum/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/modules/multichain/pki/model/KeyId\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"DynamicNetworkContextLoader\", () => {\n const mockNetworkDataSource: DynamicNetworkDataSource = {\n getDynamicNetworkConfiguration: vi.fn(),\n };\n\n const mockConfig = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n const loader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n mockConfig,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n // Helper function to create a mock NetworkDescriptor\n const createMockDescriptor = (\n partial?: Partial<DynamicNetworkDescriptor>,\n ): DynamicNetworkDescriptor => ({\n data: \"\",\n descriptorType: \"\",\n descriptorVersion: \"\",\n signatures: {\n prod: \"\",\n test: \"\",\n },\n icon: undefined,\n ...partial,\n });\n\n const createMockDescriptors = (\n overrides: Partial<Record<DeviceModelId, DynamicNetworkDescriptor>> = {},\n ): Record<DeviceModelId, DynamicNetworkDescriptor> => ({\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.STAX]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.APEX]: createMockDescriptor(),\n ...overrides,\n });\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"canHandle function\", () => {\n const validInput: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n\n it(\"should return true for valid input\", () => {\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(true);\n });\n\n it(\"should return false for invalid expected type\", () => {\n expect(\n loader.canHandle(validInput, [ClearSignContextType.ETHEREUM_TOKEN]),\n ).toBe(false);\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ]),\n ).toBe(false);\n expect(\n loader.canHandle(validInput, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\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 ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [{ ...validInput, chainId: undefined }, \"missing chainId\"],\n [{ ...validInput, deviceModelId: undefined }, \"missing deviceModelId\"],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(false);\n });\n\n it.each([\n [{ ...validInput, chainId: \"1\" }, \"string chainId\"],\n [{ ...validInput, chainId: null }, \"null chainId\"],\n [\n { ...validInput, deviceModelId: DeviceModelId.NANO_S },\n \"NANO_S deviceModelId\",\n ],\n ])(\"should return false for %s\", (input, _description) => {\n expect(\n loader.canHandle(input, [\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n ]),\n ).toBe(false);\n });\n });\n\n describe(\"load function\", () => {\n it(\"should return empty array when network data source returns error\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Left(new Error(\"Network error\")));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([]);\n expect(\n mockNetworkDataSource.getDynamicNetworkConfiguration,\n ).toHaveBeenCalledWith(1);\n });\n\n it(\"should return empty array when descriptor for device model is not found\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const descriptors = createMockDescriptors({\n flex: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n stax: undefined as unknown as DynamicNetworkDescriptor,\n });\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors,\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return empty array when signature for mode is not found\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return context with network configuration when all data is available\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 137,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"polygon\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101080201015101012308000000000000008952\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n certificate: mockCertificate,\n });\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\n \"0x0101080201015101012308000000000000008952\",\n );\n }\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: DeviceModelId.STAX,\n });\n });\n\n it(\"should include icon context when icon is available\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: \"icon-hex-data\",\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK,\n certificate: mockCertificate,\n });\n const networkContext = result[0];\n if (networkContext && \"payload\" in networkContext) {\n expect(networkContext.payload).toEqual(expect.any(String));\n }\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.ETHEREUM_DYNAMIC_NETWORK_ICON,\n });\n const iconContext = result[1];\n if (iconContext && \"payload\" in iconContext) {\n expect(iconContext.payload).toBe(\"icon-hex-data\");\n }\n });\n\n it(\"should handle multiple device models correctly\", async () => {\n // GIVEN\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.FLEX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n flex: createMockDescriptor({\n data: \"0xFLEX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"flex-prod-sig\",\n test: \"flex-test-sig\",\n },\n icon: undefined,\n }),\n stax: createMockDescriptor({\n data: \"0xSTAX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"stax-prod-sig\",\n test: \"stax-test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(input);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"0xFLEX\");\n expect(context.payload).toContain(\"flex-prod-sig\");\n }\n });\n\n it(\"should use test mode signature when configured\", async () => {\n // GIVEN\n const testModeLoader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n { ...mockConfig, cal: { ...mockConfig.cal, mode: \"test\" } },\n mockCertificateLoader,\n mockLoggerFactory,\n );\n const input: DynamicNetworkContextInput = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: createMockDescriptors({\n stax: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n }),\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await testModeLoader.load(input);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"test-sig\");\n }\n });\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,iBAAAA,MAAqB,kCAC9B,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAI5B,OAEE,+BAAAC,MACK,wEAMP,OAAS,SAAAC,MAAa,uCACtB,OAAS,YAAAC,MAAgB,0CAEzB,OAAS,wBAAAC,MAA4B,kCAErC,MAAMC,EAAoB,KAAO,CAC/B,MAAO,GAAG,GAAG,EACb,KAAM,GAAG,GAAG,EACZ,KAAM,GAAG,GAAG,EACZ,MAAO,GAAG,GAAG,EACb,YAAa,CAAC,CAChB,GAEA,SAAS,8BAA+B,IAAM,CAC5C,MAAMC,EAAkD,CACtD,+BAAgC,GAAG,GAAG,CACxC,EAEMC,EAAa,CACjB,IAAK,CACH,IAAK,2CACL,KAAM,OACN,OAAQ,MACV,CACF,EAEMC,EAA8C,CAClD,gBAAiB,GAAG,GAAG,CACzB,EAEMC,EAAkC,CACtC,eAAgB,EAChB,QAAS,IAAI,WAAW,CAAC,EAAM,EAAM,CAAI,CAAC,CAC5C,EAEMC,EAAS,IAAIT,EACjBK,EACAC,EACAC,EACAH,CACF,EAGMM,EACJC,IAC8B,CAC9B,KAAM,GACN,eAAgB,GAChB,kBAAmB,GACnB,WAAY,CACV,KAAM,GACN,KAAM,EACR,EACA,KAAM,OACN,GAAGA,CACL,GAEMC,EAAwB,CAC5BC,EAAsE,CAAC,KAClB,CACrD,CAAChB,EAAc,MAAM,EAAGa,EAAqB,EAC7C,CAACb,EAAc,OAAO,EAAGa,EAAqB,EAC9C,CAACb,EAAc,MAAM,EAAGa,EAAqB,EAC7C,CAACb,EAAc,IAAI,EAAGa,EAAqB,EAC3C,CAACb,EAAc,IAAI,EAAGa,EAAqB,EAC3C,CAACb,EAAc,IAAI,EAAGa,EAAqB,EAC3C,GAAGG,CACL,GAEA,WAAW,IAAM,CACf,GAAG,gBAAgB,EACnB,GAAG,MAAMN,EAAuB,iBAAiB,EAAE,kBACjDC,CACF,CACF,CAAC,EAED,SAAS,qBAAsB,IAAM,CACnC,MAAMM,EAAyC,CAC7C,QAAS,EACT,cAAejB,EAAc,IAC/B,EAEA,GAAG,qCAAsC,IAAM,CAC7C,OACEY,EAAO,UAAUK,EAAY,CAC3BX,EAAqB,yBACrBA,EAAqB,6BACvB,CAAC,CACH,EAAE,KAAK,EAAI,CACb,CAAC,EAED,GAAG,gDAAiD,IAAM,CACxD,OACEM,EAAO,UAAUK,EAAY,CAACX,EAAqB,cAAc,CAAC,CACpE,EAAE,KAAK,EAAK,EACZ,OACEM,EAAO,UAAUK,EAAY,CAC3BX,EAAqB,wBACvB,CAAC,CACH,EAAE,KAAK,EAAK,EACZ,OACEM,EAAO,UAAUK,EAAY,CAC3BX,EAAqB,6BACvB,CAAC,CACH,EAAE,KAAK,EAAK,CACd,CAAC,EAED,GAAG,KAAK,CACN,CAAC,KAAM,YAAY,EACnB,CAAC,OAAW,iBAAiB,EAC7B,CAAC,CAAC,EAAG,cAAc,EACnB,CAAC,SAAU,cAAc,EACzB,CAAC,IAAK,cAAc,CACtB,CAAC,EAAE,6BAA8B,CAACY,EAAOC,IAAiB,CACxD,OACEP,EAAO,UAAUM,EAAO,CACtBZ,EAAqB,yBACrBA,EAAqB,6BACvB,CAAC,CACH,EAAE,KAAK,EAAK,CACd,CAAC,EAED,GAAG,KAAK,CACN,CAAC,CAAE,GAAGW,EAAY,QAAS,MAAU,EAAG,iBAAiB,EACzD,CAAC,CAAE,GAAGA,EAAY,cAAe,MAAU,EAAG,uBAAuB,CACvE,CAAC,EAAE,6BAA8B,CAACC,EAAOC,IAAiB,CACxD,OACEP,EAAO,UAAUM,EAAO,CACtBZ,EAAqB,yBACrBA,EAAqB,6BACvB,CAAC,CACH,EAAE,KAAK,EAAK,CACd,CAAC,EAED,GAAG,KAAK,CACN,CAAC,CAAE,GAAGW,EAAY,QAAS,GAAI,EAAG,gBAAgB,EAClD,CAAC,CAAE,GAAGA,EAAY,QAAS,IAAK,EAAG,cAAc,EACjD,CACE,CAAE,GAAGA,EAAY,cAAejB,EAAc,MAAO,EACrD,sBACF,CACF,CAAC,EAAE,6BAA8B,CAACkB,EAAOC,IAAiB,CACxD,OACEP,EAAO,UAAUM,EAAO,CACtBZ,EAAqB,yBACrBA,EAAqB,6BACvB,CAAC,CACH,EAAE,KAAK,EAAK,CACd,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,mEAAoE,SAAY,CAEjF,MAAMY,EAAoC,CACxC,QAAS,EACT,cAAelB,EAAc,IAC/B,EACA,GAAG,MACDQ,EACA,gCACF,EAAE,kBAAkBP,EAAK,IAAI,MAAM,eAAe,CAAC,CAAC,EAGpD,MAAMmB,EAAS,MAAMR,EAAO,KAAKM,CAAK,EAGtC,OAAOE,CAAM,EAAE,QAAQ,CAAC,CAAC,EACzB,OACEZ,EAAsB,8BACxB,EAAE,qBAAqB,CAAC,CAC1B,CAAC,EAED,GAAG,0EAA2E,SAAY,CAExF,MAAMU,EAAoC,CACxC,QAAS,EACT,cAAelB,EAAc,IAC/B,EAcMqB,EAA6C,CACjD,GAAI,WACJ,YAfkBN,EAAsB,CACxC,KAAMF,EAAqB,CACzB,KAAM,SACN,eAAgB,UAChB,kBAAmB,KACnB,WAAY,CACV,KAAM,WACN,KAAM,UACR,EACA,KAAM,MACR,CAAC,EACD,KAAM,MACR,CAAC,CAID,EACA,GAAG,MACDL,EACA,gCACF,EAAE,kBAAkBN,EAAMmB,CAAa,CAAC,EAGxC,MAAMD,EAAS,MAAMR,EAAO,KAAKM,CAAK,EAGtC,OAAOE,CAAM,EAAE,QAAQ,CAAC,CAAC,CAC3B,CAAC,EAED,GAAG,iEAAkE,SAAY,CAE/E,MAAMF,EAAoC,CACxC,QAAS,EACT,cAAelB,EAAc,IAC/B,EACMqB,EAA6C,CACjD,GAAI,WACJ,YAAaN,EAAsB,CACjC,KAAMF,EAAqB,CACzB,KAAM,SACN,eAAgB,UAChB,kBAAmB,KACnB,WAAY,CACV,KAAM,GACN,KAAM,UACR,EACA,KAAM,MACR,CAAC,CACH,CAAC,CACH,EACA,GAAG,MACDL,EACA,gCACF,EAAE,kBAAkBN,EAAMmB,CAAa,CAAC,EAGxC,MAAMD,EAAS,MAAMR,EAAO,KAAKM,CAAK,EAGtC,OAAOE,CAAM,EAAE,QAAQ,CAAC,CAAC,CAC3B,CAAC,EAED,GAAG,8EAA+E,SAAY,CAE5F,MAAMF,EAAoC,CACxC,QAAS,IACT,cAAelB,EAAc,IAC/B,EACMqB,EAA6C,CACjD,GAAI,UACJ,YAAaN,EAAsB,CACjC,KAAMF,EAAqB,CACzB,KAAM,6CACN,eAAgB,UAChB,kBAAmB,KACnB,WAAY,CACV,KAAM,iJACN,KAAM,UACR,EACA,KAAM,MACR,CAAC,CACH,CAAC,CACH,EACA,GAAG,MACDL,EACA,gCACF,EAAE,kBAAkBN,EAAMmB,CAAa,CAAC,EAGxC,MAAMD,EAAS,MAAMR,EAAO,KAAKM,CAAK,EAGtC,OAAOE,CAAM,EAAE,aAAa,CAAC,EAC7B,OAAOA,EAAO,CAAC,CAAC,EAAE,cAAc,CAC9B,KAAMd,EAAqB,yBAC3B,YAAaK,CACf,CAAC,EACD,MAAMW,EAAUF,EAAO,CAAC,EACpBE,GAAW,YAAaA,GAC1B,OAAOA,EAAQ,OAAO,EAAE,UACtB,4CACF,EAEF,OAAOZ,EAAsB,eAAe,EAAE,qBAAqB,CACjE,MAAON,EAAM,WACb,SAAUC,EAAS,QACnB,aAAcL,EAAc,IAC9B,CAAC,CACH,CAAC,EAED,GAAG,qDAAsD,SAAY,CAEnE,MAAMkB,EAAoC,CACxC,QAAS,EACT,cAAelB,EAAc,IAC/B,EACMqB,EAA6C,CACjD,GAAI,WACJ,YAAaN,EAAsB,CACjC,KAAMF,EAAqB,CACzB,KAAM,SACN,eAAgB,UAChB,kBAAmB,KACnB,WAAY,CACV,KAAM,WACN,KAAM,UACR,EACA,KAAM,eACR,CAAC,CACH,CAAC,CACH,EACA,GAAG,MACDL,EACA,gCACF,EAAE,kBAAkBN,EAAMmB,CAAa,CAAC,EAGxC,MAAMD,EAAS,MAAMR,EAAO,KAAKM,CAAK,EAGtC,OAAOE,CAAM,EAAE,aAAa,CAAC,EAC7B,OAAOA,EAAO,CAAC,CAAC,EAAE,cAAc,CAC9B,KAAMd,EAAqB,yBAC3B,YAAaK,CACf,CAAC,EACD,MAAMY,EAAiBH,EAAO,CAAC,EAC3BG,GAAkB,YAAaA,GACjC,OAAOA,EAAe,OAAO,EAAE,QAAQ,OAAO,IAAI,MAAM,CAAC,EAE3D,OAAOH,EAAO,CAAC,CAAC,EAAE,cAAc,CAC9B,KAAMd,EAAqB,6BAC7B,CAAC,EACD,MAAMkB,EAAcJ,EAAO,CAAC,EACxBI,GAAe,YAAaA,GAC9B,OAAOA,EAAY,OAAO,EAAE,KAAK,eAAe,CAEpD,CAAC,EAED,GAAG,iDAAkD,SAAY,CAE/D,MAAMN,EAAoC,CACxC,QAAS,EACT,cAAelB,EAAc,IAC/B,EACMqB,EAA6C,CACjD,GAAI,WACJ,YAAaN,EAAsB,CACjC,KAAMF,EAAqB,CACzB,KAAM,SACN,eAAgB,UAChB,kBAAmB,KACnB,WAAY,CACV,KAAM,gBACN,KAAM,eACR,EACA,KAAM,MACR,CAAC,EACD,KAAMA,EAAqB,CACzB,KAAM,SACN,eAAgB,UAChB,kBAAmB,KACnB,WAAY,CACV,KAAM,gBACN,KAAM,eACR,EACA,KAAM,MACR,CAAC,CACH,CAAC,CACH,EACA,GAAG,MACDL,EACA,gCACF,EAAE,kBAAkBN,EAAMmB,CAAa,CAAC,EAGxC,MAAMD,EAAS,MAAMR,EAAO,KAAKM,CAAK,EAGtC,OAAOE,CAAM,EAAE,aAAa,CAAC,EAC7B,MAAME,EAAUF,EAAO,CAAC,EACpBE,GAAW,YAAaA,IAC1B,OAAOA,EAAQ,OAAO,EAAE,UAAU,QAAQ,EAC1C,OAAOA,EAAQ,OAAO,EAAE,UAAU,eAAe,EAErD,CAAC,EAED,GAAG,iDAAkD,SAAY,CAE/D,MAAMG,EAAiB,IAAItB,EACzBK,EACA,CAAE,GAAGC,EAAY,IAAK,CAAE,GAAGA,EAAW,IAAK,KAAM,MAAO,CAAE,EAC1DC,EACAH,CACF,EACMW,EAAoC,CACxC,QAAS,EACT,cAAelB,EAAc,IAC/B,EACMqB,EAA6C,CACjD,GAAI,WACJ,YAAaN,EAAsB,CACjC,KAAMF,EAAqB,CACzB,KAAM,SACN,eAAgB,UAChB,kBAAmB,KACnB,WAAY,CACV,KAAM,WACN,KAAM,UACR,EACA,KAAM,MACR,CAAC,CACH,CAAC,CACH,EACA,GAAG,MACDL,EACA,gCACF,EAAE,kBAAkBN,EAAMmB,CAAa,CAAC,EAGxC,MAAMD,EAAS,MAAMK,EAAe,KAAKP,CAAK,EAG9C,OAAOE,CAAM,EAAE,aAAa,CAAC,EAC7B,MAAME,EAAUF,EAAO,CAAC,EACpBE,GAAW,YAAaA,GAC1B,OAAOA,EAAQ,OAAO,EAAE,UAAU,UAAU,CAEhD,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["DeviceModelId", "Left", "Right", "DynamicNetworkContextLoader", "KeyId", "KeyUsage", "ClearSignContextType", "mockLoggerFactory", "mockNetworkDataSource", "mockConfig", "mockCertificateLoader", "mockCertificate", "loader", "createMockDescriptor", "partial", "createMockDescriptors", "overrides", "validInput", "input", "_description", "result", "networkConfig", "context", "networkContext", "iconContext", "testModeLoader"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import i from"@/modules/ethereum/external-plugin/__tests__/abi.json";import{HttpExternalPluginDataSource as d}from"../../../../modules/ethereum/external-plugin/data/HttpExternalPluginDataSource";const u={web3checks:{url:"web3checksUrl"},cal:{url:"https://crypto-assets-service.api.ledger.com/v1"},originToken:"originToken"};describe("HttpExternalPuginDataSource",()=>{let a,t;const r={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x1ef",contractName:"otherName",selectors:{"0x01ee":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}},{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}}],name:"test"},o={"0x1ef":i,"0x0abc":i},c={"0x1ef":{"0x01ee":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}},"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}}};beforeEach(()=>{vi.clearAllMocks(),t={get:vi.fn()},a=new d(u,t)});const s=e=>e;it("should call the expected CAL URL with query params",async()=>{t.get.mockResolvedValue([]),await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"}),expect(t.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/v1/dapps",{params:{output:"b2c,b2c_signatures,abis",chain_id:1,contracts:"0x0abc"}})}),it("should return undefined when no abis is undefined",async()=>{t.get.mockResolvedValue(s([{b2c:r,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no selectors",async()=>{t.get.mockResolvedValue(s([{abis:o,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{t.get.mockResolvedValue(s([{abis:{},b2c:r,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data (duplicate case)",async()=>{t.get.mockResolvedValue(s([{abis:{},b2c:r,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data for the contract address",async()=>{const e={"0x1":i};t.get.mockResolvedValue(s([{abis:e,b2c:r,b2c_signatures:c}]));const n=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(n.extract()).toEqual(void 0)}),it("should return undefined when no b2c signature",async()=>{t.get.mockResolvedValue(s([{b2c:r,abis:o}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no ecc20OfInterest",async()=>{const e={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{method:"swap",plugin:"plugin"}}}],name:"test"};t.get.mockResolvedValue(s([{b2c:e,abis:o,b2c_signatures:c}]));const n=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(n.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"};t.get.mockResolvedValue(s([{b2c:e,abis:o,b2c_signatures:c}]));const n=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(n.extract()).toEqual(void 0)}),it("should return undefined when no plugin",async()=>{const e={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap"}}}],name:"test"};t.get.mockResolvedValue(s([{b2c:e,abis:o,b2c_signatures:c}]));const n=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(n.extract()).toEqual(void 0)}),it("should return undefined when no signature",async()=>{const e={"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001"}}};t.get.mockResolvedValue(s([{b2c:r,abis:o,b2c_signatures:e}]));const n=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(n.extract()).toEqual(void 0)}),it("should return undefined when no serialized data",async()=>{const e={"0x0abc":{"0x01ff":{plugin:"plugin",signature:"0x002"}}};t.get.mockResolvedValue(s([{b2c:r,abis:o,b2c_signatures:e}]));const n=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(n.extract()).toEqual(void 0)}),it("should return a correct response",async()=>{t.get.mockResolvedValue(s([{b2c:r,abis:o,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual({abi:i,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should normalize the address and selector",async()=>{t.get.mockResolvedValue(s([{b2c:r,abis:o,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0AbC",selector:"0x01Ff"});expect(e.extract()).toEqual({abi:i,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should return an error when network client throws an error",async()=>{t.get.mockRejectedValue(new Error("error"));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(new Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))})});
1
+ import i from"@/modules/ethereum/external-plugin/__tests__/abi.json";import{HttpExternalPluginDataSource as d}from"../../../../modules/ethereum/external-plugin/data/HttpExternalPluginDataSource";const u={web3checks:{url:"web3checksUrl"},cal:{url:"https://global.api.prd.ledger.com/cal/v1"},originToken:"originToken"};describe("HttpExternalPuginDataSource",()=>{let a,t;const r={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x1ef",contractName:"otherName",selectors:{"0x01ee":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}},{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}}],name:"test"},o={"0x1ef":i,"0x0abc":i},c={"0x1ef":{"0x01ee":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}},"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}}};beforeEach(()=>{vi.clearAllMocks(),t={get:vi.fn()},a=new d(u,t)});const n=e=>e;it("should call the expected CAL URL with query params",async()=>{t.get.mockResolvedValue([]),await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"}),expect(t.get).toHaveBeenCalledWith("https://global.api.prd.ledger.com/cal/v1/dapps",{params:{output:"b2c,b2c_signatures,abis",chain_id:1,contracts:"0x0abc"}})}),it("should return undefined when no abis is undefined",async()=>{t.get.mockResolvedValue(n([{b2c:r,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no selectors",async()=>{t.get.mockResolvedValue(n([{abis:o,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{t.get.mockResolvedValue(n([{abis:{},b2c:r,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data (duplicate case)",async()=>{t.get.mockResolvedValue(n([{abis:{},b2c:r,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data for the contract address",async()=>{const e={"0x1":i};t.get.mockResolvedValue(n([{abis:e,b2c:r,b2c_signatures:c}]));const s=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(void 0)}),it("should return undefined when no b2c signature",async()=>{t.get.mockResolvedValue(n([{b2c:r,abis:o}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no ecc20OfInterest",async()=>{const e={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{method:"swap",plugin:"plugin"}}}],name:"test"};t.get.mockResolvedValue(n([{b2c:e,abis:o,b2c_signatures:c}]));const s=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"};t.get.mockResolvedValue(n([{b2c:e,abis:o,b2c_signatures:c}]));const s=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(void 0)}),it("should return undefined when no plugin",async()=>{const e={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap"}}}],name:"test"};t.get.mockResolvedValue(n([{b2c:e,abis:o,b2c_signatures:c}]));const s=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(void 0)}),it("should return undefined when no signature",async()=>{const e={"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001"}}};t.get.mockResolvedValue(n([{b2c:r,abis:o,b2c_signatures:e}]));const s=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(void 0)}),it("should return undefined when no serialized data",async()=>{const e={"0x0abc":{"0x01ff":{plugin:"plugin",signature:"0x002"}}};t.get.mockResolvedValue(n([{b2c:r,abis:o,b2c_signatures:e}]));const s=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(void 0)}),it("should return a correct response",async()=>{t.get.mockResolvedValue(n([{b2c:r,abis:o,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual({abi:i,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should normalize the address and selector",async()=>{t.get.mockResolvedValue(n([{b2c:r,abis:o,b2c_signatures:c}]));const e=await a.getDappInfos({chainId:1,address:"0x0AbC",selector:"0x01Ff"});expect(e.extract()).toEqual({abi:i,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should return an error when network client throws an error",async()=>{t.get.mockRejectedValue(new Error("error"));const e=await a.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(new Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))})});
2
2
  //# sourceMappingURL=HttpExternalPluginDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport ABI from \"@/modules/ethereum/external-plugin/__tests__/abi.json\";\nimport {\n type Abis,\n type B2c,\n type B2cSignatures,\n type DAppDto,\n} from \"@/modules/ethereum/external-plugin/data/DAppDto\";\nimport { type ExternalPluginDataSource } from \"@/modules/ethereum/external-plugin/data/ExternalPluginDataSource\";\nimport { HttpExternalPluginDataSource } from \"@/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource\";\n\nconst config = {\n web3checks: {\n url: \"web3checksUrl\",\n },\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpExternalPuginDataSource\", () => {\n let datasource: ExternalPluginDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const exampleB2c: B2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x1ef\",\n contractName: \"otherName\",\n selectors: {\n \"0x01ee\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n ],\n name: \"test\",\n };\n const exampleAbis: Abis = { \"0x1ef\": ABI, \"0x0abc\": ABI };\n const exampleB2cSignatures: B2cSignatures = {\n \"0x1ef\": {\n \"0x01ee\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n \"0x0abc\": {\n \"0x01ff\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpExternalPluginDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n const dappDtoResponse = (dto: Partial<DAppDto>[]) => dto as DAppDto[];\n\n it(\"should call the expected CAL URL with query params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/v1/dapps\",\n {\n params: {\n output: \"b2c,b2c_signatures,abis\",\n chain_id: 1,\n contracts: \"0x0abc\",\n },\n },\n );\n });\n\n it(\"should return undefined when no abis is undefined\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no selectors\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data (duplicate case)\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data for the contract address\", async () => {\n // GIVEN\n const abis: Abis = { \"0x1\": ABI };\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no b2c signature\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([{ b2c: exampleB2c, abis: exampleAbis }]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no ecc20OfInterest\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { method: \"swap\", plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no method\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no plugin\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], method: \"swap\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", serialized_data: \"0x001\" } },\n } as unknown as B2cSignatures;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no serialized data\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", signature: \"0x002\" } },\n } as unknown as B2cSignatures;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return a correct response\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should normalize the address and selector\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0AbC\",\n selector: \"0x01Ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should return an error when network client throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos\",\n ),\n );\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport ABI from \"@/modules/ethereum/external-plugin/__tests__/abi.json\";\nimport {\n type Abis,\n type B2c,\n type B2cSignatures,\n type DAppDto,\n} from \"@/modules/ethereum/external-plugin/data/DAppDto\";\nimport { type ExternalPluginDataSource } from \"@/modules/ethereum/external-plugin/data/ExternalPluginDataSource\";\nimport { HttpExternalPluginDataSource } from \"@/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource\";\n\nconst config = {\n web3checks: {\n url: \"web3checksUrl\",\n },\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpExternalPuginDataSource\", () => {\n let datasource: ExternalPluginDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const exampleB2c: B2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x1ef\",\n contractName: \"otherName\",\n selectors: {\n \"0x01ee\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n ],\n name: \"test\",\n };\n const exampleAbis: Abis = { \"0x1ef\": ABI, \"0x0abc\": ABI };\n const exampleB2cSignatures: B2cSignatures = {\n \"0x1ef\": {\n \"0x01ee\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n \"0x0abc\": {\n \"0x01ff\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpExternalPluginDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n const dappDtoResponse = (dto: Partial<DAppDto>[]) => dto as DAppDto[];\n\n it(\"should call the expected CAL URL with query params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://global.api.prd.ledger.com/cal/v1/dapps\",\n {\n params: {\n output: \"b2c,b2c_signatures,abis\",\n chain_id: 1,\n contracts: \"0x0abc\",\n },\n },\n );\n });\n\n it(\"should return undefined when no abis is undefined\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no selectors\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data (duplicate case)\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data for the contract address\", async () => {\n // GIVEN\n const abis: Abis = { \"0x1\": ABI };\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { abis, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no b2c signature\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([{ b2c: exampleB2c, abis: exampleAbis }]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no ecc20OfInterest\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { method: \"swap\", plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no method\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no plugin\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], method: \"swap\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", serialized_data: \"0x001\" } },\n } as unknown as B2cSignatures;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no serialized data\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", signature: \"0x002\" } },\n } as unknown as B2cSignatures;\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return a correct response\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should normalize the address and selector\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(\n dappDtoResponse([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]),\n );\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0AbC\",\n selector: \"0x01Ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should return an error when network client throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos\",\n ),\n );\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["ABI", "HttpExternalPluginDataSource", "config", "datasource", "httpMock", "exampleB2c", "exampleAbis", "exampleB2cSignatures", "dappDtoResponse", "dto", "result", "abis", "b2c", "B2CSignature"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as d,Right as u}from"purify-ts";import{HttpGatedDescriptorDataSource as h}from"../../../../modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource";describe("HttpGatedDescriptorDataSource",()=>{const n={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",branch:"next",mode:"prod"},originToken:"test-origin-token"},e="0x1111111254fb6c44bac0bed2854e76f90643097d",c="0xa1251d75",o=1,p="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",l=[{gated_descriptors:{"0x1111111254fb6c44bac0bed2854e76f90643097d":{a1251d75:{network:"ethereum",chain_id:1,address:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}],g=`${p}150100`;let r,a;beforeEach(()=>{vi.clearAllMocks(),r={get:vi.fn()},a=new h(n,r)}),describe("getGatedDescriptor",()=>{it("should return descriptor on successful request with correct URL and params",async()=>{r.get.mockResolvedValue(l);const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(r.get).toHaveBeenCalledWith(`${n.cal.url}/gated_dapps`,{params:{ref:"branch:next",output:"gated_descriptors,app,category",contracts:e,chain_id:o}}),expect(t).toEqual(u({signedDescriptor:g}))}),it("should find descriptor when API response has selector key without 0x prefix",async()=>{r.get.mockResolvedValue(l);const t=await a.getGatedDescriptor({contractAddress:e,selector:"0xa1251d75",chainId:o});expect(t).toEqual(u({signedDescriptor:g}))}),it("should return Left when response is not an array",async()=>{r.get.mockResolvedValue({gated_descriptors:{}});const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when response is empty array",async()=>{r.get.mockResolvedValue([]);const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when no descriptor matches contract and selector",async()=>{r.get.mockResolvedValue([{gated_descriptors:{"0xothercontract":{a1251d75:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:"0xother",selector:"a1251d75",version:"v1"}}}}]);const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75")))}),it("should return Left when http.get request fails",async()=>{r.get.mockRejectedValue(new Error("Network error"));const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))}),it("should use config.cal.branch in ref param",async()=>{const t={...n,cal:{...n.cal,branch:"main"}};r.get.mockResolvedValue(l),await new h(t,r).getGatedDescriptor({contractAddress:e,selector:c,chainId:o}),expect(r.get).toHaveBeenCalledWith(`${n.cal.url}/gated_dapps`,expect.objectContaining({params:expect.objectContaining({ref:"branch:main"})}))}),describe("when response fails DTO validation",()=>{const t=new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response");it("should return Left when array item has no gated_descriptors",async()=>{r.get.mockResolvedValue([{}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when gated_descriptors is not an object",async()=>{r.get.mockResolvedValue([{gated_descriptors:"not-an-object"}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when entry is missing required field (descriptor)",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1"}}}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when entry has wrong type for chain_id",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:"1",address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when entry signatures contains non-string value",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:123}}}}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when array item is null",async()=>{r.get.mockResolvedValue([null]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when selectors map value is not an object",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:"not-a-selectors-map"}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))})})}),describe("getGatedDescriptorForTypedData",()=>{const t="4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3",s="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",w=[{gated_descriptors:{[e]:{[t]:{network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1",descriptor:s,signatures:{prod:"00",test:"00"}}}}}],m=`${s}150100`;it("should return descriptor on successful request when keyed by schema hash",async()=>{r.get.mockResolvedValue(w);const i=await a.getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o});expect(r.get).toHaveBeenCalledWith(`${n.cal.url}/gated_dapps`,{params:{ref:"branch:next",output:"gated_descriptors",contracts:e,chain_id:o}}),expect(i).toEqual(u({signedDescriptor:m}))}),it("should return Left when no descriptor matches contract and schema hash",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{other_schema_hash:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1"}}}}]);const i=await a.getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o});expect(i).toEqual(d(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${t}`)))}),it("should return Left when http.get request fails",async()=>{r.get.mockRejectedValue(new Error("Network error"));const i=await a.getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o});expect(i).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))})})});
1
+ import{Left as d,Right as u}from"purify-ts";import{HttpGatedDescriptorDataSource as h}from"../../../../modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource";describe("HttpGatedDescriptorDataSource",()=>{const n={cal:{url:"https://global.api.prd.ledger.com/cal/v1",branch:"next",mode:"prod"},originToken:"test-origin-token"},e="0x1111111254fb6c44bac0bed2854e76f90643097d",c="0xa1251d75",o=1,p="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",l=[{gated_descriptors:{"0x1111111254fb6c44bac0bed2854e76f90643097d":{a1251d75:{network:"ethereum",chain_id:1,address:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}],g=`${p}150100`;let r,a;beforeEach(()=>{vi.clearAllMocks(),r={get:vi.fn()},a=new h(n,r)}),describe("getGatedDescriptor",()=>{it("should return descriptor on successful request with correct URL and params",async()=>{r.get.mockResolvedValue(l);const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(r.get).toHaveBeenCalledWith(`${n.cal.url}/gated_dapps`,{params:{ref:"branch:next",output:"gated_descriptors,app,category",contracts:e,chain_id:o}}),expect(t).toEqual(u({signedDescriptor:g}))}),it("should find descriptor when API response has selector key without 0x prefix",async()=>{r.get.mockResolvedValue(l);const t=await a.getGatedDescriptor({contractAddress:e,selector:"0xa1251d75",chainId:o});expect(t).toEqual(u({signedDescriptor:g}))}),it("should return Left when response is not an array",async()=>{r.get.mockResolvedValue({gated_descriptors:{}});const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when response is empty array",async()=>{r.get.mockResolvedValue([]);const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when no descriptor matches contract and selector",async()=>{r.get.mockResolvedValue([{gated_descriptors:{"0xothercontract":{a1251d75:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:"0xother",selector:"a1251d75",version:"v1"}}}}]);const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75")))}),it("should return Left when http.get request fails",async()=>{r.get.mockRejectedValue(new Error("Network error"));const t=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))}),it("should use config.cal.branch in ref param",async()=>{const t={...n,cal:{...n.cal,branch:"main"}};r.get.mockResolvedValue(l),await new h(t,r).getGatedDescriptor({contractAddress:e,selector:c,chainId:o}),expect(r.get).toHaveBeenCalledWith(`${n.cal.url}/gated_dapps`,expect.objectContaining({params:expect.objectContaining({ref:"branch:main"})}))}),describe("when response fails DTO validation",()=>{const t=new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response");it("should return Left when array item has no gated_descriptors",async()=>{r.get.mockResolvedValue([{}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when gated_descriptors is not an object",async()=>{r.get.mockResolvedValue([{gated_descriptors:"not-an-object"}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when entry is missing required field (descriptor)",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1"}}}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when entry has wrong type for chain_id",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:"1",address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when entry signatures contains non-string value",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:123}}}}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when array item is null",async()=>{r.get.mockResolvedValue([null]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))}),it("should return Left when selectors map value is not an object",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:"not-a-selectors-map"}}]);const s=await a.getGatedDescriptor({contractAddress:e,selector:c,chainId:o});expect(s).toEqual(d(t))})})}),describe("getGatedDescriptorForTypedData",()=>{const t="4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3",s="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",w=[{gated_descriptors:{[e]:{[t]:{network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1",descriptor:s,signatures:{prod:"00",test:"00"}}}}}],m=`${s}150100`;it("should return descriptor on successful request when keyed by schema hash",async()=>{r.get.mockResolvedValue(w);const i=await a.getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o});expect(r.get).toHaveBeenCalledWith(`${n.cal.url}/gated_dapps`,{params:{ref:"branch:next",output:"gated_descriptors",contracts:e,chain_id:o}}),expect(i).toEqual(u({signedDescriptor:m}))}),it("should return Left when no descriptor matches contract and schema hash",async()=>{r.get.mockResolvedValue([{gated_descriptors:{[e]:{other_schema_hash:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1"}}}}]);const i=await a.getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o});expect(i).toEqual(d(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${t}`)))}),it("should return Left when http.get request fails",async()=>{r.get.mockRejectedValue(new Error("Network error"));const i=await a.getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o});expect(i).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error")))})})});
2
2
  //# sourceMappingURL=HttpGatedDescriptorDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpGatedDescriptorDataSource } from \"@/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource\";\n\ndescribe(\"HttpGatedDescriptorDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n branch: \"next\",\n mode: \"prod\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const contractAddress = \"0x1111111254fb6c44bac0bed2854e76f90643097d\";\n const selector = \"0xa1251d75\";\n const chainId = 1;\n\n const descriptorPayload =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735\";\n const validGatedDappsResponse = [\n {\n gated_descriptors: {\n \"0x1111111254fb6c44bac0bed2854e76f90643097d\": {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: \"0x1111111254fb6c44bac0bed2854e76f90643097d\",\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ];\n // signedDescriptor = payload + SIGNATURE_TAG(\"15\") + length(01) + signature(\"00\")\n const expectedSignedDescriptor = `${descriptorPayload}150100`;\n\n let httpMock: { get: ReturnType<typeof vi.fn> };\n let dataSource: HttpGatedDescriptorDataSource;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n dataSource = new HttpGatedDescriptorDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getGatedDescriptor\", () => {\n it(\"should return descriptor on successful request with correct URL and params\", async () => {\n httpMock.get.mockResolvedValue(validGatedDappsResponse);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/gated_dapps`,\n {\n params: {\n ref: \"branch:next\",\n output: \"gated_descriptors,app,category\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n },\n );\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptor,\n }),\n );\n });\n\n it(\"should find descriptor when API response has selector key without 0x prefix\", async () => {\n httpMock.get.mockResolvedValue(validGatedDappsResponse);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector: \"0xa1251d75\",\n chainId,\n });\n\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptor,\n }),\n );\n });\n\n it(\"should return Left when response is not an array\", async () => {\n httpMock.get.mockResolvedValue({ gated_descriptors: {} });\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n ),\n ),\n );\n });\n\n it(\"should return Left when response is empty array\", async () => {\n httpMock.get.mockResolvedValue([]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n ),\n ),\n );\n });\n\n it(\"should return Left when no descriptor matches contract and selector\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n \"0xothercontract\": {\n a1251d75: {\n descriptor: \"some-descriptor\",\n network: \"ethereum\",\n chain_id: 1,\n address: \"0xother\",\n selector: \"a1251d75\",\n version: \"v1\",\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75\",\n ),\n ),\n );\n });\n\n it(\"should return Left when http.get request fails\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error\",\n ),\n ),\n );\n });\n\n it(\"should use config.cal.branch in ref param\", async () => {\n const configMain: ContextModuleServiceConfig = {\n ...config,\n cal: { ...config.cal!, branch: \"main\" },\n } as ContextModuleServiceConfig;\n httpMock.get.mockResolvedValue(validGatedDappsResponse);\n\n const mainDataSource = new HttpGatedDescriptorDataSource(\n configMain,\n httpMock as unknown as DmkNetworkClient,\n );\n await mainDataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/gated_dapps`,\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params: expect.objectContaining({ ref: \"branch:main\" }),\n }),\n );\n });\n\n describe(\"when response fails DTO validation\", () => {\n const invalidResponseError = new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n );\n\n it(\"should return Left when array item has no gated_descriptors\", async () => {\n httpMock.get.mockResolvedValue([{}]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when gated_descriptors is not an object\", async () => {\n httpMock.get.mockResolvedValue([\n { gated_descriptors: \"not-an-object\" },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry is missing required field (descriptor)\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n // descriptor missing\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry has wrong type for chain_id\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: \"1\", // string instead of number\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry signatures contains non-string value\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: 123 }, // number instead of string\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when array item is null\", async () => {\n httpMock.get.mockResolvedValue([null]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when selectors map value is not an object\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: \"not-a-selectors-map\",\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n });\n });\n\n describe(\"getGatedDescriptorForTypedData\", () => {\n const schemaHash =\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\";\n const descriptorPayloadTypedData =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735\";\n const validTypedDataResponse = [\n {\n gated_descriptors: {\n [contractAddress]: {\n [schemaHash]: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"eip712\",\n version: \"v1\",\n descriptor: descriptorPayloadTypedData,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ];\n const expectedSignedDescriptorTypedData = `${descriptorPayloadTypedData}150100`;\n\n it(\"should return descriptor on successful request when keyed by schema hash\", async () => {\n httpMock.get.mockResolvedValue(validTypedDataResponse);\n\n const result = await dataSource.getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/gated_dapps`,\n {\n params: {\n ref: \"branch:next\",\n output: \"gated_descriptors\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n },\n );\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptorTypedData,\n }),\n );\n });\n\n it(\"should return Left when no descriptor matches contract and schema hash\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n other_schema_hash: {\n descriptor: \"some-descriptor\",\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"eip712\",\n version: \"v1\",\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and schema hash ${schemaHash}`,\n ),\n ),\n );\n });\n\n it(\"should return Left when http.get request fails\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await dataSource.getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error\",\n ),\n ),\n );\n });\n });\n});\n"],
5
- "mappings": "AACA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAG5B,OAAS,iCAAAC,MAAqC,sEAE9C,SAAS,gCAAiC,IAAM,CAC9C,MAAMC,EAAqC,CACzC,IAAK,CACH,IAAK,kDACL,OAAQ,OACR,KAAM,MACR,EACA,YAAa,mBACf,EAEMC,EAAkB,6CAClBC,EAAW,aACXC,EAAU,EAEVC,EACJ,6IACIC,EAA0B,CAC9B,CACE,kBAAmB,CACjB,6CAA8C,CAC5C,SAAU,CACR,QAAS,WACT,SAAU,EACV,QAAS,6CACT,SAAU,WACV,QAAS,KACT,WAAYD,EACZ,WAAY,CAAE,KAAM,KAAM,KAAM,IAAK,CACvC,CACF,CACF,CACF,CACF,EAEME,EAA2B,GAAGF,CAAiB,SAErD,IAAIG,EACAC,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjBD,EAAW,CAAE,IAAK,GAAG,GAAG,CAAE,EAC1BC,EAAa,IAAIT,EACfC,EACAO,CACF,CACF,CAAC,EAED,SAAS,qBAAsB,IAAM,CACnC,GAAG,6EAA8E,SAAY,CAC3FA,EAAS,IAAI,kBAAkBF,CAAuB,EAEtD,MAAMI,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOI,EAAS,GAAG,EAAE,qBACnB,GAAGP,EAAO,IAAI,GAAG,eACjB,CACE,OAAQ,CACN,IAAK,cACL,OAAQ,iCACR,UAAWC,EACX,SAAUE,CACZ,CACF,CACF,EACA,OAAOM,CAAM,EAAE,QACbX,EAAM,CACJ,iBAAkBQ,CACpB,CAAC,CACH,CACF,CAAC,EAED,GAAG,8EAA+E,SAAY,CAC5FC,EAAS,IAAI,kBAAkBF,CAAuB,EAEtD,MAAMI,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAU,aACV,QAAAE,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QACbX,EAAM,CACJ,iBAAkBQ,CACpB,CAAC,CACH,CACF,CAAC,EAED,GAAG,mDAAoD,SAAY,CACjEC,EAAS,IAAI,kBAAkB,CAAE,kBAAmB,CAAC,CAAE,CAAC,EAExD,MAAME,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QACbZ,EACE,IAAI,MACF,mFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAChEU,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAEjC,MAAME,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QACbZ,EACE,IAAI,MACF,mFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,sEAAuE,SAAY,CACpFU,EAAS,IAAI,kBAAkB,CAC7B,CACE,kBAAmB,CACjB,kBAAmB,CACjB,SAAU,CACR,WAAY,kBACZ,QAAS,WACT,SAAU,EACV,QAAS,UACT,SAAU,WACV,QAAS,IACX,CACF,CACF,CACF,CACF,CAAC,EAED,MAAME,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QACbZ,EACE,IAAI,MACF,oJACF,CACF,CACF,CACF,CAAC,EAED,GAAG,iDAAkD,SAAY,CAC/DU,EAAS,IAAI,kBAAkB,IAAI,MAAM,eAAe,CAAC,EAEzD,MAAME,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QACbZ,EACE,IAAI,MACF,wGACF,CACF,CACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAC1D,MAAMa,EAAyC,CAC7C,GAAGV,EACH,IAAK,CAAE,GAAGA,EAAO,IAAM,OAAQ,MAAO,CACxC,EACAO,EAAS,IAAI,kBAAkBF,CAAuB,EAMtD,MAJuB,IAAIN,EACzBW,EACAH,CACF,EACqB,mBAAmB,CACtC,gBAAAN,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOI,EAAS,GAAG,EAAE,qBACnB,GAAGP,EAAO,IAAI,GAAG,eACjB,OAAO,iBAAiB,CAEtB,OAAQ,OAAO,iBAAiB,CAAE,IAAK,aAAc,CAAC,CACxD,CAAC,CACH,CACF,CAAC,EAED,SAAS,qCAAsC,IAAM,CACnD,MAAMW,EAAuB,IAAI,MAC/B,mFACF,EAEA,GAAG,8DAA+D,SAAY,CAC5EJ,EAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAEnC,MAAME,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QAAQZ,EAAKc,CAAoB,CAAC,CACnD,CAAC,EAED,GAAG,6DAA8D,SAAY,CAC3EJ,EAAS,IAAI,kBAAkB,CAC7B,CAAE,kBAAmB,eAAgB,CACvC,CAAC,EAED,MAAME,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QAAQZ,EAAKc,CAAoB,CAAC,CACnD,CAAC,EAED,GAAG,uEAAwE,SAAY,CACrFJ,EAAS,IAAI,kBAAkB,CAC7B,CACE,kBAAmB,CACjB,CAACN,CAAe,EAAG,CACjB,SAAU,CACR,QAAS,WACT,SAAU,EACV,QAASA,EACT,SAAU,WACV,QAAS,IAEX,CACF,CACF,CACF,CACF,CAAC,EAED,MAAMQ,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QAAQZ,EAAKc,CAAoB,CAAC,CACnD,CAAC,EAED,GAAG,4DAA6D,SAAY,CAC1EJ,EAAS,IAAI,kBAAkB,CAC7B,CACE,kBAAmB,CACjB,CAACN,CAAe,EAAG,CACjB,SAAU,CACR,QAAS,WACT,SAAU,IACV,QAASA,EACT,SAAU,WACV,QAAS,KACT,WAAYG,EACZ,WAAY,CAAE,KAAM,KAAM,KAAM,IAAK,CACvC,CACF,CACF,CACF,CACF,CAAC,EAED,MAAMK,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QAAQZ,EAAKc,CAAoB,CAAC,CACnD,CAAC,EAED,GAAG,qEAAsE,SAAY,CACnFJ,EAAS,IAAI,kBAAkB,CAC7B,CACE,kBAAmB,CACjB,CAACN,CAAe,EAAG,CACjB,SAAU,CACR,QAAS,WACT,SAAU,EACV,QAASA,EACT,SAAU,WACV,QAAS,KACT,WAAYG,EACZ,WAAY,CAAE,KAAM,GAAI,CAC1B,CACF,CACF,CACF,CACF,CAAC,EAED,MAAMK,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QAAQZ,EAAKc,CAAoB,CAAC,CACnD,CAAC,EAED,GAAG,6CAA8C,SAAY,CAC3DJ,EAAS,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAErC,MAAME,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QAAQZ,EAAKc,CAAoB,CAAC,CACnD,CAAC,EAED,GAAG,+DAAgE,SAAY,CAC7EJ,EAAS,IAAI,kBAAkB,CAC7B,CACE,kBAAmB,CACjB,CAACN,CAAe,EAAG,qBACrB,CACF,CACF,CAAC,EAED,MAAMQ,EAAS,MAAMD,EAAW,mBAAmB,CACjD,gBAAAP,EACA,SAAAC,EACA,QAAAC,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QAAQZ,EAAKc,CAAoB,CAAC,CACnD,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iCAAkC,IAAM,CAC/C,MAAMC,EACJ,2DACIC,EACJ,6IACIC,EAAyB,CAC7B,CACE,kBAAmB,CACjB,CAACb,CAAe,EAAG,CACjB,CAACW,CAAU,EAAG,CACZ,QAAS,WACT,SAAU,EACV,QAASX,EACT,SAAU,SACV,QAAS,KACT,WAAYY,EACZ,WAAY,CAAE,KAAM,KAAM,KAAM,IAAK,CACvC,CACF,CACF,CACF,CACF,EACME,EAAoC,GAAGF,CAA0B,SAEvE,GAAG,2EAA4E,SAAY,CACzFN,EAAS,IAAI,kBAAkBO,CAAsB,EAErD,MAAML,EAAS,MAAMD,EAAW,+BAA+B,CAC7D,gBAAAP,EACA,WAAAW,EACA,QAAAT,CACF,CAAC,EAED,OAAOI,EAAS,GAAG,EAAE,qBACnB,GAAGP,EAAO,IAAI,GAAG,eACjB,CACE,OAAQ,CACN,IAAK,cACL,OAAQ,oBACR,UAAWC,EACX,SAAUE,CACZ,CACF,CACF,EACA,OAAOM,CAAM,EAAE,QACbX,EAAM,CACJ,iBAAkBiB,CACpB,CAAC,CACH,CACF,CAAC,EAED,GAAG,yEAA0E,SAAY,CACvFR,EAAS,IAAI,kBAAkB,CAC7B,CACE,kBAAmB,CACjB,CAACN,CAAe,EAAG,CACjB,kBAAmB,CACjB,WAAY,kBACZ,QAAS,WACT,SAAU,EACV,QAASA,EACT,SAAU,SACV,QAAS,IACX,CACF,CACF,CACF,CACF,CAAC,EAED,MAAMQ,EAAS,MAAMD,EAAW,+BAA+B,CAC7D,gBAAAP,EACA,WAAAW,EACA,QAAAT,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QACbZ,EACE,IAAI,MACF,mFAAmFI,CAAe,oBAAoBW,CAAU,EAClI,CACF,CACF,CACF,CAAC,EAED,GAAG,iDAAkD,SAAY,CAC/DL,EAAS,IAAI,kBAAkB,IAAI,MAAM,eAAe,CAAC,EAEzD,MAAME,EAAS,MAAMD,EAAW,+BAA+B,CAC7D,gBAAAP,EACA,WAAAW,EACA,QAAAT,CACF,CAAC,EAED,OAAOM,CAAM,EAAE,QACbZ,EACE,IAAI,MACF,wGACF,CACF,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpGatedDescriptorDataSource } from \"@/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource\";\n\ndescribe(\"HttpGatedDescriptorDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n branch: \"next\",\n mode: \"prod\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const contractAddress = \"0x1111111254fb6c44bac0bed2854e76f90643097d\";\n const selector = \"0xa1251d75\";\n const chainId = 1;\n\n const descriptorPayload =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735\";\n const validGatedDappsResponse = [\n {\n gated_descriptors: {\n \"0x1111111254fb6c44bac0bed2854e76f90643097d\": {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: \"0x1111111254fb6c44bac0bed2854e76f90643097d\",\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ];\n // signedDescriptor = payload + SIGNATURE_TAG(\"15\") + length(01) + signature(\"00\")\n const expectedSignedDescriptor = `${descriptorPayload}150100`;\n\n let httpMock: { get: ReturnType<typeof vi.fn> };\n let dataSource: HttpGatedDescriptorDataSource;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n dataSource = new HttpGatedDescriptorDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getGatedDescriptor\", () => {\n it(\"should return descriptor on successful request with correct URL and params\", async () => {\n httpMock.get.mockResolvedValue(validGatedDappsResponse);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/gated_dapps`,\n {\n params: {\n ref: \"branch:next\",\n output: \"gated_descriptors,app,category\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n },\n );\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptor,\n }),\n );\n });\n\n it(\"should find descriptor when API response has selector key without 0x prefix\", async () => {\n httpMock.get.mockResolvedValue(validGatedDappsResponse);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector: \"0xa1251d75\",\n chainId,\n });\n\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptor,\n }),\n );\n });\n\n it(\"should return Left when response is not an array\", async () => {\n httpMock.get.mockResolvedValue({ gated_descriptors: {} });\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n ),\n ),\n );\n });\n\n it(\"should return Left when response is empty array\", async () => {\n httpMock.get.mockResolvedValue([]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n ),\n ),\n );\n });\n\n it(\"should return Left when no descriptor matches contract and selector\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n \"0xothercontract\": {\n a1251d75: {\n descriptor: \"some-descriptor\",\n network: \"ethereum\",\n chain_id: 1,\n address: \"0xother\",\n selector: \"a1251d75\",\n version: \"v1\",\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75\",\n ),\n ),\n );\n });\n\n it(\"should return Left when http.get request fails\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error\",\n ),\n ),\n );\n });\n\n it(\"should use config.cal.branch in ref param\", async () => {\n const configMain: ContextModuleServiceConfig = {\n ...config,\n cal: { ...config.cal!, branch: \"main\" },\n } as ContextModuleServiceConfig;\n httpMock.get.mockResolvedValue(validGatedDappsResponse);\n\n const mainDataSource = new HttpGatedDescriptorDataSource(\n configMain,\n httpMock as unknown as DmkNetworkClient,\n );\n await mainDataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/gated_dapps`,\n expect.objectContaining({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n params: expect.objectContaining({ ref: \"branch:main\" }),\n }),\n );\n });\n\n describe(\"when response fails DTO validation\", () => {\n const invalidResponseError = new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response\",\n );\n\n it(\"should return Left when array item has no gated_descriptors\", async () => {\n httpMock.get.mockResolvedValue([{}]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when gated_descriptors is not an object\", async () => {\n httpMock.get.mockResolvedValue([\n { gated_descriptors: \"not-an-object\" },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry is missing required field (descriptor)\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n // descriptor missing\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry has wrong type for chain_id\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: \"1\", // string instead of number\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when entry signatures contains non-string value\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n a1251d75: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"a1251d75\",\n version: \"v1\",\n descriptor: descriptorPayload,\n signatures: { prod: 123 }, // number instead of string\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when array item is null\", async () => {\n httpMock.get.mockResolvedValue([null]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n\n it(\"should return Left when selectors map value is not an object\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: \"not-a-selectors-map\",\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n });\n\n expect(result).toEqual(Left(invalidResponseError));\n });\n });\n });\n\n describe(\"getGatedDescriptorForTypedData\", () => {\n const schemaHash =\n \"4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3\";\n const descriptorPayloadTypedData =\n \"010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735\";\n const validTypedDataResponse = [\n {\n gated_descriptors: {\n [contractAddress]: {\n [schemaHash]: {\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"eip712\",\n version: \"v1\",\n descriptor: descriptorPayloadTypedData,\n signatures: { prod: \"00\", test: \"00\" },\n },\n },\n },\n },\n ];\n const expectedSignedDescriptorTypedData = `${descriptorPayloadTypedData}150100`;\n\n it(\"should return descriptor on successful request when keyed by schema hash\", async () => {\n httpMock.get.mockResolvedValue(validTypedDataResponse);\n\n const result = await dataSource.getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.cal.url}/gated_dapps`,\n {\n params: {\n ref: \"branch:next\",\n output: \"gated_descriptors\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n },\n );\n expect(result).toEqual(\n Right({\n signedDescriptor: expectedSignedDescriptorTypedData,\n }),\n );\n });\n\n it(\"should return Left when no descriptor matches contract and schema hash\", async () => {\n httpMock.get.mockResolvedValue([\n {\n gated_descriptors: {\n [contractAddress]: {\n other_schema_hash: {\n descriptor: \"some-descriptor\",\n network: \"ethereum\",\n chain_id: 1,\n address: contractAddress,\n selector: \"eip712\",\n version: \"v1\",\n },\n },\n },\n },\n ]);\n\n const result = await dataSource.getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and schema hash ${schemaHash}`,\n ),\n ),\n );\n });\n\n it(\"should return Left when http.get request fails\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await dataSource.getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: Error: Network error\",\n ),\n ),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["Left", "Right", "HttpGatedDescriptorDataSource", "config", "contractAddress", "selector", "chainId", "descriptorPayload", "validGatedDappsResponse", "expectedSignedDescriptor", "httpMock", "dataSource", "result", "configMain", "invalidResponseError", "schemaHash", "descriptorPayloadTypedData", "validTypedDataResponse", "expectedSignedDescriptorTypedData"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as a}from"purify-ts";import{HttpTokenDataSource as r}from"../../../../modules/ethereum/token/data/HttpTokenDataSource";describe("HttpTokenDataSource",()=>{let o,t;beforeEach(()=>{vi.clearAllMocks();const e={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}};t={get:vi.fn()},o=new r(e,t)}),it("should call the expected CAL tokens URL with params",async()=>{t.get.mockResolvedValue([]),await o.getTokenInfosPayload({address:"0x00",chainId:1}),expect(t.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/v1/tokens",{params:{contract_address:"0x00",chain_id:1,output:"descriptor",ref:"branch:main"}})}),it("should return a string when response is correct",async()=>{const e={ticker:"USDC",descriptor:{data:"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089",signatures:{prod:"0123"}}};t.get.mockResolvedValue([e]);const n=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(n.extract()).toEqual("04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123")}),it("should return a string when response is correct with a prefixed ticker",async()=>{const e={ticker:"tUSDC",descriptor:{data:"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7",signatures:{prod:"0123"}}};t.get.mockResolvedValue([e]);const n=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(n.extract()).toEqual("067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123")}),it("should return an error when data is empty",async()=>{t.get.mockResolvedValue(null);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no signature",async()=>{t.get.mockResolvedValue([{}]);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no decimals",async()=>{t.get.mockResolvedValue([{live_signature:"0x0",ticker:"USDC"}]);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return an error when network client throws an error",async()=>{t.get.mockRejectedValue(new Error);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
1
+ import{Left as a}from"purify-ts";import{HttpTokenDataSource as r}from"../../../../modules/ethereum/token/data/HttpTokenDataSource";describe("HttpTokenDataSource",()=>{let o,t;beforeEach(()=>{vi.clearAllMocks();const e={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"}};t={get:vi.fn()},o=new r(e,t)}),it("should call the expected CAL tokens URL with params",async()=>{t.get.mockResolvedValue([]),await o.getTokenInfosPayload({address:"0x00",chainId:1}),expect(t.get).toHaveBeenCalledWith("https://global.api.prd.ledger.com/cal/v1/tokens",{params:{contract_address:"0x00",chain_id:1,output:"descriptor",ref:"branch:main"}})}),it("should return a string when response is correct",async()=>{const e={ticker:"USDC",descriptor:{data:"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089",signatures:{prod:"0123"}}};t.get.mockResolvedValue([e]);const n=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(n.extract()).toEqual("04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123")}),it("should return a string when response is correct with a prefixed ticker",async()=>{const e={ticker:"tUSDC",descriptor:{data:"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7",signatures:{prod:"0123"}}};t.get.mockResolvedValue([e]);const n=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(n.extract()).toEqual("067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123")}),it("should return an error when data is empty",async()=>{t.get.mockResolvedValue(null);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no signature",async()=>{t.get.mockResolvedValue([{}]);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no decimals",async()=>{t.get.mockResolvedValue([{live_signature:"0x0",ticker:"USDC"}]);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return an error when network client throws an error",async()=>{t.get.mockRejectedValue(new Error);const e=await o.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(a(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/modules/ethereum/token/data/HttpTokenDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTokenDataSource } from \"@/modules/ethereum/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/modules/ethereum/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/modules/ethereum/token/data/TokenDto\";\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call the expected CAL tokens URL with params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/v1/tokens\",\n {\n params: {\n contract_address: \"0x00\",\n chain_id: 1,\n output: \"descriptor\",\n ref: \"branch:main\",\n },\n },\n );\n });\n\n it(\"should return a string when response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123\",\n );\n });\n\n it(\"should return a string when response is correct with a prefixed ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"tUSDC\",\n descriptor: {\n data: \"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123\",\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(null);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{}]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{ live_signature: \"0x0\", ticker: \"USDC\" }]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when network client throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
- "mappings": "AACA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,oDAIpC,SAAS,sBAAuB,IAAM,CACpC,IAAIC,EACAC,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjB,MAAMC,EAAS,CACb,IAAK,CACH,IAAK,kDACL,KAAM,OACN,OAAQ,MACV,CACF,EACAD,EAAW,CAAE,IAAK,GAAG,GAAG,CAAE,EAC1BD,EAAa,IAAID,EACfG,EACAD,CACF,CACF,CAAC,EAED,GAAG,sDAAuD,SAAY,CAEpEA,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,QAAS,OAAQ,QAAS,CAAE,CAAC,EAGrE,OAAOC,EAAS,GAAG,EAAE,qBACnB,yDACA,CACE,OAAQ,CACN,iBAAkB,OAClB,SAAU,EACV,OAAQ,aACR,IAAK,aACP,CACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAEhE,MAAME,EAAqB,CACzB,OAAQ,OACR,WAAY,CACV,KAAM,mEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,wEACF,CACF,CAAC,EAED,GAAG,yEAA0E,SAAY,CAEvF,MAAMD,EAAqB,CACzB,OAAQ,QACR,WAAY,CACV,KAAM,uEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,4EACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DH,EAAS,IAAI,kBAAkB,IAAI,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DG,EAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,2CAA4C,SAAY,CAEzDG,EAAS,IAAI,kBAAkB,CAAC,CAAE,eAAgB,MAAO,OAAQ,MAAO,CAAC,CAAC,EAG1E,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAE3EG,EAAS,IAAI,kBAAkB,IAAI,KAAO,EAG1C,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,yEACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTokenDataSource } from \"@/modules/ethereum/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/modules/ethereum/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/modules/ethereum/token/data/TokenDto\";\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n const config = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call the expected CAL tokens URL with params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://global.api.prd.ledger.com/cal/v1/tokens\",\n {\n params: {\n contract_address: \"0x00\",\n chain_id: 1,\n output: \"descriptor\",\n ref: \"branch:main\",\n },\n },\n );\n });\n\n it(\"should return a string when response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"555344433c499c542cef5e3811e1192ce70d8cc03d5c33590000000600000089\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"04555344433c499c542cef5e3811e1192ce70d8cc03d5c335900000006000000890123\",\n );\n });\n\n it(\"should return a string when response is correct with a prefixed ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"tUSDC\",\n descriptor: {\n data: \"7474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a7\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n httpMock.get.mockResolvedValue([tokenDTO]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n \"067474555344431c7d4b196cb0c7b01d743fbc6116a902379c72380000000600aa36a70123\",\n );\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue(null);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{}]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([{ live_signature: \"0x0\", ticker: \"USDC\" }]);\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when network client throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "AACA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,oDAIpC,SAAS,sBAAuB,IAAM,CACpC,IAAIC,EACAC,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EACjB,MAAMC,EAAS,CACb,IAAK,CACH,IAAK,2CACL,KAAM,OACN,OAAQ,MACV,CACF,EACAD,EAAW,CAAE,IAAK,GAAG,GAAG,CAAE,EAC1BD,EAAa,IAAID,EACfG,EACAD,CACF,CACF,CAAC,EAED,GAAG,sDAAuD,SAAY,CAEpEA,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,QAAS,OAAQ,QAAS,CAAE,CAAC,EAGrE,OAAOC,EAAS,GAAG,EAAE,qBACnB,kDACA,CACE,OAAQ,CACN,iBAAkB,OAClB,SAAU,EACV,OAAQ,aACR,IAAK,aACP,CACF,CACF,CACF,CAAC,EAED,GAAG,kDAAmD,SAAY,CAEhE,MAAME,EAAqB,CACzB,OAAQ,OACR,WAAY,CACV,KAAM,mEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,wEACF,CACF,CAAC,EAED,GAAG,yEAA0E,SAAY,CAEvF,MAAMD,EAAqB,CACzB,OAAQ,QACR,WAAY,CACV,KAAM,uEACN,WAAY,CACV,KAAM,MACR,CACF,CACF,EACAF,EAAS,IAAI,kBAAkB,CAACE,CAAQ,CAAC,EAGzC,MAAMC,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,EAAO,QAAQ,CAAC,EAAE,QACvB,4EACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DH,EAAS,IAAI,kBAAkB,IAAI,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,4CAA6C,SAAY,CAE1DG,EAAS,IAAI,kBAAkB,CAAC,CAAC,CAAC,CAAC,EAGnC,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,2CAA4C,SAAY,CAEzDG,EAAS,IAAI,kBAAkB,CAAC,CAAE,eAAgB,MAAO,OAAQ,MAAO,CAAC,CAAC,EAG1E,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,EAED,GAAG,6DAA8D,SAAY,CAE3EG,EAAS,IAAI,kBAAkB,IAAI,KAAO,EAG1C,MAAMG,EAAS,MAAMJ,EAAW,qBAAqB,CACnD,QAAS,OACT,QAAS,CACX,CAAC,EAGD,OAAOI,CAAM,EAAE,QACbN,EACE,IAAI,MACF,yEACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
6
  "names": ["Left", "HttpTokenDataSource", "datasource", "httpMock", "config", "tokenDTO", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Left as s,Right as r}from"purify-ts";import{HttpTrustedNameDataSource as d}from"../../../../modules/ethereum/trusted-name/data/HttpTrustedNameDataSource";const n={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"},metadataServiceDomain:{url:"https://nft.api.live.ledger.com"},originToken:"originToken"};describe("HttpTrustedNameDataSource",()=>{let t,a;beforeEach(()=>{vi.clearAllMocks(),a={get:vi.fn()},t=new d(n,a)}),describe("getDomainNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getDomainNamePayload({chainId:137,challenge:"9876",domain:"hello.eth"}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,{params:{types:"eoa",sources:"ens",challenge:"9876"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getDomainNamePayload({chainId:137,challenge:"challenge",domain:"hello.eth"});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})}),describe("getTrustedNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"5678",sources:["ens","crypto_asset_list"],types:["eoa"]}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,{params:{types:"eoa",sources:"ens,crypto_asset_list",challenge:"5678"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return an error when no keys are returned",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}}};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),it("should return a payload with a signature",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload153012345",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})})});
1
+ import{Left as s,Right as r}from"purify-ts";import{HttpTrustedNameDataSource as d}from"../../../../modules/ethereum/trusted-name/data/HttpTrustedNameDataSource";const n={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"},metadataServiceDomain:{url:"https://nft.api.live.ledger.com"},originToken:"originToken"};describe("HttpTrustedNameDataSource",()=>{let t,a;beforeEach(()=>{vi.clearAllMocks(),a={get:vi.fn()},t=new d(n,a)}),describe("getDomainNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getDomainNamePayload({chainId:137,challenge:"9876",domain:"hello.eth"}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,{params:{types:"eoa",sources:"ens",challenge:"9876"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getDomainNamePayload({chainId:137,challenge:"",domain:"hello.eth"});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getDomainNamePayload({chainId:137,challenge:"challenge",domain:"hello.eth"});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})}),describe("getTrustedNamePayload",()=>{it("should call http.get with the correct url and params",async()=>{a.get.mockResolvedValue([]),await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"5678",sources:["ens","crypto_asset_list"],types:["eoa"]}),expect(a.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,{params:{types:"eoa",sources:"ens,crypto_asset_list",challenge:"5678"}})}),it("should throw an error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error);const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name")))}),it("should return an error when no payload is returned",async()=>{a.get.mockResolvedValue({test:""});const e=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(e).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return an error when no keys are returned",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}}};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(s(new Error("[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137")))}),it("should return a payload",async()=>{const e={signedDescriptor:{data:"payload",signatures:{}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload",keyId:"testKeyId",keyUsage:"testKeyUsage"}))}),it("should return a payload with a signature",async()=>{const e={signedDescriptor:{data:"payload",signatures:{prod:"12345"}},keyId:"testKeyId",keyUsage:"testKeyUsage"};a.get.mockResolvedValue(e);const o=await t.getTrustedNamePayload({chainId:137,address:"0x1234",challenge:"",sources:["ens"],types:["eoa"]});expect(o).toEqual(r({data:"payload153012345",keyId:"testKeyId",keyUsage:"testKeyUsage"}))})})});
2
2
  //# sourceMappingURL=HttpTrustedNameDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.ts"],
4
- "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource\";\nimport { type TrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/TrustedNameDataSource\";\n\nconst config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger.com\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpTrustedNameDataSource\", () => {\n let datasource: TrustedNameDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTrustedNameDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getDomainNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"9876\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,\n {\n params: { types: \"eoa\", sources: \"ens\", challenge: \"9876\" },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no payload is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue({ test: \"\" });\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"challenge\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n });\n\n describe(\"getTrustedNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"5678\",\n sources: [\"ens\", \"crypto_asset_list\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,\n {\n params: {\n types: \"eoa\",\n sources: \"ens,crypto_asset_list\",\n challenge: \"5678\",\n },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no payload is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue({ test: \"\" });\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no keys are returned\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n it(\"should return a payload with a signature\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload153012345\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource\";\nimport { type TrustedNameDataSource } from \"@/modules/ethereum/trusted-name/data/TrustedNameDataSource\";\n\nconst config = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger.com\",\n },\n originToken: \"originToken\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpTrustedNameDataSource\", () => {\n let datasource: TrustedNameDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTrustedNameDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getDomainNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"9876\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/forward/hello.eth`,\n {\n params: { types: \"eoa\", sources: \"ens\", challenge: \"9876\" },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch domain name\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no payload is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue({ test: \"\" });\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for domain hello.eth on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getDomainNamePayload({\n chainId: 137,\n challenge: \"challenge\",\n domain: \"hello.eth\",\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n });\n\n describe(\"getTrustedNamePayload\", () => {\n it(\"should call http.get with the correct url and params\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue([]);\n\n // WHEN\n await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"5678\",\n sources: [\"ens\", \"crypto_asset_list\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/names/ethereum/137/reverse/0x1234`,\n {\n params: {\n types: \"eoa\",\n sources: \"ens,crypto_asset_list\",\n challenge: \"5678\",\n },\n },\n );\n });\n\n it(\"should throw an error when http.get throws an error\", async () => {\n // GIVEN\n httpMock.get.mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Failed to fetch trusted name\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no payload is returned\", async () => {\n // GIVEN\n httpMock.get.mockResolvedValue({ test: \"\" });\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return an error when no keys are returned\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTrustedNameDataSource: Invalid trusted name response format for address 0x1234 on chain 137\",\n ),\n ),\n );\n });\n\n it(\"should return a payload\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: {} },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n\n it(\"should return a payload with a signature\", async () => {\n // GIVEN\n const responseData = {\n signedDescriptor: { data: \"payload\", signatures: { prod: \"12345\" } },\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n httpMock.get.mockResolvedValue(responseData);\n\n // WHEN\n const result = await datasource.getTrustedNamePayload({\n chainId: 137,\n address: \"0x1234\",\n challenge: \"\",\n sources: [\"ens\"],\n types: [\"eoa\"],\n });\n\n // THEN\n expect(result).toEqual(\n Right({\n data: \"payload153012345\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["Left", "Right", "HttpTrustedNameDataSource", "config", "datasource", "httpMock", "result", "responseData"]
7
7
  }