@ledgerhq/context-module 0.0.0-develop-20260428002525 → 0.0.0-develop-20260430002707

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 (233) hide show
  1. package/lib/cjs/package.json +1 -2
  2. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
  3. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
  4. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
  5. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
  6. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  7. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +3 -3
  8. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  9. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +3 -3
  10. package/lib/cjs/src/calldata/di/calldataModuleFactory.js +1 -1
  11. package/lib/cjs/src/calldata/di/calldataModuleFactory.js.map +3 -3
  12. package/lib/cjs/src/di.js +1 -1
  13. package/lib/cjs/src/di.js.map +3 -3
  14. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  15. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  16. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  17. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +3 -3
  18. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  19. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  20. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  21. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  22. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js +1 -1
  23. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +3 -3
  24. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  25. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +3 -3
  26. package/lib/cjs/src/network/di/networkModuleFactory.js +2 -0
  27. package/lib/cjs/src/network/di/networkModuleFactory.js.map +7 -0
  28. package/lib/cjs/src/network/di/networkTypes.js +2 -0
  29. package/lib/cjs/src/network/di/networkTypes.js.map +7 -0
  30. package/lib/cjs/src/network/networkClientFactory.js +2 -0
  31. package/lib/cjs/src/network/networkClientFactory.js.map +7 -0
  32. package/lib/cjs/src/network/networkClientFactory.test.js +2 -0
  33. package/lib/cjs/src/network/networkClientFactory.test.js.map +7 -0
  34. package/lib/cjs/src/nft/data/HttpNftDataSource.js +1 -1
  35. package/lib/cjs/src/nft/data/HttpNftDataSource.js.map +3 -3
  36. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js +1 -1
  37. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  38. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  39. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  40. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js +1 -1
  41. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js.map +3 -3
  42. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +1 -1
  43. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  44. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  45. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  46. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
  47. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +3 -3
  48. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js +1 -1
  49. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +3 -3
  50. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +1 -1
  51. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +3 -3
  52. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  53. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  54. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  55. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +3 -3
  56. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  57. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js.map +3 -3
  58. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  59. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js.map +3 -3
  60. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  61. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +3 -3
  62. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  63. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +3 -3
  64. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
  65. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
  66. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
  67. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
  68. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  69. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +3 -3
  70. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +6 -6
  71. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +3 -3
  72. package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
  73. package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +3 -3
  74. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js +1 -1
  75. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  76. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  77. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +3 -3
  78. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js +1 -1
  79. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +3 -3
  80. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js +1 -1
  81. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +3 -3
  82. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js +1 -1
  83. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +3 -3
  84. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  85. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  86. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  87. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  88. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  89. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  90. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  91. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  92. package/lib/esm/package.json +1 -2
  93. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
  94. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
  95. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
  96. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
  97. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  98. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +3 -3
  99. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  100. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +3 -3
  101. package/lib/esm/src/calldata/di/calldataModuleFactory.js +1 -1
  102. package/lib/esm/src/calldata/di/calldataModuleFactory.js.map +3 -3
  103. package/lib/esm/src/di.js +1 -1
  104. package/lib/esm/src/di.js.map +3 -3
  105. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  106. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  107. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  108. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +3 -3
  109. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  110. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  111. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  112. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  113. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js +1 -1
  114. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +3 -3
  115. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  116. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +3 -3
  117. package/lib/esm/src/network/di/networkModuleFactory.js +2 -0
  118. package/lib/esm/src/network/di/networkModuleFactory.js.map +7 -0
  119. package/lib/esm/src/network/di/networkTypes.js +2 -0
  120. package/lib/esm/src/network/di/networkTypes.js.map +7 -0
  121. package/lib/esm/src/network/networkClientFactory.js +2 -0
  122. package/lib/esm/src/network/networkClientFactory.js.map +7 -0
  123. package/lib/esm/src/network/networkClientFactory.test.js +2 -0
  124. package/lib/esm/src/network/networkClientFactory.test.js.map +7 -0
  125. package/lib/esm/src/nft/data/HttpNftDataSource.js +1 -1
  126. package/lib/esm/src/nft/data/HttpNftDataSource.js.map +3 -3
  127. package/lib/esm/src/nft/data/HttpNftDataSource.test.js +1 -1
  128. package/lib/esm/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  129. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  130. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  131. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js +1 -1
  132. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js.map +3 -3
  133. package/lib/esm/src/proxy/data/HttpProxyDataSource.js +1 -1
  134. package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  135. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  136. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  137. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
  138. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +3 -3
  139. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js +1 -1
  140. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +3 -3
  141. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +1 -1
  142. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +3 -3
  143. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  144. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  145. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  146. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +3 -3
  147. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  148. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js.map +3 -3
  149. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  150. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js.map +3 -3
  151. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  152. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +3 -3
  153. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  154. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +3 -3
  155. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
  156. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
  157. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
  158. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
  159. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  160. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +3 -3
  161. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +6 -6
  162. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +3 -3
  163. package/lib/esm/src/token/data/HttpTokenDataSource.js +1 -1
  164. package/lib/esm/src/token/data/HttpTokenDataSource.js.map +3 -3
  165. package/lib/esm/src/token/data/HttpTokenDataSource.test.js +1 -1
  166. package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  167. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  168. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +3 -3
  169. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js +1 -1
  170. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +3 -3
  171. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js +1 -1
  172. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +3 -3
  173. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js +1 -1
  174. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +3 -3
  175. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  176. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  177. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  178. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  179. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  180. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  181. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  182. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  183. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts +10 -10
  184. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts.map +1 -1
  185. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts +3 -1
  186. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -1
  187. package/lib/types/src/calldata/di/calldataModuleFactory.d.ts.map +1 -1
  188. package/lib/types/src/di.d.ts.map +1 -1
  189. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts +3 -1
  190. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -1
  191. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts +3 -1
  192. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts.map +1 -1
  193. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts +3 -1
  194. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts.map +1 -1
  195. package/lib/types/src/network/di/networkModuleFactory.d.ts +4 -0
  196. package/lib/types/src/network/di/networkModuleFactory.d.ts.map +1 -0
  197. package/lib/types/src/network/di/networkTypes.d.ts +4 -0
  198. package/lib/types/src/network/di/networkTypes.d.ts.map +1 -0
  199. package/lib/types/src/network/networkClientFactory.d.ts +4 -0
  200. package/lib/types/src/network/networkClientFactory.d.ts.map +1 -0
  201. package/lib/types/src/network/networkClientFactory.test.d.ts +2 -0
  202. package/lib/types/src/network/networkClientFactory.test.d.ts.map +1 -0
  203. package/lib/types/src/nft/data/HttpNftDataSource.d.ts +3 -1
  204. package/lib/types/src/nft/data/HttpNftDataSource.d.ts.map +1 -1
  205. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts +4 -1
  206. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts.map +1 -1
  207. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +3 -1
  208. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -1
  209. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +3 -1
  210. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -1
  211. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts +3 -1
  212. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts.map +1 -1
  213. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts +3 -1
  214. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts.map +1 -1
  215. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts +3 -1
  216. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts.map +1 -1
  217. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts +3 -2
  218. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts.map +1 -1
  219. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts +3 -1
  220. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts.map +1 -1
  221. package/lib/types/src/token/data/HttpTokenDataSource.d.ts +3 -1
  222. package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
  223. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts +3 -1
  224. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts.map +1 -1
  225. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts +3 -1
  226. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts.map +1 -1
  227. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +3 -1
  228. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  229. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +3 -1
  230. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
  231. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts.map +1 -1
  232. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  233. package/package.json +5 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dynamic-network/data/HttpDynamicNetworkDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeAll, beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpDynamicNetworkDataSource } from \"./HttpDynamicNetworkDataSource\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpNetworkDataSource\", () => {\n let datasource: HttpDynamicNetworkDataSource;\n const mockConfig: ContextModuleServiceConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const mockNetworkResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n },\n },\n },\n ],\n };\n\n beforeAll(() => {\n datasource = new HttpDynamicNetworkDataSource(mockConfig);\n });\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getNetworkConfiguration\", () => {\n it(\"should return network configuration successfully\", async () => {\n vi.mocked(axios.get).mockResolvedValue(mockNetworkResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(axios.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=1\",\n expect.objectContaining({\n headers: expect.any(Object) as Record<string, string>,\n }),\n );\n\n expect(result).toEqual(\n Right({\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n icon: undefined,\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n icon: undefined,\n },\n },\n }),\n );\n });\n\n it(\"should return error when network data is not found\", async () => {\n vi.mocked(axios.get).mockResolvedValue({ data: [] });\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when network data is undefined\", async () => {\n vi.mocked(axios.get).mockResolvedValue({ data: undefined });\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when axios throws an error\", async () => {\n vi.mocked(axios.get).mockRejectedValue(new Error(\"Network error\"));\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(Left(new Error(\"Network error\")));\n });\n\n it(\"should return generic error when axios throws non-Error\", async () => {\n vi.mocked(axios.get).mockRejectedValue(\"String error\");\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Failed to fetch network configuration\")),\n );\n });\n\n it(\"should handle invalid data - missing id\", async () => {\n const invalidResponse = {\n data: [\n {\n // Missing id\n descriptors: {},\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - missing descriptors\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n // Missing descriptors\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing data field\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n // Missing data\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: { prod: \"sig1\", test: \"sig2\" },\n },\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing signatures\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n // Missing signatures\n },\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid signatures - missing prod\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n // Missing prod\n test: \"sig2\",\n },\n },\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should include icons when available\", async () => {\n const responseWithIcons = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n stax: {\n data: \"0x0102\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig3\",\n test: \"sig4\",\n },\n },\n },\n icons: {\n flex: \"icon1\",\n stax: \"icon2\",\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(responseWithIcons);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(configuration.descriptors.flex.icon).toBe(\"icon1\");\n expect(configuration.descriptors.stax.icon).toBe(\"icon2\");\n });\n\n it(\"should transform data correctly for Polygon chain ID\", async () => {\n vi.mocked(axios.get).mockResolvedValue(mockNetworkResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(137);\n\n expect(axios.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=137\",\n expect.objectContaining({\n headers: expect.any(Object) as Record<string, string>,\n }),\n );\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(Object.keys(configuration.descriptors)).toEqual([\"flex\", \"stax\"]);\n });\n\n it(\"should handle invalid data - null data\", async () => {\n const invalidResponse = {\n data: [null],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should handle invalid data - non-object data\", async () => {\n const invalidResponse = {\n data: [\"string_instead_of_object\"],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as string instead of object\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: \"should_be_object_not_string\",\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as number instead of object (line 93)\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: 123,\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - null descriptor (line 103)\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: null,\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - non-object descriptor (line 103)\", async () => {\n const invalidResponse = {\n data: [\n {\n id: \"ethereum\",\n descriptors: {\n flex: \"should_be_object_not_string\",\n },\n },\n ],\n };\n vi.mocked(axios.get).mockResolvedValue(invalidResponse);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["axios", "Left", "Right", "beforeAll", "beforeEach", "describe", "expect", "it", "vi", "HttpDynamicNetworkDataSource", "datasource", "mockConfig", "mockNetworkResponse", "result", "invalidResponse", "responseWithIcons", "configuration"]
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpDynamicNetworkDataSource } from \"./HttpDynamicNetworkDataSource\";\n\ndescribe(\"HttpNetworkDataSource\", () => {\n let datasource: HttpDynamicNetworkDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const mockConfig: ContextModuleServiceConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const mockNetworkData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n },\n },\n },\n ];\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpDynamicNetworkDataSource(\n mockConfig,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getNetworkConfiguration\", () => {\n it(\"should return network configuration successfully\", async () => {\n httpMock.get.mockResolvedValue(mockNetworkData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${mockConfig.cal.url}/networks`,\n {\n params: {\n output: \"id,descriptors,icons\",\n chain_id: 1,\n },\n },\n );\n\n expect(result).toEqual(\n Right({\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0\",\n test: \"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3\",\n },\n icon: undefined,\n },\n stax: {\n data: \"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80\",\n },\n icon: undefined,\n },\n },\n }),\n );\n });\n\n it(\"should return error when network data is not found\", async () => {\n httpMock.get.mockResolvedValue([]);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when network data is undefined\", async () => {\n httpMock.get.mockResolvedValue(null);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should return error when http.get throws an error\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(Left(new Error(\"Network error\")));\n });\n\n it(\"should return generic error when http.get throws non-Error\", async () => {\n httpMock.get.mockRejectedValue(\"String error\");\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Failed to fetch network configuration\")),\n );\n });\n\n it(\"should handle invalid data - missing id\", async () => {\n const invalidData = [\n {\n // Missing id\n descriptors: {},\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - missing descriptors\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n // Missing descriptors\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing data field\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n // Missing data\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: { prod: \"sig1\", test: \"sig2\" },\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - missing signatures\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n // Missing signatures\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid signatures - missing prod\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n // Missing prod\n test: \"sig2\",\n },\n },\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should include icons when available\", async () => {\n const dataWithIcons = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n stax: {\n data: \"0x0102\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig3\",\n test: \"sig4\",\n },\n },\n },\n icons: {\n flex: \"icon1\",\n stax: \"icon2\",\n },\n },\n ];\n httpMock.get.mockResolvedValue(dataWithIcons);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(configuration.descriptors.flex.icon).toBe(\"icon1\");\n expect(configuration.descriptors.stax.icon).toBe(\"icon2\");\n });\n\n it(\"should transform data correctly for Polygon chain ID\", async () => {\n httpMock.get.mockResolvedValue(mockNetworkData);\n\n const result = await datasource.getDynamicNetworkConfiguration(137);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${mockConfig.cal.url}/networks`,\n {\n params: {\n output: \"id,descriptors,icons\",\n chain_id: 137,\n },\n },\n );\n\n expect(result.isRight()).toBe(true);\n const configuration = result.unsafeCoerce();\n expect(Object.keys(configuration.descriptors)).toEqual([\"flex\", \"stax\"]);\n });\n\n it(\"should handle invalid data - null data\", async () => {\n const invalidData = [null];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(new Error(\"Network configuration not found for chain ID: 1\")),\n );\n });\n\n it(\"should handle invalid data - non-object data\", async () => {\n const invalidData = [\"string_instead_of_object\"];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as string instead of object\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: \"should_be_object_not_string\",\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid data - icons as number instead of object (line 93)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"sig1\",\n test: \"sig2\",\n },\n },\n },\n icons: 123,\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - null descriptor (line 103)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: null,\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n\n it(\"should handle invalid descriptor - non-object descriptor (line 103)\", async () => {\n const invalidData = [\n {\n id: \"ethereum\",\n descriptors: {\n flex: \"should_be_object_not_string\",\n },\n },\n ];\n httpMock.get.mockResolvedValue(invalidData);\n\n const result = await datasource.getDynamicNetworkConfiguration(1);\n\n expect(result).toEqual(\n Left(\n new Error(\"Invalid network configuration response for chain ID: 1\"),\n ),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "HttpDynamicNetworkDataSource", "datasource", "httpMock", "mockConfig", "mockNetworkData", "result", "invalidData", "dataWithIcons", "configuration"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var E=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var l=(a,r,t,e)=>{for(var o=e>1?void 0:e?g(r,t):r,i=a.length-1,n;i>=0;i--)(n=a[i])&&(o=(e?n(r,t,o):n(o))||o);return e&&o&&E(r,t,o),o},d=(a,r)=>(t,e)=>r(t,e,a);import C from"axios";import{inject as h,injectable as I}from"inversify";import{Left as _,Right as s}from"purify-ts";import{configTypes as b}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as x,LEDGER_ORIGIN_TOKEN_HEADER as G}from"../../shared/constant/HttpHeaders";import R from"../../../package.json";let f=class{constructor(r){this.config=r}async getDappInfos({chainId:r,address:t,selector:e}){try{const o=await C.request({method:"GET",url:`${this.config.cal.url}/dapps`,params:{output:"b2c,b2c_signatures,abis",chain_id:r,contracts:t},headers:{[x]:`context-module/${R.version}`,[G]:this.config.originToken}});if(!o.data[0])return s(void 0);t=t.toLowerCase(),e=`0x${e.slice(2).toLowerCase()}`;const{erc20OfInterest:i,method:n,plugin:p}=o.data[0].b2c?.contracts?.find(D=>D.address===t)?.selectors?.[e]||{},{signature:c,serialized_data:m}=o.data[0].b2c_signatures?.[t]?.[e]||{};if(!i||!n||!p||!c||!m)return s(void 0);const u=o.data[0].abis?.[t];return u?s({selectorDetails:{method:n,plugin:p,erc20OfInterest:i,signature:c,serializedData:m},abi:u}):s(void 0)}catch{return _(new Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))}}};f=l([I(),d(0,h(b.Config))],f);export{f as HttpExternalPluginDataSource};
1
+ var C=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var d=(p,r,t,o)=>{for(var e=o>1?void 0:o?h(r,t):r,i=p.length-1,n;i>=0;i--)(n=p[i])&&(e=(o?n(r,t,e):n(e))||e);return o&&e&&C(r,t,e),e},f=(p,r)=>(t,o)=>r(t,o,p);import{inject as g,injectable as b}from"inversify";import{Left as w,Right as a}from"purify-ts";import{configTypes as y}from"../../config/di/configTypes";import{networkTypes as I}from"../../network/di/networkTypes";let s=class{constructor(r,t){this.config=r;this.http=t}async getDappInfos({chainId:r,address:t,selector:o}){try{const e=await this.http.get(`${this.config.cal.url}/dapps`,{params:{output:"b2c,b2c_signatures,abis",chain_id:r,contracts:t}});if(!e[0])return a(void 0);t=t.toLowerCase(),o=`0x${o.slice(2).toLowerCase()}`;const{erc20OfInterest:i,method:n,plugin:c}=e[0].b2c?.contracts?.find(D=>D.address===t)?.selectors?.[o]||{},{signature:m,serialized_data:l}=e[0].b2c_signatures?.[t]?.[o]||{};if(!i||!n||!c||!m||!l)return a(void 0);const u=e[0].abis?.[t];return u?a({selectorDetails:{method:n,plugin:c,erc20OfInterest:i,signature:m,serializedData:l},abi:u}):a(void 0)}catch{return w(new Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))}}};s=d([b(),f(0,g(y.Config)),f(1,g(I.NetworkClient))],s);export{s as HttpExternalPluginDataSource};
2
2
  //# sourceMappingURL=HttpExternalPluginDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/external-plugin/data/HttpExternalPluginDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { DAppDto } from \"@/external-plugin/data/DAppDto\";\nimport {\n ExternalPluginDataSource,\n GetDappInfos,\n} from \"@/external-plugin/data/ExternalPluginDataSource\";\nimport { DappInfos } from \"@/external-plugin/model/DappInfos\";\nimport { SelectorDetails } from \"@/external-plugin/model/SelectorDetails\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\n@injectable()\nexport class HttpExternalPluginDataSource implements ExternalPluginDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDappInfos({\n chainId,\n address,\n selector,\n }: GetDappInfos): Promise<Either<Error, DappInfos | undefined>> {\n try {\n const dappInfos = await axios.request<DAppDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/dapps`,\n params: {\n output: \"b2c,b2c_signatures,abis\",\n chain_id: chainId,\n contracts: address,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n\n if (!dappInfos.data[0]) {\n return Right(undefined);\n }\n\n // Normalize the address and selector\n address = address.toLowerCase();\n selector = `0x${selector.slice(2).toLowerCase()}`;\n\n const { erc20OfInterest, method, plugin } =\n dappInfos.data[0].b2c?.contracts?.find((c) => c.address === address)\n ?.selectors?.[selector] || {};\n const { signature, serialized_data: serializedData } =\n dappInfos.data[0].b2c_signatures?.[address]?.[selector] || {};\n\n if (\n !erc20OfInterest ||\n !method ||\n !plugin ||\n !signature ||\n !serializedData\n ) {\n return Right(undefined);\n }\n\n const abi = dappInfos.data[0].abis?.[address];\n\n if (!abi) {\n return Right(undefined);\n }\n\n const selectorDetails: SelectorDetails = {\n method,\n plugin,\n erc20OfInterest,\n signature,\n serializedData,\n };\n\n return Right({ selectorDetails, abi });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos\",\n ),\n );\n }\n }\n}\n"],
5
- "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAS5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAGb,IAAMC,EAAN,KAAuE,CAC5E,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,aAAa,CACjB,QAAAC,EACA,QAAAC,EACA,SAAAC,CACF,EAAgE,CAC9D,GAAI,CACF,MAAMC,EAAY,MAAMC,EAAM,QAAmB,CAC/C,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,SAC3B,OAAQ,CACN,OAAQ,0BACR,SAAUJ,EACV,UAAWC,CACb,EACA,QAAS,CACP,CAACI,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,GAAI,CAACJ,EAAU,KAAK,CAAC,EACnB,OAAOK,EAAM,MAAS,EAIxBP,EAAUA,EAAQ,YAAY,EAC9BC,EAAW,KAAKA,EAAS,MAAM,CAAC,EAAE,YAAY,CAAC,GAE/C,KAAM,CAAE,gBAAAO,EAAiB,OAAAC,EAAQ,OAAAC,CAAO,EACtCR,EAAU,KAAK,CAAC,EAAE,KAAK,WAAW,KAAMS,GAAMA,EAAE,UAAYX,CAAO,GAC/D,YAAYC,CAAQ,GAAK,CAAC,EAC1B,CAAE,UAAAW,EAAW,gBAAiBC,CAAe,EACjDX,EAAU,KAAK,CAAC,EAAE,iBAAiBF,CAAO,IAAIC,CAAQ,GAAK,CAAC,EAE9D,GACE,CAACO,GACD,CAACC,GACD,CAACC,GACD,CAACE,GACD,CAACC,EAED,OAAON,EAAM,MAAS,EAGxB,MAAMO,EAAMZ,EAAU,KAAK,CAAC,EAAE,OAAOF,CAAO,EAE5C,OAAKc,EAYEP,EAAM,CAAE,gBAR0B,CACvC,OAAAE,EACA,OAAAC,EACA,gBAAAF,EACA,UAAAI,EACA,eAAAC,CACF,EAEgC,IAAAC,CAAI,CAAC,EAX5BP,EAAM,MAAS,CAY1B,MAAiB,CACf,OAAOQ,EACL,IAAI,MACF,yEACF,CACF,CACF,CACF,CACF,EAzEalB,EAANmB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBvB",
6
- "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpExternalPluginDataSource", "config", "chainId", "address", "selector", "dappInfos", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Right", "erc20OfInterest", "method", "plugin", "c", "signature", "serializedData", "abi", "Left", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { DAppDto } from \"@/external-plugin/data/DAppDto\";\nimport {\n ExternalPluginDataSource,\n GetDappInfos,\n} from \"@/external-plugin/data/ExternalPluginDataSource\";\nimport { DappInfos } from \"@/external-plugin/model/DappInfos\";\nimport { SelectorDetails } from \"@/external-plugin/model/SelectorDetails\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\n\n@injectable()\nexport class HttpExternalPluginDataSource implements ExternalPluginDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n async getDappInfos({\n chainId,\n address,\n selector,\n }: GetDappInfos): Promise<Either<Error, DappInfos | undefined>> {\n try {\n const dappInfos = (await this.http.get(`${this.config.cal.url}/dapps`, {\n params: {\n output: \"b2c,b2c_signatures,abis\",\n chain_id: chainId,\n contracts: address,\n },\n })) as DAppDto[];\n\n if (!dappInfos[0]) {\n return Right(undefined);\n }\n\n // Normalize the address and selector\n address = address.toLowerCase();\n selector = `0x${selector.slice(2).toLowerCase()}`;\n\n const { erc20OfInterest, method, plugin } =\n dappInfos[0].b2c?.contracts?.find((c) => c.address === address)\n ?.selectors?.[selector] || {};\n const { signature, serialized_data: serializedData } =\n dappInfos[0].b2c_signatures?.[address]?.[selector] || {};\n\n if (\n !erc20OfInterest ||\n !method ||\n !plugin ||\n !signature ||\n !serializedData\n ) {\n return Right(undefined);\n }\n\n const abi = dappInfos[0].abis?.[address];\n\n if (!abi) {\n return Right(undefined);\n }\n\n const selectorDetails: SelectorDetails = {\n method,\n plugin,\n erc20OfInterest,\n signature,\n serializedData,\n };\n\n return Right({ selectorDetails, abi });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos\",\n ),\n );\n }\n }\n}\n"],
5
+ "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAS5B,OAAS,gBAAAC,MAAoB,4BAGtB,IAAMC,EAAN,KAAuE,CAC5E,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAM,aAAa,CACjB,QAAAC,EACA,QAAAC,EACA,SAAAC,CACF,EAAgE,CAC9D,GAAI,CACF,MAAMC,EAAa,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,SAAU,CACrE,OAAQ,CACN,OAAQ,0BACR,SAAUH,EACV,UAAWC,CACb,CACF,CAAC,EAED,GAAI,CAACE,EAAU,CAAC,EACd,OAAOC,EAAM,MAAS,EAIxBH,EAAUA,EAAQ,YAAY,EAC9BC,EAAW,KAAKA,EAAS,MAAM,CAAC,EAAE,YAAY,CAAC,GAE/C,KAAM,CAAE,gBAAAG,EAAiB,OAAAC,EAAQ,OAAAC,CAAO,EACtCJ,EAAU,CAAC,EAAE,KAAK,WAAW,KAAMK,GAAMA,EAAE,UAAYP,CAAO,GAC1D,YAAYC,CAAQ,GAAK,CAAC,EAC1B,CAAE,UAAAO,EAAW,gBAAiBC,CAAe,EACjDP,EAAU,CAAC,EAAE,iBAAiBF,CAAO,IAAIC,CAAQ,GAAK,CAAC,EAEzD,GACE,CAACG,GACD,CAACC,GACD,CAACC,GACD,CAACE,GACD,CAACC,EAED,OAAON,EAAM,MAAS,EAGxB,MAAMO,EAAMR,EAAU,CAAC,EAAE,OAAOF,CAAO,EAEvC,OAAKU,EAYEP,EAAM,CAAE,gBAR0B,CACvC,OAAAE,EACA,OAAAC,EACA,gBAAAF,EACA,UAAAI,EACA,eAAAC,CACF,EAEgC,IAAAC,CAAI,CAAC,EAX5BP,EAAM,MAAS,CAY1B,MAAiB,CACf,OAAOQ,EACL,IAAI,MACF,yEACF,CACF,CACF,CACF,CACF,EArEaf,EAANgB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,GAEzBF,EAAA,EAAAC,EAAOE,EAAa,aAAa,IAJzBrB",
6
+ "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "HttpExternalPluginDataSource", "config", "http", "chainId", "address", "selector", "dappInfos", "Right", "erc20OfInterest", "method", "plugin", "c", "signature", "serializedData", "abi", "Left", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import n from"axios";import u from"@/external-plugin/__tests__/abi.json";import{HttpExternalPluginDataSource as l}from"../../external-plugin/data/HttpExternalPluginDataSource";import{LEDGER_CLIENT_VERSION_HEADER as p,LEDGER_ORIGIN_TOKEN_HEADER as f}from"../../shared/constant/HttpHeaders";import x from"../../../package.json";vi.mock("axios");const a=t=>({data:t}),d={web3checks:{url:"web3checksUrl"},cal:{url:"https://crypto-assets-service.api.ledger.com/v1"},originToken:"originToken"};describe("HttpExternalPuginDataSource",()=>{let t;const i={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"},r={"0x1ef":u,"0x0abc":u},o={"0x1ef":{"0x01ee":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}},"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}}};beforeAll(()=>{t=new l(d),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const s=`context-module/${x.version}`,e=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(n,"request").mockImplementation(e),await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"}),expect(e).toHaveBeenCalledWith(expect.objectContaining({headers:{[p]:s,[f]:d.originToken}}))}),it("should return undefined when no abis is undefined",async()=>{const s=a([{b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no selectors",async()=>{const s=a([{abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{const s=a([{abis:{},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{const s=a([{abis:{},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.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=a([{abis:{"0x1":u},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no b2c signature",async()=>{const s=a([{b2c:i,abis:r}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no ecc20OfInterest",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{method:"swap",plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no plugin",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no signature",async()=>{const e=a([{b2c:i,abis:r,b2c_signatures:{"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001"}}}}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no serialized data",async()=>{const e=a([{b2c:i,abis:r,b2c_signatures:{"0x0abc":{"0x01ff":{plugin:"plugin",signature:"0x002"}}}}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return a correct response",async()=>{const s=a([{b2c:i,abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual({abi:u,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should normalize the address and selector",async()=>{const s=a([{b2c:i,abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0AbC",selector:"0x01Ff"});expect(e.extract()).toEqual({abi:u,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should return an error when axios throws an error",async()=>{vi.spyOn(n,"request").mockRejectedValue(new Error("error"));const s=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(new Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))})});
1
+ import i from"@/external-plugin/__tests__/abi.json";import{HttpExternalPluginDataSource as d}from"../../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"))})});
2
2
  //# sourceMappingURL=HttpExternalPluginDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/external-plugin/data/HttpExternalPluginDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport ABI from \"@/external-plugin/__tests__/abi.json\";\nimport {\n type Abis,\n type B2c,\n type B2cSignatures,\n type DAppDto,\n} from \"@/external-plugin/data/DAppDto\";\nimport { type ExternalPluginDataSource } from \"@/external-plugin/data/ExternalPluginDataSource\";\nimport { HttpExternalPluginDataSource } from \"@/external-plugin/data/HttpExternalPluginDataSource\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\nconst axiosResponseBuilder = (dto: Partial<DAppDto>[]) => {\n return { data: dto };\n};\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 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 beforeAll(() => {\n datasource = new HttpExternalPluginDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: version,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n }),\n );\n });\n\n it(\"should return undefined when no abis is undefined\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { abis, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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\n // FIXME\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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\n // FIXME\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 const response = axiosResponseBuilder([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\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 axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").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
- "names": ["axios", "ABI", "HttpExternalPluginDataSource", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "axiosResponseBuilder", "dto", "config", "datasource", "exampleB2c", "exampleAbis", "exampleB2cSignatures", "version", "requestSpy", "response", "result"]
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport ABI from \"@/external-plugin/__tests__/abi.json\";\nimport {\n type Abis,\n type B2c,\n type B2cSignatures,\n type DAppDto,\n} from \"@/external-plugin/data/DAppDto\";\nimport { type ExternalPluginDataSource } from \"@/external-plugin/data/ExternalPluginDataSource\";\nimport { HttpExternalPluginDataSource } from \"@/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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",
6
+ "names": ["ABI", "HttpExternalPluginDataSource", "config", "datasource", "httpMock", "exampleB2c", "exampleAbis", "exampleB2cSignatures", "dappDtoResponse", "dto", "result", "abis", "b2c", "B2CSignature"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var C=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var D=(d,e,t,o)=>{for(var r=o>1?void 0:o?R(e,t):e,s=d.length-1,n;s>=0;s--)(n=d[s])&&(r=(o?n(e,t,r):n(r))||r);return o&&r&&C(e,t,r),r},g=(d,e)=>(t,o)=>e(t,o,d);import l from"axios";import{inject as _,injectable as b}from"inversify";import{Left as c,Right as m}from"purify-ts";import{configTypes as x}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as G,LEDGER_ORIGIN_TOKEN_HEADER as y}from"../../shared/constant/HttpHeaders";import{SIGNATURE_TAG as h}from"../../shared/model/SignatureTags";import{HexStringUtils as E}from"../../shared/utils/HexStringUtils";import w from"../../../package.json";let f=class{constructor(e){this.config=e}async getGatedDescriptor({contractAddress:e,selector:t,chainId:o}){let r;try{r=(await l.request({method:"GET",url:`${this.config.cal.url}/gated_dapps`,params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors,app,category",contracts:e,chain_id:o},headers:{[G]:`context-module/${w.version}`,[y]:this.config.originToken}})).data}catch(i){return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${i}`))}if(!this.isGatedDappsDto(r))return c(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));const s=e.toLowerCase(),n=t.startsWith("0x")?t.slice(2).toLowerCase():t.toLowerCase(),p=`0x${n}`;for(const i of r){const a=i.gated_descriptors?.[s];if(!a)continue;const u=a[n]??a[p]??a[t];if(u?.descriptor)return m({signedDescriptor:E.appendSignatureToPayload(u.descriptor,u.signatures[this.config.cal.mode],h)})}return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and selector ${t}`))}async getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o}){let r;try{r=(await l.request({method:"GET",url:`${this.config.cal.url}/gated_dapps`,params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors",contracts:e,chain_id:o},headers:{[G]:`context-module/${w.version}`,[y]:this.config.originToken}})).data}catch(p){return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${p}`))}if(!this.isGatedDappsDto(r))return c(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));const s=e.toLowerCase(),n=t.toLowerCase();for(const p of r){const i=p.gated_descriptors?.[s];if(!i)continue;const a=i[n];if(a?.descriptor)return m({signedDescriptor:E.appendSignatureToPayload(a.descriptor,a.signatures[this.config.cal.mode],h)})}return c(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${t}`))}isGatedDappsDto(e){if(!Array.isArray(e)||e.length===0)return!1;for(const t of e)if(!this.isGatedDappsResponseItemDto(t))return!1;return!0}isGatedDappsResponseItemDto(e){if(!e||typeof e!="object")return!1;const t=e;if(!t.gated_descriptors||typeof t.gated_descriptors!="object")return!1;const o=t.gated_descriptors;for(const r of Object.values(o)){if(typeof r!="object"||r===null)return!1;for(const s of Object.values(r))if(!this.isGatedDescriptorEntryDto(s))return!1}return!0}isGatedDescriptorEntryDto(e){if(!e||typeof e!="object")return!1;const t=e;if(typeof t.network!="string"||typeof t.chain_id!="number"||typeof t.address!="string"||typeof t.selector!="string"||typeof t.version!="string"||typeof t.descriptor!="string")return!1;if(t.signatures!==void 0){if(typeof t.signatures!="object"||t.signatures===null)return!1;const o=t.signatures;for(const r of Object.values(o))if(typeof r!="string")return!1}return!0}};f=D([b(),g(0,_(x.Config))],f);export{f as HttpGatedDescriptorDataSource};
1
+ var h=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var g=(c,e,t,o)=>{for(var r=o>1?void 0:o?w(e,t):e,s=c.length-1,a;s>=0;s--)(a=c[s])&&(r=(o?a(e,t,r):a(r))||r);return o&&r&&h(e,t,r),r},D=(c,e)=>(t,o)=>e(t,o,c);import{inject as l,injectable as C}from"inversify";import{Left as p,Right as m}from"purify-ts";import{configTypes as b}from"../../config/di/configTypes";import{networkTypes as E}from"../../network/di/networkTypes";import{SIGNATURE_TAG as y}from"../../shared/model/SignatureTags";import{HexStringUtils as G}from"../../shared/utils/HexStringUtils";let f=class{constructor(e,t){this.config=e;this.http=t}async getGatedDescriptor({contractAddress:e,selector:t,chainId:o}){let r;try{r=await this.http.get(`${this.config.cal.url}/gated_dapps`,{params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors,app,category",contracts:e,chain_id:o}})}catch(i){return p(new Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${i}`))}if(!this.isGatedDappsDto(r))return p(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));const s=e.toLowerCase(),a=t.startsWith("0x")?t.slice(2).toLowerCase():t.toLowerCase(),d=`0x${a}`;for(const i of r){const n=i.gated_descriptors?.[s];if(!n)continue;const u=n[a]??n[d]??n[t];if(u?.descriptor)return m({signedDescriptor:G.appendSignatureToPayload(u.descriptor,u.signatures[this.config.cal.mode],y)})}return p(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and selector ${t}`))}async getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:o}){let r;try{r=await this.http.get(`${this.config.cal.url}/gated_dapps`,{params:{ref:`branch:${this.config.cal.branch}`,output:"gated_descriptors",contracts:e,chain_id:o}})}catch(d){return p(new Error(`[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${d}`))}if(!this.isGatedDappsDto(r))return p(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response"));const s=e.toLowerCase(),a=t.toLowerCase();for(const d of r){const i=d.gated_descriptors?.[s];if(!i)continue;const n=i[a];if(n?.descriptor)return m({signedDescriptor:G.appendSignatureToPayload(n.descriptor,n.signatures[this.config.cal.mode],y)})}return p(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${t}`))}isGatedDappsDto(e){if(!Array.isArray(e)||e.length===0)return!1;for(const t of e)if(!this.isGatedDappsResponseItemDto(t))return!1;return!0}isGatedDappsResponseItemDto(e){if(!e||typeof e!="object")return!1;const t=e;if(!t.gated_descriptors||typeof t.gated_descriptors!="object")return!1;const o=t.gated_descriptors;for(const r of Object.values(o)){if(typeof r!="object"||r===null)return!1;for(const s of Object.values(r))if(!this.isGatedDescriptorEntryDto(s))return!1}return!0}isGatedDescriptorEntryDto(e){if(!e||typeof e!="object")return!1;const t=e;if(typeof t.network!="string"||typeof t.chain_id!="number"||typeof t.address!="string"||typeof t.selector!="string"||typeof t.version!="string"||typeof t.descriptor!="string")return!1;if(t.signatures!==void 0){if(typeof t.signatures!="object"||t.signatures===null)return!1;const o=t.signatures;for(const r of Object.values(o))if(typeof r!="string")return!1}return!0}};f=g([C(),D(0,l(b.Config)),D(1,l(E.NetworkClient))],f);export{f as HttpGatedDescriptorDataSource};
2
2
  //# sourceMappingURL=HttpGatedDescriptorDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/gated-signing/data/HttpGatedDescriptorDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport { SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport PACKAGE from \"@root/package.json\";\n\nimport {\n type GatedDappsDto,\n type GatedDappsResponseItemDto,\n type GatedDescriptorEntryDto,\n} from \"./dto/GatedDappsDto\";\nimport {\n type GatedDescriptorDataSource,\n type GetGatedDescriptorForTypedDataParams,\n type GetGatedDescriptorParams,\n type GetGatedDescriptorResponse,\n} from \"./GatedDescriptorDataSource\";\n\n@injectable()\nexport class HttpGatedDescriptorDataSource\n implements GatedDescriptorDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n }: GetGatedDescriptorParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n const response = await axios.request<GatedDappsDto>({\n method: \"GET\",\n url: `${this.config.cal.url}/gated_dapps`,\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors,app,category\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n dto = response.data;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const selectorWithout0x = selector.startsWith(\"0x\")\n ? selector.slice(2).toLowerCase()\n : selector.toLowerCase();\n const selectorWith0x = `0x${selectorWithout0x}`;\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry =\n byContract[selectorWithout0x] ??\n byContract[selectorWith0x] ??\n byContract[selector];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and selector ${selector}`,\n ),\n );\n }\n\n async getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n }: GetGatedDescriptorForTypedDataParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n const response = await axios.request<GatedDappsDto>({\n method: \"GET\",\n url: `${this.config.cal.url}/gated_dapps`,\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n dto = response.data;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const normalizedSchemaHash = schemaHash.toLowerCase();\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry = byContract[normalizedSchemaHash];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and schema hash ${schemaHash}`,\n ),\n );\n }\n\n private isGatedDappsDto(data: unknown): data is GatedDappsDto {\n if (!Array.isArray(data) || data.length === 0) {\n return false;\n }\n for (const item of data) {\n if (!this.isGatedDappsResponseItemDto(item)) {\n return false;\n }\n }\n return true;\n }\n\n private isGatedDappsResponseItemDto(\n item: unknown,\n ): item is GatedDappsResponseItemDto {\n if (!item || typeof item !== \"object\") {\n return false;\n }\n const obj = item as Record<string, unknown>;\n if (\n !obj[\"gated_descriptors\"] ||\n typeof obj[\"gated_descriptors\"] !== \"object\"\n ) {\n return false;\n }\n const byContract = obj[\"gated_descriptors\"] as Record<string, unknown>;\n for (const selectorsMap of Object.values(byContract)) {\n if (typeof selectorsMap !== \"object\" || selectorsMap === null) {\n return false;\n }\n for (const entry of Object.values(\n selectorsMap as Record<string, unknown>,\n )) {\n if (!this.isGatedDescriptorEntryDto(entry)) {\n return false;\n }\n }\n }\n return true;\n }\n\n private isGatedDescriptorEntryDto(\n entry: unknown,\n ): entry is GatedDescriptorEntryDto {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n const e = entry as Record<string, unknown>;\n if (\n typeof e[\"network\"] !== \"string\" ||\n typeof e[\"chain_id\"] !== \"number\" ||\n typeof e[\"address\"] !== \"string\" ||\n typeof e[\"selector\"] !== \"string\" ||\n typeof e[\"version\"] !== \"string\" ||\n typeof e[\"descriptor\"] !== \"string\"\n ) {\n return false;\n }\n if (e[\"signatures\"] !== undefined) {\n if (typeof e[\"signatures\"] !== \"object\" || e[\"signatures\"] === null) {\n return false;\n }\n const sigs = e[\"signatures\"] as Record<string, unknown>;\n for (const v of Object.values(sigs)) {\n if (typeof v !== \"string\") {\n return false;\n }\n }\n }\n return true;\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "SIGNATURE_TAG", "HexStringUtils", "PACKAGE", "HttpGatedDescriptorDataSource", "config", "contractAddress", "selector", "chainId", "dto", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "error", "Left", "normalizedAddress", "selectorWithout0x", "selectorWith0x", "item", "byContract", "entry", "Right", "HexStringUtils", "SIGNATURE_TAG", "schemaHash", "normalizedSchemaHash", "data", "obj", "selectorsMap", "e", "sigs", "v", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\nimport {\n type GatedDappsDto,\n type GatedDappsResponseItemDto,\n type GatedDescriptorEntryDto,\n} from \"./dto/GatedDappsDto\";\nimport {\n type GatedDescriptorDataSource,\n type GetGatedDescriptorForTypedDataParams,\n type GetGatedDescriptorParams,\n type GetGatedDescriptorResponse,\n} from \"./GatedDescriptorDataSource\";\n\n@injectable()\nexport class HttpGatedDescriptorDataSource\n implements GatedDescriptorDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n async getGatedDescriptor({\n contractAddress,\n selector,\n chainId,\n }: GetGatedDescriptorParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n dto = (await this.http.get(`${this.config.cal.url}/gated_dapps`, {\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors,app,category\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n })) as GatedDappsDto;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const selectorWithout0x = selector.startsWith(\"0x\")\n ? selector.slice(2).toLowerCase()\n : selector.toLowerCase();\n const selectorWith0x = `0x${selectorWithout0x}`;\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry =\n byContract[selectorWithout0x] ??\n byContract[selectorWith0x] ??\n byContract[selector];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and selector ${selector}`,\n ),\n );\n }\n\n async getGatedDescriptorForTypedData({\n contractAddress,\n schemaHash,\n chainId,\n }: GetGatedDescriptorForTypedDataParams): Promise<\n Either<Error, GetGatedDescriptorResponse>\n > {\n let dto: GatedDappsDto | undefined;\n try {\n dto = (await this.http.get(`${this.config.cal.url}/gated_dapps`, {\n params: {\n ref: `branch:${this.config.cal.branch}`,\n output: \"gated_descriptors\",\n contracts: contractAddress,\n chain_id: chainId,\n },\n })) as GatedDappsDto;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Failed to fetch gated descriptors: ${error}`,\n ),\n );\n }\n\n if (!this.isGatedDappsDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response`,\n ),\n );\n }\n\n const normalizedAddress = contractAddress.toLowerCase();\n const normalizedSchemaHash = schemaHash.toLowerCase();\n\n for (const item of dto) {\n const byContract = item.gated_descriptors?.[normalizedAddress];\n if (!byContract) continue;\n\n const entry = byContract[normalizedSchemaHash];\n if (entry?.descriptor) {\n return Right({\n signedDescriptor: HexStringUtils.appendSignatureToPayload(\n entry.descriptor,\n entry.signatures![this.config.cal.mode]!,\n SIGNATURE_TAG,\n ),\n });\n }\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${contractAddress} and schema hash ${schemaHash}`,\n ),\n );\n }\n\n private isGatedDappsDto(data: unknown): data is GatedDappsDto {\n if (!Array.isArray(data) || data.length === 0) {\n return false;\n }\n for (const item of data) {\n if (!this.isGatedDappsResponseItemDto(item)) {\n return false;\n }\n }\n return true;\n }\n\n private isGatedDappsResponseItemDto(\n item: unknown,\n ): item is GatedDappsResponseItemDto {\n if (!item || typeof item !== \"object\") {\n return false;\n }\n const obj = item as Record<string, unknown>;\n if (\n !obj[\"gated_descriptors\"] ||\n typeof obj[\"gated_descriptors\"] !== \"object\"\n ) {\n return false;\n }\n const byContract = obj[\"gated_descriptors\"] as Record<string, unknown>;\n for (const selectorsMap of Object.values(byContract)) {\n if (typeof selectorsMap !== \"object\" || selectorsMap === null) {\n return false;\n }\n for (const entry of Object.values(\n selectorsMap as Record<string, unknown>,\n )) {\n if (!this.isGatedDescriptorEntryDto(entry)) {\n return false;\n }\n }\n }\n return true;\n }\n\n private isGatedDescriptorEntryDto(\n entry: unknown,\n ): entry is GatedDescriptorEntryDto {\n if (!entry || typeof entry !== \"object\") {\n return false;\n }\n const e = entry as Record<string, unknown>;\n if (\n typeof e[\"network\"] !== \"string\" ||\n typeof e[\"chain_id\"] !== \"number\" ||\n typeof e[\"address\"] !== \"string\" ||\n typeof e[\"selector\"] !== \"string\" ||\n typeof e[\"version\"] !== \"string\" ||\n typeof e[\"descriptor\"] !== \"string\"\n ) {\n return false;\n }\n if (e[\"signatures\"] !== undefined) {\n if (typeof e[\"signatures\"] !== \"object\" || e[\"signatures\"] === null) {\n return false;\n }\n const sigs = e[\"signatures\"] as Record<string, unknown>;\n for (const v of Object.values(sigs)) {\n if (typeof v !== \"string\") {\n return false;\n }\n }\n }\n return true;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "SIGNATURE_TAG", "HexStringUtils", "HttpGatedDescriptorDataSource", "config", "http", "contractAddress", "selector", "chainId", "dto", "error", "Left", "normalizedAddress", "selectorWithout0x", "selectorWith0x", "item", "byContract", "entry", "Right", "HexStringUtils", "SIGNATURE_TAG", "schemaHash", "normalizedSchemaHash", "data", "obj", "selectorsMap", "e", "sigs", "v", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import r from"axios";import{Left as d,Right as l}from"purify-ts";import{HttpGatedDescriptorDataSource as o}from"../../gated-signing/data/HttpGatedDescriptorDataSource";import{LEDGER_CLIENT_VERSION_HEADER as g,LEDGER_ORIGIN_TOKEN_HEADER as v}from"../../shared/constant/HttpHeaders";import w from"../../../package.json";vi.mock("axios");describe("HttpGatedDescriptorDataSource",()=>{const a={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",branch:"next",mode:"prod"},originToken:"test-origin-token"},e="0x1111111254fb6c44bac0bed2854e76f90643097d",n="0xa1251d75",s=1,p="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",u=[{gated_descriptors:{"0x1111111254fb6c44bac0bed2854e76f90643097d":{a1251d75:{network:"ethereum",chain_id:1,address:"0x1111111254fb6c44bac0bed2854e76f90643097d",selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}],h=`${p}150100`;beforeEach(()=>{vi.clearAllMocks()}),describe("getGatedDescriptor",()=>{it("should return descriptor on successful request with correct URL and params",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:u});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(r.request).toHaveBeenCalledWith({method:"GET",url:"https://crypto-assets-service.api.ledger.com/v1/gated_dapps",params:{ref:"branch:next",output:"gated_descriptors,app,category",contracts:e,chain_id:s},headers:{[g]:`context-module/${w.version}`,[v]:"test-origin-token"}}),expect(t).toEqual(l({signedDescriptor:h}))}),it("should find descriptor when API response has selector key without 0x prefix",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:u});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:"0xa1251d75",chainId:s});expect(t).toEqual(l({signedDescriptor:h}))}),it("should return Left when response is not an array",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:{gated_descriptors:{}}});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when response is empty array",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[]});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: Invalid gated descriptors response")))}),it("should return Left when no descriptor matches contract and selector",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{"0xothercontract":{a1251d75:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:"0xother",selector:"a1251d75",version:"v1"}}}}]});const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(t).toEqual(d(new Error("[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract 0x1111111254fb6c44bac0bed2854e76f90643097d and selector 0xa1251d75")))}),it("should return Left when axios request fails",async()=>{vi.spyOn(r,"request").mockRejectedValue(new Error("Network error"));const t=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});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={...a,cal:{...a.cal,branch:"main"}};vi.spyOn(r,"request").mockResolvedValue({status:200,data:u}),await new o(t).getGatedDescriptor({contractAddress:e,selector:n,chainId:s}),expect(r.request).toHaveBeenCalledWith(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()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when gated_descriptors is not an object",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:"not-an-object"}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when entry is missing required field (descriptor)",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1"}}}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when entry has wrong type for chain_id",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:"1",address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:"00",test:"00"}}}}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when entry signatures contains non-string value",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{a1251d75:{network:"ethereum",chain_id:1,address:e,selector:"a1251d75",version:"v1",descriptor:p,signatures:{prod:123}}}}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when array item is null",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[null]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))}),it("should return Left when selectors map value is not an object",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:"not-a-selectors-map"}}]});const c=await new o(a).getGatedDescriptor({contractAddress:e,selector:n,chainId:s});expect(c).toEqual(d(t))})})}),describe("getGatedDescriptorForTypedData",()=>{const t="4d593149e876e739220f3b5ede1b38a0213d76c4705b1547c4323df3",c="010122020101222a30783131313131313235346662366334346261633062656432383534653736663930363433303937642308000000000000000140086131323531643735",m=[{gated_descriptors:{[e]:{[t]:{network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1",descriptor:c,signatures:{prod:"00",test:"00"}}}}}],y=`${c}150100`;it("should return descriptor on successful request when keyed by schema hash",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:m});const i=await new o(a).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:s});expect(r.request).toHaveBeenCalledWith({method:"GET",url:"https://crypto-assets-service.api.ledger.com/v1/gated_dapps",params:{ref:"branch:next",output:"gated_descriptors",contracts:e,chain_id:s},headers:{[g]:`context-module/${w.version}`,[v]:"test-origin-token"}}),expect(i).toEqual(l({signedDescriptor:y}))}),it("should return Left when no descriptor matches contract and schema hash",async()=>{vi.spyOn(r,"request").mockResolvedValue({status:200,data:[{gated_descriptors:{[e]:{other_schema_hash:{descriptor:"some-descriptor",network:"ethereum",chain_id:1,address:e,selector:"eip712",version:"v1"}}}}]});const i=await new o(a).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:s});expect(i).toEqual(d(new Error(`[ContextModule] HttpGatedDescriptorDataSource: No gated descriptor for contract ${e} and schema hash ${t}`)))}),it("should return Left when axios request fails",async()=>{vi.spyOn(r,"request").mockRejectedValue(new Error("Network error"));const i=await new o(a).getGatedDescriptorForTypedData({contractAddress:e,schemaHash:t,chainId:s});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"../../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")))})})});
2
2
  //# sourceMappingURL=HttpGatedDescriptorDataSource.test.js.map