@ledgerhq/context-module 1.16.0 → 1.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/lib/cjs/package.json +2 -3
  2. package/lib/cjs/src/DefaultContextModule.js +1 -1
  3. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  4. package/lib/cjs/src/account-ownership/data/AccountOwnershipDataSource.js +2 -0
  5. package/lib/cjs/src/account-ownership/data/AccountOwnershipDataSource.js.map +7 -0
  6. package/lib/cjs/src/account-ownership/data/AccountOwnershipError.js +2 -0
  7. package/lib/cjs/src/account-ownership/data/AccountOwnershipError.js.map +7 -0
  8. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js +2 -0
  9. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +7 -0
  10. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +2 -0
  11. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +7 -0
  12. package/lib/cjs/src/account-ownership/data/dto/AccountOwnershipDto.js +2 -0
  13. package/lib/cjs/src/account-ownership/data/dto/AccountOwnershipDto.js.map +7 -0
  14. package/lib/cjs/src/account-ownership/di/accountOwnershipModuleFactory.js +2 -0
  15. package/lib/cjs/src/account-ownership/di/accountOwnershipModuleFactory.js.map +7 -0
  16. package/lib/cjs/src/account-ownership/di/accountOwnershipTypes.js +2 -0
  17. package/lib/cjs/src/account-ownership/di/accountOwnershipTypes.js.map +7 -0
  18. package/lib/cjs/src/account-ownership/domain/AccountOwnershipContextLoader.js +2 -0
  19. package/lib/cjs/src/account-ownership/domain/AccountOwnershipContextLoader.js.map +7 -0
  20. package/lib/cjs/src/account-ownership/domain/AccountOwnershipContextLoader.test.js +2 -0
  21. package/lib/cjs/src/account-ownership/domain/AccountOwnershipContextLoader.test.js.map +7 -0
  22. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  23. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +3 -3
  24. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  25. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +3 -3
  26. package/lib/cjs/src/calldata/di/calldataModuleFactory.js +1 -1
  27. package/lib/cjs/src/calldata/di/calldataModuleFactory.js.map +3 -3
  28. package/lib/cjs/src/di.js +1 -1
  29. package/lib/cjs/src/di.js.map +3 -3
  30. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  31. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  32. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  33. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +3 -3
  34. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  35. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  36. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  37. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  38. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js +1 -1
  39. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +3 -3
  40. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  41. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +3 -3
  42. package/lib/cjs/src/index.js +1 -1
  43. package/lib/cjs/src/index.js.map +2 -2
  44. package/lib/cjs/src/network/di/networkModuleFactory.js +2 -0
  45. package/lib/cjs/src/network/di/networkModuleFactory.js.map +7 -0
  46. package/lib/cjs/src/network/di/networkTypes.js +2 -0
  47. package/lib/cjs/src/network/di/networkTypes.js.map +7 -0
  48. package/lib/cjs/src/nft/data/HttpNftDataSource.js +1 -1
  49. package/lib/cjs/src/nft/data/HttpNftDataSource.js.map +3 -3
  50. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js +1 -1
  51. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  52. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  53. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  54. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js +1 -1
  55. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js.map +3 -3
  56. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +1 -1
  57. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  58. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  59. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  60. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
  61. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +3 -3
  62. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js +1 -1
  63. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +3 -3
  64. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +1 -1
  65. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +3 -3
  66. package/lib/cjs/src/reporter/data/BlindSigningReporterDatasource.js +1 -1
  67. package/lib/cjs/src/reporter/data/BlindSigningReporterDatasource.js.map +1 -1
  68. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  69. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  70. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  71. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +3 -3
  72. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  73. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js.map +3 -3
  74. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  75. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js.map +3 -3
  76. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  77. package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
  78. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  79. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +3 -3
  80. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  81. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +3 -3
  82. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
  83. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
  84. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
  85. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
  86. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  87. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +3 -3
  88. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +6 -6
  89. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +3 -3
  90. package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
  91. package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +3 -3
  92. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js +1 -1
  93. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  94. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  95. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +3 -3
  96. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js +1 -1
  97. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +3 -3
  98. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js +1 -1
  99. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +3 -3
  100. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js +1 -1
  101. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +3 -3
  102. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  103. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  104. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  105. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  106. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  107. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  108. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  109. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  110. package/lib/esm/package.json +2 -3
  111. package/lib/esm/src/DefaultContextModule.js +1 -1
  112. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  113. package/lib/esm/src/account-ownership/data/AccountOwnershipDataSource.js +1 -0
  114. package/lib/esm/src/account-ownership/data/AccountOwnershipDataSource.js.map +7 -0
  115. package/lib/esm/src/account-ownership/data/AccountOwnershipError.js +2 -0
  116. package/lib/esm/src/account-ownership/data/AccountOwnershipError.js.map +7 -0
  117. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js +2 -0
  118. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +7 -0
  119. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +2 -0
  120. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +7 -0
  121. package/lib/esm/src/account-ownership/data/dto/AccountOwnershipDto.js +1 -0
  122. package/lib/esm/src/account-ownership/data/dto/AccountOwnershipDto.js.map +7 -0
  123. package/lib/esm/src/account-ownership/di/accountOwnershipModuleFactory.js +2 -0
  124. package/lib/esm/src/account-ownership/di/accountOwnershipModuleFactory.js.map +7 -0
  125. package/lib/esm/src/account-ownership/di/accountOwnershipTypes.js +2 -0
  126. package/lib/esm/src/account-ownership/di/accountOwnershipTypes.js.map +7 -0
  127. package/lib/esm/src/account-ownership/domain/AccountOwnershipContextLoader.js +2 -0
  128. package/lib/esm/src/account-ownership/domain/AccountOwnershipContextLoader.js.map +7 -0
  129. package/lib/esm/src/account-ownership/domain/AccountOwnershipContextLoader.test.js +2 -0
  130. package/lib/esm/src/account-ownership/domain/AccountOwnershipContextLoader.test.js.map +7 -0
  131. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  132. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +3 -3
  133. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  134. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +3 -3
  135. package/lib/esm/src/calldata/di/calldataModuleFactory.js +1 -1
  136. package/lib/esm/src/calldata/di/calldataModuleFactory.js.map +3 -3
  137. package/lib/esm/src/di.js +1 -1
  138. package/lib/esm/src/di.js.map +3 -3
  139. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  140. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  141. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  142. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +3 -3
  143. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  144. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  145. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  146. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  147. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js +1 -1
  148. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +3 -3
  149. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  150. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +3 -3
  151. package/lib/esm/src/index.js +1 -1
  152. package/lib/esm/src/index.js.map +2 -2
  153. package/lib/esm/src/network/di/networkModuleFactory.js +2 -0
  154. package/lib/esm/src/network/di/networkModuleFactory.js.map +7 -0
  155. package/lib/esm/src/network/di/networkTypes.js +2 -0
  156. package/lib/esm/src/network/di/networkTypes.js.map +7 -0
  157. package/lib/esm/src/nft/data/HttpNftDataSource.js +1 -1
  158. package/lib/esm/src/nft/data/HttpNftDataSource.js.map +3 -3
  159. package/lib/esm/src/nft/data/HttpNftDataSource.test.js +1 -1
  160. package/lib/esm/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  161. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  162. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  163. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js +1 -1
  164. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js.map +3 -3
  165. package/lib/esm/src/proxy/data/HttpProxyDataSource.js +1 -1
  166. package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  167. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  168. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  169. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
  170. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +3 -3
  171. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js +1 -1
  172. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +3 -3
  173. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +1 -1
  174. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +3 -3
  175. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  176. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  177. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  178. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +3 -3
  179. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  180. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js.map +3 -3
  181. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  182. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js.map +3 -3
  183. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  184. package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
  185. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  186. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +3 -3
  187. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  188. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +3 -3
  189. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
  190. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
  191. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
  192. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
  193. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  194. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +3 -3
  195. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +6 -6
  196. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +3 -3
  197. package/lib/esm/src/token/data/HttpTokenDataSource.js +1 -1
  198. package/lib/esm/src/token/data/HttpTokenDataSource.js.map +3 -3
  199. package/lib/esm/src/token/data/HttpTokenDataSource.test.js +1 -1
  200. package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  201. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  202. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +3 -3
  203. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js +1 -1
  204. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +3 -3
  205. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js +1 -1
  206. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +3 -3
  207. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js +1 -1
  208. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +3 -3
  209. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  210. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  211. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  212. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  213. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  214. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  215. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  216. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  217. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  218. package/lib/types/src/account-ownership/data/AccountOwnershipDataSource.d.ts +17 -0
  219. package/lib/types/src/account-ownership/data/AccountOwnershipDataSource.d.ts.map +1 -0
  220. package/lib/types/src/account-ownership/data/AccountOwnershipError.d.ts +17 -0
  221. package/lib/types/src/account-ownership/data/AccountOwnershipError.d.ts.map +1 -0
  222. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts +30 -0
  223. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts.map +1 -0
  224. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.test.d.ts +2 -0
  225. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.test.d.ts.map +1 -0
  226. package/lib/types/src/account-ownership/data/dto/AccountOwnershipDto.d.ts +6 -0
  227. package/lib/types/src/account-ownership/data/dto/AccountOwnershipDto.d.ts.map +1 -0
  228. package/lib/types/src/account-ownership/di/accountOwnershipModuleFactory.d.ts +3 -0
  229. package/lib/types/src/account-ownership/di/accountOwnershipModuleFactory.d.ts.map +1 -0
  230. package/lib/types/src/account-ownership/di/accountOwnershipTypes.d.ts +5 -0
  231. package/lib/types/src/account-ownership/di/accountOwnershipTypes.d.ts.map +1 -0
  232. package/lib/types/src/account-ownership/domain/AccountOwnershipContextLoader.d.ts +20 -0
  233. package/lib/types/src/account-ownership/domain/AccountOwnershipContextLoader.d.ts.map +1 -0
  234. package/lib/types/src/account-ownership/domain/AccountOwnershipContextLoader.test.d.ts +2 -0
  235. package/lib/types/src/account-ownership/domain/AccountOwnershipContextLoader.test.d.ts.map +1 -0
  236. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts +3 -1
  237. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -1
  238. package/lib/types/src/calldata/di/calldataModuleFactory.d.ts.map +1 -1
  239. package/lib/types/src/di.d.ts.map +1 -1
  240. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts +3 -1
  241. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -1
  242. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts +3 -1
  243. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts.map +1 -1
  244. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts +3 -1
  245. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts.map +1 -1
  246. package/lib/types/src/index.d.ts +4 -0
  247. package/lib/types/src/index.d.ts.map +1 -1
  248. package/lib/types/src/network/di/networkModuleFactory.d.ts +4 -0
  249. package/lib/types/src/network/di/networkModuleFactory.d.ts.map +1 -0
  250. package/lib/types/src/network/di/networkTypes.d.ts +4 -0
  251. package/lib/types/src/network/di/networkTypes.d.ts.map +1 -0
  252. package/lib/types/src/nft/data/HttpNftDataSource.d.ts +3 -1
  253. package/lib/types/src/nft/data/HttpNftDataSource.d.ts.map +1 -1
  254. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts +4 -1
  255. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts.map +1 -1
  256. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +3 -1
  257. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -1
  258. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +3 -1
  259. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -1
  260. package/lib/types/src/reporter/data/BlindSigningReporterDatasource.d.ts +7 -1
  261. package/lib/types/src/reporter/data/BlindSigningReporterDatasource.d.ts.map +1 -1
  262. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts +3 -1
  263. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts.map +1 -1
  264. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts +3 -1
  265. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts.map +1 -1
  266. package/lib/types/src/shared/model/ClearSignContext.d.ts +2 -1
  267. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  268. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts +3 -1
  269. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts.map +1 -1
  270. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts +3 -2
  271. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts.map +1 -1
  272. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts +3 -1
  273. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts.map +1 -1
  274. package/lib/types/src/token/data/HttpTokenDataSource.d.ts +3 -1
  275. package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
  276. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts +3 -1
  277. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts.map +1 -1
  278. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts +3 -1
  279. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts.map +1 -1
  280. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +3 -1
  281. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  282. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +3 -1
  283. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
  284. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts.map +1 -1
  285. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  286. package/package.json +5 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dynamic-network/data/HttpDynamicNetworkDataSource.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport 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 type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type DynamicNetworkApiResponseDto } from \"./dto/DynamicNetworkApiResponseDto\";\nimport { type DynamicNetworkDataSource } from \"./DynamicNetworkDataSource\";\n\n/** Maps lowercase device model keys from the API to DeviceModelId */\nconst LOWERCASE_KEY_TO_DEVICE_MODEL_ID: Record<string, DeviceModelId> = {\n nanos: DeviceModelId.NANO_S,\n nanosp: DeviceModelId.NANO_SP,\n nanox: DeviceModelId.NANO_X,\n stax: DeviceModelId.STAX,\n flex: DeviceModelId.FLEX,\n apexp: DeviceModelId.APEX,\n};\n\n@injectable()\nexport class HttpDynamicNetworkDataSource implements DynamicNetworkDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDynamicNetworkConfiguration(\n chainId: number,\n ): Promise<Either<Error, DynamicNetworkConfiguration>> {\n let response: DynamicNetworkApiResponseDto;\n\n try {\n const axiosResponse = await axios.get<DynamicNetworkApiResponseDto>(\n `${this.config.cal.url}/networks?output=id,descriptors,icons&chain_id=${chainId}`,\n {\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n },\n );\n response = axiosResponse.data;\n } catch (error) {\n return Left(\n error instanceof Error\n ? error\n : new Error(\"Failed to fetch network configuration\"),\n );\n }\n\n const networkData = response?.[0];\n if (!networkData) {\n return Left(\n new Error(`Network configuration not found for chain ID: ${chainId}`),\n );\n }\n\n // Validate response structure\n if (!this.isValidNetworkData(networkData)) {\n return Left(\n new Error(\n `Invalid network configuration response for chain ID: ${chainId}`,\n ),\n );\n }\n\n const configuration = this.transformToNetworkConfiguration(networkData);\n return Right(configuration);\n }\n\n private isValidNetworkData(\n data: unknown,\n ): data is DynamicNetworkApiResponseDto[0] {\n if (!data || typeof data !== \"object\") {\n return false;\n }\n\n const obj = data as Record<string, unknown>;\n\n // Check required fields\n if (typeof obj[\"id\"] !== \"string\") {\n return false;\n }\n\n // Check descriptors structure\n if (!obj[\"descriptors\"] || typeof obj[\"descriptors\"] !== \"object\") {\n return false;\n }\n\n // Validate each descriptor\n for (const descriptor of Object.values(obj[\"descriptors\"])) {\n if (!this.isValidDescriptor(descriptor)) {\n return false;\n }\n }\n\n // Icons are optional but if present, should be an object\n if (obj[\"icons\"] && typeof obj[\"icons\"] !== \"object\") {\n return false;\n }\n\n return true;\n }\n\n private isValidDescriptor(\n descriptor: unknown,\n ): descriptor is DynamicNetworkApiResponseDto[0][\"descriptors\"][string] {\n if (!descriptor || typeof descriptor !== \"object\") {\n return false;\n }\n\n const desc = descriptor as Record<string, unknown>;\n\n // Check required descriptor fields\n if (\n typeof desc[\"data\"] !== \"string\" ||\n typeof desc[\"descriptorType\"] !== \"string\" ||\n typeof desc[\"descriptorVersion\"] !== \"string\"\n ) {\n return false;\n }\n\n // Check signatures structure\n if (!desc[\"signatures\"] || typeof desc[\"signatures\"] !== \"object\") {\n return false;\n }\n\n const signatures = desc[\"signatures\"] as Record<string, unknown>;\n if (\n typeof signatures[\"prod\"] !== \"string\" ||\n typeof signatures[\"test\"] !== \"string\"\n ) {\n return false;\n }\n\n return true;\n }\n\n private transformToNetworkConfiguration(\n networkData: DynamicNetworkApiResponseDto[0],\n ): DynamicNetworkConfiguration {\n const descriptors = Object.entries(networkData.descriptors).reduce(\n (acc, [apiKey, descriptor]) => {\n const deviceModelId =\n LOWERCASE_KEY_TO_DEVICE_MODEL_ID[apiKey.toLowerCase()];\n if (deviceModelId === undefined) {\n return acc;\n }\n acc[deviceModelId] = {\n descriptorType: descriptor.descriptorType,\n descriptorVersion: descriptor.descriptorVersion,\n data: descriptor.data,\n signatures: descriptor.signatures,\n icon: networkData.icons?.[apiKey],\n };\n return acc;\n },\n {} as Record<DeviceModelId, DynamicNetworkDescriptor>,\n );\n\n return {\n id: networkData.id,\n descriptors,\n };\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,iBAAAA,MAAqB,kCAC9B,OAAOC,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAM5B,OAAS,gCAAAC,MAAoC,gCAC7C,OAAOC,MAAa,qBAMpB,MAAMC,EAAkE,CACtE,MAAOC,EAAc,OACrB,OAAQA,EAAc,QACtB,MAAOA,EAAc,OACrB,KAAMA,EAAc,KACpB,KAAMA,EAAc,KACpB,MAAOA,EAAc,IACvB,EAGO,IAAMC,EAAN,KAAuE,CAC5E,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,+BACJC,EACqD,CACrD,IAAIC,EAEJ,GAAI,CASFA,GARsB,MAAMC,EAAM,IAChC,GAAG,KAAK,OAAO,IAAI,GAAG,kDAAkDF,CAAO,GAC/E,CACE,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,EACnE,CACF,CACF,GACyB,IAC3B,OAASC,EAAO,CACd,OAAOC,EACLD,aAAiB,MACbA,EACA,IAAI,MAAM,uCAAuC,CACvD,CACF,CAEA,MAAME,EAAcN,IAAW,CAAC,EAChC,GAAI,CAACM,EACH,OAAOD,EACL,IAAI,MAAM,iDAAiDN,CAAO,EAAE,CACtE,EAIF,GAAI,CAAC,KAAK,mBAAmBO,CAAW,EACtC,OAAOD,EACL,IAAI,MACF,wDAAwDN,CAAO,EACjE,CACF,EAGF,MAAMQ,EAAgB,KAAK,gCAAgCD,CAAW,EACtE,OAAOE,EAAMD,CAAa,CAC5B,CAEQ,mBACNE,EACyC,CACzC,GAAI,CAACA,GAAQ,OAAOA,GAAS,SAC3B,MAAO,GAGT,MAAMC,EAAMD,EAQZ,GALI,OAAOC,EAAI,IAAU,UAKrB,CAACA,EAAI,aAAkB,OAAOA,EAAI,aAAmB,SACvD,MAAO,GAIT,UAAWC,KAAc,OAAO,OAAOD,EAAI,WAAc,EACvD,GAAI,CAAC,KAAK,kBAAkBC,CAAU,EACpC,MAAO,GAKX,MAAI,EAAAD,EAAI,OAAY,OAAOA,EAAI,OAAa,SAK9C,CAEQ,kBACNC,EACsE,CACtE,GAAI,CAACA,GAAc,OAAOA,GAAe,SACvC,MAAO,GAGT,MAAMC,EAAOD,EAYb,GARE,OAAOC,EAAK,MAAY,UACxB,OAAOA,EAAK,gBAAsB,UAClC,OAAOA,EAAK,mBAAyB,UAMnC,CAACA,EAAK,YAAiB,OAAOA,EAAK,YAAkB,SACvD,MAAO,GAGT,MAAMC,EAAaD,EAAK,WACxB,MACE,SAAOC,EAAW,MAAY,UAC9B,OAAOA,EAAW,MAAY,SAMlC,CAEQ,gCACNP,EAC6B,CAC7B,MAAMQ,EAAc,OAAO,QAAQR,EAAY,WAAW,EAAE,OAC1D,CAACS,EAAK,CAACC,EAAQL,CAAU,IAAM,CAC7B,MAAMM,EACJtB,EAAiCqB,EAAO,YAAY,CAAC,EACvD,OAAIC,IAAkB,SAGtBF,EAAIE,CAAa,EAAI,CACnB,eAAgBN,EAAW,eAC3B,kBAAmBA,EAAW,kBAC9B,KAAMA,EAAW,KACjB,WAAYA,EAAW,WACvB,KAAML,EAAY,QAAQU,CAAM,CAClC,GACOD,CACT,EACA,CAAC,CACH,EAEA,MAAO,CACL,GAAIT,EAAY,GAChB,YAAAQ,CACF,CACF,CACF,EAhJajB,EAANqB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBzB",
6
- "names": ["DeviceModelId", "axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LOWERCASE_KEY_TO_DEVICE_MODEL_ID", "DeviceModelId", "HttpDynamicNetworkDataSource", "config", "chainId", "response", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "error", "Left", "networkData", "configuration", "Right", "data", "obj", "descriptor", "desc", "signatures", "descriptors", "acc", "apiKey", "deviceModelId", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
4
+ "sourcesContent": ["import {\n DeviceModelId,\n DmkNetworkClient,\n} 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 {\n type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\n\nimport { type DynamicNetworkApiResponseDto } from \"./dto/DynamicNetworkApiResponseDto\";\nimport { type DynamicNetworkDataSource } from \"./DynamicNetworkDataSource\";\n\n/** Maps lowercase device model keys from the API to DeviceModelId */\nconst LOWERCASE_KEY_TO_DEVICE_MODEL_ID: Record<string, DeviceModelId> = {\n nanos: DeviceModelId.NANO_S,\n nanosp: DeviceModelId.NANO_SP,\n nanox: DeviceModelId.NANO_X,\n stax: DeviceModelId.STAX,\n flex: DeviceModelId.FLEX,\n apexp: DeviceModelId.APEX,\n};\n\n@injectable()\nexport class HttpDynamicNetworkDataSource implements DynamicNetworkDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n async getDynamicNetworkConfiguration(\n chainId: number,\n ): Promise<Either<Error, DynamicNetworkConfiguration>> {\n let response: DynamicNetworkApiResponseDto;\n\n try {\n response = (await this.http.get(`${this.config.cal.url}/networks`, {\n params: {\n output: \"id,descriptors,icons\",\n chain_id: chainId,\n },\n })) as DynamicNetworkApiResponseDto;\n } catch (error) {\n return Left(\n error instanceof Error\n ? new Error(error.message)\n : new Error(\"Failed to fetch network configuration\"),\n );\n }\n\n const networkData = response?.[0];\n if (!networkData) {\n return Left(\n new Error(`Network configuration not found for chain ID: ${chainId}`),\n );\n }\n\n // Validate response structure\n if (!this.isValidNetworkData(networkData)) {\n return Left(\n new Error(\n `Invalid network configuration response for chain ID: ${chainId}`,\n ),\n );\n }\n\n const configuration = this.transformToNetworkConfiguration(networkData);\n return Right(configuration);\n }\n\n private isValidNetworkData(\n data: unknown,\n ): data is DynamicNetworkApiResponseDto[0] {\n if (!data || typeof data !== \"object\") {\n return false;\n }\n\n const obj = data as Record<string, unknown>;\n\n // Check required fields\n if (typeof obj[\"id\"] !== \"string\") {\n return false;\n }\n\n // Check descriptors structure\n if (!obj[\"descriptors\"] || typeof obj[\"descriptors\"] !== \"object\") {\n return false;\n }\n\n // Validate each descriptor\n for (const descriptor of Object.values(obj[\"descriptors\"])) {\n if (!this.isValidDescriptor(descriptor)) {\n return false;\n }\n }\n\n // Icons are optional but if present, should be an object\n if (obj[\"icons\"] && typeof obj[\"icons\"] !== \"object\") {\n return false;\n }\n\n return true;\n }\n\n private isValidDescriptor(\n descriptor: unknown,\n ): descriptor is DynamicNetworkApiResponseDto[0][\"descriptors\"][string] {\n if (!descriptor || typeof descriptor !== \"object\") {\n return false;\n }\n\n const desc = descriptor as Record<string, unknown>;\n\n // Check required descriptor fields\n if (\n typeof desc[\"data\"] !== \"string\" ||\n typeof desc[\"descriptorType\"] !== \"string\" ||\n typeof desc[\"descriptorVersion\"] !== \"string\"\n ) {\n return false;\n }\n\n // Check signatures structure\n if (!desc[\"signatures\"] || typeof desc[\"signatures\"] !== \"object\") {\n return false;\n }\n\n const signatures = desc[\"signatures\"] as Record<string, unknown>;\n if (\n typeof signatures[\"prod\"] !== \"string\" ||\n typeof signatures[\"test\"] !== \"string\"\n ) {\n return false;\n }\n\n return true;\n }\n\n private transformToNetworkConfiguration(\n networkData: DynamicNetworkApiResponseDto[0],\n ): DynamicNetworkConfiguration {\n const descriptors = Object.entries(networkData.descriptors).reduce(\n (acc, [apiKey, descriptor]) => {\n const deviceModelId =\n LOWERCASE_KEY_TO_DEVICE_MODEL_ID[apiKey.toLowerCase()];\n if (deviceModelId === undefined) {\n return acc;\n }\n acc[deviceModelId] = {\n descriptorType: descriptor.descriptorType,\n descriptorVersion: descriptor.descriptorVersion,\n data: descriptor.data,\n signatures: descriptor.signatures,\n icon: networkData.icons?.[apiKey],\n };\n return acc;\n },\n {} as Record<DeviceModelId, DynamicNetworkDescriptor>,\n );\n\n return {\n id: networkData.id,\n descriptors,\n };\n }\n}\n"],
5
+ "mappings": "iOAAA,OACE,iBAAAA,MAEK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAM5B,OAAS,gBAAAC,MAAoB,4BAM7B,MAAMC,EAAkE,CACtE,MAAOC,EAAc,OACrB,OAAQA,EAAc,QACtB,MAAOA,EAAc,OACrB,KAAMA,EAAc,KACpB,KAAMA,EAAc,KACpB,MAAOA,EAAc,IACvB,EAGO,IAAMC,EAAN,KAAuE,CAC5E,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAM,+BACJC,EACqD,CACrD,IAAIC,EAEJ,GAAI,CACFA,EAAY,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,YAAa,CACjE,OAAQ,CACN,OAAQ,uBACR,SAAUD,CACZ,CACF,CAAC,CACH,OAASE,EAAO,CACd,OAAOC,EACLD,aAAiB,MACb,IAAI,MAAMA,EAAM,OAAO,EACvB,IAAI,MAAM,uCAAuC,CACvD,CACF,CAEA,MAAME,EAAcH,IAAW,CAAC,EAChC,GAAI,CAACG,EACH,OAAOD,EACL,IAAI,MAAM,iDAAiDH,CAAO,EAAE,CACtE,EAIF,GAAI,CAAC,KAAK,mBAAmBI,CAAW,EACtC,OAAOD,EACL,IAAI,MACF,wDAAwDH,CAAO,EACjE,CACF,EAGF,MAAMK,EAAgB,KAAK,gCAAgCD,CAAW,EACtE,OAAOE,EAAMD,CAAa,CAC5B,CAEQ,mBACNE,EACyC,CACzC,GAAI,CAACA,GAAQ,OAAOA,GAAS,SAC3B,MAAO,GAGT,MAAMC,EAAMD,EAQZ,GALI,OAAOC,EAAI,IAAU,UAKrB,CAACA,EAAI,aAAkB,OAAOA,EAAI,aAAmB,SACvD,MAAO,GAIT,UAAWC,KAAc,OAAO,OAAOD,EAAI,WAAc,EACvD,GAAI,CAAC,KAAK,kBAAkBC,CAAU,EACpC,MAAO,GAKX,MAAI,EAAAD,EAAI,OAAY,OAAOA,EAAI,OAAa,SAK9C,CAEQ,kBACNC,EACsE,CACtE,GAAI,CAACA,GAAc,OAAOA,GAAe,SACvC,MAAO,GAGT,MAAMC,EAAOD,EAYb,GARE,OAAOC,EAAK,MAAY,UACxB,OAAOA,EAAK,gBAAsB,UAClC,OAAOA,EAAK,mBAAyB,UAMnC,CAACA,EAAK,YAAiB,OAAOA,EAAK,YAAkB,SACvD,MAAO,GAGT,MAAMC,EAAaD,EAAK,WACxB,MACE,SAAOC,EAAW,MAAY,UAC9B,OAAOA,EAAW,MAAY,SAMlC,CAEQ,gCACNP,EAC6B,CAC7B,MAAMQ,EAAc,OAAO,QAAQR,EAAY,WAAW,EAAE,OAC1D,CAACS,EAAK,CAACC,EAAQL,CAAU,IAAM,CAC7B,MAAMM,EACJpB,EAAiCmB,EAAO,YAAY,CAAC,EACvD,OAAIC,IAAkB,SAGtBF,EAAIE,CAAa,EAAI,CACnB,eAAgBN,EAAW,eAC3B,kBAAmBA,EAAW,kBAC9B,KAAMA,EAAW,KACjB,WAAYA,EAAW,WACvB,KAAML,EAAY,QAAQU,CAAM,CAClC,GACOD,CACT,EACA,CAAC,CACH,EAEA,MAAO,CACL,GAAIT,EAAY,GAChB,YAAAQ,CACF,CACF,CACF,EA/Iaf,EAANmB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,GAEzBF,EAAA,EAAAC,EAAOE,EAAa,aAAa,IAJzBxB",
6
+ "names": ["DeviceModelId", "inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "LOWERCASE_KEY_TO_DEVICE_MODEL_ID", "DeviceModelId", "HttpDynamicNetworkDataSource", "config", "http", "chainId", "response", "error", "Left", "networkData", "configuration", "Right", "data", "obj", "descriptor", "desc", "signatures", "descriptors", "acc", "apiKey", "deviceModelId", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import a from"axios";import{Left as c,Right as u}from"purify-ts";import{beforeAll as g,beforeEach as p,describe as l,expect as o,it as i,vi as r}from"vitest";import{HttpDynamicNetworkDataSource as w}from"./HttpDynamicNetworkDataSource";r.mock("axios");l("HttpNetworkDataSource",()=>{let n;const f={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"}},s={data:[{id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"}},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"}}}}]};g(()=>{n=new w(f)}),p(()=>{r.clearAllMocks()}),l("getNetworkConfiguration",()=>{i("should return network configuration successfully",async()=>{r.mocked(a.get).mockResolvedValue(s);const e=await n.getDynamicNetworkConfiguration(1);o(a.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=1",o.objectContaining({headers:o.any(Object)})),o(e).toEqual(u({id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"},icon:void 0},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"},icon:void 0}}}))}),i("should return error when network data is not found",async()=>{r.mocked(a.get).mockResolvedValue({data:[]});const e=await n.getDynamicNetworkConfiguration(1);o(e).toEqual(c(new Error("Network configuration not found for chain ID: 1")))}),i("should return error when network data is undefined",async()=>{r.mocked(a.get).mockResolvedValue({data:void 0});const e=await n.getDynamicNetworkConfiguration(1);o(e).toEqual(c(new Error("Network configuration not found for chain ID: 1")))}),i("should return error when axios throws an error",async()=>{r.mocked(a.get).mockRejectedValue(new Error("Network error"));const e=await n.getDynamicNetworkConfiguration(1);o(e).toEqual(c(new Error("Network error")))}),i("should return generic error when axios throws non-Error",async()=>{r.mocked(a.get).mockRejectedValue("String error");const e=await n.getDynamicNetworkConfiguration(1);o(e).toEqual(c(new Error("Failed to fetch network configuration")))}),i("should handle invalid data - missing id",async()=>{const e={data:[{descriptors:{}}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid data - missing descriptors",async()=>{const e={data:[{id:"ethereum"}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid descriptor - missing data field",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:{descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}}}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid descriptor - missing signatures",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1"}}}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid signatures - missing prod",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"sig2"}}}}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should include icons when available",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}},stax:{data:"0x0102",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig3",test:"sig4"}}},icons:{flex:"icon1",stax:"icon2"}}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t.isRight()).toBe(!0);const d=t.unsafeCoerce();o(d.descriptors.flex.icon).toBe("icon1"),o(d.descriptors.stax.icon).toBe("icon2")}),i("should transform data correctly for Polygon chain ID",async()=>{r.mocked(a.get).mockResolvedValue(s);const e=await n.getDynamicNetworkConfiguration(137);o(a.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/networks?output=id,descriptors,icons&chain_id=137",o.objectContaining({headers:o.any(Object)})),o(e.isRight()).toBe(!0);const t=e.unsafeCoerce();o(Object.keys(t.descriptors)).toEqual(["flex","stax"])}),i("should handle invalid data - null data",async()=>{const e={data:[null]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Network configuration not found for chain ID: 1")))}),i("should handle invalid data - non-object data",async()=>{const e={data:["string_instead_of_object"]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid data - icons as string instead of object",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:"should_be_object_not_string"}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid data - icons as number instead of object (line 93)",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:123}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid descriptor - null descriptor (line 103)",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:null}}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))}),i("should handle invalid descriptor - non-object descriptor (line 103)",async()=>{const e={data:[{id:"ethereum",descriptors:{flex:"should_be_object_not_string"}}]};r.mocked(a.get).mockResolvedValue(e);const t=await n.getDynamicNetworkConfiguration(1);o(t).toEqual(c(new Error("Invalid network configuration response for chain ID: 1")))})})});
1
+ import{Left as i,Right as u}from"purify-ts";import{beforeEach as g,describe as l,expect as o,it as n,vi as f}from"vitest";import{HttpDynamicNetworkDataSource as p}from"./HttpDynamicNetworkDataSource";l("HttpNetworkDataSource",()=>{let r,a;const c={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"}},s=[{id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"}},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"}}}}];g(()=>{f.clearAllMocks(),a={get:f.fn()},r=new p(c,a)}),l("getNetworkConfiguration",()=>{n("should return network configuration successfully",async()=>{a.get.mockResolvedValue(s);const e=await r.getDynamicNetworkConfiguration(1);o(a.get).toHaveBeenCalledWith(`${c.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:1}}),o(e).toEqual(u({id:"ethereum",descriptors:{flex:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100c116b5470c266c2947b92aa9eadbe3da03305efc6b8fee041e04e8484a9834af022041d5b82b359614ea8dd94a542dfd87b0ae6f3b4a075aad9a53a030064ab42cd0",test:"3045022100f78bac5c9c3f2ceeea26680aaea17be61fce84ae7ec983a8194e68275f4fe5900220231afbe39fcec63edfea2b4e787a72d79ce53d6a4c408f24b5a116905a9082d3"},icon:void 0},stax:{data:"0x010108020101510101230800000000000000895207506f6c79676f6e2403504f4c53204aa5034d2fd4c46647d382aa64d0a03d06b185512bb7942390318bda18d0423a",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"304402207e1e1b8f99b45c95b0cf1e90f46cf07e6a90f82c49ccdb6e2e95ab0c1e2f5a370220784e1fac16bb01c5d096733e1cbf067d616e4de659fda2c388f8c3502e7f7f80"},icon:void 0}}}))}),n("should return error when network data is not found",async()=>{a.get.mockResolvedValue([]);const e=await r.getDynamicNetworkConfiguration(1);o(e).toEqual(i(new Error("Network configuration not found for chain ID: 1")))}),n("should return error when network data is undefined",async()=>{a.get.mockResolvedValue(null);const e=await r.getDynamicNetworkConfiguration(1);o(e).toEqual(i(new Error("Network configuration not found for chain ID: 1")))}),n("should return error when http.get throws an error",async()=>{a.get.mockRejectedValue(new Error("Network error"));const e=await r.getDynamicNetworkConfiguration(1);o(e).toEqual(i(new Error("Network error")))}),n("should return generic error when http.get throws non-Error",async()=>{a.get.mockRejectedValue("String error");const e=await r.getDynamicNetworkConfiguration(1);o(e).toEqual(i(new Error("Failed to fetch network configuration")))}),n("should handle invalid data - missing id",async()=>{const e=[{descriptors:{}}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid data - missing descriptors",async()=>{const e=[{id:"ethereum"}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid descriptor - missing data field",async()=>{const e=[{id:"ethereum",descriptors:{flex:{descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}}}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid descriptor - missing signatures",async()=>{const e=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1"}}}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid signatures - missing prod",async()=>{const e=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"sig2"}}}}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should include icons when available",async()=>{const e=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}},stax:{data:"0x0102",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig3",test:"sig4"}}},icons:{flex:"icon1",stax:"icon2"}}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t.isRight()).toBe(!0);const d=t.unsafeCoerce();o(d.descriptors.flex.icon).toBe("icon1"),o(d.descriptors.stax.icon).toBe("icon2")}),n("should transform data correctly for Polygon chain ID",async()=>{a.get.mockResolvedValue(s);const e=await r.getDynamicNetworkConfiguration(137);o(a.get).toHaveBeenCalledWith(`${c.cal.url}/networks`,{params:{output:"id,descriptors,icons",chain_id:137}}),o(e.isRight()).toBe(!0);const t=e.unsafeCoerce();o(Object.keys(t.descriptors)).toEqual(["flex","stax"])}),n("should handle invalid data - null data",async()=>{const e=[null];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Network configuration not found for chain ID: 1")))}),n("should handle invalid data - non-object data",async()=>{const e=["string_instead_of_object"];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid data - icons as string instead of object",async()=>{const e=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:"should_be_object_not_string"}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid data - icons as number instead of object (line 93)",async()=>{const e=[{id:"ethereum",descriptors:{flex:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"sig1",test:"sig2"}}},icons:123}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid descriptor - null descriptor (line 103)",async()=>{const e=[{id:"ethereum",descriptors:{flex:null}}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))}),n("should handle invalid descriptor - non-object descriptor (line 103)",async()=>{const e=[{id:"ethereum",descriptors:{flex:"should_be_object_not_string"}}];a.get.mockResolvedValue(e);const t=await r.getDynamicNetworkConfiguration(1);o(t).toEqual(i(new Error("Invalid network configuration response for chain ID: 1")))})})});
2
2
  //# sourceMappingURL=HttpDynamicNetworkDataSource.test.js.map
@@ -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
  }