@ledgerhq/context-module 0.0.0-develop-20260329001709 → 0.0.0-develop-20260331001713

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 (238) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  3. package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
  4. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
  6. package/lib/cjs/src/DefaultContextModule.js.map +2 -2
  7. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  8. package/lib/cjs/src/DefaultContextModule.test.js.map +2 -2
  9. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  10. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +2 -2
  11. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +1 -1
  12. package/lib/cjs/src/config/di/configModuleFactory.js +1 -1
  13. package/lib/cjs/src/config/di/configModuleFactory.js.map +2 -2
  14. package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
  15. package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
  16. package/lib/cjs/src/di.js +1 -1
  17. package/lib/cjs/src/di.js.map +2 -2
  18. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  19. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +2 -2
  20. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  21. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
  22. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +1 -1
  23. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +1 -1
  24. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  25. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js.map +2 -2
  26. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  27. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +1 -1
  28. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js +1 -1
  29. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +2 -2
  30. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  31. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  32. package/lib/cjs/src/index.js +1 -1
  33. package/lib/cjs/src/index.js.map +2 -2
  34. package/lib/cjs/src/nft/data/HttpNftDataSource.js +1 -1
  35. package/lib/cjs/src/nft/data/HttpNftDataSource.js.map +2 -2
  36. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js +1 -1
  37. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js.map +1 -1
  38. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  39. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js.map +2 -2
  40. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js.map +1 -1
  41. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +1 -1
  42. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +2 -2
  43. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +1 -1
  44. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
  45. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +2 -2
  46. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +1 -1
  47. package/lib/cjs/src/proxy/di/proxyModuleFactory.js +1 -1
  48. package/lib/cjs/src/proxy/di/proxyModuleFactory.js.map +3 -3
  49. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +1 -1
  50. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +2 -2
  51. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  52. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +2 -2
  53. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  54. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +1 -1
  55. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  56. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js.map +2 -2
  57. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  58. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js.map +2 -2
  59. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  60. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +2 -2
  61. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  62. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +1 -1
  63. package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
  64. package/lib/cjs/src/solana/domain/DefaultSolanaContextLoader.test.js.map +1 -1
  65. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
  66. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +2 -2
  67. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
  68. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +2 -2
  69. package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.js.map +1 -1
  70. package/lib/cjs/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +1 -1
  71. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  72. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +2 -2
  73. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +2 -2
  74. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +2 -2
  75. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.js +1 -1
  76. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.js.map +2 -2
  77. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
  78. package/lib/cjs/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +1 -1
  79. package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
  80. package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +2 -2
  81. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +1 -1
  82. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  83. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +2 -2
  84. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +1 -1
  85. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +2 -2
  86. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +1 -1
  87. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  88. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +2 -2
  89. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +1 -1
  90. package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
  91. package/lib/cjs/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
  92. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  93. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +2 -2
  94. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +1 -1
  95. package/lib/esm/package.json +1 -1
  96. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  97. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  98. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  99. package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
  100. package/lib/esm/src/DefaultContextModule.js.map +2 -2
  101. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  102. package/lib/esm/src/DefaultContextModule.test.js.map +2 -2
  103. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  104. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +2 -2
  105. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +1 -1
  106. package/lib/esm/src/config/di/configModuleFactory.js +1 -1
  107. package/lib/esm/src/config/di/configModuleFactory.js.map +2 -2
  108. package/lib/esm/src/di.js +1 -1
  109. package/lib/esm/src/di.js.map +2 -2
  110. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  111. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +2 -2
  112. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  113. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
  114. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +1 -1
  115. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +1 -1
  116. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js.map +2 -2
  117. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +1 -1
  118. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +2 -2
  119. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  120. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  121. package/lib/esm/src/index.js +1 -1
  122. package/lib/esm/src/index.js.map +2 -2
  123. package/lib/esm/src/nft/data/HttpNftDataSource.js +1 -1
  124. package/lib/esm/src/nft/data/HttpNftDataSource.js.map +2 -2
  125. package/lib/esm/src/nft/data/HttpNftDataSource.test.js +1 -1
  126. package/lib/esm/src/nft/data/HttpNftDataSource.test.js.map +1 -1
  127. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  128. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js.map +2 -2
  129. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js.map +1 -1
  130. package/lib/esm/src/proxy/data/HttpProxyDataSource.js +1 -1
  131. package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +2 -2
  132. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +1 -1
  133. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +2 -2
  134. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +1 -1
  135. package/lib/esm/src/proxy/di/proxyModuleFactory.js +1 -1
  136. package/lib/esm/src/proxy/di/proxyModuleFactory.js.map +3 -3
  137. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +1 -1
  138. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +2 -2
  139. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  140. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +2 -2
  141. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  142. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +1 -1
  143. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  144. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js.map +2 -2
  145. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  146. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js.map +2 -2
  147. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  148. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +2 -2
  149. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +1 -1
  150. package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js +1 -1
  151. package/lib/esm/src/solana/domain/DefaultSolanaContextLoader.test.js.map +1 -1
  152. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +2 -2
  153. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +2 -2
  154. package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.js.map +1 -1
  155. package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js +1 -1
  156. package/lib/esm/src/solanaLifi/domain/SolanaLifiContextLoader.test.js.map +1 -1
  157. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  158. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +2 -2
  159. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +2 -2
  160. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +2 -2
  161. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.js +1 -1
  162. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.js.map +2 -2
  163. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js +1 -1
  164. package/lib/esm/src/solanaToken/domain/SolanaTokenContextLoader.test.js.map +1 -1
  165. package/lib/esm/src/token/data/HttpTokenDataSource.js.map +2 -2
  166. package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +1 -1
  167. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  168. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +2 -2
  169. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +1 -1
  170. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +2 -2
  171. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +1 -1
  172. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +2 -2
  173. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +1 -1
  174. package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js +1 -1
  175. package/lib/esm/src/trusted-name/di/trustedNameModuleFactory.js.map +3 -3
  176. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  177. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +2 -2
  178. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +1 -1
  179. package/lib/types/src/ContextModuleBuilder.d.ts +8 -21
  180. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  181. package/lib/types/src/DefaultContextModule.d.ts +2 -2
  182. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  183. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts +2 -2
  184. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -1
  185. package/lib/types/src/config/di/configModuleFactory.d.ts +2 -2
  186. package/lib/types/src/config/di/configModuleFactory.d.ts.map +1 -1
  187. package/lib/types/src/config/model/ContextModuleConfig.d.ts +8 -4
  188. package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
  189. package/lib/types/src/di.d.ts +2 -2
  190. package/lib/types/src/di.d.ts.map +1 -1
  191. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts +2 -2
  192. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -1
  193. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts +2 -2
  194. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts.map +1 -1
  195. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts +2 -2
  196. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts.map +1 -1
  197. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts +2 -2
  198. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts.map +1 -1
  199. package/lib/types/src/index.d.ts +1 -1
  200. package/lib/types/src/index.d.ts.map +1 -1
  201. package/lib/types/src/nft/data/HttpNftDataSource.d.ts +2 -2
  202. package/lib/types/src/nft/data/HttpNftDataSource.d.ts.map +1 -1
  203. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts +2 -2
  204. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts.map +1 -1
  205. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +2 -2
  206. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -1
  207. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +2 -2
  208. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -1
  209. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts +2 -2
  210. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts.map +1 -1
  211. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts +2 -2
  212. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts.map +1 -1
  213. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts +2 -2
  214. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts.map +1 -1
  215. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts +2 -2
  216. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts.map +1 -1
  217. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts +2 -2
  218. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts.map +1 -1
  219. package/lib/types/src/solanaLifi/domain/SolanaLifiContextLoader.d.ts +2 -2
  220. package/lib/types/src/solanaLifi/domain/SolanaLifiContextLoader.d.ts.map +1 -1
  221. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts +2 -2
  222. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts.map +1 -1
  223. package/lib/types/src/solanaToken/domain/SolanaTokenContextLoader.d.ts +2 -2
  224. package/lib/types/src/solanaToken/domain/SolanaTokenContextLoader.d.ts.map +1 -1
  225. package/lib/types/src/token/data/HttpTokenDataSource.d.ts +2 -2
  226. package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
  227. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts +2 -2
  228. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts.map +1 -1
  229. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts +2 -2
  230. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts.map +1 -1
  231. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +2 -2
  232. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  233. package/lib/types/src/trusted-name/di/trustedNameModuleFactory.d.ts +2 -2
  234. package/lib/types/src/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -1
  235. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +2 -2
  236. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
  237. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  238. package/package.json +5 -5
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/data/HttpSafeProxyDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { SafeProxyImplementationAddressDto } from \"./dto/SafeProxyImplementationAddressDto\";\nimport {\n GetProxyImplementationAddressParam,\n type ProxyDataSource,\n ProxyImplementationAddress,\n} from \"./ProxyDataSource\";\n\n@injectable()\nexport class HttpSafeProxyDataSource implements ProxyDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async getProxyImplementationAddress({\n proxyAddress,\n chainId,\n challenge,\n }: GetProxyImplementationAddressParam): Promise<\n Either<Error, ProxyImplementationAddress>\n > {\n let dto: SafeProxyImplementationAddressDto | undefined;\n try {\n const response = await axios.request<SafeProxyImplementationAddressDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v3/ethereum/${chainId}/contract/proxy/${proxyAddress}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n params: {\n challenge,\n resolver: \"SAFE_GATEWAY\",\n },\n });\n dto = response.data;\n } catch (_error) {\n return Left(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation`,\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${proxyAddress} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isSafeProxyImplementationAddressDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${proxyAddress} on chain ${chainId}`,\n ),\n );\n }\n\n return Right({\n implementationAddress: dto.implementationAddress,\n signedDescriptor: dto.signedDescriptor,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n /**\n * Type guard to validate SafeProxyImplementationAddressDto\n */\n private isSafeProxyImplementationAddressDto(\n value: unknown,\n ): value is SafeProxyImplementationAddressDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"proxyAddress\" in value &&\n \"implementationAddress\" in value &&\n \"standard\" in value &&\n \"signedDescriptor\" in value &&\n \"providedBy\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.proxyAddress === \"string\" &&\n typeof value.implementationAddress === \"string\" &&\n typeof value.standard === \"string\" &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.providedBy === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\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,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAUb,IAAMC,EAAN,KAAyD,CAC9D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,8BAA8B,CAClC,aAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAEE,CACA,IAAIC,EACJ,GAAI,CAaFA,GAZiB,MAAMC,EAAM,QAA2C,CACtE,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBH,CAAO,mBAAmBD,CAAY,GACnG,QAAS,CACP,CAACK,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,EACA,OAAQ,CACN,UAAAL,EACA,SAAU,cACZ,CACF,CAAC,GACc,IACjB,MAAiB,CACf,OAAOM,EACL,IAAI,MACF,oFACF,CACF,CACF,CAEA,OAAKL,EAQA,KAAK,oCAAoCA,CAAG,EAQ1CM,EAAM,CACX,sBAAuBN,EAAI,sBAC3B,iBAAkBA,EAAI,iBACtB,MAAOA,EAAI,MACX,SAAUA,EAAI,QAChB,CAAC,EAZQK,EACL,IAAI,MACF,yFAAyFR,CAAY,aAAaC,CAAO,EAC3H,CACF,EAZOO,EACL,IAAI,MACF,uEAAuER,CAAY,aAAaC,CAAO,EACzG,CACF,CAiBJ,CAKQ,oCACNS,EAC4C,CAC5C,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,iBAAkBA,GAClB,0BAA2BA,GAC3B,aAAcA,GACd,qBAAsBA,GACtB,eAAgBA,GAChB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,cAAiB,UAC9B,OAAOA,EAAM,uBAA0B,UACvC,OAAOA,EAAM,UAAa,UAC1B,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,YAAe,UAC5B,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EApFaZ,EAANa,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBjB",
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 PACKAGE from \"@root/package.json\";\n\nimport { SafeProxyImplementationAddressDto } from \"./dto/SafeProxyImplementationAddressDto\";\nimport {\n GetProxyImplementationAddressParam,\n type ProxyDataSource,\n ProxyImplementationAddress,\n} from \"./ProxyDataSource\";\n\n@injectable()\nexport class HttpSafeProxyDataSource implements ProxyDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getProxyImplementationAddress({\n proxyAddress,\n chainId,\n challenge,\n }: GetProxyImplementationAddressParam): Promise<\n Either<Error, ProxyImplementationAddress>\n > {\n let dto: SafeProxyImplementationAddressDto | undefined;\n try {\n const response = await axios.request<SafeProxyImplementationAddressDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v3/ethereum/${chainId}/contract/proxy/${proxyAddress}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n params: {\n challenge,\n resolver: \"SAFE_GATEWAY\",\n },\n });\n dto = response.data;\n } catch (_error) {\n return Left(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation`,\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${proxyAddress} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isSafeProxyImplementationAddressDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${proxyAddress} on chain ${chainId}`,\n ),\n );\n }\n\n return Right({\n implementationAddress: dto.implementationAddress,\n signedDescriptor: dto.signedDescriptor,\n keyId: dto.keyId,\n keyUsage: dto.keyUsage,\n });\n }\n\n /**\n * Type guard to validate SafeProxyImplementationAddressDto\n */\n private isSafeProxyImplementationAddressDto(\n value: unknown,\n ): value is SafeProxyImplementationAddressDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"proxyAddress\" in value &&\n \"implementationAddress\" in value &&\n \"standard\" in value &&\n \"signedDescriptor\" in value &&\n \"providedBy\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.proxyAddress === \"string\" &&\n typeof value.implementationAddress === \"string\" &&\n typeof value.standard === \"string\" &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.providedBy === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\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,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAUb,IAAMC,EAAN,KAAyD,CAC9D,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,8BAA8B,CAClC,aAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAEE,CACA,IAAIC,EACJ,GAAI,CAaFA,GAZiB,MAAMC,EAAM,QAA2C,CACtE,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBH,CAAO,mBAAmBD,CAAY,GACnG,QAAS,CACP,CAACK,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,EACA,OAAQ,CACN,UAAAL,EACA,SAAU,cACZ,CACF,CAAC,GACc,IACjB,MAAiB,CACf,OAAOM,EACL,IAAI,MACF,oFACF,CACF,CACF,CAEA,OAAKL,EAQA,KAAK,oCAAoCA,CAAG,EAQ1CM,EAAM,CACX,sBAAuBN,EAAI,sBAC3B,iBAAkBA,EAAI,iBACtB,MAAOA,EAAI,MACX,SAAUA,EAAI,QAChB,CAAC,EAZQK,EACL,IAAI,MACF,yFAAyFR,CAAY,aAAaC,CAAO,EAC3H,CACF,EAZOO,EACL,IAAI,MACF,uEAAuER,CAAY,aAAaC,CAAO,EACzG,CACF,CAiBJ,CAKQ,oCACNS,EAC4C,CAC5C,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,iBAAkBA,GAClB,0BAA2BA,GAC3B,aAAcA,GACd,qBAAsBA,GACtB,eAAgBA,GAChB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,cAAiB,UAC9B,OAAOA,EAAM,uBAA0B,UACvC,OAAOA,EAAM,UAAa,UAC1B,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,YAAe,UAC5B,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EArFaZ,EAANa,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBjB",
6
6
  "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpSafeProxyDataSource", "config", "proxyAddress", "chainId", "challenge", "dto", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Left", "Right", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
7
7
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/data/HttpSafeProxyDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type SafeProxyImplementationAddressDto } from \"./dto/SafeProxyImplementationAddressDto\";\nimport { HttpSafeProxyDataSource } from \"./HttpSafeProxyDataSource\";\nimport { type ProxyDataSource } from \"./ProxyDataSource\";\n\nvi.mock(\"axios\");\n\nconst config = {\n metadataServiceDomain: {\n url: \"https://metadata.api.live.ledger.com\",\n },\n originToken: \"test-origin-token\",\n} as ContextModuleConfig;\n\ndescribe(\"HttpSafeProxyDataSource\", () => {\n let datasource: ProxyDataSource;\n\n beforeAll(() => {\n datasource = new HttpSafeProxyDataSource(config);\n vi.clearAllMocks();\n });\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n const validParams = {\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n challenge: \"test-challenge\",\n calldata: \"0xabcdef\",\n };\n\n const validDto: SafeProxyImplementationAddressDto = {\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n implementationAddress: \"0x9876543210987654321098765432109876543210\",\n standard: \"EIP-1967\",\n signedDescriptor: \"signed-descriptor-data\",\n providedBy: \"SAFE_GATEWAY\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n\n describe(\"getProxyImplementationAddress\", () => {\n it(\"should call axios with correct URL, headers, and parameters\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: validDto }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith({\n method: \"GET\",\n url: `${config.metadataServiceDomain.url}/v3/ethereum/${validParams.chainId}/contract/proxy/${validParams.proxyAddress}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: version,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n params: {\n challenge: validParams.challenge,\n resolver: \"SAFE_GATEWAY\",\n },\n });\n });\n\n it(\"should return Right with proxy implementation data when request succeeds with valid DTO\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(result.extract()).toEqual({\n implementationAddress: validDto.implementationAddress,\n signedDescriptor: validDto.signedDescriptor,\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n });\n });\n\n it(\"should return Left with error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation\",\n ),\n );\n });\n\n it(\"should return Left with error when response data is undefined\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response data is null\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: null });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when proxyAddress is missing\", async () => {\n // GIVEN\n const { proxyAddress: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when implementationAddress is missing\", async () => {\n // GIVEN\n const { implementationAddress: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when standard is missing\", async () => {\n // GIVEN\n const { standard: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when signedDescriptor is missing\", async () => {\n // GIVEN\n const { signedDescriptor: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when providedBy is missing\", async () => {\n // GIVEN\n const { providedBy: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when proxyAddress is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, proxyAddress: 123 };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when implementationAddress is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, implementationAddress: null };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when standard is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, standard: [] };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when signedDescriptor is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, signedDescriptor: {} };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when providedBy is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, providedBy: true };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response is not an object\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: \"not an object\" });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response is null\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: null });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should handle different chainId values correctly\", async () => {\n // GIVEN\n const paramsWithDifferentChainId = { ...validParams, chainId: 137 };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithDifferentChainId,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: `${config.metadataServiceDomain.url}/v3/ethereum/137/contract/proxy/${validParams.proxyAddress}`,\n }),\n );\n });\n\n it(\"should handle different proxy addresses correctly\", async () => {\n // GIVEN\n const differentProxyAddress =\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n const paramsWithDifferentAddress = {\n ...validParams,\n proxyAddress: differentProxyAddress,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithDifferentAddress,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: `${config.metadataServiceDomain.url}/v3/ethereum/${validParams.chainId}/contract/proxy/${differentProxyAddress}`,\n }),\n );\n });\n\n it(\"should pass challenge parameter correctly\", async () => {\n // GIVEN\n const customChallenge = \"custom-challenge-string\";\n const paramsWithCustomChallenge = {\n ...validParams,\n challenge: customChallenge,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithCustomChallenge,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: customChallenge,\n resolver: \"SAFE_GATEWAY\",\n },\n }),\n );\n });\n });\n});\n"],
4
+ "sourcesContent": ["import axios from \"axios\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type SafeProxyImplementationAddressDto } from \"./dto/SafeProxyImplementationAddressDto\";\nimport { HttpSafeProxyDataSource } from \"./HttpSafeProxyDataSource\";\nimport { type ProxyDataSource } from \"./ProxyDataSource\";\n\nvi.mock(\"axios\");\n\nconst config = {\n metadataServiceDomain: {\n url: \"https://metadata.api.live.ledger.com\",\n },\n originToken: \"test-origin-token\",\n} as ContextModuleServiceConfig;\n\ndescribe(\"HttpSafeProxyDataSource\", () => {\n let datasource: ProxyDataSource;\n\n beforeAll(() => {\n datasource = new HttpSafeProxyDataSource(config);\n vi.clearAllMocks();\n });\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n const validParams = {\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n chainId: 1,\n challenge: \"test-challenge\",\n calldata: \"0xabcdef\",\n };\n\n const validDto: SafeProxyImplementationAddressDto = {\n proxyAddress: \"0x1234567890123456789012345678901234567890\",\n implementationAddress: \"0x9876543210987654321098765432109876543210\",\n standard: \"EIP-1967\",\n signedDescriptor: \"signed-descriptor-data\",\n providedBy: \"SAFE_GATEWAY\",\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n };\n\n describe(\"getProxyImplementationAddress\", () => {\n it(\"should call axios with correct URL, headers, and parameters\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: validDto }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith({\n method: \"GET\",\n url: `${config.metadataServiceDomain.url}/v3/ethereum/${validParams.chainId}/contract/proxy/${validParams.proxyAddress}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: version,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n params: {\n challenge: validParams.challenge,\n resolver: \"SAFE_GATEWAY\",\n },\n });\n });\n\n it(\"should return Right with proxy implementation data when request succeeds with valid DTO\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(result.extract()).toEqual({\n implementationAddress: validDto.implementationAddress,\n signedDescriptor: validDto.signedDescriptor,\n keyId: \"testKeyId\",\n keyUsage: \"testKeyUsage\",\n });\n });\n\n it(\"should return Left with error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpSafeProxyDataSource: Failed to fetch safe proxy implementation\",\n ),\n );\n });\n\n it(\"should return Left with error when response data is undefined\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response data is null\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: null });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when proxyAddress is missing\", async () => {\n // GIVEN\n const { proxyAddress: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when implementationAddress is missing\", async () => {\n // GIVEN\n const { implementationAddress: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when standard is missing\", async () => {\n // GIVEN\n const { standard: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when signedDescriptor is missing\", async () => {\n // GIVEN\n const { signedDescriptor: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when providedBy is missing\", async () => {\n // GIVEN\n const { providedBy: _, ...invalidDto } = validDto;\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when proxyAddress is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, proxyAddress: 123 };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when implementationAddress is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, implementationAddress: null };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when standard is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, standard: [] };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when signedDescriptor is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, signedDescriptor: {} };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when providedBy is not a string\", async () => {\n // GIVEN\n const invalidDto = { ...validDto, providedBy: true };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: invalidDto });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response is not an object\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: \"not an object\" });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: Invalid safe proxy response format for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should return Left with error when response is null\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: null });\n\n // WHEN\n const result =\n await datasource.getProxyImplementationAddress(validParams);\n\n // THEN\n expect(result.isLeft()).toBe(true);\n expect(result.extract()).toEqual(\n new Error(\n `[ContextModule] HttpSafeProxyDataSource: No data received for proxy ${validParams.proxyAddress} on chain ${validParams.chainId}`,\n ),\n );\n });\n\n it(\"should handle different chainId values correctly\", async () => {\n // GIVEN\n const paramsWithDifferentChainId = { ...validParams, chainId: 137 };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithDifferentChainId,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: `${config.metadataServiceDomain.url}/v3/ethereum/137/contract/proxy/${validParams.proxyAddress}`,\n }),\n );\n });\n\n it(\"should handle different proxy addresses correctly\", async () => {\n // GIVEN\n const differentProxyAddress =\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\";\n const paramsWithDifferentAddress = {\n ...validParams,\n proxyAddress: differentProxyAddress,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithDifferentAddress,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: `${config.metadataServiceDomain.url}/v3/ethereum/${validParams.chainId}/contract/proxy/${differentProxyAddress}`,\n }),\n );\n });\n\n it(\"should pass challenge parameter correctly\", async () => {\n // GIVEN\n const customChallenge = \"custom-challenge-string\";\n const paramsWithCustomChallenge = {\n ...validParams,\n challenge: customChallenge,\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: validDto });\n\n // WHEN\n const result = await datasource.getProxyImplementationAddress(\n paramsWithCustomChallenge,\n );\n\n // THEN\n expect(result.isRight()).toBe(true);\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: customChallenge,\n resolver: \"SAFE_GATEWAY\",\n },\n }),\n );\n });\n });\n});\n"],
5
5
  "mappings": "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",
6
6
  "names": ["axios", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpSafeProxyDataSource", "config", "datasource", "validParams", "validDto", "version", "requestSpy", "result", "_", "invalidDto", "paramsWithDifferentChainId", "differentProxyAddress", "paramsWithDifferentAddress", "customChallenge", "paramsWithCustomChallenge"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{ContainerModule as e}from"inversify";import{HttpProxyDataSource as a}from"../../proxy/data/HttpProxyDataSource";import{HttpSafeProxyDataSource as p}from"../../proxy/data/HttpSafeProxyDataSource";import{proxyTypes as r}from"../../proxy/di/proxyTypes";import{ProxyContextFieldLoader as x}from"../../proxy/domain/ProxyContextFieldLoader";const n=t=>new e(({bind:o})=>{t?.datasource?.proxy==="safe"?o(r.ProxyDataSource).to(p):o(r.ProxyDataSource).to(a),o(r.ProxyContextFieldLoader).to(x)});export{n as proxyModuleFactory};
1
+ import{ContainerModule as e}from"inversify";import{HttpProxyDataSource as a}from"../../proxy/data/HttpProxyDataSource";import{HttpSafeProxyDataSource as p}from"../../proxy/data/HttpSafeProxyDataSource";import{proxyTypes as r}from"../../proxy/di/proxyTypes";import{ProxyContextFieldLoader as x}from"../../proxy/domain/ProxyContextFieldLoader";const c=t=>new e(({bind:o})=>{t?.proxy==="safe"?o(r.ProxyDataSource).to(p):o(r.ProxyDataSource).to(a),o(r.ProxyContextFieldLoader).to(x)});export{c as proxyModuleFactory};
2
2
  //# sourceMappingURL=proxyModuleFactory.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/di/proxyModuleFactory.ts"],
4
- "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"@/proxy/data/HttpSafeProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\n\nexport const proxyModuleFactory = (config?: ContextModuleConfig) =>\n new ContainerModule(({ bind }) => {\n if (config?.datasource?.proxy === \"safe\") {\n bind(proxyTypes.ProxyDataSource).to(HttpSafeProxyDataSource);\n } else {\n bind(proxyTypes.ProxyDataSource).to(HttpProxyDataSource);\n }\n bind(proxyTypes.ProxyContextFieldLoader).to(ProxyContextFieldLoader);\n });\n"],
5
- "mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAGhC,OAAS,uBAAAC,MAA2B,mCACpC,OAAS,2BAAAC,MAA+B,uCACxC,OAAS,cAAAC,MAAkB,wBAC3B,OAAS,2BAAAC,MAA+B,yCAEjC,MAAMC,EAAsBC,GACjC,IAAIN,EAAgB,CAAC,CAAE,KAAAO,CAAK,IAAM,CAC5BD,GAAQ,YAAY,QAAU,OAChCC,EAAKJ,EAAW,eAAe,EAAE,GAAGD,CAAuB,EAE3DK,EAAKJ,EAAW,eAAe,EAAE,GAAGF,CAAmB,EAEzDM,EAAKJ,EAAW,uBAAuB,EAAE,GAAGC,CAAuB,CACrE,CAAC",
6
- "names": ["ContainerModule", "HttpProxyDataSource", "HttpSafeProxyDataSource", "proxyTypes", "ProxyContextFieldLoader", "proxyModuleFactory", "config", "bind"]
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { type ContextModuleDatasourceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"@/proxy/data/HttpSafeProxyDataSource\";\nimport { proxyTypes } from \"@/proxy/di/proxyTypes\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\n\nexport const proxyModuleFactory = (\n datasource?: ContextModuleDatasourceConfig,\n) =>\n new ContainerModule(({ bind }) => {\n if (datasource?.proxy === \"safe\") {\n bind(proxyTypes.ProxyDataSource).to(HttpSafeProxyDataSource);\n } else {\n bind(proxyTypes.ProxyDataSource).to(HttpProxyDataSource);\n }\n bind(proxyTypes.ProxyContextFieldLoader).to(ProxyContextFieldLoader);\n });\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAGhC,OAAS,uBAAAC,MAA2B,mCACpC,OAAS,2BAAAC,MAA+B,uCACxC,OAAS,cAAAC,MAAkB,wBAC3B,OAAS,2BAAAC,MAA+B,yCAEjC,MAAMC,EACXC,GAEA,IAAIN,EAAgB,CAAC,CAAE,KAAAO,CAAK,IAAM,CAC5BD,GAAY,QAAU,OACxBC,EAAKJ,EAAW,eAAe,EAAE,GAAGD,CAAuB,EAE3DK,EAAKJ,EAAW,eAAe,EAAE,GAAGF,CAAmB,EAEzDM,EAAKJ,EAAW,uBAAuB,EAAE,GAAGC,CAAuB,CACrE,CAAC",
6
+ "names": ["ContainerModule", "HttpProxyDataSource", "HttpSafeProxyDataSource", "proxyTypes", "ProxyContextFieldLoader", "proxyModuleFactory", "datasource", "bind"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{Container as u}from"inversify";import{configTypes as f}from"../../config/di/configTypes";import{pkiTypes as x}from"../../pki/di/pkiTypes";import{HttpProxyDataSource as i}from"../../proxy/data/HttpProxyDataSource";import{HttpSafeProxyDataSource as l}from"../../proxy/data/HttpSafeProxyDataSource";import{ProxyContextFieldLoader as c}from"../../proxy/domain/ProxyContextFieldLoader";import{proxyModuleFactory as n}from"./proxyModuleFactory";import{proxyTypes as r}from"./proxyTypes";describe("proxyModuleFactory",()=>{let o;const d={metadataServiceDomain:{url:"https://metadata.api.live.ledger.com"},originToken:"test-origin-token"},s={loadCertificate:vi.fn()};beforeEach(()=>{o=new u,o.bind(f.Config).toConstantValue(d),o.bind(x.PkiCertificateLoader).toConstantValue(s)}),describe("when config is undefined",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const a=n();o.load(a);const e=o.get(r.ProxyDataSource);expect(e).toBeInstanceOf(i)}),it("should bind ProxyContextFieldLoader",()=>{const a=n();o.load(a);const e=o.get(r.ProxyContextFieldLoader);expect(e).toBeInstanceOf(c)})}),describe("when config.datasource.proxy is 'safe'",()=>{it("should bind HttpSafeProxyDataSource as the ProxyDataSource",()=>{const e=n({datasource:{proxy:"safe"}});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(l)}),it("should bind ProxyContextFieldLoader",()=>{const e=n({datasource:{proxy:"safe"}});o.load(e);const t=o.get(r.ProxyContextFieldLoader);expect(t).toBeInstanceOf(c)})}),describe("when config.datasource.proxy is 'default'",()=>{it("should bind HttpProxyDataSource as the ProxyDataSource",()=>{const e=n({datasource:{proxy:"default"}});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(i)})}),describe("when config.datasource is undefined",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const e=n({});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(i)})}),describe("when config.datasource.proxy is an unexpected value",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const e=n({datasource:{proxy:"unknown"}});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(i)})})});
1
+ import{Container as s}from"inversify";import{configTypes as u}from"../../config/di/configTypes";import{pkiTypes as x}from"../../pki/di/pkiTypes";import{HttpProxyDataSource as n}from"../../proxy/data/HttpProxyDataSource";import{HttpSafeProxyDataSource as p}from"../../proxy/data/HttpSafeProxyDataSource";import{ProxyContextFieldLoader as c}from"../../proxy/domain/ProxyContextFieldLoader";import{proxyModuleFactory as a}from"./proxyModuleFactory";import{proxyTypes as r}from"./proxyTypes";describe("proxyModuleFactory",()=>{let o;const i={metadataServiceDomain:{url:"https://metadata.api.live.ledger.com"},originToken:"test-origin-token"},d={loadCertificate:vi.fn()};beforeEach(()=>{o=new s,o.bind(u.Config).toConstantValue(i),o.bind(x.PkiCertificateLoader).toConstantValue(d)}),describe("when datasource config is undefined",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const e=a();o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(n)}),it("should bind ProxyContextFieldLoader",()=>{const e=a();o.load(e);const t=o.get(r.ProxyContextFieldLoader);expect(t).toBeInstanceOf(c)})}),describe("when datasource.proxy is 'safe'",()=>{it("should bind HttpSafeProxyDataSource as the ProxyDataSource",()=>{const e=a({proxy:"safe"});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(p)}),it("should bind ProxyContextFieldLoader",()=>{const e=a({proxy:"safe"});o.load(e);const t=o.get(r.ProxyContextFieldLoader);expect(t).toBeInstanceOf(c)})}),describe("when datasource.proxy is 'default'",()=>{it("should bind HttpProxyDataSource as the ProxyDataSource",()=>{const e=a({proxy:"default"});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(n)})}),describe("when datasource has no proxy set",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const e=a({});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(n)})}),describe("when datasource.proxy is an unexpected value",()=>{it("should bind HttpProxyDataSource as the default ProxyDataSource",()=>{const e=a({proxy:"unknown"});o.load(e);const t=o.get(r.ProxyDataSource);expect(t).toBeInstanceOf(n)})})});
2
2
  //# sourceMappingURL=proxyModuleFactory.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/proxy/di/proxyModuleFactory.test.ts"],
4
- "sourcesContent": ["import { Container } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { HttpProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"@/proxy/data/HttpSafeProxyDataSource\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\n\nimport { proxyModuleFactory } from \"./proxyModuleFactory\";\nimport { proxyTypes } from \"./proxyTypes\";\n\ndescribe(\"proxyModuleFactory\", () => {\n let container: Container;\n const mockConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.api.live.ledger.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleConfig;\n\n const mockPkiCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n beforeEach(() => {\n container = new Container();\n // Bind the config that the datasources depend on\n container.bind(configTypes.Config).toConstantValue(mockConfig);\n // Bind the PKI certificate loader that ProxyContextFieldLoader depends on\n container\n .bind(pkiTypes.PkiCertificateLoader)\n .toConstantValue(mockPkiCertificateLoader);\n });\n\n describe(\"when config is undefined\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const module = proxyModuleFactory();\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n\n it(\"should bind ProxyContextFieldLoader\", () => {\n const module = proxyModuleFactory();\n container.load(module);\n\n const proxyContextFieldLoader = container.get(\n proxyTypes.ProxyContextFieldLoader,\n );\n expect(proxyContextFieldLoader).toBeInstanceOf(ProxyContextFieldLoader);\n });\n });\n\n describe(\"when config.datasource.proxy is 'safe'\", () => {\n it(\"should bind HttpSafeProxyDataSource as the ProxyDataSource\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"safe\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpSafeProxyDataSource);\n });\n\n it(\"should bind ProxyContextFieldLoader\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"safe\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyContextFieldLoader = container.get(\n proxyTypes.ProxyContextFieldLoader,\n );\n expect(proxyContextFieldLoader).toBeInstanceOf(ProxyContextFieldLoader);\n });\n });\n\n describe(\"when config.datasource.proxy is 'default'\", () => {\n it(\"should bind HttpProxyDataSource as the ProxyDataSource\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"default\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"when config.datasource is undefined\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const config: ContextModuleConfig = {} as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"when config.datasource.proxy is an unexpected value\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const config: ContextModuleConfig = {\n datasource: {\n proxy: \"unknown\" as unknown as \"safe\" | \"default\",\n },\n } as ContextModuleConfig;\n\n const module = proxyModuleFactory(config);\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n});\n"],
5
- "mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,uBAAAC,MAA2B,mCACpC,OAAS,2BAAAC,MAA+B,uCACxC,OAAS,2BAAAC,MAA+B,yCAExC,OAAS,sBAAAC,MAA0B,uBACnC,OAAS,cAAAC,MAAkB,eAE3B,SAAS,qBAAsB,IAAM,CACnC,IAAIC,EACJ,MAAMC,EAAkC,CACtC,sBAAuB,CACrB,IAAK,sCACP,EACA,YAAa,mBACf,EAEMC,EAAiD,CACrD,gBAAiB,GAAG,GAAG,CACzB,EAEA,WAAW,IAAM,CACfF,EAAY,IAAIR,EAEhBQ,EAAU,KAAKP,EAAY,MAAM,EAAE,gBAAgBQ,CAAU,EAE7DD,EACG,KAAKN,EAAS,oBAAoB,EAClC,gBAAgBQ,CAAwB,CAC7C,CAAC,EAED,SAAS,2BAA4B,IAAM,CACzC,GAAG,iEAAkE,IAAM,CACzE,MAAMC,EAASL,EAAmB,EAClCE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,EAED,GAAG,sCAAuC,IAAM,CAC9C,MAAMQ,EAASL,EAAmB,EAClCE,EAAU,KAAKG,CAAM,EAErB,MAAME,EAA0BL,EAAU,IACxCD,EAAW,uBACb,EACA,OAAOM,CAAuB,EAAE,eAAeR,CAAuB,CACxE,CAAC,CACH,CAAC,EAED,SAAS,yCAA0C,IAAM,CACvD,GAAG,6DAA8D,IAAM,CAOrE,MAAMM,EAASL,EANqB,CAClC,WAAY,CACV,MAAO,MACT,CACF,CAEwC,EACxCE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeR,CAAuB,CAChE,CAAC,EAED,GAAG,sCAAuC,IAAM,CAO9C,MAAMO,EAASL,EANqB,CAClC,WAAY,CACV,MAAO,MACT,CACF,CAEwC,EACxCE,EAAU,KAAKG,CAAM,EAErB,MAAME,EAA0BL,EAAU,IACxCD,EAAW,uBACb,EACA,OAAOM,CAAuB,EAAE,eAAeR,CAAuB,CACxE,CAAC,CACH,CAAC,EAED,SAAS,4CAA6C,IAAM,CAC1D,GAAG,yDAA0D,IAAM,CAOjE,MAAMM,EAASL,EANqB,CAClC,WAAY,CACV,MAAO,SACT,CACF,CAEwC,EACxCE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,sCAAuC,IAAM,CACpD,GAAG,iEAAkE,IAAM,CAGzE,MAAMQ,EAASL,EAFqB,CAAC,CAEG,EACxCE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,sDAAuD,IAAM,CACpE,GAAG,iEAAkE,IAAM,CAOzE,MAAMQ,EAASL,EANqB,CAClC,WAAY,CACV,MAAO,SACT,CACF,CAEwC,EACxCE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import { Container } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { HttpProxyDataSource } from \"@/proxy/data/HttpProxyDataSource\";\nimport { HttpSafeProxyDataSource } from \"@/proxy/data/HttpSafeProxyDataSource\";\nimport { ProxyContextFieldLoader } from \"@/proxy/domain/ProxyContextFieldLoader\";\n\nimport { proxyModuleFactory } from \"./proxyModuleFactory\";\nimport { proxyTypes } from \"./proxyTypes\";\n\ndescribe(\"proxyModuleFactory\", () => {\n let container: Container;\n const mockConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.api.live.ledger.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const mockPkiCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n beforeEach(() => {\n container = new Container();\n container.bind(configTypes.Config).toConstantValue(mockConfig);\n container\n .bind(pkiTypes.PkiCertificateLoader)\n .toConstantValue(mockPkiCertificateLoader);\n });\n\n describe(\"when datasource config is undefined\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const module = proxyModuleFactory();\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n\n it(\"should bind ProxyContextFieldLoader\", () => {\n const module = proxyModuleFactory();\n container.load(module);\n\n const proxyContextFieldLoader = container.get(\n proxyTypes.ProxyContextFieldLoader,\n );\n expect(proxyContextFieldLoader).toBeInstanceOf(ProxyContextFieldLoader);\n });\n });\n\n describe(\"when datasource.proxy is 'safe'\", () => {\n it(\"should bind HttpSafeProxyDataSource as the ProxyDataSource\", () => {\n const module = proxyModuleFactory({ proxy: \"safe\" });\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpSafeProxyDataSource);\n });\n\n it(\"should bind ProxyContextFieldLoader\", () => {\n const module = proxyModuleFactory({ proxy: \"safe\" });\n container.load(module);\n\n const proxyContextFieldLoader = container.get(\n proxyTypes.ProxyContextFieldLoader,\n );\n expect(proxyContextFieldLoader).toBeInstanceOf(ProxyContextFieldLoader);\n });\n });\n\n describe(\"when datasource.proxy is 'default'\", () => {\n it(\"should bind HttpProxyDataSource as the ProxyDataSource\", () => {\n const module = proxyModuleFactory({ proxy: \"default\" });\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"when datasource has no proxy set\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const module = proxyModuleFactory({});\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n\n describe(\"when datasource.proxy is an unexpected value\", () => {\n it(\"should bind HttpProxyDataSource as the default ProxyDataSource\", () => {\n const module = proxyModuleFactory({\n proxy: \"unknown\" as unknown as \"safe\" | \"default\",\n });\n container.load(module);\n\n const proxyDataSource = container.get(proxyTypes.ProxyDataSource);\n expect(proxyDataSource).toBeInstanceOf(HttpProxyDataSource);\n });\n });\n});\n"],
5
+ "mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,uBAAAC,MAA2B,mCACpC,OAAS,2BAAAC,MAA+B,uCACxC,OAAS,2BAAAC,MAA+B,yCAExC,OAAS,sBAAAC,MAA0B,uBACnC,OAAS,cAAAC,MAAkB,eAE3B,SAAS,qBAAsB,IAAM,CACnC,IAAIC,EACJ,MAAMC,EAAyC,CAC7C,sBAAuB,CACrB,IAAK,sCACP,EACA,YAAa,mBACf,EAEMC,EAAiD,CACrD,gBAAiB,GAAG,GAAG,CACzB,EAEA,WAAW,IAAM,CACfF,EAAY,IAAIR,EAChBQ,EAAU,KAAKP,EAAY,MAAM,EAAE,gBAAgBQ,CAAU,EAC7DD,EACG,KAAKN,EAAS,oBAAoB,EAClC,gBAAgBQ,CAAwB,CAC7C,CAAC,EAED,SAAS,sCAAuC,IAAM,CACpD,GAAG,iEAAkE,IAAM,CACzE,MAAMC,EAASL,EAAmB,EAClCE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,EAED,GAAG,sCAAuC,IAAM,CAC9C,MAAMQ,EAASL,EAAmB,EAClCE,EAAU,KAAKG,CAAM,EAErB,MAAME,EAA0BL,EAAU,IACxCD,EAAW,uBACb,EACA,OAAOM,CAAuB,EAAE,eAAeR,CAAuB,CACxE,CAAC,CACH,CAAC,EAED,SAAS,kCAAmC,IAAM,CAChD,GAAG,6DAA8D,IAAM,CACrE,MAAMM,EAASL,EAAmB,CAAE,MAAO,MAAO,CAAC,EACnDE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeR,CAAuB,CAChE,CAAC,EAED,GAAG,sCAAuC,IAAM,CAC9C,MAAMO,EAASL,EAAmB,CAAE,MAAO,MAAO,CAAC,EACnDE,EAAU,KAAKG,CAAM,EAErB,MAAME,EAA0BL,EAAU,IACxCD,EAAW,uBACb,EACA,OAAOM,CAAuB,EAAE,eAAeR,CAAuB,CACxE,CAAC,CACH,CAAC,EAED,SAAS,qCAAsC,IAAM,CACnD,GAAG,yDAA0D,IAAM,CACjE,MAAMM,EAASL,EAAmB,CAAE,MAAO,SAAU,CAAC,EACtDE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,mCAAoC,IAAM,CACjD,GAAG,iEAAkE,IAAM,CACzE,MAAMQ,EAASL,EAAmB,CAAC,CAAC,EACpCE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,CACH,CAAC,EAED,SAAS,+CAAgD,IAAM,CAC7D,GAAG,iEAAkE,IAAM,CACzE,MAAMQ,EAASL,EAAmB,CAChC,MAAO,SACT,CAAC,EACDE,EAAU,KAAKG,CAAM,EAErB,MAAMC,EAAkBJ,EAAU,IAAID,EAAW,eAAe,EAChE,OAAOK,CAAe,EAAE,eAAeT,CAAmB,CAC5D,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["Container", "configTypes", "pkiTypes", "HttpProxyDataSource", "HttpSafeProxyDataSource", "ProxyContextFieldLoader", "proxyModuleFactory", "proxyTypes", "container", "mockConfig", "mockPkiCertificateLoader", "module", "proxyDataSource", "proxyContextFieldLoader"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var f=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var s=(t,r,e,i)=>{for(var o=i>1?void 0:i?g(r,e):r,m=t.length-1,p;m>=0;m--)(p=t[m])&&(o=(i?p(r,e,o):p(o))||o);return i&&o&&f(r,e,o),o},a=(t,r)=>(e,i)=>r(e,i,t);import d from"axios";import{inject as E,injectable as l}from"inversify";import{Left as c,Right as u}from"purify-ts";import{configTypes as R}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as h,LEDGER_ORIGIN_TOKEN_HEADER as y}from"../../shared/constant/HttpHeaders";import C from"../../../package.json";let n=class{constructor(r){this.config=r}async report(r){try{await d.request({method:"POST",url:`${this.config.reporter.url}/v1/blind-signing-events`,data:r,headers:{[h]:`context-module/${C.version}`,[y]:this.config.originToken}})}catch{return c(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return u(void 0)}};n=s([l(),a(0,E(R.Config))],n);export{n as HttpBlindSigningReporterDatasource};
1
+ var f=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var s=(t,r,o,i)=>{for(var e=i>1?void 0:i?g(r,o):r,m=t.length-1,p;m>=0;m--)(p=t[m])&&(e=(i?p(r,o,e):p(e))||e);return i&&e&&f(r,o,e),e},a=(t,r)=>(o,i)=>r(o,i,t);import d from"axios";import{inject as E,injectable as c}from"inversify";import{Left as l,Right as u}from"purify-ts";import{configTypes as R}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as h,LEDGER_ORIGIN_TOKEN_HEADER as v}from"../../shared/constant/HttpHeaders";import y from"../../../package.json";let n=class{constructor(r){this.config=r}async report(r){try{await d.request({method:"POST",url:`${this.config.reporter.url}/v1/blind-signing-events`,data:r,headers:{[h]:`context-module/${y.version}`,[v]:this.config.originToken}})}catch{return l(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event"))}return u(void 0)}};n=s([c(),a(0,E(R.Config))],n);export{n as HttpBlindSigningReporterDatasource};
2
2
  //# sourceMappingURL=HttpBlindSigningReporterDatasource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/reporter/data/HttpBlindSigningReporterDatasource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport {\n type BlindSigningReporterDatasource,\n type BlindSigningReportParams,\n} from \"./BlindSigningReporterDatasource\";\n\n@injectable()\nexport class HttpBlindSigningReporterDatasource\n implements BlindSigningReporterDatasource\n{\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async report(params: BlindSigningReportParams): Promise<Either<Error, void>> {\n try {\n await axios.request({\n method: \"POST\",\n url: `${this.config.reporter!.url}/v1/blind-signing-events`,\n data: params,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n );\n }\n\n return Right(undefined);\n }\n}\n"],
5
- "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAQb,IAAMC,EAAN,KAEP,CACE,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,OAAOC,EAAgE,CAC3E,GAAI,CACF,MAAMC,EAAM,QAAQ,CAClB,OAAQ,OACR,IAAK,GAAG,KAAK,OAAO,SAAU,GAAG,2BACjC,KAAMD,EACN,QAAS,CACP,CAACE,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,CACH,MAAiB,CACf,OAAOC,EACL,IAAI,MACF,0FACF,CACF,CACF,CAEA,OAAOC,EAAM,MAAS,CACxB,CACF,EA5BaR,EAANS,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAJjBb",
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { type 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 PACKAGE from \"@root/package.json\";\n\nimport {\n type BlindSigningReporterDatasource,\n type BlindSigningReportParams,\n} from \"./BlindSigningReporterDatasource\";\n\n@injectable()\nexport class HttpBlindSigningReporterDatasource\n implements BlindSigningReporterDatasource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async report(params: BlindSigningReportParams): Promise<Either<Error, void>> {\n try {\n await axios.request({\n method: \"POST\",\n url: `${this.config.reporter.url}/v1/blind-signing-events`,\n data: params,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n );\n }\n\n return Right(undefined);\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAQb,IAAMC,EAAN,KAEP,CACE,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,OAAOC,EAAgE,CAC3E,GAAI,CACF,MAAMC,EAAM,QAAQ,CAClB,OAAQ,OACR,IAAK,GAAG,KAAK,OAAO,SAAS,GAAG,2BAChC,KAAMD,EACN,QAAS,CACP,CAACE,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,CACH,MAAiB,CACf,OAAOC,EACL,IAAI,MACF,0FACF,CACF,CACF,CAEA,OAAOC,EAAM,MAAS,CACxB,CACF,EA7BaR,EAANS,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAJjBb",
6
6
  "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpBlindSigningReporterDatasource", "config", "params", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Left", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import e from"axios";import{Left as a,Right as s}from"purify-ts";import{HttpBlindSigningReporterDatasource as r}from"../../reporter/data/HttpBlindSigningReporterDatasource";import{BlindSigningMethod as d,BlindSignReason as c,ClearSigningType as l}from"../../reporter/model/BlindSigningEvent";import{BlindSigningModelId as u}from"../../reporter/model/BlindSigningModelId";import{LEDGER_CLIENT_VERSION_HEADER as p,LEDGER_ORIGIN_TOKEN_HEADER as g}from"../../shared/constant/HttpHeaders";import m from"../../../package.json";vi.mock("axios");describe("HttpBlindSigningReporterDatasource",()=>{const t={reporter:{url:"https://reporter.test"},originToken:"originToken"},o={signatureId:"a3f8Kb-1738850400000",signingMethod:d.ETH_SIGN_TRANSACTION,source:"ledger_wallet",isBlindSign:!0,chainId:1,targetAddress:"0xdAC17F958D2ee523a2206206994597C13D831ec7",blindSignReason:c.NO_CLEAR_SIGNING_CONTEXT,modelId:u.NANO_X,signerAppVersion:"1.12.1",deviceVersion:"2.2.3",ethContext:{clearSigningType:l.EIP7730,partialContextErrors:0}};beforeEach(()=>{vi.resetAllMocks()}),describe("report",()=>{it("should return Right(undefined) on success",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}});const i=await new r(t).report(o);expect(i).toEqual(s(void 0))}),it("should return Left(Error) when the request fails",async()=>{vi.spyOn(e,"request").mockRejectedValueOnce(new Error("network error"));const i=await new r(t).report(o);expect(i).toEqual(a(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event")))}),it("should call axios with the correct URL and method",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}}),await new r(t).report(o),expect(e.request).toHaveBeenCalledWith(expect.objectContaining({method:"POST",url:`${t.reporter.url}/v1/blind-signing-events`}))}),it("should call axios with the correct headers",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}}),await new r(t).report(o),expect(e.request).toHaveBeenCalledWith(expect.objectContaining({headers:{[p]:`context-module/${m.version}`,[g]:t.originToken}}))}),it("should call axios with the event payload as data",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}}),await new r(t).report(o),expect(e.request).toHaveBeenCalledWith(expect.objectContaining({data:o}))})})});
1
+ import e from"axios";import{Left as a,Right as s}from"purify-ts";import{HttpBlindSigningReporterDatasource as r}from"../../reporter/data/HttpBlindSigningReporterDatasource";import{BlindSigningMethod as c,BlindSignReason as d,ClearSigningType as l}from"../../reporter/model/BlindSigningEvent";import{BlindSigningModelId as u}from"../../reporter/model/BlindSigningModelId";import{LEDGER_CLIENT_VERSION_HEADER as p,LEDGER_ORIGIN_TOKEN_HEADER as g}from"../../shared/constant/HttpHeaders";import m from"../../../package.json";vi.mock("axios");describe("HttpBlindSigningReporterDatasource",()=>{const t={reporter:{url:"https://reporter.test"},originToken:"originToken"},o={signatureId:"a3f8Kb-1738850400000",signingMethod:c.ETH_SIGN_TRANSACTION,source:"ledger_wallet",isBlindSign:!0,chainId:1,targetAddress:"0xdAC17F958D2ee523a2206206994597C13D831ec7",blindSignReason:d.NO_CLEAR_SIGNING_CONTEXT,modelId:u.NANO_X,signerAppVersion:"1.12.1",deviceVersion:"2.2.3",ethContext:{clearSigningType:l.EIP7730,partialContextErrors:0}};beforeEach(()=>{vi.resetAllMocks()}),describe("report",()=>{it("should return Right(undefined) on success",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}});const i=await new r(t).report(o);expect(i).toEqual(s(void 0))}),it("should return Left(Error) when the request fails",async()=>{vi.spyOn(e,"request").mockRejectedValueOnce(new Error("network error"));const i=await new r(t).report(o);expect(i).toEqual(a(new Error("[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event")))}),it("should call axios with the correct URL and method",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}}),await new r(t).report(o),expect(e.request).toHaveBeenCalledWith(expect.objectContaining({method:"POST",url:`${t.reporter.url}/v1/blind-signing-events`}))}),it("should call axios with the correct headers",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}}),await new r(t).report(o),expect(e.request).toHaveBeenCalledWith(expect.objectContaining({headers:{[p]:`context-module/${m.version}`,[g]:t.originToken}}))}),it("should call axios with the event payload as data",async()=>{vi.spyOn(e,"request").mockResolvedValueOnce({data:{}}),await new r(t).report(o),expect(e.request).toHaveBeenCalledWith(expect.objectContaining({data:o}))})})});
2
2
  //# sourceMappingURL=HttpBlindSigningReporterDatasource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/reporter/data/HttpBlindSigningReporterDatasource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type BlindSigningReportParams } from \"@/reporter/data/BlindSigningReporterDatasource\";\nimport { HttpBlindSigningReporterDatasource } from \"@/reporter/data/HttpBlindSigningReporterDatasource\";\nimport {\n BlindSigningMethod,\n BlindSignReason,\n ClearSigningType,\n} from \"@/reporter/model/BlindSigningEvent\";\nimport { BlindSigningModelId } from \"@/reporter/model/BlindSigningModelId\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpBlindSigningReporterDatasource\", () => {\n const config = {\n reporter: {\n url: \"https://reporter.test\",\n },\n originToken: \"originToken\",\n } as ContextModuleConfig;\n\n const params: BlindSigningReportParams = {\n signatureId: \"a3f8Kb-1738850400000\",\n signingMethod: BlindSigningMethod.ETH_SIGN_TRANSACTION,\n source: \"ledger_wallet\",\n isBlindSign: true,\n chainId: 1,\n targetAddress: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n blindSignReason: BlindSignReason.NO_CLEAR_SIGNING_CONTEXT,\n modelId: BlindSigningModelId.NANO_X,\n signerAppVersion: \"1.12.1\",\n deviceVersion: \"2.2.3\",\n ethContext: {\n clearSigningType: ClearSigningType.EIP7730,\n partialContextErrors: 0,\n },\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"report\", () => {\n it(\"should return Right(undefined) on success\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n const result = await dataSource.report(params);\n\n // THEN\n expect(result).toEqual(Right(undefined));\n });\n\n it(\"should return Left(Error) when the request fails\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValueOnce(\n new Error(\"network error\"),\n );\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n const result = await dataSource.report(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n ),\n );\n });\n\n it(\"should call axios with the correct URL and method\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n await dataSource.report(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n method: \"POST\",\n url: `${config.reporter!.url}/v1/blind-signing-events`,\n }),\n );\n });\n\n it(\"should call axios with the correct headers\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n await dataSource.report(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n }),\n );\n });\n\n it(\"should call axios with the event payload as data\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n await dataSource.report(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n data: params,\n }),\n );\n });\n });\n});\n"],
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type BlindSigningReportParams } from \"@/reporter/data/BlindSigningReporterDatasource\";\nimport { HttpBlindSigningReporterDatasource } from \"@/reporter/data/HttpBlindSigningReporterDatasource\";\nimport {\n BlindSigningMethod,\n BlindSignReason,\n ClearSigningType,\n} from \"@/reporter/model/BlindSigningEvent\";\nimport { BlindSigningModelId } from \"@/reporter/model/BlindSigningModelId\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpBlindSigningReporterDatasource\", () => {\n const config = {\n reporter: {\n url: \"https://reporter.test\",\n },\n originToken: \"originToken\",\n } as ContextModuleServiceConfig;\n\n const params: BlindSigningReportParams = {\n signatureId: \"a3f8Kb-1738850400000\",\n signingMethod: BlindSigningMethod.ETH_SIGN_TRANSACTION,\n source: \"ledger_wallet\",\n isBlindSign: true,\n chainId: 1,\n targetAddress: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n blindSignReason: BlindSignReason.NO_CLEAR_SIGNING_CONTEXT,\n modelId: BlindSigningModelId.NANO_X,\n signerAppVersion: \"1.12.1\",\n deviceVersion: \"2.2.3\",\n ethContext: {\n clearSigningType: ClearSigningType.EIP7730,\n partialContextErrors: 0,\n },\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"report\", () => {\n it(\"should return Right(undefined) on success\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n const result = await dataSource.report(params);\n\n // THEN\n expect(result).toEqual(Right(undefined));\n });\n\n it(\"should return Left(Error) when the request fails\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValueOnce(\n new Error(\"network error\"),\n );\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n const result = await dataSource.report(params);\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpBlindSigningReporterDatasource: Failed to report blind signing event\",\n ),\n ),\n );\n });\n\n it(\"should call axios with the correct URL and method\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n await dataSource.report(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n method: \"POST\",\n url: `${config.reporter!.url}/v1/blind-signing-events`,\n }),\n );\n });\n\n it(\"should call axios with the correct headers\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n await dataSource.report(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: config.originToken,\n },\n }),\n );\n });\n\n it(\"should call axios with the event payload as data\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValueOnce({ data: {} });\n\n // WHEN\n const dataSource = new HttpBlindSigningReporterDatasource(config);\n await dataSource.report(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n data: params,\n }),\n );\n });\n });\n});\n"],
5
5
  "mappings": "AAAA,OAAOA,MAAW,QAClB,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAI5B,OAAS,sCAAAC,MAA0C,qDACnD,OACE,sBAAAC,EACA,mBAAAC,EACA,oBAAAC,MACK,qCACP,OAAS,uBAAAC,MAA2B,uCACpC,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAEpB,GAAG,KAAK,OAAO,EAEf,SAAS,qCAAsC,IAAM,CACnD,MAAMC,EAAS,CACb,SAAU,CACR,IAAK,uBACP,EACA,YAAa,aACf,EAEMC,EAAmC,CACvC,YAAa,uBACb,cAAeR,EAAmB,qBAClC,OAAQ,gBACR,YAAa,GACb,QAAS,EACT,cAAe,6CACf,gBAAiBC,EAAgB,yBACjC,QAASE,EAAoB,OAC7B,iBAAkB,SAClB,cAAe,QACf,WAAY,CACV,iBAAkBD,EAAiB,QACnC,qBAAsB,CACxB,CACF,EAEA,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,SAAU,IAAM,CACvB,GAAG,4CAA6C,SAAY,CAE1D,GAAG,MAAMN,EAAO,SAAS,EAAE,sBAAsB,CAAE,KAAM,CAAC,CAAE,CAAC,EAI7D,MAAMa,EAAS,MADI,IAAIV,EAAmCQ,CAAM,EAChC,OAAOC,CAAM,EAG7C,OAAOC,CAAM,EAAE,QAAQX,EAAM,MAAS,CAAC,CACzC,CAAC,EAED,GAAG,mDAAoD,SAAY,CAEjE,GAAG,MAAMF,EAAO,SAAS,EAAE,sBACzB,IAAI,MAAM,eAAe,CAC3B,EAIA,MAAMa,EAAS,MADI,IAAIV,EAAmCQ,CAAM,EAChC,OAAOC,CAAM,EAG7C,OAAOC,CAAM,EAAE,QACbZ,EACE,IAAI,MACF,0FACF,CACF,CACF,CACF,CAAC,EAED,GAAG,oDAAqD,SAAY,CAElE,GAAG,MAAMD,EAAO,SAAS,EAAE,sBAAsB,CAAE,KAAM,CAAC,CAAE,CAAC,EAI7D,MADmB,IAAIG,EAAmCQ,CAAM,EAC/C,OAAOC,CAAM,EAG9B,OAAOZ,EAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,OAAQ,OACR,IAAK,GAAGW,EAAO,SAAU,GAAG,0BAC9B,CAAC,CACH,CACF,CAAC,EAED,GAAG,6CAA8C,SAAY,CAE3D,GAAG,MAAMX,EAAO,SAAS,EAAE,sBAAsB,CAAE,KAAM,CAAC,CAAE,CAAC,EAI7D,MADmB,IAAIG,EAAmCQ,CAAM,EAC/C,OAAOC,CAAM,EAG9B,OAAOZ,EAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,QAAS,CACP,CAACQ,CAA4B,EAAG,kBAAkBE,EAAQ,OAAO,GACjE,CAACD,CAA0B,EAAGE,EAAO,WACvC,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,mDAAoD,SAAY,CAEjE,GAAG,MAAMX,EAAO,SAAS,EAAE,sBAAsB,CAAE,KAAM,CAAC,CAAE,CAAC,EAI7D,MADmB,IAAIG,EAAmCQ,CAAM,EAC/C,OAAOC,CAAM,EAG9B,OAAOZ,EAAM,OAAO,EAAE,qBACpB,OAAO,iBAAiB,CACtB,KAAMY,CACR,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["axios", "Left", "Right", "HttpBlindSigningReporterDatasource", "BlindSigningMethod", "BlindSignReason", "ClearSigningType", "BlindSigningModelId", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "config", "params", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var D=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=(s,e,o,r)=>{for(var t=r>1?void 0:r?d(e,o):e,c=s.length-1,n;c>=0;c--)(n=s[c])&&(t=(r?n(e,o,t):n(t))||t);return r&&t&&D(e,o,t),t},f=(s,e)=>(o,r)=>e(o,r,s);import u from"axios";import{inject as g}from"inversify";import{Left as a,Right as m}from"purify-ts";import{configTypes as y}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as S,LEDGER_ORIGIN_TOKEN_HEADER as E}from"../../shared/constant/HttpHeaders";import k from"../../../package.json";let i=class{constructor(e){this.config=e}async getDescriptors({safeContractAddress:e,chainId:o,challenge:r}){try{const t=await u.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/ethereum/${o}/safe/account/${e}`,params:{challenge:r},headers:{[S]:`context-module/${k.version}`,[E]:this.config.originToken}});return t.data?this.isSafeAccountDto(t.data)?m({account:{signedDescriptor:t.data.accountDescriptor.signedDescriptor,keyId:t.data.accountDescriptor.keyId,keyUsage:t.data.accountDescriptor.keyUsage},signers:{signedDescriptor:t.data.signersDescriptor.signedDescriptor,keyId:t.data.signersDescriptor.keyId,keyUsage:t.data.signersDescriptor.keyUsage}}):a(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")):a(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response"))}catch{return a(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors"))}}isSafeAccountDto(e){return typeof e=="object"&&e!==null&&"accountDescriptor"in e&&"signersDescriptor"in e&&typeof e.accountDescriptor=="object"&&typeof e.signersDescriptor=="object"&&this.isSafeDescriptorDto(e.accountDescriptor)&&this.isSafeDescriptorDto(e.signersDescriptor)}isSafeDescriptorDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.signedDescriptor=="string"&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"}};i=p([f(0,g(y.Config))],i);export{i as HttpSafeAccountDataSource};
1
+ var D=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=(i,e,o,r)=>{for(var t=r>1?void 0:r?d(e,o):e,c=i.length-1,n;c>=0;c--)(n=i[c])&&(t=(r?n(e,o,t):n(t))||t);return r&&t&&D(e,o,t),t},f=(i,e)=>(o,r)=>e(o,r,i);import u from"axios";import{inject as g}from"inversify";import{Left as a,Right as m}from"purify-ts";import{configTypes as y}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as S,LEDGER_ORIGIN_TOKEN_HEADER as E}from"../../shared/constant/HttpHeaders";import k from"../../../package.json";let s=class{constructor(e){this.config=e}async getDescriptors({safeContractAddress:e,chainId:o,challenge:r}){try{const t=await u.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/ethereum/${o}/safe/account/${e}`,params:{challenge:r},headers:{[S]:`context-module/${k.version}`,[E]:this.config.originToken}});return t.data?this.isSafeAccountDto(t.data)?m({account:{signedDescriptor:t.data.accountDescriptor.signedDescriptor,keyId:t.data.accountDescriptor.keyId,keyUsage:t.data.accountDescriptor.keyUsage},signers:{signedDescriptor:t.data.signersDescriptor.signedDescriptor,keyId:t.data.signersDescriptor.keyId,keyUsage:t.data.signersDescriptor.keyUsage}}):a(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")):a(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response"))}catch{return a(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors"))}}isSafeAccountDto(e){return typeof e=="object"&&e!==null&&"accountDescriptor"in e&&"signersDescriptor"in e&&typeof e.accountDescriptor=="object"&&typeof e.signersDescriptor=="object"&&this.isSafeDescriptorDto(e.accountDescriptor)&&this.isSafeDescriptorDto(e.signersDescriptor)}isSafeDescriptorDto(e){return typeof e=="object"&&e!==null&&"signedDescriptor"in e&&"keyId"in e&&"keyUsage"in e&&typeof e.signedDescriptor=="string"&&typeof e.keyId=="string"&&typeof e.keyUsage=="string"}};s=p([f(0,g(y.Config))],s);export{s as HttpSafeAccountDataSource};
2
2
  //# sourceMappingURL=HttpSafeAccountDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/safe/data/HttpSafeAccountDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { SafeAccountDto, SafeDescriptorDto } from \"./dto/SafeAccountDto\";\nimport {\n type GetSafeAccountParams,\n type GetSafeAccountResponse,\n type SafeAccountDataSource,\n} from \"./SafeAccountDataSource\";\n\nexport class HttpSafeAccountDataSource implements SafeAccountDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async getDescriptors({\n safeContractAddress,\n chainId,\n challenge,\n }: GetSafeAccountParams): Promise<Either<Error, GetSafeAccountResponse>> {\n try {\n const response = await axios.request<SafeAccountDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/ethereum/${chainId}/safe/account/${safeContractAddress}`,\n params: {\n challenge,\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 (!response.data) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isSafeAccountDto(response.data)) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n );\n }\n\n return Right({\n account: {\n signedDescriptor: response.data.accountDescriptor.signedDescriptor,\n keyId: response.data.accountDescriptor.keyId,\n keyUsage: response.data.accountDescriptor.keyUsage,\n },\n signers: {\n signedDescriptor: response.data.signersDescriptor.signedDescriptor,\n keyId: response.data.signersDescriptor.keyId,\n keyUsage: response.data.signersDescriptor.keyUsage,\n },\n });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n );\n }\n }\n\n private isSafeAccountDto(value: unknown): value is SafeAccountDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"accountDescriptor\" in value &&\n \"signersDescriptor\" in value &&\n typeof value.accountDescriptor === \"object\" &&\n typeof value.signersDescriptor === \"object\" &&\n this.isSafeDescriptorDto(value.accountDescriptor) &&\n this.isSafeDescriptorDto(value.signersDescriptor)\n );\n }\n\n private isSafeDescriptorDto(value: unknown): value is SafeDescriptorDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\n );\n }\n}\n"],
5
- "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,MAAc,YACvB,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBASb,IAAMC,EAAN,KAAiE,CACtE,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,eAAe,CACnB,oBAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAyE,CACvE,GAAI,CACF,MAAMC,EAAW,MAAMC,EAAM,QAAwB,CACnD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBH,CAAO,iBAAiBD,CAAmB,GACxG,OAAQ,CACN,UAAAE,CACF,EACA,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKJ,EAAS,KAQT,KAAK,iBAAiBA,EAAS,IAAI,EAQjCK,EAAM,CACX,QAAS,CACP,iBAAkBL,EAAS,KAAK,kBAAkB,iBAClD,MAAOA,EAAS,KAAK,kBAAkB,MACvC,SAAUA,EAAS,KAAK,kBAAkB,QAC5C,EACA,QAAS,CACP,iBAAkBA,EAAS,KAAK,kBAAkB,iBAClD,MAAOA,EAAS,KAAK,kBAAkB,MACvC,SAAUA,EAAS,KAAK,kBAAkB,QAC5C,CACF,CAAC,EAlBQM,EACL,IAAI,MACF,iFACF,CACF,EAZOA,EACL,IAAI,MACF,sEACF,CACF,CAuBJ,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,qFACF,CACF,CACF,CACF,CAEQ,iBAAiBC,EAAyC,CAChE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,sBAAuBA,GACvB,sBAAuBA,GACvB,OAAOA,EAAM,mBAAsB,UACnC,OAAOA,EAAM,mBAAsB,UACnC,KAAK,oBAAoBA,EAAM,iBAAiB,GAChD,KAAK,oBAAoBA,EAAM,iBAAiB,CAEpD,CAEQ,oBAAoBA,EAA4C,CACtE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,qBAAsBA,GACtB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EArFaZ,EAANa,EAAA,CAEFC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBhB",
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { inject } from \"inversify\";\nimport { type 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 PACKAGE from \"@root/package.json\";\n\nimport { SafeAccountDto, SafeDescriptorDto } from \"./dto/SafeAccountDto\";\nimport {\n type GetSafeAccountParams,\n type GetSafeAccountResponse,\n type SafeAccountDataSource,\n} from \"./SafeAccountDataSource\";\n\nexport class HttpSafeAccountDataSource implements SafeAccountDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDescriptors({\n safeContractAddress,\n chainId,\n challenge,\n }: GetSafeAccountParams): Promise<Either<Error, GetSafeAccountResponse>> {\n try {\n const response = await axios.request<SafeAccountDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/ethereum/${chainId}/safe/account/${safeContractAddress}`,\n params: {\n challenge,\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 (!response.data) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isSafeAccountDto(response.data)) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n );\n }\n\n return Right({\n account: {\n signedDescriptor: response.data.accountDescriptor.signedDescriptor,\n keyId: response.data.accountDescriptor.keyId,\n keyUsage: response.data.accountDescriptor.keyUsage,\n },\n signers: {\n signedDescriptor: response.data.signersDescriptor.signedDescriptor,\n keyId: response.data.signersDescriptor.keyId,\n keyUsage: response.data.signersDescriptor.keyUsage,\n },\n });\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n );\n }\n }\n\n private isSafeAccountDto(value: unknown): value is SafeAccountDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"accountDescriptor\" in value &&\n \"signersDescriptor\" in value &&\n typeof value.accountDescriptor === \"object\" &&\n typeof value.signersDescriptor === \"object\" &&\n this.isSafeDescriptorDto(value.accountDescriptor) &&\n this.isSafeDescriptorDto(value.signersDescriptor)\n );\n }\n\n private isSafeDescriptorDto(value: unknown): value is SafeDescriptorDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"signedDescriptor\" in value &&\n \"keyId\" in value &&\n \"keyUsage\" in value &&\n typeof value.signedDescriptor === \"string\" &&\n typeof value.keyId === \"string\" &&\n typeof value.keyUsage === \"string\"\n );\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,MAAc,YACvB,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAEzC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBASb,IAAMC,EAAN,KAAiE,CACtE,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,eAAe,CACnB,oBAAAC,EACA,QAAAC,EACA,UAAAC,CACF,EAAyE,CACvE,GAAI,CACF,MAAMC,EAAW,MAAMC,EAAM,QAAwB,CACnD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBH,CAAO,iBAAiBD,CAAmB,GACxG,OAAQ,CACN,UAAAE,CACF,EACA,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKJ,EAAS,KAQT,KAAK,iBAAiBA,EAAS,IAAI,EAQjCK,EAAM,CACX,QAAS,CACP,iBAAkBL,EAAS,KAAK,kBAAkB,iBAClD,MAAOA,EAAS,KAAK,kBAAkB,MACvC,SAAUA,EAAS,KAAK,kBAAkB,QAC5C,EACA,QAAS,CACP,iBAAkBA,EAAS,KAAK,kBAAkB,iBAClD,MAAOA,EAAS,KAAK,kBAAkB,MACvC,SAAUA,EAAS,KAAK,kBAAkB,QAC5C,CACF,CAAC,EAlBQM,EACL,IAAI,MACF,iFACF,CACF,EAZOA,EACL,IAAI,MACF,sEACF,CACF,CAuBJ,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,qFACF,CACF,CACF,CACF,CAEQ,iBAAiBC,EAAyC,CAChE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,sBAAuBA,GACvB,sBAAuBA,GACvB,OAAOA,EAAM,mBAAsB,UACnC,OAAOA,EAAM,mBAAsB,UACnC,KAAK,oBAAoBA,EAAM,iBAAiB,GAChD,KAAK,oBAAoBA,EAAM,iBAAiB,CAEpD,CAEQ,oBAAoBA,EAA4C,CACtE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,qBAAsBA,GACtB,UAAWA,GACX,aAAcA,GACd,OAAOA,EAAM,kBAAqB,UAClC,OAAOA,EAAM,OAAU,UACvB,OAAOA,EAAM,UAAa,QAE9B,CACF,EAtFaZ,EAANa,EAAA,CAEFC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBhB",
6
6
  "names": ["axios", "inject", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpSafeAccountDataSource", "config", "safeContractAddress", "chainId", "challenge", "response", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Right", "Left", "value", "__decorateClass", "__decorateParam", "inject", "configTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import s from"axios";import{Left as n,Right as i}from"purify-ts";import{HttpSafeAccountDataSource as a}from"../../safe/data/HttpSafeAccountDataSource";import{LEDGER_CLIENT_VERSION_HEADER as l,LEDGER_ORIGIN_TOKEN_HEADER as d}from"../../shared/constant/HttpHeaders";import p from"../../../package.json";vi.mock("axios");describe("HttpSafeAccountDataSource",()=>{const o={metadataServiceDomain:{url:"https://metadata.ledger.com"},originToken:"test-origin-token"},c={accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:{signedDescriptor:"signers-signed-descriptor-data",keyId:"signers-key-id",keyUsage:"signers-key-usage"}},r="0x1234567890123456789012345678901234567890";beforeEach(()=>{vi.clearAllMocks()}),describe("getDescriptors",()=>{it("should return safe account descriptors on successful request",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c});const t=await new a(o).getDescriptors(e);expect(s.request).toHaveBeenCalledWith({method:"GET",url:"https://metadata.ledger.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890",params:{challenge:"0xabcdef"},headers:{[l]:`context-module/${p.version}`,[d]:"test-origin-token"}}),expect(t).toEqual(i({account:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id",keyUsage:"account-key-usage"},signers:{signedDescriptor:"signers-signed-descriptor-data",keyId:"signers-key-id",keyUsage:"signers-key-usage"}}))}),it("should work with different chain IDs",async()=>{const e={safeContractAddress:r,chainId:137,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(o).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://metadata.ledger.com/v2/ethereum/137/safe/account/0x1234567890123456789012345678901234567890"}))}),it("should work with different safe addresses",async()=>{const e={safeContractAddress:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(o).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://metadata.ledger.com/v2/ethereum/1/safe/account/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"}))}),it("should work with different challenges",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0x123456789"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(o).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0x123456789"}}))}),it("should return error when response data is empty",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:null});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response")))}),it("should return error when response data is undefined",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:void 0});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response")))}),it("should return error when accountDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:c.accountDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.signedDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.keyId is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyUsage:"account-key-usage"},signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.keyUsage is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id"},signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor fields are invalid",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:c.accountDescriptor,signersDescriptor:{signedDescriptor:"signers-signed-descriptor-data",keyId:123,keyUsage:"signers-key-usage"}}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor is not an object",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:"invalid-string",signersDescriptor:c.signersDescriptor}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor is not an object",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:c.accountDescriptor,signersDescriptor:null}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when axios request fails",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockRejectedValue(new Error("Network error"));const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors")))}),it("should return error when axios throws an exception",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockRejectedValue(new Error("timeout"));const t=await new a(o).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors")))}),it("should handle empty string values in descriptors",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"",keyId:"",keyUsage:""},signersDescriptor:{signedDescriptor:"",keyId:"",keyUsage:""}}});const t=await new a(o).getDescriptors(e);expect(t).toEqual(i({account:{signedDescriptor:"",keyId:"",keyUsage:""},signers:{signedDescriptor:"",keyId:"",keyUsage:""}}))}),it("should correctly parse response with long descriptor values",async()=>{const e="a".repeat(1e3),t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:e,keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:{signedDescriptor:e,keyId:"signers-key-id",keyUsage:"signers-key-usage"}}});const u=await new a(o).getDescriptors(t);expect(u).toEqual(i({account:{signedDescriptor:e,keyId:"account-key-id",keyUsage:"account-key-usage"},signers:{signedDescriptor:e,keyId:"signers-key-id",keyUsage:"signers-key-usage"}}))}),it("should use correct origin token from config",async()=>{const e={metadataServiceDomain:{url:"https://metadata.ledger.com"},originToken:"custom-origin-token"},t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(e).getDescriptors(t),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({headers:expect.objectContaining({[d]:"custom-origin-token"})}))}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"test-token"},t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:c}),await new a(e).getDescriptors(t),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890"}))})})});
1
+ import s from"axios";import{Left as n,Right as i}from"purify-ts";import{HttpSafeAccountDataSource as a}from"../../safe/data/HttpSafeAccountDataSource";import{LEDGER_CLIENT_VERSION_HEADER as l,LEDGER_ORIGIN_TOKEN_HEADER as d}from"../../shared/constant/HttpHeaders";import p from"../../../package.json";vi.mock("axios");describe("HttpSafeAccountDataSource",()=>{const c={metadataServiceDomain:{url:"https://metadata.ledger.com"},originToken:"test-origin-token"},o={accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:{signedDescriptor:"signers-signed-descriptor-data",keyId:"signers-key-id",keyUsage:"signers-key-usage"}},r="0x1234567890123456789012345678901234567890";beforeEach(()=>{vi.clearAllMocks()}),describe("getDescriptors",()=>{it("should return safe account descriptors on successful request",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:o});const t=await new a(c).getDescriptors(e);expect(s.request).toHaveBeenCalledWith({method:"GET",url:"https://metadata.ledger.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890",params:{challenge:"0xabcdef"},headers:{[l]:`context-module/${p.version}`,[d]:"test-origin-token"}}),expect(t).toEqual(i({account:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id",keyUsage:"account-key-usage"},signers:{signedDescriptor:"signers-signed-descriptor-data",keyId:"signers-key-id",keyUsage:"signers-key-usage"}}))}),it("should work with different chain IDs",async()=>{const e={safeContractAddress:r,chainId:137,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:o}),await new a(c).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://metadata.ledger.com/v2/ethereum/137/safe/account/0x1234567890123456789012345678901234567890"}))}),it("should work with different safe addresses",async()=>{const e={safeContractAddress:"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:o}),await new a(c).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://metadata.ledger.com/v2/ethereum/1/safe/account/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd"}))}),it("should work with different challenges",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0x123456789"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:o}),await new a(c).getDescriptors(e),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0x123456789"}}))}),it("should return error when response data is empty",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:null});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response")))}),it("should return error when response data is undefined",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:void 0});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: unexpected empty response")))}),it("should return error when accountDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{signersDescriptor:o.signersDescriptor}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:o.accountDescriptor}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.signedDescriptor is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:o.signersDescriptor}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.keyId is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyUsage:"account-key-usage"},signersDescriptor:o.signersDescriptor}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor.keyUsage is missing",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"account-signed-descriptor-data",keyId:"account-key-id"},signersDescriptor:o.signersDescriptor}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor fields are invalid",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:o.accountDescriptor,signersDescriptor:{signedDescriptor:"signers-signed-descriptor-data",keyId:123,keyUsage:"signers-key-usage"}}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when accountDescriptor is not an object",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:"invalid-string",signersDescriptor:o.signersDescriptor}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when signersDescriptor is not an object",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:o.accountDescriptor,signersDescriptor:null}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: invalid safe account response format")))}),it("should return error when axios request fails",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockRejectedValue(new Error("Network error"));const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors")))}),it("should return error when axios throws an exception",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockRejectedValue(new Error("timeout"));const t=await new a(c).getDescriptors(e);expect(t).toEqual(n(new Error("[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors")))}),it("should handle empty string values in descriptors",async()=>{const e={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:"",keyId:"",keyUsage:""},signersDescriptor:{signedDescriptor:"",keyId:"",keyUsage:""}}});const t=await new a(c).getDescriptors(e);expect(t).toEqual(i({account:{signedDescriptor:"",keyId:"",keyUsage:""},signers:{signedDescriptor:"",keyId:"",keyUsage:""}}))}),it("should correctly parse response with long descriptor values",async()=>{const e="a".repeat(1e3),t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:{accountDescriptor:{signedDescriptor:e,keyId:"account-key-id",keyUsage:"account-key-usage"},signersDescriptor:{signedDescriptor:e,keyId:"signers-key-id",keyUsage:"signers-key-usage"}}});const u=await new a(c).getDescriptors(t);expect(u).toEqual(i({account:{signedDescriptor:e,keyId:"account-key-id",keyUsage:"account-key-usage"},signers:{signedDescriptor:e,keyId:"signers-key-id",keyUsage:"signers-key-usage"}}))}),it("should use correct origin token from config",async()=>{const e={metadataServiceDomain:{url:"https://metadata.ledger.com"},originToken:"custom-origin-token"},t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:o}),await new a(e).getDescriptors(t),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({headers:expect.objectContaining({[d]:"custom-origin-token"})}))}),it("should use correct metadata service URL from config",async()=>{const e={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"test-token"},t={safeContractAddress:r,chainId:1,challenge:"0xabcdef"};vi.spyOn(s,"request").mockResolvedValue({status:200,data:o}),await new a(e).getDescriptors(t),expect(s.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890"}))})})});
2
2
  //# sourceMappingURL=HttpSafeAccountDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/safe/data/HttpSafeAccountDataSource.test.ts"],
4
- "sourcesContent": ["import { type HexaString } from \"@ledgerhq/device-management-kit\";\nimport axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpSafeAccountDataSource } from \"@/safe/data/HttpSafeAccountDataSource\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpSafeAccountDataSource\", () => {\n const config: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleConfig;\n\n const validSafeAccountDto = {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n };\n\n const validsafeContractAddress: HexaString =\n \"0x1234567890123456789012345678901234567890\";\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getDescriptors\", () => {\n it(\"should return safe account descriptors on successful request\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n params: {\n challenge: \"0xabcdef\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should work with different chain IDs\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 137, // Polygon\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/137/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n\n it(\"should work with different safe addresses\", async () => {\n // GIVEN\n const params = {\n safeContractAddress:\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as HexaString,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\",\n }),\n );\n });\n\n it(\"should work with different challenges\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0x123456789\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0x123456789\",\n },\n }),\n );\n });\n\n it(\"should return error when response data is empty\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when response data is undefined\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: undefined,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.signedDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyId is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyUsage is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor fields are invalid\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: 123, // wrong type\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: \"invalid-string\",\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: null,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios request fails\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios throws an exception\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"timeout\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should handle empty string values in descriptors\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signersDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signers: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n }),\n );\n });\n\n it(\"should correctly parse response with long descriptor values\", async () => {\n // GIVEN\n const longValue = \"a\".repeat(1000);\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should use correct origin token from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"custom-origin-token\",\n } as ContextModuleConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-origin-token\",\n }),\n }),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"test-token\",\n } as ContextModuleConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type HexaString } from \"@ledgerhq/device-management-kit\";\nimport axios from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpSafeAccountDataSource } from \"@/safe/data/HttpSafeAccountDataSource\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpSafeAccountDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const validSafeAccountDto = {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n };\n\n const validsafeContractAddress: HexaString =\n \"0x1234567890123456789012345678901234567890\";\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n describe(\"getDescriptors\", () => {\n it(\"should return safe account descriptors on successful request\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n params: {\n challenge: \"0xabcdef\",\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"test-origin-token\",\n },\n });\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should work with different chain IDs\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 137, // Polygon\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/137/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n\n it(\"should work with different safe addresses\", async () => {\n // GIVEN\n const params = {\n safeContractAddress:\n \"0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\" as HexaString,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://metadata.ledger.com/v2/ethereum/1/safe/account/0xabcdefabcdefabcdefabcdefabcdefabcdefabcd\",\n }),\n );\n });\n\n it(\"should work with different challenges\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0x123456789\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(config).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0x123456789\",\n },\n }),\n );\n });\n\n it(\"should return error when response data is empty\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when response data is undefined\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: undefined,\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: unexpected empty response\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.signedDescriptor is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyId is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor.keyUsage is missing\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"account-signed-descriptor-data\",\n keyId: \"account-key-id\",\n },\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor fields are invalid\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: {\n signedDescriptor: \"signers-signed-descriptor-data\",\n keyId: 123, // wrong type\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when accountDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: \"invalid-string\",\n signersDescriptor: validSafeAccountDto.signersDescriptor,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when signersDescriptor is not an object\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: validSafeAccountDto.accountDescriptor,\n signersDescriptor: null,\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: invalid safe account response format\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios request fails\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"Network error\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should return error when axios throws an exception\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"timeout\"));\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSafeAccountDataSource: Failed to fetch safe account descriptors\",\n ),\n ),\n );\n });\n\n it(\"should handle empty string values in descriptors\", async () => {\n // GIVEN\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signersDescriptor: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n signers: {\n signedDescriptor: \"\",\n keyId: \"\",\n keyUsage: \"\",\n },\n }),\n );\n });\n\n it(\"should correctly parse response with long descriptor values\", async () => {\n // GIVEN\n const longValue = \"a\".repeat(1000);\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: {\n accountDescriptor: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signersDescriptor: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n },\n });\n\n // WHEN\n const result = await new HttpSafeAccountDataSource(config).getDescriptors(\n params,\n );\n\n // THEN\n expect(result).toEqual(\n Right({\n account: {\n signedDescriptor: longValue,\n keyId: \"account-key-id\",\n keyUsage: \"account-key-usage\",\n },\n signers: {\n signedDescriptor: longValue,\n keyId: \"signers-key-id\",\n keyUsage: \"signers-key-usage\",\n },\n }),\n );\n });\n\n it(\"should use correct origin token from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://metadata.ledger.com\",\n },\n originToken: \"custom-origin-token\",\n } as ContextModuleServiceConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-origin-token\",\n }),\n }),\n );\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n // GIVEN\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"test-token\",\n } as ContextModuleServiceConfig;\n const params = {\n safeContractAddress: validsafeContractAddress,\n chainId: 1,\n challenge: \"0xabcdef\",\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validSafeAccountDto,\n });\n\n // WHEN\n await new HttpSafeAccountDataSource(customConfig).getDescriptors(params);\n\n // THEN\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/ethereum/1/safe/account/0x1234567890123456789012345678901234567890\",\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["axios", "Left", "Right", "HttpSafeAccountDataSource", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "config", "validSafeAccountDto", "validsafeContractAddress", "params", "result", "longValue", "customConfig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var w=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var f=(i,e,o,t)=>{for(var r=t>1?void 0:t?g(e,o):e,n=i.length-1,s;n>=0;n--)(s=i[n])&&(r=(t?s(e,o,r):s(r))||r);return t&&r&&w(e,o,r),r},u=(i,e)=>(o,t)=>e(o,t,i);import{hexaStringToBuffer as h}from"@ledgerhq/device-management-kit";import m from"axios";import{inject as E,injectable as I}from"inversify";import{Left as a,Right as l}from"purify-ts";import{configTypes as O}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as p,LEDGER_ORIGIN_TOKEN_HEADER as A}from"../../shared/constant/HttpHeaders";import S from"../../../package.json";let d=class{constructor(e){this.config=e;if(!this.config.originToken)throw new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: origin token is required")}isSolanaSPLOwnerInfo(e){return typeof e!="object"||e===null?!1:typeof e.tokenAccount=="string"&&typeof e.owner=="string"&&typeof e.contract=="string"&&typeof e.signedDescriptor=="string"}async fetchAddressMetadata(e,o){return await m.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/solana/owner/${e}?challenge=${o}`,headers:{[p]:`context-module/${S.version}`,[A]:this.config.originToken}}).then(t=>this.isSolanaSPLOwnerInfo(t.data)?l(t.data):a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: invalid fetchAddressMetadata response shape"))).catch(()=>a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: Failed to fetch address metadata")))}async computeAddressMetadata(e,o,t){return await m.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/solana/computed-token-account/${e}/${o}?challenge=${t}`,headers:{[p]:`context-module/${S.version}`,"X-Ledger-Client-Origin":this.config.originToken}}).then(r=>this.isSolanaSPLOwnerInfo(r.data)?l(r.data):a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: invalid computeAddressMetadata response shape"))).catch(()=>a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: Failed to compute address metadata")))}async getOwnerInfo(e){const{tokenAddress:o,challenge:t,createATA:r}=e;if(!t)return a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: challenge is required"));let n;if(o)n=await this.fetchAddressMetadata(o,t);else if(r?.address&&r?.mintAddress)n=await this.computeAddressMetadata(r.address,r.mintAddress,t);else return a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: either tokenAddress or valid createATA must be provided"));return n.chain(s=>{const c=h(s.signedDescriptor);return c?l({tlvDescriptor:c}):a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: invalid base64 tlvDescriptor received"))})}};d=f([I(),u(0,E(O.Config))],d);export{d as HttpSolanaOwnerInfoDataSource};
1
+ var w=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var f=(i,e,o,t)=>{for(var r=t>1?void 0:t?g(e,o):e,n=i.length-1,s;n>=0;n--)(s=i[n])&&(r=(t?s(e,o,r):s(r))||r);return t&&r&&w(e,o,r),r},u=(i,e)=>(o,t)=>e(o,t,i);import{hexaStringToBuffer as h}from"@ledgerhq/device-management-kit";import S from"axios";import{inject as E,injectable as I}from"inversify";import{Left as a,Right as c}from"purify-ts";import{configTypes as O}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as m,LEDGER_ORIGIN_TOKEN_HEADER as A}from"../../shared/constant/HttpHeaders";import p from"../../../package.json";let d=class{constructor(e){this.config=e;if(!this.config.originToken)throw new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: origin token is required")}isSolanaSPLOwnerInfo(e){return typeof e!="object"||e===null?!1:typeof e.tokenAccount=="string"&&typeof e.owner=="string"&&typeof e.contract=="string"&&typeof e.signedDescriptor=="string"}async fetchAddressMetadata(e,o){return await S.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/solana/owner/${e}?challenge=${o}`,headers:{[m]:`context-module/${p.version}`,[A]:this.config.originToken}}).then(t=>this.isSolanaSPLOwnerInfo(t.data)?c(t.data):a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: invalid fetchAddressMetadata response shape"))).catch(()=>a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: Failed to fetch address metadata")))}async computeAddressMetadata(e,o,t){return await S.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/solana/computed-token-account/${e}/${o}?challenge=${t}`,headers:{[m]:`context-module/${p.version}`,"X-Ledger-Client-Origin":this.config.originToken}}).then(r=>this.isSolanaSPLOwnerInfo(r.data)?c(r.data):a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: invalid computeAddressMetadata response shape"))).catch(()=>a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: Failed to compute address metadata")))}async getOwnerInfo(e){const{tokenAddress:o,challenge:t,createATA:r}=e;if(!t)return a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: challenge is required"));let n;if(o)n=await this.fetchAddressMetadata(o,t);else if(r?.address&&r?.mintAddress)n=await this.computeAddressMetadata(r.address,r.mintAddress,t);else return a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: either tokenAddress or valid createATA must be provided"));return n.chain(s=>{const l=h(s.signedDescriptor);return l?c({tlvDescriptor:l}):a(new Error("[ContextModule] - HttpSolanaOwnerInfoDataSource: invalid base64 tlvDescriptor received"))})}};d=f([I(),u(0,E(O.Config))],d);export{d as HttpSolanaOwnerInfoDataSource};
2
2
  //# sourceMappingURL=HttpSolanaOwnerInfoDataSource.js.map