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

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 (221) hide show
  1. package/lib/cjs/package.json +1 -2
  2. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
  3. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
  4. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
  5. package/lib/cjs/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
  6. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  7. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +3 -3
  8. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  9. package/lib/cjs/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +3 -3
  10. package/lib/cjs/src/calldata/di/calldataModuleFactory.js +1 -1
  11. package/lib/cjs/src/calldata/di/calldataModuleFactory.js.map +3 -3
  12. package/lib/cjs/src/di.js +1 -1
  13. package/lib/cjs/src/di.js.map +3 -3
  14. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  15. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  16. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  17. package/lib/cjs/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +3 -3
  18. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  19. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  20. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  21. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  22. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js +1 -1
  23. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +3 -3
  24. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  25. package/lib/cjs/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +3 -3
  26. package/lib/cjs/src/network/di/networkModuleFactory.js +2 -0
  27. package/lib/cjs/src/network/di/networkModuleFactory.js.map +7 -0
  28. package/lib/cjs/src/network/di/networkTypes.js +2 -0
  29. package/lib/cjs/src/network/di/networkTypes.js.map +7 -0
  30. package/lib/cjs/src/nft/data/HttpNftDataSource.js +1 -1
  31. package/lib/cjs/src/nft/data/HttpNftDataSource.js.map +3 -3
  32. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js +1 -1
  33. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  34. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  35. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  36. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js +1 -1
  37. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.test.js.map +3 -3
  38. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +1 -1
  39. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  40. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  41. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  42. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
  43. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +3 -3
  44. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js +1 -1
  45. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +3 -3
  46. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +1 -1
  47. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +3 -3
  48. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  49. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  50. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  51. package/lib/cjs/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +3 -3
  52. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  53. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.js.map +3 -3
  54. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  55. package/lib/cjs/src/safe/data/HttpSafeAccountDataSource.test.js.map +3 -3
  56. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  57. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +3 -3
  58. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  59. package/lib/cjs/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +3 -3
  60. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
  61. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
  62. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
  63. package/lib/cjs/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
  64. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  65. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +3 -3
  66. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +6 -6
  67. package/lib/cjs/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +3 -3
  68. package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
  69. package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +3 -3
  70. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js +1 -1
  71. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  72. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  73. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +3 -3
  74. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js +1 -1
  75. package/lib/cjs/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +3 -3
  76. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js +1 -1
  77. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +3 -3
  78. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js +1 -1
  79. package/lib/cjs/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +3 -3
  80. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  81. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  82. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  83. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  84. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  85. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  86. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  87. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  88. package/lib/esm/package.json +1 -2
  89. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js +1 -1
  90. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.js.map +3 -3
  91. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js +1 -1
  92. package/lib/esm/src/account-ownership/data/HttpAccountOwnershipDataSource.test.js.map +3 -3
  93. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js +1 -1
  94. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.js.map +3 -3
  95. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  96. package/lib/esm/src/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +3 -3
  97. package/lib/esm/src/calldata/di/calldataModuleFactory.js +1 -1
  98. package/lib/esm/src/calldata/di/calldataModuleFactory.js.map +3 -3
  99. package/lib/esm/src/di.js +1 -1
  100. package/lib/esm/src/di.js.map +3 -3
  101. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js +1 -1
  102. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.js.map +3 -3
  103. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  104. package/lib/esm/src/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +3 -3
  105. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  106. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  107. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  108. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  109. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js +1 -1
  110. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.js.map +3 -3
  111. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  112. package/lib/esm/src/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +3 -3
  113. package/lib/esm/src/network/di/networkModuleFactory.js +2 -0
  114. package/lib/esm/src/network/di/networkModuleFactory.js.map +7 -0
  115. package/lib/esm/src/network/di/networkTypes.js +2 -0
  116. package/lib/esm/src/network/di/networkTypes.js.map +7 -0
  117. package/lib/esm/src/nft/data/HttpNftDataSource.js +1 -1
  118. package/lib/esm/src/nft/data/HttpNftDataSource.js.map +3 -3
  119. package/lib/esm/src/nft/data/HttpNftDataSource.test.js +1 -1
  120. package/lib/esm/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  121. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  122. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  123. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js +1 -1
  124. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.test.js.map +3 -3
  125. package/lib/esm/src/proxy/data/HttpProxyDataSource.js +1 -1
  126. package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +3 -3
  127. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js +1 -1
  128. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +3 -3
  129. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js +1 -1
  130. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +3 -3
  131. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js +1 -1
  132. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +3 -3
  133. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +1 -1
  134. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +3 -3
  135. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js +1 -1
  136. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.js.map +3 -3
  137. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js +1 -1
  138. package/lib/esm/src/reporter/data/HttpBlindSigningReporterDatasource.test.js.map +3 -3
  139. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js +1 -1
  140. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.js.map +3 -3
  141. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js +1 -1
  142. package/lib/esm/src/safe/data/HttpSafeAccountDataSource.test.js.map +3 -3
  143. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js +1 -1
  144. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.js.map +3 -3
  145. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js +1 -1
  146. package/lib/esm/src/solana/data/HttpSolanaOwnerInfoDataSource.test.js.map +3 -3
  147. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js +1 -1
  148. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.js.map +3 -3
  149. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js +1 -1
  150. package/lib/esm/src/solanaLifi/data/HttpSolanaLifiDataSource.test.js.map +3 -3
  151. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js +1 -1
  152. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.js.map +3 -3
  153. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js +6 -6
  154. package/lib/esm/src/solanaToken/data/HttpSolanaTokenDataSource.test.js.map +3 -3
  155. package/lib/esm/src/token/data/HttpTokenDataSource.js +1 -1
  156. package/lib/esm/src/token/data/HttpTokenDataSource.js.map +3 -3
  157. package/lib/esm/src/token/data/HttpTokenDataSource.test.js +1 -1
  158. package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  159. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js +1 -1
  160. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.js.map +3 -3
  161. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js +1 -1
  162. package/lib/esm/src/transaction-check/data/HttpTransactionCheckDataSource.test.js.map +3 -3
  163. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js +1 -1
  164. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.js.map +3 -3
  165. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js +1 -1
  166. package/lib/esm/src/transaction-check/data/HttpTypedDataCheckDataSource.test.js.map +3 -3
  167. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  168. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  169. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  170. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  171. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  172. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  173. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  174. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  175. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts +10 -10
  176. package/lib/types/src/account-ownership/data/HttpAccountOwnershipDataSource.d.ts.map +1 -1
  177. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts +3 -1
  178. package/lib/types/src/calldata/data/HttpCalldataDescriptorDataSource.d.ts.map +1 -1
  179. package/lib/types/src/calldata/di/calldataModuleFactory.d.ts.map +1 -1
  180. package/lib/types/src/di.d.ts.map +1 -1
  181. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts +3 -1
  182. package/lib/types/src/dynamic-network/data/HttpDynamicNetworkDataSource.d.ts.map +1 -1
  183. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts +3 -1
  184. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts.map +1 -1
  185. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts +3 -1
  186. package/lib/types/src/gated-signing/data/HttpGatedDescriptorDataSource.d.ts.map +1 -1
  187. package/lib/types/src/network/di/networkModuleFactory.d.ts +4 -0
  188. package/lib/types/src/network/di/networkModuleFactory.d.ts.map +1 -0
  189. package/lib/types/src/network/di/networkTypes.d.ts +4 -0
  190. package/lib/types/src/network/di/networkTypes.d.ts.map +1 -0
  191. package/lib/types/src/nft/data/HttpNftDataSource.d.ts +3 -1
  192. package/lib/types/src/nft/data/HttpNftDataSource.d.ts.map +1 -1
  193. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts +4 -1
  194. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts.map +1 -1
  195. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +3 -1
  196. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -1
  197. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +3 -1
  198. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -1
  199. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts +3 -1
  200. package/lib/types/src/reporter/data/HttpBlindSigningReporterDatasource.d.ts.map +1 -1
  201. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts +3 -1
  202. package/lib/types/src/safe/data/HttpSafeAccountDataSource.d.ts.map +1 -1
  203. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts +3 -1
  204. package/lib/types/src/solana/data/HttpSolanaOwnerInfoDataSource.d.ts.map +1 -1
  205. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts +3 -2
  206. package/lib/types/src/solanaLifi/data/HttpSolanaLifiDataSource.d.ts.map +1 -1
  207. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts +3 -1
  208. package/lib/types/src/solanaToken/data/HttpSolanaTokenDataSource.d.ts.map +1 -1
  209. package/lib/types/src/token/data/HttpTokenDataSource.d.ts +3 -1
  210. package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
  211. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts +3 -1
  212. package/lib/types/src/transaction-check/data/HttpTransactionCheckDataSource.d.ts.map +1 -1
  213. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts +3 -1
  214. package/lib/types/src/transaction-check/data/HttpTypedDataCheckDataSource.d.ts.map +1 -1
  215. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +3 -1
  216. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  217. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +3 -1
  218. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
  219. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts.map +1 -1
  220. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  221. package/package.json +4 -5
@@ -1,6 +1,5 @@
1
1
  {
2
2
  "dependencies": {
3
- "axios": "catalog:",
4
3
  "crypto-js": "catalog:",
5
4
  "ethers": "catalog:",
6
5
  "inversify": "catalog:",
@@ -58,5 +57,5 @@
58
57
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
59
58
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
60
59
  },
61
- "version": "0.0.0-develop-20260428002525"
60
+ "version": "0.0.0-develop-20260429002653"
62
61
  }
@@ -1,2 +1,2 @@
1
- "use strict";var A=Object.create;var a=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var b=(r,e)=>{for(var t in e)a(r,t,{get:e[t],enumerable:!0})},y=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of D(e))!x.call(r,n)&&n!==t&&a(r,n,{get:()=>e[n],enumerable:!(s=h(e,n))||s.enumerable});return r};var w=(r,e,t)=>(t=r!=null?A(O(r)):{},y(e||!r||!r.__esModule?a(t,"default",{value:r,enumerable:!0}):t,r)),S=r=>y(a({},"__esModule",{value:!0}),r),d=(r,e,t,s)=>{for(var n=s>1?void 0:s?h(e,t):e,i=r.length-1,g;i>=0;i--)(g=r[i])&&(n=(s?g(e,t,n):g(n))||n);return s&&n&&a(e,t,n),n},l=(r,e)=>(t,s)=>e(t,s,r);var C={};b(C,{HttpAccountOwnershipDataSource:()=>p});module.exports=S(C);var f=w(require("axios")),u=require("inversify"),c=require("purify-ts"),o=require("../../account-ownership/data/AccountOwnershipError"),E=require("../../config/di/configTypes"),m=require("../../shared/constant/HttpHeaders"),k=w(require("../../../package.json"));let p=class{constructor(e){this.config=e}async getDescriptor({publicKey:e,address:t,challenge:s,network:n}){try{const i=await f.default.request({method:"GET",url:`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${t}`,params:{challenge:s,network:n},headers:{[m.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${k.default.version}`,[m.LEDGER_ORIGIN_TOKEN_HEADER]:this.config.originToken}});return i.data?this.isAccountOwnershipDto(i.data)?(0,c.Right)({signedDescriptor:i.data.signedDescriptor,keyId:i.data.keyId,keyUsage:i.data.keyUsage}):(0,c.Left)(new o.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):(0,c.Left)(new o.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(i){return(0,c.Left)(this.classifyError(i))}}classifyError(e){if(f.default.isAxiosError(e)&&e.response){const t=e.response.status,s=this.extractBackendMessage(e.response.data,e.message);return this.classifyFromStatus(t,s)}if(this.hasNumericStatus(e)){const t=e.status,s=this.extractErrorMessage(e);return this.classifyFromStatus(t,s)}return new o.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}classifyFromStatus(e,t){return e>=400&&e<500?new o.AccountOwnershipError("verification_failed",t):new o.AccountOwnershipError("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${e}: ${t}`)}hasNumericStatus(e){return typeof e=="object"&&e!==null&&"status"in e&&typeof e.status=="number"}extractErrorMessage(e){return typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"?e.message:typeof e=="string"?e:"Unknown error"}extractBackendMessage(e,t){return typeof e=="string"&&e.length>0?e:typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"&&e.message.length>0?e.message:t}isAccountOwnershipDto(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"}};p=d([(0,u.injectable)(),l(0,(0,u.inject)(E.configTypes.Config))],p);0&&(module.exports={HttpAccountOwnershipDataSource});
1
+ "use strict";var u=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var k=(s,e)=>{for(var t in e)u(s,t,{get:e[t],enumerable:!0})},D=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of d(e))!l.call(s,n)&&n!==t&&u(s,n,{get:()=>e[n],enumerable:!(r=f(e,n))||r.enumerable});return s};var O=s=>D(u({},"__esModule",{value:!0}),s),y=(s,e,t,r)=>{for(var n=r>1?void 0:r?f(e,t):e,o=s.length-1,g;o>=0;o--)(g=s[o])&&(n=(r?g(e,t,n):g(n))||n);return r&&n&&u(e,t,n),n},m=(s,e)=>(t,r)=>e(t,r,s);var b={};k(b,{HttpAccountOwnershipDataSource:()=>a});module.exports=O(b);var p=require("inversify"),c=require("purify-ts"),i=require("../../account-ownership/data/AccountOwnershipError"),w=require("../../config/di/configTypes"),h=require("../../network/di/networkTypes");let a=class{constructor(e,t){this.config=e;this.http=t}async getDescriptor({publicKey:e,address:t,challenge:r,network:n}){try{const o=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/concordium/owner/${e}/${t}`,{params:{challenge:r,network:n}});return o?this.isAccountOwnershipDto(o)?(0,c.Right)({signedDescriptor:o.signedDescriptor,keyId:o.keyId,keyUsage:o.keyUsage}):(0,c.Left)(new i.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: invalid response format")):(0,c.Left)(new i.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response"))}catch(o){return(0,c.Left)(this.classifyError(o))}}classifyError(e){if(this.hasNumericStatus(e)){const t=e.status,r=this.extractErrorMessage(e);return this.classifyFromStatus(t,r)}return new i.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")}classifyFromStatus(e,t){return e>=400&&e<500?new i.AccountOwnershipError("verification_failed",t):new i.AccountOwnershipError("service_unavailable",`[ContextModule] HttpAccountOwnershipDataSource: backend ${e}: ${t}`)}hasNumericStatus(e){return typeof e=="object"&&e!==null&&"status"in e&&typeof e.status=="number"}extractErrorMessage(e){const t=this.extractResponseBodyMessage(e);return t!==null?t:typeof e=="object"&&e!==null&&"message"in e&&typeof e.message=="string"&&e.message.length>0?e.message:typeof e=="string"?e:"Unknown error"}extractResponseBodyMessage(e){if(typeof e!="object"||e===null||!("responseBody"in e)||typeof e.responseBody!="string")return null;const t=e.responseBody;if(t.length===0)return null;try{const r=JSON.parse(t);if(typeof r=="object"&&r!==null&&"message"in r&&typeof r.message=="string"&&r.message.length>0)return r.message}catch{}return t}isAccountOwnershipDto(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"}};a=y([(0,p.injectable)(),m(0,(0,p.inject)(w.configTypes.Config)),m(1,(0,p.inject)(h.networkTypes.NetworkClient))],a);0&&(module.exports={HttpAccountOwnershipDataSource});
2
2
  //# sourceMappingURL=HttpAccountOwnershipDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/account-ownership/data/HttpAccountOwnershipDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport {\n type AccountOwnershipDataSource,\n type AccountOwnershipDescriptor,\n type GetAccountOwnershipParams,\n} from \"@/account-ownership/data/AccountOwnershipDataSource\";\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\nimport { type AccountOwnershipDto } from \"@/account-ownership/data/dto/AccountOwnershipDto\";\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\n@injectable()\nexport class HttpAccountOwnershipDataSource\n implements AccountOwnershipDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n ) {}\n\n async getDescriptor({\n publicKey,\n address,\n challenge,\n network,\n }: GetAccountOwnershipParams): Promise<\n Either<Error, AccountOwnershipDescriptor>\n > {\n try {\n const response = await axios.request<AccountOwnershipDto>({\n method: \"GET\",\n url: `${this.config.metadataServiceDomain.url}/v2/concordium/owner/${publicKey}/${address}`,\n params: {\n challenge,\n network,\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 AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isAccountOwnershipDto(response.data)) {\n return Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n );\n }\n\n return Right({\n signedDescriptor: response.data.signedDescriptor,\n keyId: response.data.keyId,\n keyUsage: response.data.keyUsage,\n });\n } catch (error) {\n return Left(this.classifyError(error));\n }\n }\n\n /**\n * Classifies a caught request error into an {@link AccountOwnershipError}:\n * HTTP 4xx responses carry the backend's `message` verbatim and are marked\n * as `verification_failed`; everything else (network failure, 5xx,\n * unrecognized errors) is marked as `service_unavailable`.\n *\n * Two shapes are recognized:\n * - Vanilla {@link AxiosError} with `.response` (standalone axios usage).\n * - Any error carrying a numeric `.status` field. Consumers may install a\n * global axios interceptor that replaces {@link AxiosError} with a\n * custom class, typically stripping `.response` but preserving the HTTP\n * status on a top-level `.status` field. The duck-typed branch keeps\n * classification correct on those paths without coupling to any\n * host-specific class.\n */\n private classifyError(error: unknown): AccountOwnershipError {\n if (axios.isAxiosError(error) && error.response) {\n const status = error.response.status;\n const backendMessage = this.extractBackendMessage(\n error.response.data,\n error.message,\n );\n return this.classifyFromStatus(status, backendMessage);\n }\n\n if (this.hasNumericStatus(error)) {\n const status = error.status;\n const message = this.extractErrorMessage(error);\n return this.classifyFromStatus(status, message);\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n );\n }\n\n private classifyFromStatus(\n status: number,\n message: string,\n ): AccountOwnershipError {\n if (status >= 400 && status < 500) {\n return new AccountOwnershipError(\"verification_failed\", message);\n }\n return new AccountOwnershipError(\n \"service_unavailable\",\n `[ContextModule] HttpAccountOwnershipDataSource: backend ${status}: ${message}`,\n );\n }\n\n private hasNumericStatus(value: unknown): value is { status: number } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as { status: unknown }).status === \"number\"\n );\n }\n\n private extractErrorMessage(value: unknown): string {\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"message\" in value &&\n typeof (value as { message: unknown }).message === \"string\"\n ) {\n return (value as { message: string }).message;\n }\n if (typeof value === \"string\") {\n return value;\n }\n return \"Unknown error\";\n }\n\n private extractBackendMessage(data: unknown, fallback: string): string {\n if (typeof data === \"string\" && data.length > 0) {\n return data;\n }\n if (\n typeof data === \"object\" &&\n data !== null &&\n \"message\" in data &&\n typeof (data as { message: unknown }).message === \"string\" &&\n (data as { message: string }).message.length > 0\n ) {\n return (data as { message: string }).message;\n }\n return fallback;\n }\n\n private isAccountOwnershipDto(value: unknown): value is AccountOwnershipDto {\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": "qtBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAkB,oBAClBC,EAAmC,qBACnCC,EAAyC,qBAOzCC,EAAsC,0DAEtCC,EAA4B,mCAE5BC,EAGO,yCACPC,EAAoB,iCAGb,IAAMC,EAAN,KAEP,CACE,YAEmBC,EACjB,CADiB,YAAAA,CAChB,CAEH,MAAM,cAAc,CAClB,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAEE,CACA,GAAI,CACF,MAAMC,EAAW,MAAM,EAAAC,QAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,wBAAwBL,CAAS,IAAIC,CAAO,GACzF,OAAQ,CACN,UAAAC,EACA,QAAAC,CACF,EACA,QAAS,CACP,CAAC,8BAA4B,EAAG,kBAAkB,EAAAG,QAAQ,OAAO,GACjE,CAAC,4BAA0B,EAAG,KAAK,OAAO,WAC5C,CACF,CAAC,EAED,OAAKF,EAAS,KAST,KAAK,sBAAsBA,EAAS,IAAI,KAStC,SAAM,CACX,iBAAkBA,EAAS,KAAK,iBAChC,MAAOA,EAAS,KAAK,MACrB,SAAUA,EAAS,KAAK,QAC1B,CAAC,KAZQ,QACL,IAAI,wBACF,sBACA,yEACF,CACF,KAdO,QACL,IAAI,wBACF,sBACA,2EACF,CACF,CAiBJ,OAASG,EAAO,CACd,SAAO,QAAK,KAAK,cAAcA,CAAK,CAAC,CACvC,CACF,CAiBQ,cAAcA,EAAuC,CAC3D,GAAI,EAAAF,QAAM,aAAaE,CAAK,GAAKA,EAAM,SAAU,CAC/C,MAAMC,EAASD,EAAM,SAAS,OACxBE,EAAiB,KAAK,sBAC1BF,EAAM,SAAS,KACfA,EAAM,OACR,EACA,OAAO,KAAK,mBAAmBC,EAAQC,CAAc,CACvD,CAEA,GAAI,KAAK,iBAAiBF,CAAK,EAAG,CAChC,MAAMC,EAASD,EAAM,OACfG,EAAU,KAAK,oBAAoBH,CAAK,EAC9C,OAAO,KAAK,mBAAmBC,EAAQE,CAAO,CAChD,CAEA,OAAO,IAAI,wBACT,sBACA,8FACF,CACF,CAEQ,mBACNF,EACAE,EACuB,CACvB,OAAIF,GAAU,KAAOA,EAAS,IACrB,IAAI,wBAAsB,sBAAuBE,CAAO,EAE1D,IAAI,wBACT,sBACA,2DAA2DF,CAAM,KAAKE,CAAO,EAC/E,CACF,CAEQ,iBAAiBC,EAA6C,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,WAAYA,GACZ,OAAQA,EAA8B,QAAW,QAErD,CAEQ,oBAAoBA,EAAwB,CAClD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,OAAQA,EAA+B,SAAY,SAE3CA,EAA8B,QAEpC,OAAOA,GAAU,SACZA,EAEF,eACT,CAEQ,sBAAsBC,EAAeC,EAA0B,CACrE,OAAI,OAAOD,GAAS,UAAYA,EAAK,OAAS,EACrCA,EAGP,OAAOA,GAAS,UAChBA,IAAS,MACT,YAAaA,GACb,OAAQA,EAA8B,SAAY,UACjDA,EAA6B,QAAQ,OAAS,EAEvCA,EAA6B,QAEhCC,CACT,CAEQ,sBAAsBF,EAA8C,CAC1E,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,EAhKab,EAANgB,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,IAJjBjB",
6
- "names": ["HttpAccountOwnershipDataSource_exports", "__export", "HttpAccountOwnershipDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_AccountOwnershipError", "import_configTypes", "import_HttpHeaders", "import_package", "HttpAccountOwnershipDataSource", "config", "publicKey", "address", "challenge", "network", "response", "axios", "PACKAGE", "error", "status", "backendMessage", "message", "value", "data", "fallback", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport {\n type AccountOwnershipDataSource,\n type AccountOwnershipDescriptor,\n type GetAccountOwnershipParams,\n} from \"@/account-ownership/data/AccountOwnershipDataSource\";\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\nimport { type AccountOwnershipDto } from \"@/account-ownership/data/dto/AccountOwnershipDto\";\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\n\n@injectable()\nexport class HttpAccountOwnershipDataSource\n implements AccountOwnershipDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n async getDescriptor({\n publicKey,\n address,\n challenge,\n network,\n }: GetAccountOwnershipParams): Promise<\n Either<Error, AccountOwnershipDescriptor>\n > {\n try {\n const data = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/concordium/owner/${publicKey}/${address}`,\n {\n params: { challenge, network },\n },\n )) as AccountOwnershipDto | null;\n\n if (!data) {\n return Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: unexpected empty response\",\n ),\n );\n }\n\n if (!this.isAccountOwnershipDto(data)) {\n return Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: invalid response format\",\n ),\n );\n }\n\n return Right({\n signedDescriptor: data.signedDescriptor,\n keyId: data.keyId,\n keyUsage: data.keyUsage,\n });\n } catch (error) {\n return Left(this.classifyError(error));\n }\n }\n\n /**\n * Classifies a caught request error into an {@link AccountOwnershipError}:\n * HTTP 4xx responses carry the backend's `message` verbatim and are marked\n * as `verification_failed`; everything else (network failure, 5xx,\n * unrecognized errors) is marked as `service_unavailable`.\n *\n * Errors with a numeric `.status` field are treated as HTTP-shaped\n * failures. `DmkNetworkClientError` exposes `.status` and a raw\n * `.responseBody` string; the backend's human-readable message is\n * extracted from the error's own `.message` first, then from the JSON\n * body on `.responseBody`, and finally from the raw body as a\n * last resort.\n */\n private classifyError(error: unknown): AccountOwnershipError {\n if (this.hasNumericStatus(error)) {\n const status = error.status;\n const message = this.extractErrorMessage(error);\n return this.classifyFromStatus(status, message);\n }\n\n return new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n );\n }\n\n private classifyFromStatus(\n status: number,\n message: string,\n ): AccountOwnershipError {\n if (status >= 400 && status < 500) {\n return new AccountOwnershipError(\"verification_failed\", message);\n }\n return new AccountOwnershipError(\n \"service_unavailable\",\n `[ContextModule] HttpAccountOwnershipDataSource: backend ${status}: ${message}`,\n );\n }\n\n private hasNumericStatus(value: unknown): value is { status: number } {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as { status: unknown }).status === \"number\"\n );\n }\n\n private extractErrorMessage(value: unknown): string {\n const fromBody = this.extractResponseBodyMessage(value);\n if (fromBody !== null) {\n return fromBody;\n }\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"message\" in value &&\n typeof (value as { message: unknown }).message === \"string\" &&\n (value as { message: string }).message.length > 0\n ) {\n return (value as { message: string }).message;\n }\n if (typeof value === \"string\") {\n return value;\n }\n return \"Unknown error\";\n }\n\n private extractResponseBodyMessage(value: unknown): string | null {\n if (\n typeof value !== \"object\" ||\n value === null ||\n !(\"responseBody\" in value) ||\n typeof (value as { responseBody: unknown }).responseBody !== \"string\"\n ) {\n return null;\n }\n const body = (value as { responseBody: string }).responseBody;\n if (body.length === 0) {\n return null;\n }\n try {\n const parsed = JSON.parse(body) as unknown;\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n \"message\" in parsed &&\n typeof (parsed as { message: unknown }).message === \"string\" &&\n (parsed as { message: string }).message.length > 0\n ) {\n return (parsed as { message: string }).message;\n }\n } catch {\n // body is not JSON; fall through to use it as plain text\n }\n return body;\n }\n\n private isAccountOwnershipDto(value: unknown): value is AccountOwnershipDto {\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": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBACnCC,EAAyC,qBAOzCC,EAAsC,0DAEtCC,EAA4B,mCAE5BC,EAA6B,qCAGtB,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAM,cAAc,CAClB,UAAAC,EACA,QAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAEE,CACA,GAAI,CACF,MAAMC,EAAQ,MAAM,KAAK,KAAK,IAC5B,GAAG,KAAK,OAAO,sBAAsB,GAAG,wBAAwBJ,CAAS,IAAIC,CAAO,GACpF,CACE,OAAQ,CAAE,UAAAC,EAAW,QAAAC,CAAQ,CAC/B,CACF,EAEA,OAAKC,EASA,KAAK,sBAAsBA,CAAI,KAS7B,SAAM,CACX,iBAAkBA,EAAK,iBACvB,MAAOA,EAAK,MACZ,SAAUA,EAAK,QACjB,CAAC,KAZQ,QACL,IAAI,wBACF,sBACA,yEACF,CACF,KAdO,QACL,IAAI,wBACF,sBACA,2EACF,CACF,CAiBJ,OAASC,EAAO,CACd,SAAO,QAAK,KAAK,cAAcA,CAAK,CAAC,CACvC,CACF,CAeQ,cAAcA,EAAuC,CAC3D,GAAI,KAAK,iBAAiBA,CAAK,EAAG,CAChC,MAAMC,EAASD,EAAM,OACfE,EAAU,KAAK,oBAAoBF,CAAK,EAC9C,OAAO,KAAK,mBAAmBC,EAAQC,CAAO,CAChD,CAEA,OAAO,IAAI,wBACT,sBACA,8FACF,CACF,CAEQ,mBACND,EACAC,EACuB,CACvB,OAAID,GAAU,KAAOA,EAAS,IACrB,IAAI,wBAAsB,sBAAuBC,CAAO,EAE1D,IAAI,wBACT,sBACA,2DAA2DD,CAAM,KAAKC,CAAO,EAC/E,CACF,CAEQ,iBAAiBC,EAA6C,CACpE,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,WAAYA,GACZ,OAAQA,EAA8B,QAAW,QAErD,CAEQ,oBAAoBA,EAAwB,CAClD,MAAMC,EAAW,KAAK,2BAA2BD,CAAK,EACtD,OAAIC,IAAa,KACRA,EAGP,OAAOD,GAAU,UACjBA,IAAU,MACV,YAAaA,GACb,OAAQA,EAA+B,SAAY,UAClDA,EAA8B,QAAQ,OAAS,EAExCA,EAA8B,QAEpC,OAAOA,GAAU,SACZA,EAEF,eACT,CAEQ,2BAA2BA,EAA+B,CAChE,GACE,OAAOA,GAAU,UACjBA,IAAU,MACV,EAAE,iBAAkBA,IACpB,OAAQA,EAAoC,cAAiB,SAE7D,OAAO,KAET,MAAME,EAAQF,EAAmC,aACjD,GAAIE,EAAK,SAAW,EAClB,OAAO,KAET,GAAI,CACF,MAAMC,EAAS,KAAK,MAAMD,CAAI,EAC9B,GACE,OAAOC,GAAW,UAClBA,IAAW,MACX,YAAaA,GACb,OAAQA,EAAgC,SAAY,UACnDA,EAA+B,QAAQ,OAAS,EAEjD,OAAQA,EAA+B,OAE3C,MAAQ,CAER,CACA,OAAOD,CACT,CAEQ,sBAAsBF,EAA8C,CAC1E,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,EApKaX,EAANe,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,eAAa,aAAa,IANzBhB",
6
+ "names": ["HttpAccountOwnershipDataSource_exports", "__export", "HttpAccountOwnershipDataSource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_AccountOwnershipError", "import_configTypes", "import_networkTypes", "HttpAccountOwnershipDataSource", "config", "http", "publicKey", "address", "challenge", "network", "data", "error", "status", "message", "value", "fromBody", "body", "parsed", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var x=Object.create;var m=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,y=Object.prototype.hasOwnProperty;var b=(s,n,r,t)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of k(n))!y.call(s,e)&&e!==r&&m(s,e,{get:()=>n[e],enumerable:!(t=h(n,e))||t.enumerable});return s};var g=(s,n,r)=>(r=s!=null?x(v(s)):{},b(n||!s||!s.__esModule?m(r,"default",{value:s,enumerable:!0}):r,s));var a=g(require("axios")),d=require("purify-ts"),l=require("../../account-ownership/data/AccountOwnershipError"),p=require("../../shared/constant/HttpHeaders"),f=g(require("../../../package.json")),o=require("./HttpAccountOwnershipDataSource");vi.mock("axios");function i(s,n,r="Request failed"){const t=new a.AxiosError(r);return t.message=r,t.response={status:s,data:n,statusText:"",headers:{},config:{}},t}function w(s,n){const r=new Error(n);return r.status=s,r}describe("HttpAccountOwnershipDataSource",()=>{const s={metadataServiceDomain:{url:"https://nft.api.live.ledger-test.com"},originToken:"test-origin-token"},n={signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"},r={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};beforeEach(()=>{vi.clearAllMocks(),vi.spyOn(a.default,"isAxiosError").mockImplementation(t=>t instanceof a.AxiosError)}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:n});const t=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(a.default.request).toHaveBeenCalledWith({method:"GET",url:"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",params:{challenge:"0xabcdef",network:"mainnet"},headers:{[p.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${f.default.version}`,[p.LEDGER_ORIGIN_TOKEN_HEADER]:"test-origin-token"}}),expect(t).toEqual((0,d.Right)(n))}),it("should pass testnet network parameter",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:n}),await new o.HttpAccountOwnershipDataSource(s).getDescriptor({...r,network:"testnet"}),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({params:{challenge:"0xabcdef",network:"testnet"}}))}),it("should classify empty response as service_unavailable",async()=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:null});const t=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(t.isLeft()).toBe(!0);const e=t.extract();expect(e).toBeInstanceOf(l.AccountOwnershipError),expect(e.kind).toBe("service_unavailable"),expect(e.message).toContain("unexpected empty response")}),it.each([["signedDescriptor missing",{keyId:"k",keyUsage:"u"}],["keyId missing",{signedDescriptor:"s",keyUsage:"u"}],["keyUsage missing",{signedDescriptor:"s",keyId:"k"}],["wrong field type",{signedDescriptor:"s",keyId:123,keyUsage:"u"}]])("should classify malformed response (%s) as service_unavailable",async(t,e)=>{vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:e});const c=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(c.isLeft()).toBe(!0);const u=c.extract();expect(u).toBeInstanceOf(l.AccountOwnershipError),expect(u.kind).toBe("service_unavailable"),expect(u.message).toContain("invalid response format")}),it("should classify 422 with { message } body as verification_failed and forward backend message",async()=>{const t="Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet";vi.spyOn(a.default,"request").mockRejectedValue(i(422,{message:t}));const e=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(e.isLeft()).toBe(!0);const c=e.extract();expect(c).toBeInstanceOf(l.AccountOwnershipError),expect(c.kind).toBe("verification_failed"),expect(c.message).toBe(t)}),it.each([400,401,403,404,429])("should classify HTTP %s as verification_failed",async t=>{vi.spyOn(a.default,"request").mockRejectedValue(i(t,{message:"refused"}));const c=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(c.kind).toBe("verification_failed"),expect(c.message).toBe("refused")}),it("should classify 500 as service_unavailable with status prefix",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(500,{message:"internal error"}));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("service_unavailable"),expect(e.message).toContain("backend 500"),expect(e.message).toContain("internal error")}),it.each([502,503,504])("should classify HTTP %s as service_unavailable",async t=>{vi.spyOn(a.default,"request").mockRejectedValue(i(t,{message:"down"}));const c=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(c.kind).toBe("service_unavailable")}),it("should accept string body and forward it as message on 4xx",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(422,"plain text reason"));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("plain text reason")}),it("should fall back to axios error message when body has no message",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(422,{},"Request failed with status code 422"));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("Request failed with status code 422")}),it("should fall back to axios error message when body message is empty",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(i(422,{message:""},"Request failed with status code 422"));const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("Request failed with status code 422")}),it("should classify non-axios / network errors as service_unavailable",async()=>{vi.spyOn(a.default,"request").mockRejectedValue(new Error("ECONNREFUSED"));const t=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(t).toEqual((0,d.Left)(new l.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),describe("intercepted error shape (numeric .status on the error)",()=>{it.each([400,401,403,404,422,429])("should classify HTTP %s on .status as verification_failed and forward message",async t=>{const e="Address ByteVector(...) is not associated with the given public key ByteVector(...)";vi.spyOn(a.default,"request").mockRejectedValue(w(t,e));const u=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(u.kind).toBe("verification_failed"),expect(u.message).toBe(e)}),it.each([500,502,503,504])("should classify HTTP %s on .status as service_unavailable with status prefix",async t=>{vi.spyOn(a.default,"request").mockRejectedValue(w(t,"down"));const c=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(c.kind).toBe("service_unavailable"),expect(c.message).toContain(`backend ${t}`),expect(c.message).toContain("down")}),it("should ignore non-numeric .status and fall through to service_unavailable fallback",async()=>{const t=new Error("bad");t.status="422",vi.spyOn(a.default,"request").mockRejectedValue(t);const e=await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r);expect(e).toEqual((0,d.Left)(new l.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should forward .message from plain object errors (not Error instances)",async()=>{vi.spyOn(a.default,"request").mockRejectedValue({status:422,message:"plain object message"});const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("plain object message")}),it("should use an 'Unknown error' fallback when the object has no usable message",async()=>{vi.spyOn(a.default,"request").mockRejectedValue({status:422});const e=(await new o.HttpAccountOwnershipDataSource(s).getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("Unknown error")})}),it("should use correct metadata service URL from config",async()=>{const t={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"};vi.spyOn(a.default,"request").mockResolvedValue({status:200,data:n}),await new o.HttpAccountOwnershipDataSource(t).getDescriptor(r),expect(a.default.request).toHaveBeenCalledWith(expect.objectContaining({url:"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",headers:expect.objectContaining({[p.LEDGER_ORIGIN_TOKEN_HEADER]:"custom-token"})}))})})});
1
+ "use strict";var d=require("purify-ts"),u=require("../../account-ownership/data/AccountOwnershipError"),p=require("./HttpAccountOwnershipDataSource");function i(n){const c=new Error(n.message??"HTTP error");return n.status!==void 0&&(c.status=n.status),n.responseBody!==void 0&&(c.responseBody=n.responseBody),c}describe("HttpAccountOwnershipDataSource",()=>{const n={metadataServiceDomain:{url:"https://nft.api.live.ledger-test.com"},originToken:"test-origin-token"},c={signedDescriptor:"signed-descriptor-data",keyId:"domain_metadata_key",keyUsage:"trusted_name"},r={publicKey:"abcdef1234567890",address:"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",challenge:"0xabcdef",network:"mainnet"};let s,o;beforeEach(()=>{vi.clearAllMocks(),s={get:vi.fn()},o=new p.HttpAccountOwnershipDataSource(n,s)}),describe("getDescriptor",()=>{it("should return descriptor on successful request",async()=>{s.get.mockResolvedValue(c);const t=await o.getDescriptor(r);expect(s.get).toHaveBeenCalledWith(`${n.metadataServiceDomain.url}/v2/concordium/owner/${r.publicKey}/${r.address}`,{params:{challenge:r.challenge,network:r.network}}),expect(t).toEqual((0,d.Right)(c))}),it("should pass testnet network parameter",async()=>{s.get.mockResolvedValue(c),await o.getDescriptor({...r,network:"testnet"}),expect(s.get).toHaveBeenCalledWith(expect.any(String),{params:{challenge:r.challenge,network:"testnet"}})}),it("should classify empty response as service_unavailable",async()=>{s.get.mockResolvedValue(null);const t=await o.getDescriptor(r);expect(t.isLeft()).toBe(!0);const e=t.extract();expect(e).toBeInstanceOf(u.AccountOwnershipError),expect(e.kind).toBe("service_unavailable"),expect(e.message).toContain("unexpected empty response")}),it.each([["signedDescriptor missing",{keyId:"k",keyUsage:"u"}],["keyId missing",{signedDescriptor:"s",keyUsage:"u"}],["keyUsage missing",{signedDescriptor:"s",keyId:"k"}],["wrong field type",{signedDescriptor:"s",keyId:123,keyUsage:"u"}]])("should classify malformed response (%s) as service_unavailable",async(t,e)=>{s.get.mockResolvedValue(e);const a=await o.getDescriptor(r);expect(a.isLeft()).toBe(!0);const l=a.extract();expect(l).toBeInstanceOf(u.AccountOwnershipError),expect(l.kind).toBe("service_unavailable"),expect(l.message).toContain("invalid response format")}),it("should classify 422 with { message } body as verification_failed and forward backend message",async()=>{const t="Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet";s.get.mockRejectedValue(i({status:422,message:"HTTP error 422",responseBody:JSON.stringify({message:t})}));const e=await o.getDescriptor(r);expect(e.isLeft()).toBe(!0);const a=e.extract();expect(a).toBeInstanceOf(u.AccountOwnershipError),expect(a.kind).toBe("verification_failed"),expect(a.message).toBe(t)}),it.each([400,401,403,404,429])("should classify HTTP %s as verification_failed with forwarded message",async t=>{s.get.mockRejectedValue(i({status:t,message:`HTTP error ${t}`,responseBody:JSON.stringify({message:"refused"})}));const a=(await o.getDescriptor(r)).extract();expect(a.kind).toBe("verification_failed"),expect(a.message).toBe("refused")}),it("should classify 500 as service_unavailable with status prefix",async()=>{s.get.mockRejectedValue(i({status:500,message:"HTTP error 500",responseBody:JSON.stringify({message:"internal error"})}));const e=(await o.getDescriptor(r)).extract();expect(e.kind).toBe("service_unavailable"),expect(e.message).toContain("backend 500"),expect(e.message).toContain("internal error")}),it.each([502,503,504])("should classify HTTP %s as service_unavailable",async t=>{s.get.mockRejectedValue(i({status:t,message:`HTTP error ${t}`,responseBody:JSON.stringify({message:"down"})}));const a=(await o.getDescriptor(r)).extract();expect(a.kind).toBe("service_unavailable"),expect(a.message).toContain(`backend ${t}`),expect(a.message).toContain("down")}),it("should accept plain-text response body and forward it on 4xx",async()=>{s.get.mockRejectedValue(i({status:422,message:"HTTP error 422",responseBody:"plain text reason"}));const e=(await o.getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("plain text reason")}),it("should fall back to the client error message when response body is empty",async()=>{s.get.mockRejectedValue(i({status:422,message:"HTTP error 422",responseBody:""}));const e=(await o.getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("HTTP error 422")}),it("should classify network errors (no status) as service_unavailable",async()=>{s.get.mockRejectedValue(new Error("Network error"));const t=await o.getDescriptor(r);expect(t).toEqual((0,d.Left)(new u.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),describe("errors with numeric .status",()=>{it.each([400,401,403,404,422,429])("should classify HTTP %s on .status as verification_failed and forward .message",async t=>{const e="Address ByteVector(...) is not associated with the given public key ByteVector(...)";s.get.mockRejectedValue(i({status:t,message:e}));const l=(await o.getDescriptor(r)).extract();expect(l.kind).toBe("verification_failed"),expect(l.message).toBe(e)}),it.each([500,502,503,504])("should classify HTTP %s on .status as service_unavailable with status prefix",async t=>{s.get.mockRejectedValue(i({status:t,message:"down"}));const a=(await o.getDescriptor(r)).extract();expect(a.kind).toBe("service_unavailable"),expect(a.message).toContain(`backend ${t}`),expect(a.message).toContain("down")}),it("should ignore non-numeric .status and fall through to service_unavailable fallback",async()=>{const t=new Error("bad");t.status="422",s.get.mockRejectedValue(t);const e=await o.getDescriptor(r);expect(e).toEqual((0,d.Left)(new u.AccountOwnershipError("service_unavailable","[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor")))}),it("should forward .message from plain object errors (not Error instances)",async()=>{s.get.mockRejectedValue({status:422,message:"plain object message"});const e=(await o.getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("plain object message")}),it("should use an 'Unknown error' fallback when the object has no usable message",async()=>{s.get.mockRejectedValue({status:422});const e=(await o.getDescriptor(r)).extract();expect(e.kind).toBe("verification_failed"),expect(e.message).toBe("Unknown error")})}),it("should use correct metadata service URL from config",async()=>{const t={metadataServiceDomain:{url:"https://custom-metadata.example.com"},originToken:"custom-token"},e=new p.HttpAccountOwnershipDataSource(t,s);s.get.mockResolvedValue(c),await e.getDescriptor(r),expect(s.get).toHaveBeenCalledWith("https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB",expect.anything())})})});
2
2
  //# sourceMappingURL=HttpAccountOwnershipDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/account-ownership/data/HttpAccountOwnershipDataSource.test.ts"],
4
- "sourcesContent": ["import axios, { AxiosError, type AxiosResponse } from \"axios\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\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 { HttpAccountOwnershipDataSource } from \"./HttpAccountOwnershipDataSource\";\n\nvi.mock(\"axios\");\n\nfunction makeAxiosError(\n status: number,\n data: unknown,\n message = \"Request failed\",\n): AxiosError {\n const err = new AxiosError(message);\n err.message = message;\n err.response = {\n status,\n data,\n statusText: \"\",\n headers: {},\n config: {} as never,\n } as AxiosResponse;\n return err;\n}\n\nfunction makeInterceptedError(status: number, message: string): Error {\n const err = new Error(message);\n (err as unknown as { status: number }).status = status;\n return err;\n}\n\ndescribe(\"HttpAccountOwnershipDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger-test.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const validDto = {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n };\n\n const baseParams = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n vi.spyOn(axios, \"isAxiosError\").mockImplementation(\n (value: unknown): value is AxiosError => value instanceof AxiosError,\n );\n });\n\n describe(\"getDescriptor\", () => {\n it(\"should return descriptor on successful request\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(axios.request).toHaveBeenCalledWith({\n method: \"GET\",\n url: \"https://nft.api.live.ledger-test.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n params: {\n challenge: \"0xabcdef\",\n network: \"mainnet\",\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(Right(validDto));\n });\n\n it(\"should pass testnet network parameter\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n await new HttpAccountOwnershipDataSource(config).getDescriptor({\n ...baseParams,\n network: \"testnet\",\n });\n\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n params: {\n challenge: \"0xabcdef\",\n network: \"testnet\",\n },\n }),\n );\n });\n\n it(\"should classify empty response as service_unavailable\", async () => {\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: null,\n });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"unexpected empty response\");\n });\n\n it.each([\n [\"signedDescriptor missing\", { keyId: \"k\", keyUsage: \"u\" }],\n [\"keyId missing\", { signedDescriptor: \"s\", keyUsage: \"u\" }],\n [\"keyUsage missing\", { signedDescriptor: \"s\", keyId: \"k\" }],\n [\n \"wrong field type\",\n { signedDescriptor: \"s\", keyId: 123, keyUsage: \"u\" },\n ],\n ])(\n \"should classify malformed response (%s) as service_unavailable\",\n async (_label, data) => {\n vi.spyOn(axios, \"request\").mockResolvedValue({ status: 200, data });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"invalid response format\");\n },\n );\n\n it(\"should classify 422 with { message } body as verification_failed and forward backend message\", async () => {\n const backendMessage =\n \"Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet\";\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, { message: backendMessage }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(backendMessage);\n });\n\n it.each([400, 401, 403, 404, 429])(\n \"should classify HTTP %s as verification_failed\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(status, { message: \"refused\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"refused\");\n },\n );\n\n it(\"should classify 500 as service_unavailable with status prefix\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(500, { message: \"internal error\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"backend 500\");\n expect(err.message).toContain(\"internal error\");\n });\n\n it.each([502, 503, 504])(\n \"should classify HTTP %s as service_unavailable\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(status, { message: \"down\" }),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n },\n );\n\n it(\"should accept string body and forward it as message on 4xx\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, \"plain text reason\"),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"plain text reason\");\n });\n\n it(\"should fall back to axios error message when body has no message\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(422, {}, \"Request failed with status code 422\"),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Request failed with status code 422\");\n });\n\n it(\"should fall back to axios error message when body message is empty\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeAxiosError(\n 422,\n { message: \"\" },\n \"Request failed with status code 422\",\n ),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Request failed with status code 422\");\n });\n\n it(\"should classify non-axios / network errors as service_unavailable\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"ECONNREFUSED\"));\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result).toEqual(\n Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n // Consumers may install a global axios interceptor that replaces\n // AxiosError with a custom class, preserving the HTTP status on\n // `.status` and dropping `.response`. The datasource must still\n // classify these.\n describe(\"intercepted error shape (numeric .status on the error)\", () => {\n it.each([400, 401, 403, 404, 422, 429])(\n \"should classify HTTP %s on .status as verification_failed and forward message\",\n async (status) => {\n const backendMessage =\n \"Address ByteVector(...) is not associated with the given public key ByteVector(...)\";\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeInterceptedError(status, backendMessage),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(backendMessage);\n },\n );\n\n it.each([500, 502, 503, 504])(\n \"should classify HTTP %s on .status as service_unavailable with status prefix\",\n async (status) => {\n vi.spyOn(axios, \"request\").mockRejectedValue(\n makeInterceptedError(status, \"down\"),\n );\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(`backend ${status}`);\n expect(err.message).toContain(\"down\");\n },\n );\n\n it(\"should ignore non-numeric .status and fall through to service_unavailable fallback\", async () => {\n const err = new Error(\"bad\");\n (err as unknown as { status: string }).status = \"422\";\n vi.spyOn(axios, \"request\").mockRejectedValue(err);\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n expect(result).toEqual(\n Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n it(\"should forward .message from plain object errors (not Error instances)\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue({\n status: 422,\n message: \"plain object message\",\n });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"plain object message\");\n });\n\n it(\"should use an 'Unknown error' fallback when the object has no usable message\", async () => {\n vi.spyOn(axios, \"request\").mockRejectedValue({ status: 422 });\n\n const result = await new HttpAccountOwnershipDataSource(\n config,\n ).getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Unknown error\");\n });\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"custom-token\",\n } as ContextModuleServiceConfig;\n vi.spyOn(axios, \"request\").mockResolvedValue({\n status: 200,\n data: validDto,\n });\n\n await new HttpAccountOwnershipDataSource(customConfig).getDescriptor(\n baseParams,\n );\n\n expect(axios.request).toHaveBeenCalledWith(\n expect.objectContaining({\n url: \"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n headers: expect.objectContaining({\n [LEDGER_ORIGIN_TOKEN_HEADER]: \"custom-token\",\n }),\n }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_axios", "import_purify_ts", "import_AccountOwnershipError", "import_HttpHeaders", "import_package", "import_HttpAccountOwnershipDataSource", "makeAxiosError", "status", "data", "message", "err", "makeInterceptedError", "config", "validDto", "baseParams", "axios", "value", "result", "PACKAGE", "_label", "backendMessage", "customConfig"]
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { AccountOwnershipError } from \"@/account-ownership/data/AccountOwnershipError\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpAccountOwnershipDataSource } from \"./HttpAccountOwnershipDataSource\";\n\n/**\n * Build an error that quacks like a {@link DmkNetworkClientError}: a real\n * `Error` with numeric `.status` and raw `.responseBody` text. Callers can\n * omit fields to simulate specific shapes.\n */\nfunction makeHttpError(options: {\n status?: number;\n message?: string;\n responseBody?: string;\n}): Error {\n const err = new Error(options.message ?? \"HTTP error\");\n if (options.status !== undefined) {\n (err as unknown as { status: number }).status = options.status;\n }\n if (options.responseBody !== undefined) {\n (err as unknown as { responseBody: string }).responseBody =\n options.responseBody;\n }\n return err;\n}\n\ndescribe(\"HttpAccountOwnershipDataSource\", () => {\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://nft.api.live.ledger-test.com\",\n },\n originToken: \"test-origin-token\",\n } as ContextModuleServiceConfig;\n\n const validDto = {\n signedDescriptor: \"signed-descriptor-data\",\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n };\n\n const baseParams = {\n publicKey: \"abcdef1234567890\",\n address: \"3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n challenge: \"0xabcdef\",\n network: \"mainnet\" as const,\n };\n\n let httpMock: { get: ReturnType<typeof vi.fn> };\n let datasource: HttpAccountOwnershipDataSource;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpAccountOwnershipDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n describe(\"getDescriptor\", () => {\n it(\"should return descriptor on successful request\", async () => {\n httpMock.get.mockResolvedValue(validDto);\n\n const result = await datasource.getDescriptor(baseParams);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `${config.metadataServiceDomain.url}/v2/concordium/owner/${baseParams.publicKey}/${baseParams.address}`,\n {\n params: {\n challenge: baseParams.challenge,\n network: baseParams.network,\n },\n },\n );\n expect(result).toEqual(Right(validDto));\n });\n\n it(\"should pass testnet network parameter\", async () => {\n httpMock.get.mockResolvedValue(validDto);\n\n await datasource.getDescriptor({ ...baseParams, network: \"testnet\" });\n\n expect(httpMock.get).toHaveBeenCalledWith(expect.any(String), {\n params: { challenge: baseParams.challenge, network: \"testnet\" },\n });\n });\n\n it(\"should classify empty response as service_unavailable\", async () => {\n httpMock.get.mockResolvedValue(null);\n\n const result = await datasource.getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"unexpected empty response\");\n });\n\n it.each([\n [\"signedDescriptor missing\", { keyId: \"k\", keyUsage: \"u\" }],\n [\"keyId missing\", { signedDescriptor: \"s\", keyUsage: \"u\" }],\n [\"keyUsage missing\", { signedDescriptor: \"s\", keyId: \"k\" }],\n [\n \"wrong field type\",\n { signedDescriptor: \"s\", keyId: 123, keyUsage: \"u\" },\n ],\n ])(\n \"should classify malformed response (%s) as service_unavailable\",\n async (_label, data) => {\n httpMock.get.mockResolvedValue(data);\n\n const result = await datasource.getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"invalid response format\");\n },\n );\n\n it(\"should classify 422 with { message } body as verification_failed and forward backend message\", async () => {\n const backendMessage =\n \"Address ByteVector(32 bytes, 0xa63c) is not associated with the given public key ByteVector(32 bytes, 0x9dc1) on the network Testnet\";\n httpMock.get.mockRejectedValue(\n makeHttpError({\n status: 422,\n message: \"HTTP error 422\",\n responseBody: JSON.stringify({ message: backendMessage }),\n }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n expect(result.isLeft()).toBe(true);\n const err = result.extract() as AccountOwnershipError;\n expect(err).toBeInstanceOf(AccountOwnershipError);\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(backendMessage);\n });\n\n it.each([400, 401, 403, 404, 429])(\n \"should classify HTTP %s as verification_failed with forwarded message\",\n async (status) => {\n httpMock.get.mockRejectedValue(\n makeHttpError({\n status,\n message: `HTTP error ${status}`,\n responseBody: JSON.stringify({ message: \"refused\" }),\n }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"refused\");\n },\n );\n\n it(\"should classify 500 as service_unavailable with status prefix\", async () => {\n httpMock.get.mockRejectedValue(\n makeHttpError({\n status: 500,\n message: \"HTTP error 500\",\n responseBody: JSON.stringify({ message: \"internal error\" }),\n }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(\"backend 500\");\n expect(err.message).toContain(\"internal error\");\n });\n\n it.each([502, 503, 504])(\n \"should classify HTTP %s as service_unavailable\",\n async (status) => {\n httpMock.get.mockRejectedValue(\n makeHttpError({\n status,\n message: `HTTP error ${status}`,\n responseBody: JSON.stringify({ message: \"down\" }),\n }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(`backend ${status}`);\n expect(err.message).toContain(\"down\");\n },\n );\n\n it(\"should accept plain-text response body and forward it on 4xx\", async () => {\n httpMock.get.mockRejectedValue(\n makeHttpError({\n status: 422,\n message: \"HTTP error 422\",\n responseBody: \"plain text reason\",\n }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"plain text reason\");\n });\n\n it(\"should fall back to the client error message when response body is empty\", async () => {\n httpMock.get.mockRejectedValue(\n makeHttpError({\n status: 422,\n message: \"HTTP error 422\",\n responseBody: \"\",\n }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"HTTP error 422\");\n });\n\n it(\"should classify network errors (no status) as service_unavailable\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"Network error\"));\n\n const result = await datasource.getDescriptor(baseParams);\n\n expect(result).toEqual(\n Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n // Errors surfaced by the network client (or any wrapping layer) that\n // expose a numeric `.status` field must still be classified, even if\n // they are not true `DmkNetworkClientError` instances.\n describe(\"errors with numeric .status\", () => {\n it.each([400, 401, 403, 404, 422, 429])(\n \"should classify HTTP %s on .status as verification_failed and forward .message\",\n async (status) => {\n const backendMessage =\n \"Address ByteVector(...) is not associated with the given public key ByteVector(...)\";\n httpMock.get.mockRejectedValue(\n makeHttpError({ status, message: backendMessage }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(backendMessage);\n },\n );\n\n it.each([500, 502, 503, 504])(\n \"should classify HTTP %s on .status as service_unavailable with status prefix\",\n async (status) => {\n httpMock.get.mockRejectedValue(\n makeHttpError({ status, message: \"down\" }),\n );\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"service_unavailable\");\n expect(err.message).toContain(`backend ${status}`);\n expect(err.message).toContain(\"down\");\n },\n );\n\n it(\"should ignore non-numeric .status and fall through to service_unavailable fallback\", async () => {\n const err = new Error(\"bad\");\n (err as unknown as { status: string }).status = \"422\";\n httpMock.get.mockRejectedValue(err);\n\n const result = await datasource.getDescriptor(baseParams);\n\n expect(result).toEqual(\n Left(\n new AccountOwnershipError(\n \"service_unavailable\",\n \"[ContextModule] HttpAccountOwnershipDataSource: Failed to fetch account ownership descriptor\",\n ),\n ),\n );\n });\n\n it(\"should forward .message from plain object errors (not Error instances)\", async () => {\n httpMock.get.mockRejectedValue({\n status: 422,\n message: \"plain object message\",\n });\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"plain object message\");\n });\n\n it(\"should use an 'Unknown error' fallback when the object has no usable message\", async () => {\n httpMock.get.mockRejectedValue({ status: 422 });\n\n const result = await datasource.getDescriptor(baseParams);\n\n const err = result.extract() as AccountOwnershipError;\n expect(err.kind).toBe(\"verification_failed\");\n expect(err.message).toBe(\"Unknown error\");\n });\n });\n\n it(\"should use correct metadata service URL from config\", async () => {\n const customConfig: ContextModuleServiceConfig = {\n metadataServiceDomain: {\n url: \"https://custom-metadata.example.com\",\n },\n originToken: \"custom-token\",\n } as ContextModuleServiceConfig;\n const customDatasource = new HttpAccountOwnershipDataSource(\n customConfig,\n httpMock as unknown as DmkNetworkClient,\n );\n httpMock.get.mockResolvedValue(validDto);\n\n await customDatasource.getDescriptor(baseParams);\n\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://custom-metadata.example.com/v2/concordium/owner/abcdef1234567890/3kFkntk2H5FGMzeR3GjQKPhdZK9LShKdPHsj2fiGKCdmDXj2WB\",\n expect.anything(),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_purify_ts", "import_AccountOwnershipError", "import_HttpAccountOwnershipDataSource", "makeHttpError", "options", "err", "config", "validDto", "baseParams", "httpMock", "datasource", "result", "_label", "data", "backendMessage", "status", "customConfig", "customDatasource"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var U=Object.create;var c=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var w=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var $=(o,e)=>{for(var t in e)c(o,t,{get:e[t],enumerable:!0})},T=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of j(e))!K.call(o,i)&&i!==t&&c(o,i,{get:()=>e[i],enumerable:!(r=V(e,i))||r.enumerable});return o};var g=(o,e,t)=>(t=o!=null?U(w(o)):{},T(e||!o||!o.__esModule?c(t,"default",{value:o,enumerable:!0}):t,o)),B=o=>T(c({},"__esModule",{value:!0}),o),A=(o,e,t,r)=>{for(var i=r>1?void 0:r?V(e,t):e,s=o.length-1,n;s>=0;s--)(n=o[s])&&(i=(r?n(e,t,i):n(i))||i);return r&&i&&c(e,t,i),i},d=(o,e)=>(t,r)=>e(t,r,o);var Y={};$(Y,{HttpCalldataDescriptorDataSource:()=>u});module.exports=B(Y);var _=g(require("axios")),y=require("inversify"),l=require("purify-ts"),v=require("../../config/di/configTypes"),b=require("../../pki/di/pkiTypes"),P=require("../../pki/model/KeyId"),N=require("../../pki/model/KeyUsage"),C=require("../../shared/constant/HttpHeaders"),a=require("../../shared/model/ClearSignContext"),h=require("../../shared/model/SignatureTags"),m=require("../../shared/utils/HexStringUtils"),S=g(require("../../../package.json"));let u=class{constructor(e,t,r){this.config=e;this._certificateLoader=t;this.endpoint=r}async getCalldataDescriptors({chainId:e,address:t,selector:r,deviceModelId:i}){let s;try{s=(await _.default.request({method:"GET",url:`${this.config.cal.url}/${this.endpoint}`,params:{output:"descriptors_calldata",chain_id:e,contracts:t,contract_address:t,ref:`branch:${this.config.cal.branch}`},headers:{[C.LEDGER_CLIENT_VERSION_HEADER]:`context-module/${S.default.version}`,[C.LEDGER_ORIGIN_TOKEN_HEADER]:this.config.originToken}})).data}catch(n){return(0,l.Left)(new Error(`[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: ${n}`))}if(!Array.isArray(s))return(0,l.Left)(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array"));if(s.length===0)return(0,l.Left)(new Error(`[ContextModule] HttpCalldataDescriptorDataSource: No data for contract ${t} and selector ${r}`));for(const n of s){t=t.toLowerCase(),r=`0x${r.slice(2).toLowerCase()}`;const p=n.descriptors_calldata?.[t]?.[r];if(!p||!this.isCalldataDescriptorV1(p,this.config.cal.mode))continue;const I=p.transaction_info.descriptor.data,M=p.transaction_info.descriptor.signatures[this.config.cal.mode],R={targetDevice:i,keyUsage:N.KeyUsage.Calldata,keyId:P.KeyId.CalCalldataKey},D=await this._certificateLoader.loadCertificate(R),L={type:a.ClearSignContextType.TRANSACTION_INFO,payload:m.HexStringUtils.appendSignatureToPayload(I,M,h.INFO_SIGNATURE_TAG),certificate:D},E=[];for(const[f,O]of Object.entries(p.enums))for(const[F,{data:G,signatures:k}]of Object.entries(O))E.push({type:a.ClearSignContextType.ENUM,id:Number(f),value:Number(F),payload:m.HexStringUtils.appendSignatureToPayload(G,k[this.config.cal.mode],h.INFO_SIGNATURE_TAG),certificate:D});const x=p.fields.map(f=>({type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:f.descriptor,reference:this.getReference(f.param)}));return(0,l.Right)([L,...E,...x])}return(0,l.Left)(new Error(`[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract ${t} and selector ${r}`))}getReference(e){if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="path")return{type:a.ClearSignContextReferenceType.TOKEN,valuePath:this.toGenericPath(e.token.binary_path)};if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="constant")return{type:a.ClearSignContextReferenceType.TOKEN,value:e.token.value};if(e.type==="NFT"&&e.collection.type==="path")return{type:a.ClearSignContextReferenceType.NFT,valuePath:this.toGenericPath(e.collection.binary_path)};if(e.type==="NFT"&&e.collection.type==="constant")return{type:a.ClearSignContextReferenceType.NFT,value:e.collection.value};if(e.type==="TRUSTED_NAME"&&e.value.type==="path")return{type:a.ClearSignContextReferenceType.TRUSTED_NAME,valuePath:this.toGenericPath(e.value.binary_path),types:e.types,sources:e.sources};if(e.type==="ENUM"&&e.value.type==="path")return{type:a.ClearSignContextReferenceType.ENUM,valuePath:this.toGenericPath(e.value.binary_path),id:e.id};if(e.type==="CALLDATA"&&e.value.type==="path"&&e.callee.type==="path")return{type:a.ClearSignContextReferenceType.CALLDATA,valuePath:this.toGenericPath(e.value.binary_path),callee:this.toGenericPath(e.callee.binary_path),selector:e.selector?.type==="path"?this.toGenericPath(e.selector.binary_path):void 0,amount:e.amount?.type==="path"?this.toGenericPath(e.amount.binary_path):void 0,spender:e.spender?.type==="path"?this.toGenericPath(e.spender.binary_path):void 0,chainId:e.chainId?.type==="path"?this.toGenericPath(e.chainId.binary_path):void 0}}toGenericPath(e){return e.type==="CONTAINER"?e.value:e.elements.map(t=>{if(t.type==="ARRAY"){const{weight:r,...i}=t;return{itemSize:r,...i}}else if(t.type==="LEAF"){const{leaf_type:r,...i}=t;return{leafType:r,...i}}return t})}isCalldataDescriptorV1(e,t){return typeof e=="object"&&e.type==="calldata"&&e.version==="v1"&&this.isTransactionInfoV1(e.transaction_info,t)&&this.isEnumV1(e.enums,t)&&Array.isArray(e.fields)&&e.fields.every(r=>this.isFieldV1(r))}isTransactionInfoV1(e,t){return typeof e=="object"&&typeof e.descriptor=="object"&&typeof e.descriptor.data=="string"&&typeof e.descriptor.signatures=="object"&&typeof e.descriptor.signatures[t]=="string"}isEnumV1(e,t){return typeof e=="object"&&Object.entries(e).every(([r,i])=>typeof r=="string"&&typeof i=="object"&&Object.entries(i).every(([s,n])=>typeof s=="string"&&typeof n=="object"&&typeof n.data=="string"&&n.signatures!==void 0&&this.isCalldataSignatures(n.signatures,t)))}isCalldataSignatures(e,t){return typeof e=="object"&&typeof e[t]=="string"}isFieldV1(e){return typeof e=="object"&&typeof e.descriptor=="string"&&typeof e.param=="object"&&typeof e.param.value=="object"&&this.isDescriptorValueV1(e.param.value)&&(e.param.type==="RAW"||e.param.type==="AMOUNT"||e.param.type==="DATETIME"||e.param.type==="DURATION"||e.param.type==="UNIT"||e.param.type==="ENUM"||e.param.type==="NFT"&&this.isDescriptorValueV1(e.param.collection)||e.param.type==="TOKEN_AMOUNT"&&(e.param.token===void 0||this.isDescriptorValueV1(e.param.token))||e.param.type==="TRUSTED_NAME"&&Array.isArray(e.param.types)&&Array.isArray(e.param.sources)&&e.param.types.every(t=>typeof t=="string")&&e.param.sources.every(t=>typeof t=="string")||e.param.type==="CALLDATA"&&this.isDescriptorValueV1(e.param.value)&&this.isDescriptorValueV1(e.param.callee)&&(e.param.selector===void 0||this.isDescriptorValueV1(e.param.selector))&&(e.param.amount===void 0||this.isDescriptorValueV1(e.param.amount))&&(e.param.spender===void 0||this.isDescriptorValueV1(e.param.spender))&&(e.param.chainId===void 0||this.isDescriptorValueV1(e.param.chainId)))}isDescriptorValueV1(e){return typeof e=="object"&&typeof e.type_family=="string"&&["UINT","INT","UFIXED","FIXED","ADDRESS","BOOL","BYTES","STRING"].includes(e.type_family)&&(typeof e.type_size>"u"||typeof e.type_size=="number")&&(e.type==="path"&&this.isCalldataDescriptorValueBinaryPathV1(e)||e.type==="constant"&&this.isCalldataDescriptorValueConstantV1(e))}isCalldataDescriptorValueConstantV1(e){return typeof e=="object"&&e.type==="constant"&&typeof e.value=="string"}isCalldataDescriptorValueBinaryPathV1(e){return typeof e=="object"&&(e.type==="path"&&e.binary_path.type==="CONTAINER"&&["FROM","TO","VALUE"].includes(e.binary_path.value)||e.binary_path.type==="DATA"&&Array.isArray(e.binary_path.elements)&&e.binary_path.elements.every(t=>this.isPathElementV1(t)))}isPathElementV1(e){return typeof e=="object"&&(e.type==="REF"||e.type==="TUPLE"&&typeof e.offset=="number"||e.type==="ARRAY"&&typeof e.weight=="number"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number")||e.type==="LEAF"&&typeof e.leaf_type=="string"&&["ARRAY_LEAF","TUPLE_LEAF","STATIC_LEAF","DYNAMIC_LEAF"].includes(e.leaf_type)||e.type==="SLICE"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number"))}};u=A([(0,y.injectable)(),d(0,(0,y.inject)(v.configTypes.Config)),d(1,(0,y.inject)(b.pkiTypes.PkiCertificateLoader))],u);0&&(module.exports={HttpCalldataDescriptorDataSource});
1
+ "use strict";var f=Object.defineProperty;var V=Object.getOwnPropertyDescriptor;var L=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var F=(o,e)=>{for(var t in e)f(o,t,{get:e[t],enumerable:!0})},U=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of L(e))!O.call(o,i)&&i!==t&&f(o,i,{get:()=>e[i],enumerable:!(r=V(e,i))||r.enumerable});return o};var j=o=>U(f({},"__esModule",{value:!0}),o),g=(o,e,t,r)=>{for(var i=r>1?void 0:r?V(e,t):e,s=o.length-1,n;s>=0;s--)(n=o[s])&&(i=(r?n(e,t,i):n(i))||i);return r&&i&&f(e,t,i),i},C=(o,e)=>(t,r)=>e(t,r,o);var G={};F(G,{HttpCalldataDescriptorDataSource:()=>y});module.exports=j(G);var c=require("inversify"),l=require("purify-ts"),T=require("../../config/di/configTypes"),A=require("../../network/di/networkTypes"),E=require("../../pki/di/pkiTypes"),v=require("../../pki/model/KeyId"),_=require("../../pki/model/KeyUsage"),a=require("../../shared/model/ClearSignContext"),d=require("../../shared/model/SignatureTags"),h=require("../../shared/utils/HexStringUtils");let y=class{constructor(e,t,r,i){this.config=e;this._certificateLoader=t;this.endpoint=r;this.http=i}async getCalldataDescriptors({chainId:e,address:t,selector:r,deviceModelId:i}){let s;try{s=await this.http.get(`${this.config.cal.url}/${this.endpoint}`,{params:{output:"descriptors_calldata",chain_id:e,contracts:t,contract_address:t,ref:`branch:${this.config.cal.branch}`}})}catch(n){return(0,l.Left)(new Error(`[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: ${n}`))}if(!Array.isArray(s))return(0,l.Left)(new Error("[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array"));if(s.length===0)return(0,l.Left)(new Error(`[ContextModule] HttpCalldataDescriptorDataSource: No data for contract ${t} and selector ${r}`));for(const n of s){t=t.toLowerCase(),r=`0x${r.slice(2).toLowerCase()}`;const p=n.descriptors_calldata?.[t]?.[r];if(!p||!this.isCalldataDescriptorV1(p,this.config.cal.mode))continue;const b=p.transaction_info.descriptor.data,P=p.transaction_info.descriptor.signatures[this.config.cal.mode],N={targetDevice:i,keyUsage:_.KeyUsage.Calldata,keyId:v.KeyId.CalCalldataKey},m=await this._certificateLoader.loadCertificate(N),S={type:a.ClearSignContextType.TRANSACTION_INFO,payload:h.HexStringUtils.appendSignatureToPayload(b,P,d.INFO_SIGNATURE_TAG),certificate:m},D=[];for(const[u,M]of Object.entries(p.enums))for(const[R,{data:k,signatures:x}]of Object.entries(M))D.push({type:a.ClearSignContextType.ENUM,id:Number(u),value:Number(R),payload:h.HexStringUtils.appendSignatureToPayload(k,x[this.config.cal.mode],d.INFO_SIGNATURE_TAG),certificate:m});const I=p.fields.map(u=>({type:a.ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,payload:u.descriptor,reference:this.getReference(u.param)}));return(0,l.Right)([S,...D,...I])}return(0,l.Left)(new Error(`[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract ${t} and selector ${r}`))}getReference(e){if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="path")return{type:a.ClearSignContextReferenceType.TOKEN,valuePath:this.toGenericPath(e.token.binary_path)};if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="constant")return{type:a.ClearSignContextReferenceType.TOKEN,value:e.token.value};if(e.type==="NFT"&&e.collection.type==="path")return{type:a.ClearSignContextReferenceType.NFT,valuePath:this.toGenericPath(e.collection.binary_path)};if(e.type==="NFT"&&e.collection.type==="constant")return{type:a.ClearSignContextReferenceType.NFT,value:e.collection.value};if(e.type==="TRUSTED_NAME"&&e.value.type==="path")return{type:a.ClearSignContextReferenceType.TRUSTED_NAME,valuePath:this.toGenericPath(e.value.binary_path),types:e.types,sources:e.sources};if(e.type==="ENUM"&&e.value.type==="path")return{type:a.ClearSignContextReferenceType.ENUM,valuePath:this.toGenericPath(e.value.binary_path),id:e.id};if(e.type==="CALLDATA"&&e.value.type==="path"&&e.callee.type==="path")return{type:a.ClearSignContextReferenceType.CALLDATA,valuePath:this.toGenericPath(e.value.binary_path),callee:this.toGenericPath(e.callee.binary_path),selector:e.selector?.type==="path"?this.toGenericPath(e.selector.binary_path):void 0,amount:e.amount?.type==="path"?this.toGenericPath(e.amount.binary_path):void 0,spender:e.spender?.type==="path"?this.toGenericPath(e.spender.binary_path):void 0,chainId:e.chainId?.type==="path"?this.toGenericPath(e.chainId.binary_path):void 0}}toGenericPath(e){return e.type==="CONTAINER"?e.value:e.elements.map(t=>{if(t.type==="ARRAY"){const{weight:r,...i}=t;return{itemSize:r,...i}}else if(t.type==="LEAF"){const{leaf_type:r,...i}=t;return{leafType:r,...i}}return t})}isCalldataDescriptorV1(e,t){return typeof e=="object"&&e.type==="calldata"&&e.version==="v1"&&this.isTransactionInfoV1(e.transaction_info,t)&&this.isEnumV1(e.enums,t)&&Array.isArray(e.fields)&&e.fields.every(r=>this.isFieldV1(r))}isTransactionInfoV1(e,t){return typeof e=="object"&&typeof e.descriptor=="object"&&typeof e.descriptor.data=="string"&&typeof e.descriptor.signatures=="object"&&typeof e.descriptor.signatures[t]=="string"}isEnumV1(e,t){return typeof e=="object"&&Object.entries(e).every(([r,i])=>typeof r=="string"&&typeof i=="object"&&Object.entries(i).every(([s,n])=>typeof s=="string"&&typeof n=="object"&&typeof n.data=="string"&&n.signatures!==void 0&&this.isCalldataSignatures(n.signatures,t)))}isCalldataSignatures(e,t){return typeof e=="object"&&typeof e[t]=="string"}isFieldV1(e){return typeof e=="object"&&typeof e.descriptor=="string"&&typeof e.param=="object"&&typeof e.param.value=="object"&&this.isDescriptorValueV1(e.param.value)&&(e.param.type==="RAW"||e.param.type==="AMOUNT"||e.param.type==="DATETIME"||e.param.type==="DURATION"||e.param.type==="UNIT"||e.param.type==="ENUM"||e.param.type==="NFT"&&this.isDescriptorValueV1(e.param.collection)||e.param.type==="TOKEN_AMOUNT"&&(e.param.token===void 0||this.isDescriptorValueV1(e.param.token))||e.param.type==="TRUSTED_NAME"&&Array.isArray(e.param.types)&&Array.isArray(e.param.sources)&&e.param.types.every(t=>typeof t=="string")&&e.param.sources.every(t=>typeof t=="string")||e.param.type==="CALLDATA"&&this.isDescriptorValueV1(e.param.value)&&this.isDescriptorValueV1(e.param.callee)&&(e.param.selector===void 0||this.isDescriptorValueV1(e.param.selector))&&(e.param.amount===void 0||this.isDescriptorValueV1(e.param.amount))&&(e.param.spender===void 0||this.isDescriptorValueV1(e.param.spender))&&(e.param.chainId===void 0||this.isDescriptorValueV1(e.param.chainId)))}isDescriptorValueV1(e){return typeof e=="object"&&typeof e.type_family=="string"&&["UINT","INT","UFIXED","FIXED","ADDRESS","BOOL","BYTES","STRING"].includes(e.type_family)&&(typeof e.type_size>"u"||typeof e.type_size=="number")&&(e.type==="path"&&this.isCalldataDescriptorValueBinaryPathV1(e)||e.type==="constant"&&this.isCalldataDescriptorValueConstantV1(e))}isCalldataDescriptorValueConstantV1(e){return typeof e=="object"&&e.type==="constant"&&typeof e.value=="string"}isCalldataDescriptorValueBinaryPathV1(e){return typeof e=="object"&&(e.type==="path"&&e.binary_path.type==="CONTAINER"&&["FROM","TO","VALUE"].includes(e.binary_path.value)||e.binary_path.type==="DATA"&&Array.isArray(e.binary_path.elements)&&e.binary_path.elements.every(t=>this.isPathElementV1(t)))}isPathElementV1(e){return typeof e=="object"&&(e.type==="REF"||e.type==="TUPLE"&&typeof e.offset=="number"||e.type==="ARRAY"&&typeof e.weight=="number"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number")||e.type==="LEAF"&&typeof e.leaf_type=="string"&&["ARRAY_LEAF","TUPLE_LEAF","STATIC_LEAF","DYNAMIC_LEAF"].includes(e.leaf_type)||e.type==="SLICE"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number"))}};y=g([(0,c.injectable)(),C(0,(0,c.inject)(T.configTypes.Config)),C(1,(0,c.inject)(E.pkiTypes.PkiCertificateLoader)),C(3,(0,c.inject)(A.networkTypes.NetworkClient))],y);0&&(module.exports={HttpCalldataDescriptorDataSource});
2
2
  //# sourceMappingURL=HttpCalldataDescriptorDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/calldata/data/HttpCalldataDescriptorDataSource.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 {\n type ContextModuleCalMode,\n type ContextModuleServiceConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { PkiCertificateInfo } from \"@/pki/model/PkiCertificateInfo\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport {\n ClearSignContextReference,\n ClearSignContextReferenceType,\n ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { GenericPath } from \"@/shared/model/GenericPath\";\nimport { INFO_SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport PACKAGE from \"@root/package.json\";\n\nimport {\n CalldataDescriptor,\n CalldataDescriptorContainerPathV1,\n CalldataDescriptorParam,\n CalldataDescriptorPathElementsV1,\n CalldataDescriptorPathElementV1,\n CalldataDescriptorV1,\n CalldataDescriptorValueBinaryPathV1,\n CalldataDescriptorValueConstantV1,\n CalldataDescriptorValueV1,\n CalldataDto,\n CalldataEnumV1,\n CalldataFieldV1,\n CalldataSignatures,\n CalldataTransactionDescriptor,\n CalldataTransactionInfoV1,\n} from \"./dto/CalldataDto\";\nimport {\n CalldataDescriptorDataSource,\n GetCalldataDescriptorsParams,\n} from \"./CalldataDescriptorDataSource\";\n\n@injectable()\nexport class HttpCalldataDescriptorDataSource\n implements CalldataDescriptorDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n private readonly endpoint: string,\n ) {}\n\n public async getCalldataDescriptors({\n chainId,\n address,\n selector,\n deviceModelId,\n }: GetCalldataDescriptorsParams): Promise<\n Either<Error, ClearSignContextSuccess[]>\n > {\n let dto: CalldataDto[] | undefined;\n try {\n const response = await axios.request<CalldataDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/${this.endpoint}`,\n params: {\n output: \"descriptors_calldata\",\n chain_id: chainId,\n contracts: address, // used for dapps\n contract_address: address, // used for tokens\n ref: `branch:${this.config.cal.branch}`,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n });\n dto = response.data;\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: ${error}`,\n ),\n );\n }\n\n if (!Array.isArray(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array`,\n ),\n );\n }\n\n if (dto.length === 0) {\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: No data for contract ${address} and selector ${selector}`,\n ),\n );\n }\n\n for (const calldata of dto) {\n // Normalize the address and selector\n address = address.toLowerCase();\n selector = `0x${selector.slice(2).toLowerCase()}`;\n const calldataDescriptor =\n calldata.descriptors_calldata?.[address]?.[selector];\n\n if (\n !calldataDescriptor ||\n !this.isCalldataDescriptorV1(calldataDescriptor, this.config.cal.mode)\n ) {\n continue;\n }\n\n const infoData = calldataDescriptor.transaction_info.descriptor.data;\n const infoSignature =\n calldataDescriptor.transaction_info.descriptor.signatures[\n this.config.cal.mode\n ];\n\n const certificateInfos: PkiCertificateInfo = {\n targetDevice: deviceModelId,\n keyUsage: KeyUsage.Calldata,\n keyId: KeyId.CalCalldataKey,\n };\n const certificate: PkiCertificate | undefined =\n await this._certificateLoader.loadCertificate(certificateInfos);\n\n const info: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: HexStringUtils.appendSignatureToPayload(\n infoData,\n infoSignature,\n INFO_SIGNATURE_TAG,\n ),\n certificate,\n };\n\n const enums: ClearSignContextSuccess[] = [];\n for (const [id, values] of Object.entries(calldataDescriptor.enums)) {\n for (const [\n value,\n { data, signatures },\n ] of Object.entries<CalldataTransactionDescriptor>(values)) {\n enums.push({\n type: ClearSignContextType.ENUM,\n id: Number(id),\n value: Number(value),\n payload: HexStringUtils.appendSignatureToPayload(\n data,\n signatures[this.config.cal.mode]!,\n INFO_SIGNATURE_TAG,\n ),\n certificate,\n });\n }\n }\n\n const fields: ClearSignContextSuccess[] = calldataDescriptor.fields.map(\n (field) => ({\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: field.descriptor,\n reference: this.getReference(field.param),\n }),\n );\n return Right([info, ...enums, ...fields]);\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract ${address} and selector ${selector}`,\n ),\n );\n }\n\n private getReference(\n param: CalldataDescriptorParam,\n ): ClearSignContextReference | undefined {\n if (\n param.type === \"TOKEN_AMOUNT\" &&\n param.token !== undefined &&\n param.token.type === \"path\"\n ) {\n return {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: this.toGenericPath(param.token.binary_path),\n };\n } else if (\n param.type === \"TOKEN_AMOUNT\" &&\n param.token !== undefined &&\n param.token.type === \"constant\"\n ) {\n return {\n type: ClearSignContextReferenceType.TOKEN,\n value: param.token.value,\n };\n } else if (param.type === \"NFT\" && param.collection.type === \"path\") {\n return {\n type: ClearSignContextReferenceType.NFT,\n valuePath: this.toGenericPath(param.collection.binary_path),\n };\n } else if (param.type === \"NFT\" && param.collection.type === \"constant\") {\n return {\n type: ClearSignContextReferenceType.NFT,\n value: param.collection.value,\n };\n } else if (param.type === \"TRUSTED_NAME\" && param.value.type === \"path\") {\n return {\n type: ClearSignContextReferenceType.TRUSTED_NAME,\n valuePath: this.toGenericPath(param.value.binary_path),\n types: param.types,\n sources: param.sources,\n };\n } else if (param.type === \"ENUM\" && param.value.type === \"path\") {\n return {\n type: ClearSignContextReferenceType.ENUM,\n valuePath: this.toGenericPath(param.value.binary_path),\n id: param.id,\n };\n } else if (\n param.type === \"CALLDATA\" &&\n param.value.type === \"path\" &&\n param.callee.type === \"path\"\n ) {\n return {\n type: ClearSignContextReferenceType.CALLDATA,\n valuePath: this.toGenericPath(param.value.binary_path),\n callee: this.toGenericPath(param.callee.binary_path),\n selector:\n param.selector?.type === \"path\"\n ? this.toGenericPath(param.selector.binary_path)\n : undefined,\n amount:\n param.amount?.type === \"path\"\n ? this.toGenericPath(param.amount.binary_path)\n : undefined,\n spender:\n param.spender?.type === \"path\"\n ? this.toGenericPath(param.spender.binary_path)\n : undefined,\n chainId:\n param.chainId?.type === \"path\"\n ? this.toGenericPath(param.chainId.binary_path)\n : undefined,\n };\n }\n return undefined;\n }\n\n private toGenericPath(\n path: CalldataDescriptorContainerPathV1 | CalldataDescriptorPathElementsV1,\n ): GenericPath {\n if (path.type === \"CONTAINER\") {\n return path.value;\n }\n return path.elements.map((element) => {\n if (element.type === \"ARRAY\") {\n const { weight: itemSize, ...rest } = element;\n return {\n itemSize,\n ...rest,\n };\n } else if (element.type === \"LEAF\") {\n const { leaf_type: leafType, ...rest } = element;\n return {\n leafType,\n ...rest,\n };\n }\n return element;\n });\n }\n\n private isCalldataDescriptorV1(\n data: CalldataDescriptor,\n mode: ContextModuleCalMode,\n ): data is CalldataDescriptorV1 & {\n transaction_info: {\n descriptor: {\n signatures: { [_key in ContextModuleCalMode]: string };\n };\n };\n } {\n return (\n typeof data === \"object\" &&\n data.type === \"calldata\" &&\n data.version === \"v1\" &&\n this.isTransactionInfoV1(data.transaction_info, mode) &&\n this.isEnumV1(data.enums, mode) &&\n Array.isArray(data.fields) &&\n data.fields.every((f) => this.isFieldV1(f))\n );\n }\n\n private isTransactionInfoV1(\n data: CalldataTransactionInfoV1,\n mode: ContextModuleCalMode,\n ): data is CalldataTransactionInfoV1 & {\n descriptor: {\n signatures: { [_key in ContextModuleCalMode]: string };\n };\n } {\n return (\n typeof data === \"object\" &&\n typeof data.descriptor === \"object\" &&\n typeof data.descriptor.data === \"string\" &&\n typeof data.descriptor.signatures === \"object\" &&\n typeof data.descriptor.signatures[mode] === \"string\"\n );\n }\n\n private isEnumV1(\n calldata: CalldataEnumV1,\n mode: ContextModuleCalMode,\n ): calldata is CalldataEnumV1 {\n return (\n typeof calldata === \"object\" &&\n Object.entries(calldata).every(\n ([id, values]) =>\n typeof id === \"string\" &&\n typeof values === \"object\" &&\n Object.entries<CalldataTransactionDescriptor>(values).every(\n ([value, obj]) =>\n typeof value === \"string\" &&\n typeof obj === \"object\" &&\n typeof obj.data === \"string\" &&\n obj.signatures !== undefined &&\n this.isCalldataSignatures(obj.signatures, mode),\n ),\n )\n );\n }\n\n private isCalldataSignatures(\n data: CalldataSignatures,\n mode: ContextModuleCalMode,\n ): data is CalldataSignatures & { [_key in ContextModuleCalMode]: string } {\n return typeof data === \"object\" && typeof data[mode] === \"string\";\n }\n\n private isFieldV1(data: CalldataFieldV1): boolean {\n return (\n typeof data === \"object\" &&\n typeof data.descriptor === \"string\" &&\n typeof data.param === \"object\" &&\n typeof data.param.value === \"object\" &&\n this.isDescriptorValueV1(data.param.value) &&\n (data.param.type === \"RAW\" ||\n data.param.type === \"AMOUNT\" ||\n data.param.type === \"DATETIME\" ||\n data.param.type === \"DURATION\" ||\n data.param.type === \"UNIT\" ||\n data.param.type === \"ENUM\" ||\n (data.param.type === \"NFT\" &&\n this.isDescriptorValueV1(data.param.collection)) ||\n (data.param.type === \"TOKEN_AMOUNT\" &&\n (data.param.token === undefined ||\n this.isDescriptorValueV1(data.param.token))) ||\n (data.param.type === \"TRUSTED_NAME\" &&\n Array.isArray(data.param.types) &&\n Array.isArray(data.param.sources) &&\n data.param.types.every((t) => typeof t === \"string\") &&\n data.param.sources.every((t) => typeof t === \"string\")) ||\n (data.param.type === \"CALLDATA\" &&\n this.isDescriptorValueV1(data.param.value) &&\n this.isDescriptorValueV1(data.param.callee) &&\n (data.param.selector === undefined ||\n this.isDescriptorValueV1(data.param.selector)) &&\n (data.param.amount === undefined ||\n this.isDescriptorValueV1(data.param.amount)) &&\n (data.param.spender === undefined ||\n this.isDescriptorValueV1(data.param.spender)) &&\n (data.param.chainId === undefined ||\n this.isDescriptorValueV1(data.param.chainId))))\n );\n }\n\n private isDescriptorValueV1(data: CalldataDescriptorValueV1): boolean {\n return (\n typeof data === \"object\" &&\n typeof data.type_family === \"string\" &&\n [\n \"UINT\",\n \"INT\",\n \"UFIXED\",\n \"FIXED\",\n \"ADDRESS\",\n \"BOOL\",\n \"BYTES\",\n \"STRING\",\n ].includes(data.type_family) &&\n (typeof data.type_size === \"undefined\" ||\n typeof data.type_size === \"number\") &&\n ((data.type === \"path\" &&\n this.isCalldataDescriptorValueBinaryPathV1(data)) ||\n (data.type === \"constant\" &&\n this.isCalldataDescriptorValueConstantV1(data)))\n );\n }\n\n private isCalldataDescriptorValueConstantV1(\n data: CalldataDescriptorValueConstantV1,\n ): boolean {\n return (\n typeof data === \"object\" &&\n data.type === \"constant\" &&\n typeof data.value === \"string\"\n );\n }\n\n private isCalldataDescriptorValueBinaryPathV1(\n data: CalldataDescriptorValueBinaryPathV1,\n ): boolean {\n return (\n typeof data === \"object\" &&\n ((data.type === \"path\" &&\n data.binary_path.type === \"CONTAINER\" &&\n [\"FROM\", \"TO\", \"VALUE\"].includes(data.binary_path.value)) ||\n (data.binary_path.type === \"DATA\" &&\n Array.isArray(data.binary_path.elements) &&\n data.binary_path.elements.every((e) => this.isPathElementV1(e))))\n );\n }\n\n private isPathElementV1(data: CalldataDescriptorPathElementV1): boolean {\n return (\n typeof data === \"object\" &&\n (data.type === \"REF\" ||\n (data.type === \"TUPLE\" && typeof data.offset === \"number\") ||\n (data.type === \"ARRAY\" &&\n typeof data.weight === \"number\" &&\n (typeof data.start === \"undefined\" ||\n typeof data.start === \"number\") &&\n (typeof data.end === \"undefined\" || typeof data.end === \"number\")) ||\n (data.type === \"LEAF\" &&\n typeof data.leaf_type === \"string\" &&\n [\"ARRAY_LEAF\", \"TUPLE_LEAF\", \"STATIC_LEAF\", \"DYNAMIC_LEAF\"].includes(\n data.leaf_type,\n )) ||\n (data.type === \"SLICE\" &&\n (typeof data.start === \"undefined\" ||\n typeof data.start === \"number\") &&\n (typeof data.end === \"undefined\" || typeof data.end === \"number\")))\n );\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["HttpCalldataDescriptorDataSource_exports", "__export", "HttpCalldataDescriptorDataSource", "__toCommonJS", "import_axios", "import_inversify", "import_purify_ts", "import_configTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_HttpHeaders", "import_ClearSignContext", "import_SignatureTags", "import_HexStringUtils", "import_package", "HttpCalldataDescriptorDataSource", "config", "_certificateLoader", "endpoint", "chainId", "address", "selector", "deviceModelId", "dto", "axios", "PACKAGE", "error", "calldata", "calldataDescriptor", "infoData", "infoSignature", "certificateInfos", "certificate", "info", "enums", "id", "values", "value", "data", "signatures", "fields", "field", "param", "path", "element", "itemSize", "rest", "leafType", "mode", "f", "obj", "e", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport {\n type ContextModuleCalMode,\n type ContextModuleServiceConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/network/di/networkTypes\";\nimport { pkiTypes } from \"@/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { PkiCertificateInfo } from \"@/pki/model/PkiCertificateInfo\";\nimport {\n ClearSignContextReference,\n ClearSignContextReferenceType,\n ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { GenericPath } from \"@/shared/model/GenericPath\";\nimport { INFO_SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\nimport {\n CalldataDescriptor,\n CalldataDescriptorContainerPathV1,\n CalldataDescriptorParam,\n CalldataDescriptorPathElementsV1,\n CalldataDescriptorPathElementV1,\n CalldataDescriptorV1,\n CalldataDescriptorValueBinaryPathV1,\n CalldataDescriptorValueConstantV1,\n CalldataDescriptorValueV1,\n CalldataDto,\n CalldataEnumV1,\n CalldataFieldV1,\n CalldataSignatures,\n CalldataTransactionDescriptor,\n CalldataTransactionInfoV1,\n} from \"./dto/CalldataDto\";\nimport {\n CalldataDescriptorDataSource,\n GetCalldataDescriptorsParams,\n} from \"./CalldataDescriptorDataSource\";\n\n@injectable()\nexport class HttpCalldataDescriptorDataSource\n implements CalldataDescriptorDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n private readonly endpoint: string,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getCalldataDescriptors({\n chainId,\n address,\n selector,\n deviceModelId,\n }: GetCalldataDescriptorsParams): Promise<\n Either<Error, ClearSignContextSuccess[]>\n > {\n let dto: CalldataDto[] | undefined;\n try {\n dto = (await this.http.get(`${this.config.cal.url}/${this.endpoint}`, {\n params: {\n output: \"descriptors_calldata\",\n chain_id: chainId,\n contracts: address,\n contract_address: address,\n ref: `branch:${this.config.cal.branch}`,\n },\n })) as CalldataDto[];\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: Failed to fetch calldata descriptors: ${error}`,\n ),\n );\n }\n\n if (!Array.isArray(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: Response is not an array`,\n ),\n );\n }\n\n if (dto.length === 0) {\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: No data for contract ${address} and selector ${selector}`,\n ),\n );\n }\n\n for (const calldata of dto) {\n // Normalize the address and selector\n address = address.toLowerCase();\n selector = `0x${selector.slice(2).toLowerCase()}`;\n const calldataDescriptor =\n calldata.descriptors_calldata?.[address]?.[selector];\n\n if (\n !calldataDescriptor ||\n !this.isCalldataDescriptorV1(calldataDescriptor, this.config.cal.mode)\n ) {\n continue;\n }\n\n const infoData = calldataDescriptor.transaction_info.descriptor.data;\n const infoSignature =\n calldataDescriptor.transaction_info.descriptor.signatures[\n this.config.cal.mode\n ];\n\n const certificateInfos: PkiCertificateInfo = {\n targetDevice: deviceModelId,\n keyUsage: KeyUsage.Calldata,\n keyId: KeyId.CalCalldataKey,\n };\n const certificate: PkiCertificate | undefined =\n await this._certificateLoader.loadCertificate(certificateInfos);\n\n const info: ClearSignContextSuccess = {\n type: ClearSignContextType.TRANSACTION_INFO,\n payload: HexStringUtils.appendSignatureToPayload(\n infoData,\n infoSignature,\n INFO_SIGNATURE_TAG,\n ),\n certificate,\n };\n\n const enums: ClearSignContextSuccess[] = [];\n for (const [id, values] of Object.entries(calldataDescriptor.enums)) {\n for (const [\n value,\n { data, signatures },\n ] of Object.entries<CalldataTransactionDescriptor>(values)) {\n enums.push({\n type: ClearSignContextType.ENUM,\n id: Number(id),\n value: Number(value),\n payload: HexStringUtils.appendSignatureToPayload(\n data,\n signatures[this.config.cal.mode]!,\n INFO_SIGNATURE_TAG,\n ),\n certificate,\n });\n }\n }\n\n const fields: ClearSignContextSuccess[] = calldataDescriptor.fields.map(\n (field) => ({\n type: ClearSignContextType.TRANSACTION_FIELD_DESCRIPTION,\n payload: field.descriptor,\n reference: this.getReference(field.param),\n }),\n );\n return Right([info, ...enums, ...fields]);\n }\n\n return Left(\n new Error(\n `[ContextModule] HttpCalldataDescriptorDataSource: Invalid response for contract ${address} and selector ${selector}`,\n ),\n );\n }\n\n private getReference(\n param: CalldataDescriptorParam,\n ): ClearSignContextReference | undefined {\n if (\n param.type === \"TOKEN_AMOUNT\" &&\n param.token !== undefined &&\n param.token.type === \"path\"\n ) {\n return {\n type: ClearSignContextReferenceType.TOKEN,\n valuePath: this.toGenericPath(param.token.binary_path),\n };\n } else if (\n param.type === \"TOKEN_AMOUNT\" &&\n param.token !== undefined &&\n param.token.type === \"constant\"\n ) {\n return {\n type: ClearSignContextReferenceType.TOKEN,\n value: param.token.value,\n };\n } else if (param.type === \"NFT\" && param.collection.type === \"path\") {\n return {\n type: ClearSignContextReferenceType.NFT,\n valuePath: this.toGenericPath(param.collection.binary_path),\n };\n } else if (param.type === \"NFT\" && param.collection.type === \"constant\") {\n return {\n type: ClearSignContextReferenceType.NFT,\n value: param.collection.value,\n };\n } else if (param.type === \"TRUSTED_NAME\" && param.value.type === \"path\") {\n return {\n type: ClearSignContextReferenceType.TRUSTED_NAME,\n valuePath: this.toGenericPath(param.value.binary_path),\n types: param.types,\n sources: param.sources,\n };\n } else if (param.type === \"ENUM\" && param.value.type === \"path\") {\n return {\n type: ClearSignContextReferenceType.ENUM,\n valuePath: this.toGenericPath(param.value.binary_path),\n id: param.id,\n };\n } else if (\n param.type === \"CALLDATA\" &&\n param.value.type === \"path\" &&\n param.callee.type === \"path\"\n ) {\n return {\n type: ClearSignContextReferenceType.CALLDATA,\n valuePath: this.toGenericPath(param.value.binary_path),\n callee: this.toGenericPath(param.callee.binary_path),\n selector:\n param.selector?.type === \"path\"\n ? this.toGenericPath(param.selector.binary_path)\n : undefined,\n amount:\n param.amount?.type === \"path\"\n ? this.toGenericPath(param.amount.binary_path)\n : undefined,\n spender:\n param.spender?.type === \"path\"\n ? this.toGenericPath(param.spender.binary_path)\n : undefined,\n chainId:\n param.chainId?.type === \"path\"\n ? this.toGenericPath(param.chainId.binary_path)\n : undefined,\n };\n }\n return undefined;\n }\n\n private toGenericPath(\n path: CalldataDescriptorContainerPathV1 | CalldataDescriptorPathElementsV1,\n ): GenericPath {\n if (path.type === \"CONTAINER\") {\n return path.value;\n }\n return path.elements.map((element) => {\n if (element.type === \"ARRAY\") {\n const { weight: itemSize, ...rest } = element;\n return {\n itemSize,\n ...rest,\n };\n } else if (element.type === \"LEAF\") {\n const { leaf_type: leafType, ...rest } = element;\n return {\n leafType,\n ...rest,\n };\n }\n return element;\n });\n }\n\n private isCalldataDescriptorV1(\n data: CalldataDescriptor,\n mode: ContextModuleCalMode,\n ): data is CalldataDescriptorV1 & {\n transaction_info: {\n descriptor: {\n signatures: { [_key in ContextModuleCalMode]: string };\n };\n };\n } {\n return (\n typeof data === \"object\" &&\n data.type === \"calldata\" &&\n data.version === \"v1\" &&\n this.isTransactionInfoV1(data.transaction_info, mode) &&\n this.isEnumV1(data.enums, mode) &&\n Array.isArray(data.fields) &&\n data.fields.every((f) => this.isFieldV1(f))\n );\n }\n\n private isTransactionInfoV1(\n data: CalldataTransactionInfoV1,\n mode: ContextModuleCalMode,\n ): data is CalldataTransactionInfoV1 & {\n descriptor: {\n signatures: { [_key in ContextModuleCalMode]: string };\n };\n } {\n return (\n typeof data === \"object\" &&\n typeof data.descriptor === \"object\" &&\n typeof data.descriptor.data === \"string\" &&\n typeof data.descriptor.signatures === \"object\" &&\n typeof data.descriptor.signatures[mode] === \"string\"\n );\n }\n\n private isEnumV1(\n calldata: CalldataEnumV1,\n mode: ContextModuleCalMode,\n ): calldata is CalldataEnumV1 {\n return (\n typeof calldata === \"object\" &&\n Object.entries(calldata).every(\n ([id, values]) =>\n typeof id === \"string\" &&\n typeof values === \"object\" &&\n Object.entries<CalldataTransactionDescriptor>(values).every(\n ([value, obj]) =>\n typeof value === \"string\" &&\n typeof obj === \"object\" &&\n typeof obj.data === \"string\" &&\n obj.signatures !== undefined &&\n this.isCalldataSignatures(obj.signatures, mode),\n ),\n )\n );\n }\n\n private isCalldataSignatures(\n data: CalldataSignatures,\n mode: ContextModuleCalMode,\n ): data is CalldataSignatures & { [_key in ContextModuleCalMode]: string } {\n return typeof data === \"object\" && typeof data[mode] === \"string\";\n }\n\n private isFieldV1(data: CalldataFieldV1): boolean {\n return (\n typeof data === \"object\" &&\n typeof data.descriptor === \"string\" &&\n typeof data.param === \"object\" &&\n typeof data.param.value === \"object\" &&\n this.isDescriptorValueV1(data.param.value) &&\n (data.param.type === \"RAW\" ||\n data.param.type === \"AMOUNT\" ||\n data.param.type === \"DATETIME\" ||\n data.param.type === \"DURATION\" ||\n data.param.type === \"UNIT\" ||\n data.param.type === \"ENUM\" ||\n (data.param.type === \"NFT\" &&\n this.isDescriptorValueV1(data.param.collection)) ||\n (data.param.type === \"TOKEN_AMOUNT\" &&\n (data.param.token === undefined ||\n this.isDescriptorValueV1(data.param.token))) ||\n (data.param.type === \"TRUSTED_NAME\" &&\n Array.isArray(data.param.types) &&\n Array.isArray(data.param.sources) &&\n data.param.types.every((t) => typeof t === \"string\") &&\n data.param.sources.every((t) => typeof t === \"string\")) ||\n (data.param.type === \"CALLDATA\" &&\n this.isDescriptorValueV1(data.param.value) &&\n this.isDescriptorValueV1(data.param.callee) &&\n (data.param.selector === undefined ||\n this.isDescriptorValueV1(data.param.selector)) &&\n (data.param.amount === undefined ||\n this.isDescriptorValueV1(data.param.amount)) &&\n (data.param.spender === undefined ||\n this.isDescriptorValueV1(data.param.spender)) &&\n (data.param.chainId === undefined ||\n this.isDescriptorValueV1(data.param.chainId))))\n );\n }\n\n private isDescriptorValueV1(data: CalldataDescriptorValueV1): boolean {\n return (\n typeof data === \"object\" &&\n typeof data.type_family === \"string\" &&\n [\n \"UINT\",\n \"INT\",\n \"UFIXED\",\n \"FIXED\",\n \"ADDRESS\",\n \"BOOL\",\n \"BYTES\",\n \"STRING\",\n ].includes(data.type_family) &&\n (typeof data.type_size === \"undefined\" ||\n typeof data.type_size === \"number\") &&\n ((data.type === \"path\" &&\n this.isCalldataDescriptorValueBinaryPathV1(data)) ||\n (data.type === \"constant\" &&\n this.isCalldataDescriptorValueConstantV1(data)))\n );\n }\n\n private isCalldataDescriptorValueConstantV1(\n data: CalldataDescriptorValueConstantV1,\n ): boolean {\n return (\n typeof data === \"object\" &&\n data.type === \"constant\" &&\n typeof data.value === \"string\"\n );\n }\n\n private isCalldataDescriptorValueBinaryPathV1(\n data: CalldataDescriptorValueBinaryPathV1,\n ): boolean {\n return (\n typeof data === \"object\" &&\n ((data.type === \"path\" &&\n data.binary_path.type === \"CONTAINER\" &&\n [\"FROM\", \"TO\", \"VALUE\"].includes(data.binary_path.value)) ||\n (data.binary_path.type === \"DATA\" &&\n Array.isArray(data.binary_path.elements) &&\n data.binary_path.elements.every((e) => this.isPathElementV1(e))))\n );\n }\n\n private isPathElementV1(data: CalldataDescriptorPathElementV1): boolean {\n return (\n typeof data === \"object\" &&\n (data.type === \"REF\" ||\n (data.type === \"TUPLE\" && typeof data.offset === \"number\") ||\n (data.type === \"ARRAY\" &&\n typeof data.weight === \"number\" &&\n (typeof data.start === \"undefined\" ||\n typeof data.start === \"number\") &&\n (typeof data.end === \"undefined\" || typeof data.end === \"number\")) ||\n (data.type === \"LEAF\" &&\n typeof data.leaf_type === \"string\" &&\n [\"ARRAY_LEAF\", \"TUPLE_LEAF\", \"STATIC_LEAF\", \"DYNAMIC_LEAF\"].includes(\n data.leaf_type,\n )) ||\n (data.type === \"SLICE\" &&\n (typeof data.start === \"undefined\" ||\n typeof data.start === \"number\") &&\n (typeof data.end === \"undefined\" || typeof data.end === \"number\")))\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["HttpCalldataDescriptorDataSource_exports", "__export", "HttpCalldataDescriptorDataSource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_ClearSignContext", "import_SignatureTags", "import_HexStringUtils", "HttpCalldataDescriptorDataSource", "config", "_certificateLoader", "endpoint", "http", "chainId", "address", "selector", "deviceModelId", "dto", "error", "calldata", "calldataDescriptor", "infoData", "infoSignature", "certificateInfos", "certificate", "info", "enums", "id", "values", "value", "data", "signatures", "fields", "field", "param", "path", "element", "itemSize", "rest", "leafType", "mode", "f", "obj", "e", "__decorateClass", "__decorateParam"]
7
7
  }