@ledgerhq/context-module 0.0.0-multisig-20250905101831 → 0.0.0-multisig-20250918154034

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 (282) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/ContextModule.js +1 -1
  3. package/lib/cjs/src/ContextModule.js.map +1 -1
  4. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
  6. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  7. package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
  8. package/lib/cjs/src/DefaultContextModule.js +1 -1
  9. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  10. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  11. package/lib/cjs/src/DefaultContextModule.test.js.map +3 -3
  12. package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
  13. package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
  14. package/lib/cjs/src/di.js +1 -1
  15. package/lib/cjs/src/di.js.map +3 -3
  16. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
  17. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
  18. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  19. package/lib/cjs/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  20. package/lib/cjs/src/index.js +1 -1
  21. package/lib/cjs/src/index.js.map +2 -2
  22. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js +1 -1
  23. package/lib/cjs/src/nft/domain/NftContextFieldLoader.js.map +2 -2
  24. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js +2 -0
  25. package/lib/cjs/src/nft/domain/NftContextFieldLoader.test.js.map +7 -0
  26. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js +2 -0
  27. package/lib/cjs/src/proxy/data/HttpProxyDataSource.js.map +7 -0
  28. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js +2 -0
  29. package/lib/cjs/src/proxy/data/HttpProxyDataSource.test.js.map +7 -0
  30. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
  31. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
  32. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
  33. package/lib/cjs/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
  34. package/lib/cjs/src/proxy/data/ProxyDataSource.js +2 -0
  35. package/lib/cjs/src/proxy/data/ProxyDataSource.js.map +7 -0
  36. package/lib/cjs/src/{transaction → proxy}/data/dto/ProxyDelegateCallDto.js.map +1 -1
  37. package/lib/cjs/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.js.map +1 -1
  38. package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +2 -0
  39. package/lib/cjs/src/proxy/data/dto/SafeProxyImplementationAddressDto.js.map +7 -0
  40. package/lib/cjs/src/proxy/di/proxyModuleFactory.js +2 -0
  41. package/lib/cjs/src/proxy/di/proxyModuleFactory.js.map +7 -0
  42. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js +2 -0
  43. package/lib/cjs/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
  44. package/lib/cjs/src/proxy/di/proxyTypes.js +2 -0
  45. package/lib/cjs/src/proxy/di/proxyTypes.js.map +7 -0
  46. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js +2 -0
  47. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.js.map +7 -0
  48. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js +2 -0
  49. package/lib/cjs/src/proxy/domain/ProxyContextFieldLoader.test.js.map +7 -0
  50. package/lib/cjs/src/proxy/model/ProxyDelegateCall.js +2 -0
  51. package/lib/cjs/src/proxy/model/ProxyDelegateCall.js.map +7 -0
  52. package/lib/cjs/src/shared/domain/ContextFieldLoader.js +1 -1
  53. package/lib/cjs/src/shared/domain/ContextFieldLoader.js.map +2 -2
  54. package/lib/cjs/src/shared/domain/ContextLoader.js +1 -1
  55. package/lib/cjs/src/shared/domain/ContextLoader.js.map +1 -1
  56. package/lib/cjs/src/shared/model/TransactionContext.js +1 -1
  57. package/lib/cjs/src/shared/model/TransactionContext.js.map +1 -1
  58. package/lib/cjs/src/shared/model/TransactionFieldContext.js +2 -0
  59. package/lib/cjs/src/shared/model/TransactionFieldContext.js.map +7 -0
  60. package/lib/cjs/src/shared/model/TransactionSubset.js.map +1 -1
  61. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js +1 -1
  62. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js.map +3 -3
  63. package/lib/cjs/src/shared/model/TypedDataContext.js +1 -1
  64. package/lib/cjs/src/shared/model/TypedDataContext.js.map +1 -1
  65. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js +1 -1
  66. package/lib/cjs/src/token/domain/TokenContextFieldLoader.js.map +3 -3
  67. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js +2 -0
  68. package/lib/cjs/src/token/domain/TokenContextFieldLoader.test.js.map +7 -0
  69. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js +1 -1
  70. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js.map +2 -2
  71. package/lib/cjs/src/transaction/di/transactionModuleFactory.js +1 -1
  72. package/lib/cjs/src/transaction/di/transactionModuleFactory.js.map +3 -3
  73. package/lib/cjs/src/transaction/di/transactionTypes.js +1 -1
  74. package/lib/cjs/src/transaction/di/transactionTypes.js.map +2 -2
  75. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js +1 -1
  76. package/lib/cjs/src/transaction/domain/TransactionContextLoader.js.map +3 -3
  77. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js +1 -1
  78. package/lib/cjs/src/transaction/domain/TransactionContextLoader.test.js.map +3 -3
  79. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
  80. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +2 -2
  81. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +2 -0
  82. package/lib/cjs/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +7 -0
  83. package/lib/cjs/src/typed-data/data/FiltersDto.js +1 -1
  84. package/lib/cjs/src/typed-data/data/FiltersDto.js.map +1 -1
  85. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  86. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  87. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  88. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  89. package/lib/cjs/src/typed-data/data/TypedDataDataSource.js +1 -1
  90. package/lib/cjs/src/typed-data/data/TypedDataDataSource.js.map +1 -1
  91. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  92. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  93. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  94. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  95. package/lib/esm/package.json +1 -1
  96. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  97. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  98. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  99. package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
  100. package/lib/esm/src/DefaultContextModule.js +1 -1
  101. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  102. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  103. package/lib/esm/src/DefaultContextModule.test.js.map +3 -3
  104. package/lib/esm/src/di.js +1 -1
  105. package/lib/esm/src/di.js.map +3 -3
  106. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js +1 -1
  107. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.js.map +3 -3
  108. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  109. package/lib/esm/src/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  110. package/lib/esm/src/index.js +1 -1
  111. package/lib/esm/src/index.js.map +2 -2
  112. package/lib/esm/src/nft/domain/NftContextFieldLoader.js +1 -1
  113. package/lib/esm/src/nft/domain/NftContextFieldLoader.js.map +3 -3
  114. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js +2 -0
  115. package/lib/esm/src/nft/domain/NftContextFieldLoader.test.js.map +7 -0
  116. package/lib/esm/src/proxy/data/HttpProxyDataSource.js +2 -0
  117. package/lib/esm/src/proxy/data/HttpProxyDataSource.js.map +7 -0
  118. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js +2 -0
  119. package/lib/esm/src/proxy/data/HttpProxyDataSource.test.js.map +7 -0
  120. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js +2 -0
  121. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.js.map +7 -0
  122. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js +2 -0
  123. package/lib/esm/src/proxy/data/HttpSafeProxyDataSource.test.js.map +7 -0
  124. package/lib/esm/src/proxy/data/ProxyDataSource.js +1 -0
  125. package/lib/esm/src/proxy/data/dto/SafeProxyImplementationAddressDto.js +1 -0
  126. package/lib/esm/src/proxy/di/proxyModuleFactory.js +2 -0
  127. package/lib/esm/src/proxy/di/proxyModuleFactory.js.map +7 -0
  128. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js +2 -0
  129. package/lib/esm/src/proxy/di/proxyModuleFactory.test.js.map +7 -0
  130. package/lib/esm/src/proxy/di/proxyTypes.js +2 -0
  131. package/lib/esm/src/proxy/di/proxyTypes.js.map +7 -0
  132. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js +2 -0
  133. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.js.map +7 -0
  134. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js +2 -0
  135. package/lib/esm/src/proxy/domain/ProxyContextFieldLoader.test.js.map +7 -0
  136. package/lib/esm/src/proxy/model/ProxyDelegateCall.js.map +7 -0
  137. package/lib/esm/src/shared/domain/ContextFieldLoader.js +1 -1
  138. package/lib/esm/src/shared/domain/ContextFieldLoader.js.map +2 -2
  139. package/lib/esm/src/shared/model/TransactionFieldContext.js +1 -0
  140. package/lib/esm/src/shared/model/TransactionFieldContext.js.map +7 -0
  141. package/lib/esm/src/shared/model/TypedDataClearSignContext.js +1 -1
  142. package/lib/esm/src/shared/model/TypedDataClearSignContext.js.map +3 -3
  143. package/lib/esm/src/token/domain/TokenContextFieldLoader.js +1 -1
  144. package/lib/esm/src/token/domain/TokenContextFieldLoader.js.map +3 -3
  145. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js +2 -0
  146. package/lib/esm/src/token/domain/TokenContextFieldLoader.test.js.map +7 -0
  147. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js +1 -1
  148. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js.map +2 -2
  149. package/lib/esm/src/transaction/di/transactionModuleFactory.js +1 -1
  150. package/lib/esm/src/transaction/di/transactionModuleFactory.js.map +3 -3
  151. package/lib/esm/src/transaction/di/transactionTypes.js +1 -1
  152. package/lib/esm/src/transaction/di/transactionTypes.js.map +2 -2
  153. package/lib/esm/src/transaction/domain/TransactionContextLoader.js +1 -1
  154. package/lib/esm/src/transaction/domain/TransactionContextLoader.js.map +3 -3
  155. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js +1 -1
  156. package/lib/esm/src/transaction/domain/TransactionContextLoader.test.js.map +3 -3
  157. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js +1 -1
  158. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.js.map +3 -3
  159. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js +2 -0
  160. package/lib/esm/src/trusted-name/domain/TrustedNameContextFieldLoader.test.js.map +7 -0
  161. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  162. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  163. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  164. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  165. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  166. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  167. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  168. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +3 -3
  169. package/lib/types/src/ContextModule.d.ts +2 -4
  170. package/lib/types/src/ContextModule.d.ts.map +1 -1
  171. package/lib/types/src/ContextModuleBuilder.d.ts +8 -1
  172. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  173. package/lib/types/src/DefaultContextModule.d.ts +3 -6
  174. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  175. package/lib/types/src/config/model/ContextModuleConfig.d.ts +7 -0
  176. package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
  177. package/lib/types/src/di.d.ts.map +1 -1
  178. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts +1 -2
  179. package/lib/types/src/dynamic-network/domain/DynamicNetworkContextLoader.d.ts.map +1 -1
  180. package/lib/types/src/index.d.ts +39 -0
  181. package/lib/types/src/index.d.ts.map +1 -1
  182. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts +9 -4
  183. package/lib/types/src/nft/domain/NftContextFieldLoader.d.ts.map +1 -1
  184. package/lib/types/src/nft/domain/NftContextFieldLoader.test.d.ts +2 -0
  185. package/lib/types/src/nft/domain/NftContextFieldLoader.test.d.ts.map +1 -0
  186. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts +13 -0
  187. package/lib/types/src/proxy/data/HttpProxyDataSource.d.ts.map +1 -0
  188. package/lib/types/src/proxy/data/HttpProxyDataSource.test.d.ts.map +1 -0
  189. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts +13 -0
  190. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.d.ts.map +1 -0
  191. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts +2 -0
  192. package/lib/types/src/proxy/data/HttpSafeProxyDataSource.test.d.ts.map +1 -0
  193. package/lib/types/src/proxy/data/ProxyDataSource.d.ts +15 -0
  194. package/lib/types/src/proxy/data/ProxyDataSource.d.ts.map +1 -0
  195. package/lib/types/src/proxy/data/dto/ProxyDelegateCallDto.d.ts.map +1 -0
  196. package/lib/types/src/proxy/data/dto/ProxyImplementationAddressDto.d.ts.map +1 -0
  197. package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts +8 -0
  198. package/lib/types/src/proxy/data/dto/SafeProxyImplementationAddressDto.d.ts.map +1 -0
  199. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts +4 -0
  200. package/lib/types/src/proxy/di/proxyModuleFactory.d.ts.map +1 -0
  201. package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts +2 -0
  202. package/lib/types/src/proxy/di/proxyModuleFactory.test.d.ts.map +1 -0
  203. package/lib/types/src/proxy/di/proxyTypes.d.ts +5 -0
  204. package/lib/types/src/proxy/di/proxyTypes.d.ts.map +1 -0
  205. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts +22 -0
  206. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.d.ts.map +1 -0
  207. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.test.d.ts +2 -0
  208. package/lib/types/src/proxy/domain/ProxyContextFieldLoader.test.d.ts.map +1 -0
  209. package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts +5 -0
  210. package/lib/types/src/proxy/model/ProxyDelegateCall.d.ts.map +1 -0
  211. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts +3 -4
  212. package/lib/types/src/shared/domain/ContextFieldLoader.d.ts.map +1 -1
  213. package/lib/types/src/shared/domain/ContextLoader.d.ts +1 -2
  214. package/lib/types/src/shared/domain/ContextLoader.d.ts.map +1 -1
  215. package/lib/types/src/shared/model/TransactionContext.d.ts +0 -17
  216. package/lib/types/src/shared/model/TransactionContext.d.ts.map +1 -1
  217. package/lib/types/src/shared/model/TransactionFieldContext.d.ts +26 -0
  218. package/lib/types/src/shared/model/TransactionFieldContext.d.ts.map +1 -0
  219. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts +33 -1
  220. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts.map +1 -1
  221. package/lib/types/src/shared/model/TypedDataContext.d.ts +3 -0
  222. package/lib/types/src/shared/model/TypedDataContext.d.ts.map +1 -1
  223. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts +8 -4
  224. package/lib/types/src/token/domain/TokenContextFieldLoader.d.ts.map +1 -1
  225. package/lib/types/src/token/domain/TokenContextFieldLoader.test.d.ts +2 -0
  226. package/lib/types/src/token/domain/TokenContextFieldLoader.test.d.ts.map +1 -0
  227. package/lib/types/src/transaction/data/HttpTransactionDataSource.d.ts.map +1 -1
  228. package/lib/types/src/transaction/di/transactionModuleFactory.d.ts.map +1 -1
  229. package/lib/types/src/transaction/di/transactionTypes.d.ts +0 -1
  230. package/lib/types/src/transaction/di/transactionTypes.d.ts.map +1 -1
  231. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts +2 -4
  232. package/lib/types/src/transaction/domain/TransactionContextLoader.d.ts.map +1 -1
  233. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts +12 -4
  234. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.d.ts.map +1 -1
  235. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.test.d.ts +2 -0
  236. package/lib/types/src/trusted-name/domain/TrustedNameContextFieldLoader.test.d.ts.map +1 -0
  237. package/lib/types/src/typed-data/data/FiltersDto.d.ts +32 -2
  238. package/lib/types/src/typed-data/data/FiltersDto.d.ts.map +1 -1
  239. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +3 -0
  240. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
  241. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts +1 -0
  242. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts.map +1 -1
  243. package/lib/types/src/typed-data/data/TypedDataDataSource.d.ts +2 -1
  244. package/lib/types/src/typed-data/data/TypedDataDataSource.d.ts.map +1 -1
  245. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts +12 -1
  246. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts.map +1 -1
  247. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  248. package/package.json +5 -5
  249. package/lib/cjs/src/transaction/data/HttpProxyDataSource.js +0 -2
  250. package/lib/cjs/src/transaction/data/HttpProxyDataSource.js.map +0 -7
  251. package/lib/cjs/src/transaction/data/HttpProxyDataSource.test.js +0 -2
  252. package/lib/cjs/src/transaction/data/HttpProxyDataSource.test.js.map +0 -7
  253. package/lib/cjs/src/transaction/model/ProxyDelegateCall.js +0 -2
  254. package/lib/cjs/src/transaction/model/ProxyDelegateCall.js.map +0 -7
  255. package/lib/cjs/src/transaction/model/ProxyImplementationAddress.js +0 -2
  256. package/lib/cjs/src/transaction/model/ProxyImplementationAddress.js.map +0 -7
  257. package/lib/esm/src/transaction/data/HttpProxyDataSource.js +0 -2
  258. package/lib/esm/src/transaction/data/HttpProxyDataSource.js.map +0 -7
  259. package/lib/esm/src/transaction/data/HttpProxyDataSource.test.js +0 -2
  260. package/lib/esm/src/transaction/data/HttpProxyDataSource.test.js.map +0 -7
  261. package/lib/esm/src/transaction/model/ProxyImplementationAddress.js +0 -1
  262. package/lib/types/src/transaction/data/HttpProxyDataSource.d.ts +0 -33
  263. package/lib/types/src/transaction/data/HttpProxyDataSource.d.ts.map +0 -1
  264. package/lib/types/src/transaction/data/HttpProxyDataSource.test.d.ts.map +0 -1
  265. package/lib/types/src/transaction/data/dto/ProxyDelegateCallDto.d.ts.map +0 -1
  266. package/lib/types/src/transaction/data/dto/ProxyImplementationAddressDto.d.ts.map +0 -1
  267. package/lib/types/src/transaction/model/ProxyDelegateCall.d.ts +0 -5
  268. package/lib/types/src/transaction/model/ProxyDelegateCall.d.ts.map +0 -1
  269. package/lib/types/src/transaction/model/ProxyImplementationAddress.d.ts +0 -4
  270. package/lib/types/src/transaction/model/ProxyImplementationAddress.d.ts.map +0 -1
  271. /package/lib/cjs/src/{transaction → proxy}/data/dto/ProxyDelegateCallDto.js +0 -0
  272. /package/lib/cjs/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.js +0 -0
  273. /package/lib/esm/src/{transaction/data/dto/ProxyDelegateCallDto.js.map → proxy/data/ProxyDataSource.js.map} +0 -0
  274. /package/lib/esm/src/{transaction → proxy}/data/dto/ProxyDelegateCallDto.js +0 -0
  275. /package/lib/esm/src/{transaction/data/dto/ProxyImplementationAddressDto.js.map → proxy/data/dto/ProxyDelegateCallDto.js.map} +0 -0
  276. /package/lib/esm/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.js +0 -0
  277. /package/lib/esm/src/{transaction/model/ProxyDelegateCall.js.map → proxy/data/dto/ProxyImplementationAddressDto.js.map} +0 -0
  278. /package/lib/esm/src/{transaction/model/ProxyImplementationAddress.js.map → proxy/data/dto/SafeProxyImplementationAddressDto.js.map} +0 -0
  279. /package/lib/esm/src/{transaction → proxy}/model/ProxyDelegateCall.js +0 -0
  280. /package/lib/types/src/{transaction → proxy}/data/HttpProxyDataSource.test.d.ts +0 -0
  281. /package/lib/types/src/{transaction → proxy}/data/dto/ProxyDelegateCallDto.d.ts +0 -0
  282. /package/lib/types/src/{transaction → proxy}/data/dto/ProxyImplementationAddressDto.d.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/DefaultContextModule.ts"],
4
- "sourcesContent": ["import { type Container } from \"inversify\";\nimport { Left } from \"purify-ts\";\n\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport { type DynamicNetworkContextLoader } from \"@/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { transactionTypes } from \"@/transaction/di/transactionTypes\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { type ExternalPluginContextLoader } from \"./external-plugin/domain/ExternalPluginContextLoader\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { type NftContextLoader } from \"./nft/domain/NftContextLoader\";\nimport { pkiTypes } from \"./pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"./pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"./pki/model/KeyId\";\nimport {\n type ContextFieldLoader,\n type ContextFieldLoaderKind,\n} from \"./shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport {\n type TransactionContext,\n type TransactionFieldContext,\n} from \"./shared/model/TransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { type TokenContextLoader } from \"./token/domain/TokenContextLoader\";\nimport { type ProxyDataSource } from \"./transaction/data/HttpProxyDataSource\";\nimport { type TransactionContextLoader } from \"./transaction/domain/TransactionContextLoader\";\nimport { type ProxyDelegateCall } from \"./transaction/model/ProxyDelegateCall\";\nimport { type TrustedNameContextLoader } from \"./trusted-name/domain/TrustedNameContextLoader\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { uniswapTypes } from \"./uniswap/di/uniswapTypes\";\nimport { type UniswapContextLoader } from \"./uniswap/domain/UniswapContextLoader\";\nimport { web3CheckTypes } from \"./web3-check/di/web3CheckTypes\";\nimport { type Web3CheckContextLoader } from \"./web3-check/domain/Web3CheckContextLoader\";\nimport {\n type Web3CheckContext,\n type Web3Checks,\n} from \"./web3-check/domain/web3CheckTypes\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader[];\n private _typedDataLoader: TypedDataContextLoader;\n private _web3CheckLoader: Web3CheckContextLoader;\n private _solanaLoader: SolanaContextLoader;\n private _fieldLoaders: ContextFieldLoader<ContextFieldLoaderKind>[];\n\n constructor(args: ContextModuleConfig) {\n this._container = makeContainer({ config: args });\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._web3CheckLoader =\n args.customWeb3CheckLoader ?? this._getWeb3CheckLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n\n this._fieldLoaders = [\n this._container.get<ContextFieldLoader<ContextFieldLoaderKind.NFT>>(\n nftTypes.NftContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader<ContextFieldLoaderKind.TOKEN>>(\n tokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<\n ContextFieldLoader<ContextFieldLoaderKind.TRUSTED_NAME>\n >(trustedNameTypes.TrustedNameContextFieldLoader),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader[] {\n return [\n this._container.get<ExternalPluginContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<TrustedNameContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<NftContextLoader>(nftTypes.NftContextLoader),\n this._container.get<TokenContextLoader>(tokenTypes.TokenContextLoader),\n this._container.get<TransactionContextLoader>(\n transactionTypes.TransactionContextLoader,\n ),\n this._container.get<UniswapContextLoader>(\n uniswapTypes.UniswapContextLoader,\n ),\n this._container.get<DynamicNetworkContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getWeb3CheckLoader(): Web3CheckContextLoader {\n return this._container.get<Web3CheckContextLoader>(\n web3CheckTypes.Web3CheckContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\n }\n\n private _getProxyDataSource(): ProxyDataSource {\n return this._container.get<ProxyDataSource>(\n transactionTypes.ProxyDataSource,\n );\n }\n\n private _getCertificateLoader(): PkiCertificateLoader {\n return this._container.get<PkiCertificateLoader>(\n pkiTypes.PkiCertificateLoader,\n );\n }\n\n public async getContexts(\n transaction: TransactionContext,\n ): Promise<ClearSignContext[]> {\n const promises = this._loaders.map((fetcher) => fetcher.load(transaction));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public getFieldContext<T extends ContextFieldLoaderKind>(\n field: TransactionFieldContext<T>,\n ): Promise<ClearSignContext> {\n const loader = this._fieldLoaders.find((l) => l.kind === field.kind);\n if (!loader) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(`Loader not found for kind: ${field.kind}`),\n });\n }\n return loader.loadField(field);\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async getWeb3Checks(\n transactionContext: Web3CheckContext,\n ): Promise<ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null> {\n const web3Checks = await this._web3CheckLoader.load(transactionContext);\n\n return web3Checks.caseOf({\n Right: (checks: Web3Checks) => ({\n type: ClearSignContextType.WEB3_CHECK,\n payload: checks.descriptor,\n certificate: checks.certificate,\n }),\n Left: () => null,\n });\n }\n\n public async getProxyDelegateCall(\n ctx: TransactionContext,\n ): Promise<ClearSignContextSuccess<ClearSignContextType.PROXY_DELEGATE_CALL> | null> {\n const { to, data, chainId, challenge } = ctx;\n\n if (!to || !data || !chainId || !challenge) {\n return null;\n }\n\n const proxyDelegateCall =\n await this._getProxyDataSource().getProxyDelegateCall({\n calldata: data,\n proxyAddress: to,\n chainId,\n challenge,\n });\n\n const certificate = await this._getCertificateLoader().loadCertificate({\n keyId: KeyId.CalCalldataKey,\n keyUsage: KeyUsage.Calldata,\n targetDevice: ctx.deviceModelId,\n });\n\n return proxyDelegateCall.caseOf({\n Left: () => null,\n Right: ({ signedDescriptor }: ProxyDelegateCall) => ({\n type: ClearSignContextType.PROXY_DELEGATE_CALL,\n payload: signedDescriptor,\n certificate,\n }),\n });\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["Left", "dynamicNetworkTypes", "KeyUsage", "transactionTypes", "trustedNameTypes", "externalPluginTypes", "nftTypes", "pkiTypes", "KeyId", "ClearSignContextType", "solanaContextTypes", "tokenTypes", "typedDataTypes", "uniswapTypes", "web3CheckTypes", "makeContainer", "DefaultContextModule", "args", "_ctx", "transaction", "promises", "fetcher", "field", "loader", "l", "typedData", "transactionContext", "checks", "ctx", "to", "data", "chainId", "challenge", "proxyDelegateCall", "certificate", "signedDescriptor"]
4
+ "sourcesContent": ["import { type Container } from \"inversify\";\nimport { Left } from \"purify-ts\";\n\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\nimport { type DynamicNetworkContextLoader } from \"@/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport type { TypedDataClearSignContext } from \"@/shared/model/TypedDataClearSignContext\";\nimport type { TypedDataContext } from \"@/shared/model/TypedDataContext\";\nimport { transactionTypes } from \"@/transaction/di/transactionTypes\";\nimport { trustedNameTypes } from \"@/trusted-name/di/trustedNameTypes\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { externalPluginTypes } from \"./external-plugin/di/externalPluginTypes\";\nimport { type ExternalPluginContextLoader } from \"./external-plugin/domain/ExternalPluginContextLoader\";\nimport { nftTypes } from \"./nft/di/nftTypes\";\nimport { type NftContextLoader } from \"./nft/domain/NftContextLoader\";\nimport { proxyTypes } from \"./proxy/di/proxyTypes\";\nimport { type ContextFieldLoader } from \"./shared/domain/ContextFieldLoader\";\nimport { type ContextLoader } from \"./shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type SolanaTransactionContext } from \"./shared/model/SolanaTransactionContext\";\nimport { type TransactionContext } from \"./shared/model/TransactionContext\";\nimport { solanaContextTypes } from \"./solana/di/solanaContextTypes\";\nimport { type SolanaContextLoader } from \"./solana/domain/SolanaContextLoader\";\nimport { type SolanaTransactionContextResult } from \"./solana/domain/solanaContextTypes\";\nimport { tokenTypes } from \"./token/di/tokenTypes\";\nimport { type TokenContextLoader } from \"./token/domain/TokenContextLoader\";\nimport { type TransactionContextLoader } from \"./transaction/domain/TransactionContextLoader\";\nimport { type TrustedNameContextLoader } from \"./trusted-name/domain/TrustedNameContextLoader\";\nimport { typedDataTypes } from \"./typed-data/di/typedDataTypes\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { uniswapTypes } from \"./uniswap/di/uniswapTypes\";\nimport { type UniswapContextLoader } from \"./uniswap/domain/UniswapContextLoader\";\nimport { web3CheckTypes } from \"./web3-check/di/web3CheckTypes\";\nimport { type Web3CheckContextLoader } from \"./web3-check/domain/Web3CheckContextLoader\";\nimport {\n type Web3CheckContext,\n type Web3Checks,\n} from \"./web3-check/domain/web3CheckTypes\";\nimport { type ContextModule } from \"./ContextModule\";\nimport { makeContainer } from \"./di\";\n\nexport class DefaultContextModule implements ContextModule {\n private _container: Container;\n private _loaders: ContextLoader[];\n private _typedDataLoader: TypedDataContextLoader;\n private _web3CheckLoader: Web3CheckContextLoader;\n private _solanaLoader: SolanaContextLoader;\n private _fieldLoaders: ContextFieldLoader<unknown>[];\n\n constructor(args: ContextModuleConfig) {\n this._container = makeContainer({ config: args });\n\n this._loaders = args.defaultLoaders ? this._getDefaultLoaders() : [];\n this._loaders.push(...args.customLoaders);\n\n this._fieldLoaders = args.defaultFieldLoaders\n ? this._getDefaultFieldLoaders()\n : [];\n this._fieldLoaders.push(...args.customFieldLoaders);\n\n this._typedDataLoader =\n args.customTypedDataLoader ?? this._getDefaultTypedDataLoader();\n this._web3CheckLoader =\n args.customWeb3CheckLoader ?? this._getWeb3CheckLoader();\n this._solanaLoader = args.customSolanaLoader ?? this._getSolanaLoader();\n }\n\n private _getDefaultFieldLoaders(): ContextFieldLoader[] {\n return [\n this._container.get<ContextFieldLoader>(nftTypes.NftContextFieldLoader),\n this._container.get<ContextFieldLoader>(\n tokenTypes.TokenContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n trustedNameTypes.TrustedNameContextFieldLoader,\n ),\n this._container.get<ContextFieldLoader>(\n proxyTypes.ProxyContextFieldLoader,\n ),\n ];\n }\n\n private _getDefaultLoaders(): ContextLoader[] {\n return [\n this._container.get<ExternalPluginContextLoader>(\n externalPluginTypes.ExternalPluginContextLoader,\n ),\n this._container.get<TrustedNameContextLoader>(\n trustedNameTypes.TrustedNameContextLoader,\n ),\n this._container.get<NftContextLoader>(nftTypes.NftContextLoader),\n this._container.get<TokenContextLoader>(tokenTypes.TokenContextLoader),\n this._container.get<TransactionContextLoader>(\n transactionTypes.TransactionContextLoader,\n ),\n this._container.get<UniswapContextLoader>(\n uniswapTypes.UniswapContextLoader,\n ),\n this._container.get<DynamicNetworkContextLoader>(\n dynamicNetworkTypes.DynamicNetworkContextLoader,\n ),\n ];\n }\n\n private _getDefaultTypedDataLoader(): TypedDataContextLoader {\n return this._container.get<TypedDataContextLoader>(\n typedDataTypes.TypedDataContextLoader,\n );\n }\n\n private _getWeb3CheckLoader(): Web3CheckContextLoader {\n return this._container.get<Web3CheckContextLoader>(\n web3CheckTypes.Web3CheckContextLoader,\n );\n }\n\n private _getSolanaLoader(): SolanaContextLoader {\n try {\n return this._container.get<SolanaContextLoader>(\n solanaContextTypes.SolanaContextLoader,\n );\n } catch {\n return {\n load: async (_ctx) =>\n Left(\n new Error(\n \"[ContextModule] - DefaultContextModule: no SolanaContextLoader bound\",\n ),\n ),\n };\n }\n }\n\n public async getContexts(\n transaction: TransactionContext,\n ): Promise<ClearSignContext[]> {\n const promises = this._loaders.map((fetcher) => fetcher.load(transaction));\n const responses = await Promise.all(promises);\n return responses.flat();\n }\n\n public async getFieldContext<TInput>(\n field: TInput,\n ): Promise<ClearSignContext> {\n const loaders = this._fieldLoaders.filter((l) => l.canHandle(field));\n if (loaders.length === 0) {\n return Promise.resolve({\n type: ClearSignContextType.ERROR,\n error: new Error(`Loader not found for field: ${field}`),\n });\n }\n\n for (const loader of loaders) {\n const context = await loader.loadField(field);\n if (context.type !== ClearSignContextType.ERROR) {\n return context;\n }\n }\n\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(`Loader not found for field: ${field}`),\n };\n }\n\n public async getTypedDataFilters(\n typedData: TypedDataContext,\n ): Promise<TypedDataClearSignContext> {\n return this._typedDataLoader.load(typedData);\n }\n\n public async getWeb3Checks(\n transactionContext: Web3CheckContext,\n ): Promise<ClearSignContextSuccess<ClearSignContextType.WEB3_CHECK> | null> {\n const web3Checks = await this._web3CheckLoader.load(transactionContext);\n\n return web3Checks.caseOf({\n Right: (checks: Web3Checks) => ({\n type: ClearSignContextType.WEB3_CHECK,\n payload: checks.descriptor,\n certificate: checks.certificate,\n }),\n Left: () => null,\n });\n }\n\n public async getSolanaContext(\n transactionContext: SolanaTransactionContext,\n ): Promise<SolanaTransactionContextResult> {\n return await this._solanaLoader.load(transactionContext);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "dynamicNetworkTypes", "transactionTypes", "trustedNameTypes", "externalPluginTypes", "nftTypes", "proxyTypes", "ClearSignContextType", "solanaContextTypes", "tokenTypes", "typedDataTypes", "uniswapTypes", "web3CheckTypes", "makeContainer", "DefaultContextModule", "args", "_ctx", "transaction", "promises", "fetcher", "field", "loaders", "l", "loader", "context", "typedData", "transactionContext", "checks"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as c}from"@ledgerhq/device-management-kit";import{Left as s,Right as i}from"purify-ts";import{DefaultContextModule as a}from"./DefaultContextModule";const d=()=>({load:vi.fn(),loadField:vi.fn()});describe("DefaultContextModule",()=>{const l={load:vi.fn()},o={customLoaders:[],defaultLoaders:!1,customTypedDataLoader:l,cal:{url:"https://cal/v1",mode:"prod",branch:"main"},web3checks:{url:"https://web3checks/v3"},metadataServiceDomain:{url:"https://metadata.com"},originToken:"originToken"};beforeEach(()=>{vi.restoreAllMocks()}),it("should initialize the context module with all the default loaders",async()=>{const t=await new a(o).getContexts({});expect(t).toEqual([])}),it("should return an empty array when no loaders",async()=>{const t=await new a(o).getContexts({});expect(t).toEqual([])}),it("should call all fetch method from metadata fetcher",async()=>{const e=d();await new a({...o,customLoaders:[e,e]}).getContexts({}),expect(e.load).toHaveBeenCalledTimes(2)}),it("should return an array of context response",async()=>{const e=d(),t=[[{type:"provideERC20Info",payload:"payload1"}],[{type:"provideERC20Info",payload:"payload2"},{type:"plugin",payload:"payload3"}]];vi.spyOn(e,"load").mockResolvedValueOnce(t[0]).mockResolvedValueOnce(t[1]);const r=await new a({...o,customLoaders:[e,e]}).getContexts({});expect(e.load).toHaveBeenCalledTimes(2),expect(r).toEqual(t.flat())}),it("should call the typed data loader",async()=>{await new a({...o,customTypedDataLoader:l}).getTypedDataFilters({}),expect(l.load).toHaveBeenCalledTimes(1)}),it("should return a web3 check context",async()=>{const e=d();vi.spyOn(e,"load").mockResolvedValueOnce(i({descriptor:"payload"}));const n=await new a({...o,customLoaders:[],customWeb3CheckLoader:e}).getWeb3Checks({deviceModelId:c.FLEX,from:"from",rawTx:"rawTx",chainId:1});expect(e.load).toHaveBeenCalledTimes(1),expect(n).toEqual({type:"web3Check",payload:"payload"})}),it("should return null if no web3 check context",async()=>{const e=d();vi.spyOn(e,"load").mockResolvedValue(s(new Error("error")));const n=await new a({...o,customLoaders:[],customWeb3CheckLoader:e}).getWeb3Checks({deviceModelId:c.FLEX,from:"from",rawTx:"rawTx",chainId:1});expect(e.load).toHaveBeenCalledTimes(1),expect(n).toBeNull()}),it("should throw an error if origin token is not provided",()=>{expect(()=>new a({...o,originToken:void 0})).toThrow("Origin token is required")})});
1
+ import{DeviceModelId as x}from"@ledgerhq/device-management-kit";import{Left as y,Right as m}from"purify-ts";import{ClearSignContextType as r}from"./shared/model/ClearSignContext";import{DefaultContextModule as l}from"./DefaultContextModule";const i=()=>({load:vi.fn(),loadField:vi.fn()}),c=()=>({canHandle:vi.fn(),loadField:vi.fn()});describe("DefaultContextModule",()=>{const u={load:vi.fn()},n={customLoaders:[],defaultLoaders:!1,defaultFieldLoaders:!1,customFieldLoaders:[],customTypedDataLoader:u,cal:{url:"https://cal/v1",mode:"prod",branch:"main"},web3checks:{url:"https://web3checks/v3"},metadataServiceDomain:{url:"https://metadata.com"},originToken:"originToken"};beforeEach(()=>{vi.restoreAllMocks()}),it("should initialize the context module with all the default loaders",async()=>{const t=await new l(n).getContexts({});expect(t).toEqual([])}),it("should return an empty array when no loaders",async()=>{const t=await new l(n).getContexts({});expect(t).toEqual([])}),it("should call all fetch method from metadata fetcher",async()=>{const e=i();await new l({...n,customLoaders:[e,e]}).getContexts({}),expect(e.load).toHaveBeenCalledTimes(2)}),it("should return an array of context response",async()=>{const e=i(),t=[[{type:"provideERC20Info",payload:"payload1"}],[{type:"provideERC20Info",payload:"payload2"},{type:"plugin",payload:"payload3"}]];vi.spyOn(e,"load").mockResolvedValueOnce(t[0]).mockResolvedValueOnce(t[1]);const a=await new l({...n,customLoaders:[e,e]}).getContexts({});expect(e.load).toHaveBeenCalledTimes(2),expect(a).toEqual(t.flat())}),it("should call the typed data loader",async()=>{await new l({...n,customTypedDataLoader:u}).getTypedDataFilters({}),expect(u.load).toHaveBeenCalledTimes(1)}),it("should return a web3 check context",async()=>{const e=i();vi.spyOn(e,"load").mockResolvedValueOnce(m({descriptor:"payload"}));const o=await new l({...n,customLoaders:[],customWeb3CheckLoader:e}).getWeb3Checks({deviceModelId:x.FLEX,from:"from",rawTx:"rawTx",chainId:1});expect(e.load).toHaveBeenCalledTimes(1),expect(o).toEqual({type:"web3Check",payload:"payload"})}),it("should return null if no web3 check context",async()=>{const e=i();vi.spyOn(e,"load").mockResolvedValue(y(new Error("error")));const o=await new l({...n,customLoaders:[],customWeb3CheckLoader:e}).getWeb3Checks({deviceModelId:x.FLEX,from:"from",rawTx:"rawTx",chainId:1});expect(e.load).toHaveBeenCalledTimes(1),expect(o).toBeNull()}),it("should throw an error if origin token is not provided",()=>{expect(()=>new l({...n,originToken:void 0})).toThrow("Origin token is required")}),describe("getFieldContext",()=>{it("should return error when no loader can handle the field",async()=>{const e=c();vi.spyOn(e,"canHandle").mockReturnValue(!1);const t=new l({...n,customFieldLoaders:[e]}),o={type:"unknown"},a=await t.getFieldContext(o);expect(e.canHandle).toHaveBeenCalledWith(o),expect(e.loadField).not.toHaveBeenCalled(),expect(a).toEqual({type:r.ERROR,error:new Error(`Loader not found for field: ${o}`)})}),it("should return context when a loader can handle the field",async()=>{const e=c(),t={type:r.TOKEN,payload:"test-payload"};vi.spyOn(e,"canHandle").mockReturnValue(!0),vi.spyOn(e,"loadField").mockResolvedValue(t);const o=new l({...n,customFieldLoaders:[e]}),a={type:"token",address:"0x123"},s=await o.getFieldContext(a);expect(e.canHandle).toHaveBeenCalledWith(a),expect(e.loadField).toHaveBeenCalledWith(a),expect(s).toEqual(t)}),it("should return first context when multiple loaders can handle the field",async()=>{const e=c(),t=c(),o={type:r.TOKEN,payload:"first-payload"},a={type:r.NFT,payload:"second-payload"};vi.spyOn(e,"canHandle").mockReturnValue(!0),vi.spyOn(t,"canHandle").mockReturnValue(!0),vi.spyOn(e,"loadField").mockResolvedValue(o),vi.spyOn(t,"loadField").mockResolvedValue(a);const s=new l({...n,customFieldLoaders:[e,t]}),d={type:"multi",address:"0x123"},p=await s.getFieldContext(d);expect(e.canHandle).toHaveBeenCalledWith(d),expect(t.canHandle).toHaveBeenCalledWith(d),expect(e.loadField).toHaveBeenCalledWith(d),expect(t.loadField).not.toHaveBeenCalled(),expect(p).toEqual(o)}),it("should return second context when first context is an error",async()=>{const e=c(),t=c(),o={type:r.ERROR,error:new Error("first-error")},a={type:r.TOKEN,payload:"second-payload"};vi.spyOn(e,"canHandle").mockReturnValue(!0),vi.spyOn(t,"canHandle").mockReturnValue(!0),vi.spyOn(e,"loadField").mockResolvedValue(o),vi.spyOn(t,"loadField").mockResolvedValue(a);const s=new l({...n,customFieldLoaders:[e,t]}),d={type:"error",address:"0x123"},p=await s.getFieldContext(d);expect(e.canHandle).toHaveBeenCalledWith(d),expect(t.canHandle).toHaveBeenCalledWith(d),expect(e.loadField).toHaveBeenCalledWith(d),expect(t.loadField).toHaveBeenCalledWith(d),expect(p).toEqual(a)}),it("should handle loader rejection gracefully",async()=>{const e=c(),t=new Error("Load field failed");vi.spyOn(e,"canHandle").mockReturnValue(!0),vi.spyOn(e,"loadField").mockRejectedValue(t);const o=new l({...n,customFieldLoaders:[e]}),a={type:"error",address:"0x123"};await expect(o.getFieldContext(a)).rejects.toThrow("Load field failed"),expect(e.canHandle).toHaveBeenCalledWith(a),expect(e.loadField).toHaveBeenCalledWith(a)})})});
2
2
  //# sourceMappingURL=DefaultContextModule.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/DefaultContextModule.test.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { type TransactionContext } from \"./shared/model/TransactionContext\";\nimport { type TypedDataContext } from \"./shared/model/TypedDataContext\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { DefaultContextModule } from \"./DefaultContextModule\";\n\nconst contextLoaderStubBuilder = () => {\n return { load: vi.fn(), loadField: vi.fn() };\n};\n\ndescribe(\"DefaultContextModule\", () => {\n const typedDataLoader: TypedDataContextLoader = { load: vi.fn() };\n const defaultContextModuleConfig: ContextModuleConfig = {\n customLoaders: [],\n defaultLoaders: false,\n customTypedDataLoader: typedDataLoader,\n cal: {\n url: \"https://cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n web3checks: {\n url: \"https://web3checks/v3\",\n },\n metadataServiceDomain: {\n url: \"https://metadata.com\",\n },\n originToken: \"originToken\",\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"should initialize the context module with all the default loaders\", async () => {\n const contextModule = new DefaultContextModule(defaultContextModuleConfig);\n\n const res = await contextModule.getContexts({} as TransactionContext);\n\n expect(res).toEqual([]);\n });\n\n it(\"should return an empty array when no loaders\", async () => {\n const contextModule = new DefaultContextModule(defaultContextModuleConfig);\n\n const res = await contextModule.getContexts({} as TransactionContext);\n\n expect(res).toEqual([]);\n });\n\n it(\"should call all fetch method from metadata fetcher\", async () => {\n const loader = contextLoaderStubBuilder();\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [loader, loader],\n });\n\n await contextModule.getContexts({} as TransactionContext);\n\n expect(loader.load).toHaveBeenCalledTimes(2);\n });\n\n it(\"should return an array of context response\", async () => {\n const loader = contextLoaderStubBuilder();\n const responses = [\n [{ type: \"provideERC20Info\", payload: \"payload1\" }],\n [\n { type: \"provideERC20Info\", payload: \"payload2\" },\n { type: \"plugin\", payload: \"payload3\" },\n ],\n ];\n vi.spyOn(loader, \"load\")\n .mockResolvedValueOnce(responses[0])\n .mockResolvedValueOnce(responses[1]);\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [loader, loader],\n });\n\n const res = await contextModule.getContexts({} as TransactionContext);\n\n expect(loader.load).toHaveBeenCalledTimes(2);\n expect(res).toEqual(responses.flat());\n });\n\n it(\"should call the typed data loader\", async () => {\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customTypedDataLoader: typedDataLoader,\n });\n\n await contextModule.getTypedDataFilters({} as TypedDataContext);\n\n expect(typedDataLoader.load).toHaveBeenCalledTimes(1);\n });\n\n it(\"should return a web3 check context\", async () => {\n const loader = contextLoaderStubBuilder();\n vi.spyOn(loader, \"load\").mockResolvedValueOnce(\n Right({ descriptor: \"payload\" }),\n );\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [],\n customWeb3CheckLoader: loader,\n });\n\n const res = await contextModule.getWeb3Checks({\n deviceModelId: DeviceModelId.FLEX,\n from: \"from\",\n rawTx: \"rawTx\",\n chainId: 1,\n });\n\n expect(loader.load).toHaveBeenCalledTimes(1);\n expect(res).toEqual({ type: \"web3Check\", payload: \"payload\" });\n });\n\n it(\"should return null if no web3 check context\", async () => {\n const loader = contextLoaderStubBuilder();\n vi.spyOn(loader, \"load\").mockResolvedValue(Left(new Error(\"error\")));\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [],\n customWeb3CheckLoader: loader,\n });\n\n const res = await contextModule.getWeb3Checks({\n deviceModelId: DeviceModelId.FLEX,\n from: \"from\",\n rawTx: \"rawTx\",\n chainId: 1,\n });\n\n expect(loader.load).toHaveBeenCalledTimes(1);\n expect(res).toBeNull();\n });\n\n it(\"should throw an error if origin token is not provided\", () => {\n expect(\n () =>\n new DefaultContextModule({\n ...defaultContextModuleConfig,\n originToken: undefined,\n }),\n ).toThrow(\"Origin token is required\");\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["DeviceModelId", "Left", "Right", "DefaultContextModule", "contextLoaderStubBuilder", "typedDataLoader", "defaultContextModuleConfig", "res", "loader", "responses"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"./config/model/ContextModuleConfig\";\nimport { type ContextFieldLoader } from \"./shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"./shared/model/ClearSignContext\";\nimport { type TransactionContext } from \"./shared/model/TransactionContext\";\nimport { type TypedDataContext } from \"./shared/model/TypedDataContext\";\nimport type { TypedDataContextLoader } from \"./typed-data/domain/TypedDataContextLoader\";\nimport { DefaultContextModule } from \"./DefaultContextModule\";\n\nconst contextLoaderStubBuilder = () => {\n return { load: vi.fn(), loadField: vi.fn() };\n};\n\nconst fieldLoaderStubBuilder = (): ContextFieldLoader => {\n return {\n canHandle: vi.fn(),\n loadField: vi.fn(),\n };\n};\n\ndescribe(\"DefaultContextModule\", () => {\n const typedDataLoader: TypedDataContextLoader = { load: vi.fn() };\n const defaultContextModuleConfig: ContextModuleConfig = {\n customLoaders: [],\n defaultLoaders: false,\n defaultFieldLoaders: false,\n customFieldLoaders: [],\n customTypedDataLoader: typedDataLoader,\n cal: {\n url: \"https://cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n web3checks: {\n url: \"https://web3checks/v3\",\n },\n metadataServiceDomain: {\n url: \"https://metadata.com\",\n },\n originToken: \"originToken\",\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"should initialize the context module with all the default loaders\", async () => {\n const contextModule = new DefaultContextModule(defaultContextModuleConfig);\n\n const res = await contextModule.getContexts({} as TransactionContext);\n\n expect(res).toEqual([]);\n });\n\n it(\"should return an empty array when no loaders\", async () => {\n const contextModule = new DefaultContextModule(defaultContextModuleConfig);\n\n const res = await contextModule.getContexts({} as TransactionContext);\n\n expect(res).toEqual([]);\n });\n\n it(\"should call all fetch method from metadata fetcher\", async () => {\n const loader = contextLoaderStubBuilder();\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [loader, loader],\n });\n\n await contextModule.getContexts({} as TransactionContext);\n\n expect(loader.load).toHaveBeenCalledTimes(2);\n });\n\n it(\"should return an array of context response\", async () => {\n const loader = contextLoaderStubBuilder();\n const responses = [\n [{ type: \"provideERC20Info\", payload: \"payload1\" }],\n [\n { type: \"provideERC20Info\", payload: \"payload2\" },\n { type: \"plugin\", payload: \"payload3\" },\n ],\n ];\n vi.spyOn(loader, \"load\")\n .mockResolvedValueOnce(responses[0])\n .mockResolvedValueOnce(responses[1]);\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [loader, loader],\n });\n\n const res = await contextModule.getContexts({} as TransactionContext);\n\n expect(loader.load).toHaveBeenCalledTimes(2);\n expect(res).toEqual(responses.flat());\n });\n\n it(\"should call the typed data loader\", async () => {\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customTypedDataLoader: typedDataLoader,\n });\n\n await contextModule.getTypedDataFilters({} as TypedDataContext);\n\n expect(typedDataLoader.load).toHaveBeenCalledTimes(1);\n });\n\n it(\"should return a web3 check context\", async () => {\n const loader = contextLoaderStubBuilder();\n vi.spyOn(loader, \"load\").mockResolvedValueOnce(\n Right({ descriptor: \"payload\" }),\n );\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [],\n customWeb3CheckLoader: loader,\n });\n\n const res = await contextModule.getWeb3Checks({\n deviceModelId: DeviceModelId.FLEX,\n from: \"from\",\n rawTx: \"rawTx\",\n chainId: 1,\n });\n\n expect(loader.load).toHaveBeenCalledTimes(1);\n expect(res).toEqual({ type: \"web3Check\", payload: \"payload\" });\n });\n\n it(\"should return null if no web3 check context\", async () => {\n const loader = contextLoaderStubBuilder();\n vi.spyOn(loader, \"load\").mockResolvedValue(Left(new Error(\"error\")));\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customLoaders: [],\n customWeb3CheckLoader: loader,\n });\n\n const res = await contextModule.getWeb3Checks({\n deviceModelId: DeviceModelId.FLEX,\n from: \"from\",\n rawTx: \"rawTx\",\n chainId: 1,\n });\n\n expect(loader.load).toHaveBeenCalledTimes(1);\n expect(res).toBeNull();\n });\n\n it(\"should throw an error if origin token is not provided\", () => {\n expect(\n () =>\n new DefaultContextModule({\n ...defaultContextModuleConfig,\n originToken: undefined,\n }),\n ).toThrow(\"Origin token is required\");\n });\n\n describe(\"getFieldContext\", () => {\n it(\"should return error when no loader can handle the field\", async () => {\n // GIVEN\n const fieldLoader = fieldLoaderStubBuilder();\n vi.spyOn(fieldLoader, \"canHandle\").mockReturnValue(false);\n\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customFieldLoaders: [fieldLoader],\n });\n\n const testField = { type: \"unknown\" };\n\n // WHEN\n const result = await contextModule.getFieldContext(testField);\n\n // THEN\n expect(fieldLoader.canHandle).toHaveBeenCalledWith(testField);\n expect(fieldLoader.loadField).not.toHaveBeenCalled();\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: new Error(`Loader not found for field: ${testField}`),\n });\n });\n\n it(\"should return context when a loader can handle the field\", async () => {\n // GIVEN\n const fieldLoader = fieldLoaderStubBuilder();\n const mockContext: ClearSignContext = {\n type: ClearSignContextType.TOKEN,\n payload: \"test-payload\",\n };\n\n vi.spyOn(fieldLoader, \"canHandle\").mockReturnValue(true);\n vi.spyOn(fieldLoader, \"loadField\").mockResolvedValue(mockContext);\n\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customFieldLoaders: [fieldLoader],\n });\n\n const testField = { type: \"token\", address: \"0x123\" };\n\n // WHEN\n const result = await contextModule.getFieldContext(testField);\n\n // THEN\n expect(fieldLoader.canHandle).toHaveBeenCalledWith(testField);\n expect(fieldLoader.loadField).toHaveBeenCalledWith(testField);\n expect(result).toEqual(mockContext);\n });\n\n it(\"should return first context when multiple loaders can handle the field\", async () => {\n // GIVEN\n const fieldLoader1 = fieldLoaderStubBuilder();\n const fieldLoader2 = fieldLoaderStubBuilder();\n\n const mockContext1: ClearSignContext = {\n type: ClearSignContextType.TOKEN,\n payload: \"first-payload\",\n };\n const mockContext2: ClearSignContext = {\n type: ClearSignContextType.NFT,\n payload: \"second-payload\",\n };\n\n vi.spyOn(fieldLoader1, \"canHandle\").mockReturnValue(true);\n vi.spyOn(fieldLoader2, \"canHandle\").mockReturnValue(true);\n vi.spyOn(fieldLoader1, \"loadField\").mockResolvedValue(mockContext1);\n vi.spyOn(fieldLoader2, \"loadField\").mockResolvedValue(mockContext2);\n\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customFieldLoaders: [fieldLoader1, fieldLoader2],\n });\n\n const testField = { type: \"multi\", address: \"0x123\" };\n\n // WHEN\n const result = await contextModule.getFieldContext(testField);\n\n // THEN\n expect(fieldLoader1.canHandle).toHaveBeenCalledWith(testField);\n expect(fieldLoader2.canHandle).toHaveBeenCalledWith(testField);\n expect(fieldLoader1.loadField).toHaveBeenCalledWith(testField);\n expect(fieldLoader2.loadField).not.toHaveBeenCalled();\n expect(result).toEqual(mockContext1); // Should return first context\n });\n\n it(\"should return second context when first context is an error\", async () => {\n // GIVEN\n const fieldLoader1 = fieldLoaderStubBuilder();\n const fieldLoader2 = fieldLoaderStubBuilder();\n const mockContext1: ClearSignContext = {\n type: ClearSignContextType.ERROR,\n error: new Error(\"first-error\"),\n };\n const mockContext2: ClearSignContext = {\n type: ClearSignContextType.TOKEN,\n payload: \"second-payload\",\n };\n vi.spyOn(fieldLoader1, \"canHandle\").mockReturnValue(true);\n vi.spyOn(fieldLoader2, \"canHandle\").mockReturnValue(true);\n vi.spyOn(fieldLoader1, \"loadField\").mockResolvedValue(mockContext1);\n vi.spyOn(fieldLoader2, \"loadField\").mockResolvedValue(mockContext2);\n\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customFieldLoaders: [fieldLoader1, fieldLoader2],\n });\n\n const testField = { type: \"error\", address: \"0x123\" };\n\n // WHEN\n const result = await contextModule.getFieldContext(testField);\n\n // THEN\n expect(fieldLoader1.canHandle).toHaveBeenCalledWith(testField);\n expect(fieldLoader2.canHandle).toHaveBeenCalledWith(testField);\n expect(fieldLoader1.loadField).toHaveBeenCalledWith(testField);\n expect(fieldLoader2.loadField).toHaveBeenCalledWith(testField);\n expect(result).toEqual(mockContext2);\n });\n\n it(\"should handle loader rejection gracefully\", async () => {\n // GIVEN\n const fieldLoader = fieldLoaderStubBuilder();\n const loadError = new Error(\"Load field failed\");\n\n vi.spyOn(fieldLoader, \"canHandle\").mockReturnValue(true);\n vi.spyOn(fieldLoader, \"loadField\").mockRejectedValue(loadError);\n\n const contextModule = new DefaultContextModule({\n ...defaultContextModuleConfig,\n customFieldLoaders: [fieldLoader],\n });\n\n const testField = { type: \"error\", address: \"0x123\" };\n\n // WHEN & THEN\n await expect(contextModule.getFieldContext(testField)).rejects.toThrow(\n \"Load field failed\",\n );\n\n expect(fieldLoader.canHandle).toHaveBeenCalledWith(testField);\n expect(fieldLoader.loadField).toHaveBeenCalledWith(testField);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["DeviceModelId", "Left", "Right", "ClearSignContextType", "DefaultContextModule", "contextLoaderStubBuilder", "fieldLoaderStubBuilder", "typedDataLoader", "defaultContextModuleConfig", "res", "loader", "responses", "fieldLoader", "contextModule", "testField", "result", "mockContext", "fieldLoader1", "fieldLoader2", "mockContext1", "mockContext2", "loadError"]
7
7
  }
package/lib/esm/src/di.js CHANGED
@@ -1,2 +1,2 @@
1
- import{Container as t}from"inversify";import{configModuleFactory as e}from"./config/di/configModuleFactory";import{dynamicNetworkModuleFactory as n}from"./dynamic-network/di/dynamicNetworkModuleFactory";import{externalPluginModuleFactory as a}from"./external-plugin/di/externalPluginModuleFactory";import{nftModuleFactory as m}from"./nft/di/nftModuleFactory";import{nanoPkiModuleFactory as i}from"./pki/di/pkiModuleFactory";import{solanaContextModuleFactory as c}from"./solana/di/SolanaContextModuleFactory";import{tokenModuleFactory as f}from"./token/di/tokenModuleFactory";import{transactionModuleFactory as p}from"./transaction/di/transactionModuleFactory";import{trustedNameModuleFactory as d}from"./trusted-name/di/trustedNameModuleFactory";import{typedDataModuleFactory as l}from"./typed-data/di/typedDataModuleFactory";import{uniswapModuleFactory as u}from"./uniswap/di/uniswapModuleFactory";import{web3CheckModuleFactory as y}from"./web3-check/di/web3CheckModuleFactory";const D=({config:r})=>{const o=new t;return o.loadSync(e(r),a(),n(),m(),f(),p(),d(),l(),i(),u(),y(),c()),o};export{D as makeContainer};
1
+ import{Container as t}from"inversify";import{configModuleFactory as e}from"./config/di/configModuleFactory";import{dynamicNetworkModuleFactory as a}from"./dynamic-network/di/dynamicNetworkModuleFactory";import{externalPluginModuleFactory as m}from"./external-plugin/di/externalPluginModuleFactory";import{nftModuleFactory as n}from"./nft/di/nftModuleFactory";import{nanoPkiModuleFactory as i}from"./pki/di/pkiModuleFactory";import{proxyModuleFactory as c}from"./proxy/di/proxyModuleFactory";import{solanaContextModuleFactory as p}from"./solana/di/SolanaContextModuleFactory";import{tokenModuleFactory as d}from"./token/di/tokenModuleFactory";import{transactionModuleFactory as f}from"./transaction/di/transactionModuleFactory";import{trustedNameModuleFactory as l}from"./trusted-name/di/trustedNameModuleFactory";import{typedDataModuleFactory as u}from"./typed-data/di/typedDataModuleFactory";import{uniswapModuleFactory as y}from"./uniswap/di/uniswapModuleFactory";import{web3CheckModuleFactory as M}from"./web3-check/di/web3CheckModuleFactory";const j=({config:o})=>{const r=new t;return r.loadSync(e(o),m(),a(),n(),c(o),d(),f(),l(),u(),i(),y(),M(),p()),r};export{j as makeContainer};
2
2
  //# sourceMappingURL=di.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/di.ts"],
4
- "sourcesContent": ["import { Container } from \"inversify\";\n\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { dynamicNetworkModuleFactory } from \"@/dynamic-network/di/dynamicNetworkModuleFactory\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { transactionModuleFactory } from \"@/transaction/di/transactionModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\nimport { web3CheckModuleFactory } from \"@/web3-check/di/web3CheckModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n dynamicNetworkModuleFactory(),\n nftModuleFactory(),\n tokenModuleFactory(),\n transactionModuleFactory(),\n trustedNameModuleFactory(),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n web3CheckModuleFactory(),\n solanaContextModuleFactory(),\n );\n\n return container;\n};\n"],
5
- "mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,uBAAAC,MAA2B,kCAEpC,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,oBAAAC,MAAwB,4BACjC,OAAS,wBAAAC,MAA4B,4BACrC,OAAS,8BAAAC,MAAkC,yCAC3C,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,4BAAAC,MAAgC,4CACzC,OAAS,4BAAAC,MAAgC,6CACzC,OAAS,0BAAAC,MAA8B,yCACvC,OAAS,wBAAAC,MAA4B,oCACrC,OAAS,0BAAAC,MAA8B,yCAMhC,MAAMC,EAAgB,CAAC,CAAE,OAAAC,CAAO,IAAyB,CAC9D,MAAMC,EAAY,IAAIf,EAEtB,OAAAe,EAAU,SACRd,EAAoBa,CAAM,EAC1BX,EAA4B,EAC5BD,EAA4B,EAC5BE,EAAiB,EACjBG,EAAmB,EACnBC,EAAyB,EACzBC,EAAyB,EACzBC,EAAuB,EACvBL,EAAqB,EACrBM,EAAqB,EACrBC,EAAuB,EACvBN,EAA2B,CAC7B,EAEOS,CACT",
6
- "names": ["Container", "configModuleFactory", "dynamicNetworkModuleFactory", "externalPluginModuleFactory", "nftModuleFactory", "nanoPkiModuleFactory", "solanaContextModuleFactory", "tokenModuleFactory", "transactionModuleFactory", "trustedNameModuleFactory", "typedDataModuleFactory", "uniswapModuleFactory", "web3CheckModuleFactory", "makeContainer", "config", "container"]
4
+ "sourcesContent": ["import { Container } from \"inversify\";\n\nimport { configModuleFactory } from \"@/config/di/configModuleFactory\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { dynamicNetworkModuleFactory } from \"@/dynamic-network/di/dynamicNetworkModuleFactory\";\nimport { externalPluginModuleFactory } from \"@/external-plugin/di/externalPluginModuleFactory\";\nimport { nftModuleFactory } from \"@/nft/di/nftModuleFactory\";\nimport { nanoPkiModuleFactory } from \"@/pki/di/pkiModuleFactory\";\nimport { proxyModuleFactory } from \"@/proxy/di/proxyModuleFactory\";\nimport { solanaContextModuleFactory } from \"@/solana/di/SolanaContextModuleFactory\";\nimport { tokenModuleFactory } from \"@/token/di/tokenModuleFactory\";\nimport { transactionModuleFactory } from \"@/transaction/di/transactionModuleFactory\";\nimport { trustedNameModuleFactory } from \"@/trusted-name/di/trustedNameModuleFactory\";\nimport { typedDataModuleFactory } from \"@/typed-data/di/typedDataModuleFactory\";\nimport { uniswapModuleFactory } from \"@/uniswap/di/uniswapModuleFactory\";\nimport { web3CheckModuleFactory } from \"@/web3-check/di/web3CheckModuleFactory\";\n\ntype MakeContainerArgs = {\n config: ContextModuleConfig;\n};\n\nexport const makeContainer = ({ config }: MakeContainerArgs) => {\n const container = new Container();\n\n container.loadSync(\n configModuleFactory(config),\n externalPluginModuleFactory(),\n dynamicNetworkModuleFactory(),\n nftModuleFactory(),\n proxyModuleFactory(config),\n tokenModuleFactory(),\n transactionModuleFactory(),\n trustedNameModuleFactory(),\n typedDataModuleFactory(),\n nanoPkiModuleFactory(),\n uniswapModuleFactory(),\n web3CheckModuleFactory(),\n solanaContextModuleFactory(),\n );\n\n return container;\n};\n"],
5
+ "mappings": "AAAA,OAAS,aAAAA,MAAiB,YAE1B,OAAS,uBAAAC,MAA2B,kCAEpC,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,+BAAAC,MAAmC,mDAC5C,OAAS,oBAAAC,MAAwB,4BACjC,OAAS,wBAAAC,MAA4B,4BACrC,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,8BAAAC,MAAkC,yCAC3C,OAAS,sBAAAC,MAA0B,gCACnC,OAAS,4BAAAC,MAAgC,4CACzC,OAAS,4BAAAC,MAAgC,6CACzC,OAAS,0BAAAC,MAA8B,yCACvC,OAAS,wBAAAC,MAA4B,oCACrC,OAAS,0BAAAC,MAA8B,yCAMhC,MAAMC,EAAgB,CAAC,CAAE,OAAAC,CAAO,IAAyB,CAC9D,MAAMC,EAAY,IAAIhB,EAEtB,OAAAgB,EAAU,SACRf,EAAoBc,CAAM,EAC1BZ,EAA4B,EAC5BD,EAA4B,EAC5BE,EAAiB,EACjBE,EAAmBS,CAAM,EACzBP,EAAmB,EACnBC,EAAyB,EACzBC,EAAyB,EACzBC,EAAuB,EACvBN,EAAqB,EACrBO,EAAqB,EACrBC,EAAuB,EACvBN,EAA2B,CAC7B,EAEOS,CACT",
6
+ "names": ["Container", "configModuleFactory", "dynamicNetworkModuleFactory", "externalPluginModuleFactory", "nftModuleFactory", "nanoPkiModuleFactory", "proxyModuleFactory", "solanaContextModuleFactory", "tokenModuleFactory", "transactionModuleFactory", "trustedNameModuleFactory", "typedDataModuleFactory", "uniswapModuleFactory", "web3CheckModuleFactory", "makeContainer", "config", "container"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var C=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var l=(n,e,o,t)=>{for(var r=t>1?void 0:t?u(e,o):e,a=n.length-1,i;a>=0;a--)(i=n[a])&&(r=(t?i(e,o,r):i(r))||r);return t&&r&&C(e,o,r),r},c=(n,e)=>(o,t)=>e(o,t,n);import{DeviceModelId as g}from"@ledgerhq/device-management-kit";import{inject as s,injectable as y}from"inversify";import{configTypes as S}from"../../config/di/configTypes";import{dynamicNetworkTypes as _}from"../../dynamic-network/di/dynamicNetworkTypes";import{pkiTypes as k}from"../../pki/di/pkiTypes";import{KeyId as N}from"../../pki/model/KeyId";import{KeyUsage as T}from"../../pki/model/KeyUsage";import{ClearSignContextType as m}from"../../shared/model/ClearSignContext";import{HexStringUtils as D}from"../../shared/utils/HexStringUtils";const x="15";let d=class{_networkDataSource;_config;_certificateLoader;constructor(e,o,t){this._networkDataSource=e,this._config=o,this._certificateLoader=t}async load(e){if(e.deviceModelId===g.NANO_S)return[];const o=await this._networkDataSource.getDynamicNetworkConfiguration(e.chainId),t=await this._certificateLoader.loadCertificate({keyId:N.CalNetwork,keyUsage:T.Network,targetDevice:e.deviceModelId});return o.caseOf({Left:()=>[],Right:r=>{const a=[],i=r.descriptors[e.deviceModelId];if(!i)return[];const f=i.signatures[this._config.cal.mode];if(!f)return[];const p=D.appendSignatureToPayload(i.data,f,x);return a.push({type:m.DYNAMIC_NETWORK,payload:p,certificate:t}),i.icon&&a.push({type:m.DYNAMIC_NETWORK_ICON,payload:i.icon}),a}})}loadField(e){return Promise.resolve(null)}};d=l([y(),c(0,s(_.DynamicNetworkDataSource)),c(1,s(S.Config)),c(2,s(k.PkiCertificateLoader))],d);export{d as DynamicNetworkContextLoader};
1
+ var C=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var p=(n,e,o,t)=>{for(var r=t>1?void 0:t?y(e,o):e,a=n.length-1,i;a>=0;a--)(i=n[a])&&(r=(t?i(e,o,r):i(r))||r);return t&&r&&C(e,o,r),r},c=(n,e)=>(o,t)=>e(o,t,n);import{DeviceModelId as g}from"@ledgerhq/device-management-kit";import{inject as d,injectable as u}from"inversify";import{configTypes as k}from"../../config/di/configTypes";import{dynamicNetworkTypes as S}from"../../dynamic-network/di/dynamicNetworkTypes";import{pkiTypes as _}from"../../pki/di/pkiTypes";import{KeyId as N}from"../../pki/model/KeyId";import{KeyUsage as D}from"../../pki/model/KeyUsage";import{ClearSignContextType as m}from"../../shared/model/ClearSignContext";import{HexStringUtils as T}from"../../shared/utils/HexStringUtils";const I="15";let f=class{_networkDataSource;_config;_certificateLoader;constructor(e,o,t){this._networkDataSource=e,this._config=o,this._certificateLoader=t}async load(e){if(e.deviceModelId===g.NANO_S)return[];const o=await this._networkDataSource.getDynamicNetworkConfiguration(e.chainId),t=await this._certificateLoader.loadCertificate({keyId:N.CalNetwork,keyUsage:D.Network,targetDevice:e.deviceModelId});return o.caseOf({Left:()=>[],Right:r=>{const a=[],i=r.descriptors[e.deviceModelId];if(!i)return[];const s=i.signatures[this._config.cal.mode];if(!s)return[];const l=T.appendSignatureToPayload(i.data,s,I);return a.push({type:m.DYNAMIC_NETWORK,payload:l,certificate:t}),i.icon&&a.push({type:m.DYNAMIC_NETWORK_ICON,payload:i.icon}),a}})}};f=p([u(),c(0,d(S.DynamicNetworkDataSource)),c(1,d(k.Config)),c(2,d(_.PkiCertificateLoader))],f);export{f as DynamicNetworkContextLoader};
2
2
  //# sourceMappingURL=DynamicNetworkContextLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dynamic-network/domain/DynamicNetworkContextLoader.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\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 { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport {\n TransactionContext,\n TransactionFieldContext,\n} from \"@/shared/model/TransactionContext\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\nconst NETWORK_SIGNATURE_TAG = \"15\";\n\n@injectable()\nexport class DynamicNetworkContextLoader implements ContextLoader {\n private readonly _networkDataSource: DynamicNetworkDataSource;\n private readonly _config: ContextModuleConfig;\n private readonly _certificateLoader: PkiCertificateLoader;\n\n constructor(\n @inject(dynamicNetworkTypes.DynamicNetworkDataSource)\n networkDataSource: DynamicNetworkDataSource,\n @inject(configTypes.Config)\n config: ContextModuleConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n certificateLoader: PkiCertificateLoader,\n ) {\n this._networkDataSource = networkDataSource;\n this._config = config;\n this._certificateLoader = certificateLoader;\n }\n\n async load(ctx: TransactionContext): Promise<ClearSignContext[]> {\n if (ctx.deviceModelId === DeviceModelId.NANO_S) return [];\n\n const result = await this._networkDataSource.getDynamicNetworkConfiguration(\n ctx.chainId,\n );\n\n // Fetch certificate for the network configuration upfront\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: ctx.deviceModelId,\n });\n\n return result.caseOf({\n Left: () => [],\n Right: (configuration) => {\n const contexts: ClearSignContext[] = [];\n const descriptor = configuration.descriptors[ctx.deviceModelId];\n\n if (!descriptor) {\n return [];\n }\n\n const signature = descriptor.signatures[this._config.cal.mode];\n\n if (!signature) {\n return [];\n }\n\n const configPayload = HexStringUtils.appendSignatureToPayload(\n descriptor.data,\n signature,\n NETWORK_SIGNATURE_TAG,\n );\n\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: configPayload,\n certificate,\n });\n\n // Add icon if available in the descriptor\n if (descriptor.icon) {\n // Icons don't need signatures appended\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: descriptor.icon,\n });\n }\n\n return contexts;\n },\n });\n }\n\n // Dynamic network context doesn't support field-level loading\n loadField(_field: TransactionFieldContext): Promise<ClearSignContext | null> {\n return Promise.resolve(null);\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,iBAAAA,MAAqB,kCAC9B,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAG5B,OAAS,uBAAAC,MAA2B,2CACpC,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,SAAAC,MAAa,oBACtB,OAAS,YAAAC,MAAgB,uBAEzB,OAEE,wBAAAC,MACK,kCAKP,OAAS,kBAAAC,MAAsB,gCAE/B,MAAMC,EAAwB,KAGvB,IAAMC,EAAN,KAA2D,CAC/C,mBACA,QACA,mBAEjB,YAEEC,EAEAC,EAEAC,EACA,CACA,KAAK,mBAAqBF,EAC1B,KAAK,QAAUC,EACf,KAAK,mBAAqBC,CAC5B,CAEA,MAAM,KAAKC,EAAsD,CAC/D,GAAIA,EAAI,gBAAkBC,EAAc,OAAQ,MAAO,CAAC,EAExD,MAAMC,EAAS,MAAM,KAAK,mBAAmB,+BAC3CF,EAAI,OACN,EAGMG,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAOC,EAAM,WACb,SAAUC,EAAS,QACnB,aAAcL,EAAI,aACpB,CAAC,EAED,OAAOE,EAAO,OAAO,CACnB,KAAM,IAAM,CAAC,EACb,MAAQI,GAAkB,CACxB,MAAMC,EAA+B,CAAC,EAChCC,EAAaF,EAAc,YAAYN,EAAI,aAAa,EAE9D,GAAI,CAACQ,EACH,MAAO,CAAC,EAGV,MAAMC,EAAYD,EAAW,WAAW,KAAK,QAAQ,IAAI,IAAI,EAE7D,GAAI,CAACC,EACH,MAAO,CAAC,EAGV,MAAMC,EAAgBC,EAAe,yBACnCH,EAAW,KACXC,EACAd,CACF,EAEA,OAAAY,EAAS,KAAK,CACZ,KAAMK,EAAqB,gBAC3B,QAASF,EACT,YAAAP,CACF,CAAC,EAGGK,EAAW,MAEbD,EAAS,KAAK,CACZ,KAAMK,EAAqB,qBAC3B,QAASJ,EAAW,IACtB,CAAC,EAGID,CACT,CACF,CAAC,CACH,CAGA,UAAUM,EAAmE,CAC3E,OAAO,QAAQ,QAAQ,IAAI,CAC7B,CACF,EA9EajB,EAANkB,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAoB,wBAAwB,GAEnDF,EAAA,EAAAC,EAAOE,EAAY,MAAM,GAEzBH,EAAA,EAAAC,EAAOG,EAAS,oBAAoB,IAV5BxB",
6
- "names": ["DeviceModelId", "inject", "injectable", "configTypes", "dynamicNetworkTypes", "pkiTypes", "KeyId", "KeyUsage", "ClearSignContextType", "HexStringUtils", "NETWORK_SIGNATURE_TAG", "DynamicNetworkContextLoader", "networkDataSource", "config", "certificateLoader", "ctx", "DeviceModelId", "result", "certificate", "KeyId", "KeyUsage", "configuration", "contexts", "descriptor", "signature", "configPayload", "HexStringUtils", "ClearSignContextType", "_field", "__decorateClass", "injectable", "__decorateParam", "inject", "dynamicNetworkTypes", "configTypes", "pkiTypes"]
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { dynamicNetworkTypes } from \"@/dynamic-network/di/dynamicNetworkTypes\";\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 { ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { TransactionContext } from \"@/shared/model/TransactionContext\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\n\nconst NETWORK_SIGNATURE_TAG = \"15\";\n\n@injectable()\nexport class DynamicNetworkContextLoader implements ContextLoader {\n private readonly _networkDataSource: DynamicNetworkDataSource;\n private readonly _config: ContextModuleConfig;\n private readonly _certificateLoader: PkiCertificateLoader;\n\n constructor(\n @inject(dynamicNetworkTypes.DynamicNetworkDataSource)\n networkDataSource: DynamicNetworkDataSource,\n @inject(configTypes.Config)\n config: ContextModuleConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n certificateLoader: PkiCertificateLoader,\n ) {\n this._networkDataSource = networkDataSource;\n this._config = config;\n this._certificateLoader = certificateLoader;\n }\n\n async load(ctx: TransactionContext): Promise<ClearSignContext[]> {\n if (ctx.deviceModelId === DeviceModelId.NANO_S) return [];\n\n const result = await this._networkDataSource.getDynamicNetworkConfiguration(\n ctx.chainId,\n );\n\n // Fetch certificate for the network configuration upfront\n const certificate = await this._certificateLoader.loadCertificate({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: ctx.deviceModelId,\n });\n\n return result.caseOf({\n Left: () => [],\n Right: (configuration) => {\n const contexts: ClearSignContext[] = [];\n const descriptor = configuration.descriptors[ctx.deviceModelId];\n\n if (!descriptor) {\n return [];\n }\n\n const signature = descriptor.signatures[this._config.cal.mode];\n\n if (!signature) {\n return [];\n }\n\n const configPayload = HexStringUtils.appendSignatureToPayload(\n descriptor.data,\n signature,\n NETWORK_SIGNATURE_TAG,\n );\n\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: configPayload,\n certificate,\n });\n\n // Add icon if available in the descriptor\n if (descriptor.icon) {\n // Icons don't need signatures appended\n contexts.push({\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: descriptor.icon,\n });\n }\n\n return contexts;\n },\n });\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,iBAAAA,MAAqB,kCAC9B,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAG5B,OAAS,uBAAAC,MAA2B,2CACpC,OAAS,YAAAC,MAAgB,oBAEzB,OAAS,SAAAC,MAAa,oBACtB,OAAS,YAAAC,MAAgB,uBAEzB,OAEE,wBAAAC,MACK,kCAEP,OAAS,kBAAAC,MAAsB,gCAE/B,MAAMC,EAAwB,KAGvB,IAAMC,EAAN,KAA2D,CAC/C,mBACA,QACA,mBAEjB,YAEEC,EAEAC,EAEAC,EACA,CACA,KAAK,mBAAqBF,EAC1B,KAAK,QAAUC,EACf,KAAK,mBAAqBC,CAC5B,CAEA,MAAM,KAAKC,EAAsD,CAC/D,GAAIA,EAAI,gBAAkBC,EAAc,OAAQ,MAAO,CAAC,EAExD,MAAMC,EAAS,MAAM,KAAK,mBAAmB,+BAC3CF,EAAI,OACN,EAGMG,EAAc,MAAM,KAAK,mBAAmB,gBAAgB,CAChE,MAAOC,EAAM,WACb,SAAUC,EAAS,QACnB,aAAcL,EAAI,aACpB,CAAC,EAED,OAAOE,EAAO,OAAO,CACnB,KAAM,IAAM,CAAC,EACb,MAAQI,GAAkB,CACxB,MAAMC,EAA+B,CAAC,EAChCC,EAAaF,EAAc,YAAYN,EAAI,aAAa,EAE9D,GAAI,CAACQ,EACH,MAAO,CAAC,EAGV,MAAMC,EAAYD,EAAW,WAAW,KAAK,QAAQ,IAAI,IAAI,EAE7D,GAAI,CAACC,EACH,MAAO,CAAC,EAGV,MAAMC,EAAgBC,EAAe,yBACnCH,EAAW,KACXC,EACAd,CACF,EAEA,OAAAY,EAAS,KAAK,CACZ,KAAMK,EAAqB,gBAC3B,QAASF,EACT,YAAAP,CACF,CAAC,EAGGK,EAAW,MAEbD,EAAS,KAAK,CACZ,KAAMK,EAAqB,qBAC3B,QAASJ,EAAW,IACtB,CAAC,EAGID,CACT,CACF,CAAC,CACH,CACF,EAzEaX,EAANiB,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAoB,wBAAwB,GAEnDF,EAAA,EAAAC,EAAOE,EAAY,MAAM,GAEzBH,EAAA,EAAAC,EAAOG,EAAS,oBAAoB,IAV5BvB",
6
+ "names": ["DeviceModelId", "inject", "injectable", "configTypes", "dynamicNetworkTypes", "pkiTypes", "KeyId", "KeyUsage", "ClearSignContextType", "HexStringUtils", "NETWORK_SIGNATURE_TAG", "DynamicNetworkContextLoader", "networkDataSource", "config", "certificateLoader", "ctx", "DeviceModelId", "result", "certificate", "KeyId", "KeyUsage", "configuration", "contexts", "descriptor", "signature", "configPayload", "HexStringUtils", "ClearSignContextType", "__decorateClass", "injectable", "__decorateParam", "inject", "dynamicNetworkTypes", "configTypes", "pkiTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as e}from"@ledgerhq/device-management-kit";import{Left as f,Right as s}from"purify-ts";import{DynamicNetworkContextLoader as y}from"../../dynamic-network/domain/DynamicNetworkContextLoader";import{KeyId as g}from"../../pki/model/KeyId";import{KeyUsage as x}from"../../pki/model/KeyUsage";import{ClearSignContextType as m}from"../../shared/model/ClearSignContext";describe("DynamicNetworkContextLoader",()=>{const a={getDynamicNetworkConfiguration:vi.fn()},p={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"},web3checks:{url:"https://web3checks.api.ledger.com"},metadataServiceDomain:{url:"https://metadata.api.ledger.com"},defaultLoaders:!0,customLoaders:[]},d={loadCertificate:vi.fn()},l={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},c=new y(a,p,d),t=o=>({data:"",descriptorType:"",descriptorVersion:"",signatures:{prod:"",test:""},icon:void 0,...o});beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(d,"loadCertificate").mockResolvedValue(l)}),describe("load function",()=>{it("should return empty array when network data source returns error",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue(f(new Error("Network error")));const i=await c.load(o);expect(i).toEqual([]),expect(a.getDynamicNetworkConfiguration).toHaveBeenCalledWith(1)}),it("should return empty array when descriptor for device model is not found",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0})}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue(s(i));const r=await c.load(o);expect(r).toEqual([])}),it("should return empty array when signature for mode is not found",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:t({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"test-sig"},icon:void 0})}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue(s(i));const r=await c.load(o);expect(r).toEqual([])}),it("should return context with network configuration when all data is available",async()=>{const o={chainId:137,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"polygon",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:{data:"0x0101080201015101012308000000000000008952",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"test-sig"},icon:void 0}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue(s(i));const r=await c.load(o);expect(r).toHaveLength(1),expect(r[0]).toMatchObject({type:m.DYNAMIC_NETWORK,payload:expect.stringContaining("0x0101080201015101012308000000000000008952"),certificate:l}),expect(d.loadCertificate).toHaveBeenCalledWith({keyId:g.CalNetwork,keyUsage:x.Network,targetDevice:e.STAX})}),it("should include icon context when icon is available",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:"icon-hex-data"}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue(s(i));const r=await c.load(o);expect(r).toHaveLength(2),expect(r[0]).toMatchObject({type:m.DYNAMIC_NETWORK,payload:expect.any(String),certificate:l}),expect(r[1]).toMatchObject({type:m.DYNAMIC_NETWORK_ICON,payload:"icon-hex-data"})}),it("should handle multiple device models correctly",async()=>{const o={chainId:1,deviceModelId:e.FLEX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:{data:"0xFLEX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"flex-prod-sig",test:"flex-test-sig"},icon:void 0},[e.STAX]:{data:"0xSTAX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"stax-prod-sig",test:"stax-test-sig"},icon:void 0}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue(s(i));const r=await c.load(o);expect(r).toHaveLength(1);const n=r[0];n&&"payload"in n&&(expect(n.payload).toContain("0xFLEX"),expect(n.payload).toContain("flex-prod-sig"))}),it("should use test mode signature when configured",async()=>{const o=new y(a,{...p,cal:{...p.cal,mode:"test"}},d),i={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},r={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0}}};vi.spyOn(a,"getDynamicNetworkConfiguration").mockResolvedValue(s(r));const n=await o.load(i);expect(n).toHaveLength(1);const u=n[0];u&&"payload"in u&&expect(u.payload).toContain("test-sig")})})});
1
+ import{DeviceModelId as e}from"@ledgerhq/device-management-kit";import{Left as m,Right as s}from"purify-ts";import{DynamicNetworkContextLoader as f}from"../../dynamic-network/domain/DynamicNetworkContextLoader";import{KeyId as g}from"../../pki/model/KeyId";import{KeyUsage as x}from"../../pki/model/KeyUsage";import{ClearSignContextType as y}from"../../shared/model/ClearSignContext";describe("DynamicNetworkContextLoader",()=>{const n={getDynamicNetworkConfiguration:vi.fn()},p={cal:{url:"https://crypto-assets-service.api.ledger.com",mode:"prod",branch:"main"}},d={loadCertificate:vi.fn()},l={keyUsageNumber:1,payload:new Uint8Array([1,2,3])},c=new f(n,p,d),t=o=>({data:"",descriptorType:"",descriptorVersion:"",signatures:{prod:"",test:""},icon:void 0,...o});beforeEach(()=>{vi.restoreAllMocks(),vi.spyOn(d,"loadCertificate").mockResolvedValue(l)}),describe("load function",()=>{it("should return empty array when network data source returns error",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"};vi.spyOn(n,"getDynamicNetworkConfiguration").mockResolvedValue(m(new Error("Network error")));const r=await c.load(o);expect(r).toEqual([]),expect(n.getDynamicNetworkConfiguration).toHaveBeenCalledWith(1)}),it("should return empty array when descriptor for device model is not found",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},r={id:"ethereum",descriptors:{[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0})}};vi.spyOn(n,"getDynamicNetworkConfiguration").mockResolvedValue(s(r));const i=await c.load(o);expect(i).toEqual([])}),it("should return empty array when signature for mode is not found",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},r={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:t({data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{test:"test-sig"},icon:void 0})}};vi.spyOn(n,"getDynamicNetworkConfiguration").mockResolvedValue(s(r));const i=await c.load(o);expect(i).toEqual([])}),it("should return context with network configuration when all data is available",async()=>{const o={chainId:137,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},r={id:"polygon",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:{data:"0x0101080201015101012308000000000000008952",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d",test:"test-sig"},icon:void 0}}};vi.spyOn(n,"getDynamicNetworkConfiguration").mockResolvedValue(s(r));const i=await c.load(o);expect(i).toHaveLength(1),expect(i[0]).toMatchObject({type:y.DYNAMIC_NETWORK,payload:expect.stringContaining("0x0101080201015101012308000000000000008952"),certificate:l}),expect(d.loadCertificate).toHaveBeenCalledWith({keyId:g.CalNetwork,keyUsage:x.Network,targetDevice:e.STAX})}),it("should include icon context when icon is available",async()=>{const o={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},r={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:"icon-hex-data"}}};vi.spyOn(n,"getDynamicNetworkConfiguration").mockResolvedValue(s(r));const i=await c.load(o);expect(i).toHaveLength(2),expect(i[0]).toMatchObject({type:y.DYNAMIC_NETWORK,payload:expect.any(String),certificate:l}),expect(i[1]).toMatchObject({type:y.DYNAMIC_NETWORK_ICON,payload:"icon-hex-data"})}),it("should handle multiple device models correctly",async()=>{const o={chainId:1,deviceModelId:e.FLEX,to:"0x123",data:"0x456",selector:"0x789"},r={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:{data:"0xFLEX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"flex-prod-sig",test:"flex-test-sig"},icon:void 0},[e.STAX]:{data:"0xSTAX",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"stax-prod-sig",test:"stax-test-sig"},icon:void 0}}};vi.spyOn(n,"getDynamicNetworkConfiguration").mockResolvedValue(s(r));const i=await c.load(o);expect(i).toHaveLength(1);const a=i[0];a&&"payload"in a&&(expect(a.payload).toContain("0xFLEX"),expect(a.payload).toContain("flex-prod-sig"))}),it("should use test mode signature when configured",async()=>{const o=new f(n,{...p,cal:{...p.cal,mode:"test"}},d),r={chainId:1,deviceModelId:e.STAX,to:"0x123",data:"0x456",selector:"0x789"},i={id:"ethereum",descriptors:{[e.APEX]:t(),[e.NANO_S]:t(),[e.NANO_SP]:t(),[e.NANO_X]:t(),[e.FLEX]:t(),[e.STAX]:{data:"0x0101",descriptorType:"network",descriptorVersion:"v1",signatures:{prod:"prod-sig",test:"test-sig"},icon:void 0}}};vi.spyOn(n,"getDynamicNetworkConfiguration").mockResolvedValue(s(i));const a=await o.load(r);expect(a).toHaveLength(1);const u=a[0];u&&"payload"in u&&expect(u.payload).toContain("test-sig")})})});
2
2
  //# sourceMappingURL=DynamicNetworkContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/dynamic-network/domain/DynamicNetworkContextLoader.test.ts"],
4
- "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { DynamicNetworkContextLoader } from \"@/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport {\n type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionContext } from \"@/shared/model/TransactionContext\";\n\ndescribe(\"DynamicNetworkContextLoader\", () => {\n const mockNetworkDataSource: DynamicNetworkDataSource = {\n getDynamicNetworkConfiguration: vi.fn(),\n };\n\n const mockConfig: ContextModuleConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n web3checks: {\n url: \"https://web3checks.api.ledger.com\",\n },\n metadataServiceDomain: {\n url: \"https://metadata.api.ledger.com\",\n },\n defaultLoaders: true,\n customLoaders: [],\n };\n\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n const loader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n mockConfig,\n mockCertificateLoader,\n );\n\n // Helper function to create a mock NetworkDescriptor\n const createMockDescriptor = (\n partial?: Partial<DynamicNetworkDescriptor>,\n ): DynamicNetworkDescriptor => ({\n data: \"\",\n descriptorType: \"\",\n descriptorVersion: \"\",\n signatures: {\n prod: \"\",\n test: \"\",\n },\n icon: undefined,\n ...partial,\n });\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"load function\", () => {\n it(\"should return empty array when network data source returns error\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Left(new Error(\"Network error\")));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n expect(\n mockNetworkDataSource.getDynamicNetworkConfiguration,\n ).toHaveBeenCalledWith(1);\n });\n\n it(\"should return empty array when descriptor for device model is not found\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n // STAX descriptor is intentionally missing\n [DeviceModelId.FLEX]: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n } as Record<DeviceModelId, DynamicNetworkDescriptor>,\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return empty array when signature for mode is not found\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n test: \"test-sig\",\n // Missing prod signature - intentionally partial\n } as { prod: string; test: string },\n icon: undefined,\n }),\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return context with network configuration when all data is available\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 137,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"polygon\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101080201015101012308000000000000008952\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: expect.stringContaining(\n \"0x0101080201015101012308000000000000008952\",\n ),\n certificate: mockCertificate,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: DeviceModelId.STAX,\n });\n });\n\n it(\"should include icon context when icon is available\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: \"icon-hex-data\",\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: expect.any(String),\n certificate: mockCertificate,\n });\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: \"icon-hex-data\",\n });\n });\n\n it(\"should handle multiple device models correctly\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.FLEX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: {\n data: \"0xFLEX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"flex-prod-sig\",\n test: \"flex-test-sig\",\n },\n icon: undefined,\n },\n [DeviceModelId.STAX]: {\n data: \"0xSTAX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"stax-prod-sig\",\n test: \"stax-test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"0xFLEX\");\n expect(context.payload).toContain(\"flex-prod-sig\");\n }\n });\n\n it(\"should use test mode signature when configured\", async () => {\n // GIVEN\n const testModeLoader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n { ...mockConfig, cal: { ...mockConfig.cal, mode: \"test\" } },\n mockCertificateLoader,\n );\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await testModeLoader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"test-sig\");\n }\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type DynamicNetworkDataSource } from \"@/dynamic-network/data/DynamicNetworkDataSource\";\nimport { DynamicNetworkContextLoader } from \"@/dynamic-network/domain/DynamicNetworkContextLoader\";\nimport {\n type DynamicNetworkConfiguration,\n type DynamicNetworkDescriptor,\n} from \"@/dynamic-network/model/DynamicNetworkConfiguration\";\nimport { type PkiCertificateLoader } from \"@/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/pki/model/KeyId\";\nimport { KeyUsage } from \"@/pki/model/KeyUsage\";\nimport { type PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionContext } from \"@/shared/model/TransactionContext\";\n\ndescribe(\"DynamicNetworkContextLoader\", () => {\n const mockNetworkDataSource: DynamicNetworkDataSource = {\n getDynamicNetworkConfiguration: vi.fn(),\n };\n\n const mockConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n\n const mockCertificateLoader: PkiCertificateLoader = {\n loadCertificate: vi.fn(),\n };\n\n const mockCertificate: PkiCertificate = {\n keyUsageNumber: 1,\n payload: new Uint8Array([0x01, 0x02, 0x03]),\n };\n\n const loader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n mockConfig,\n mockCertificateLoader,\n );\n\n // Helper function to create a mock NetworkDescriptor\n const createMockDescriptor = (\n partial?: Partial<DynamicNetworkDescriptor>,\n ): DynamicNetworkDescriptor => ({\n data: \"\",\n descriptorType: \"\",\n descriptorVersion: \"\",\n signatures: {\n prod: \"\",\n test: \"\",\n },\n icon: undefined,\n ...partial,\n });\n\n beforeEach(() => {\n vi.restoreAllMocks();\n vi.spyOn(mockCertificateLoader, \"loadCertificate\").mockResolvedValue(\n mockCertificate,\n );\n });\n\n describe(\"load function\", () => {\n it(\"should return empty array when network data source returns error\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Left(new Error(\"Network error\")));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n expect(\n mockNetworkDataSource.getDynamicNetworkConfiguration,\n ).toHaveBeenCalledWith(1);\n });\n\n it(\"should return empty array when descriptor for device model is not found\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n // STAX descriptor is intentionally missing\n [DeviceModelId.FLEX]: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n }),\n } as Record<DeviceModelId, DynamicNetworkDescriptor>,\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return empty array when signature for mode is not found\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: createMockDescriptor({\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n test: \"test-sig\",\n // Missing prod signature - intentionally partial\n } as { prod: string; test: string },\n icon: undefined,\n }),\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toEqual([]);\n });\n\n it(\"should return context with network configuration when all data is available\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 137,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"polygon\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101080201015101012308000000000000008952\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"3045022100cf42c039c16fc95dc97c09f15cdd93bed0e63ee45cf5c38c2b30bb8a3bc17f8d022053a96c9e51695c3c1c1a31f5cbf84bd6febadc97f4bb02bdc67cf3e24ad0c32d\",\n test: \"test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: expect.stringContaining(\n \"0x0101080201015101012308000000000000008952\",\n ),\n certificate: mockCertificate,\n });\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: KeyId.CalNetwork,\n keyUsage: KeyUsage.Network,\n targetDevice: DeviceModelId.STAX,\n });\n });\n\n it(\"should include icon context when icon is available\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: \"icon-hex-data\",\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK,\n payload: expect.any(String),\n certificate: mockCertificate,\n });\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.DYNAMIC_NETWORK_ICON,\n payload: \"icon-hex-data\",\n });\n });\n\n it(\"should handle multiple device models correctly\", async () => {\n // GIVEN\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.FLEX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: {\n data: \"0xFLEX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"flex-prod-sig\",\n test: \"flex-test-sig\",\n },\n icon: undefined,\n },\n [DeviceModelId.STAX]: {\n data: \"0xSTAX\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"stax-prod-sig\",\n test: \"stax-test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await loader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"0xFLEX\");\n expect(context.payload).toContain(\"flex-prod-sig\");\n }\n });\n\n it(\"should use test mode signature when configured\", async () => {\n // GIVEN\n const testModeLoader = new DynamicNetworkContextLoader(\n mockNetworkDataSource,\n { ...mockConfig, cal: { ...mockConfig.cal, mode: \"test\" } },\n mockCertificateLoader,\n );\n const transaction: TransactionContext = {\n chainId: 1,\n deviceModelId: DeviceModelId.STAX,\n to: \"0x123\",\n data: \"0x456\",\n selector: \"0x789\",\n };\n const networkConfig: DynamicNetworkConfiguration = {\n id: \"ethereum\",\n descriptors: {\n [DeviceModelId.APEX]: createMockDescriptor(),\n [DeviceModelId.NANO_S]: createMockDescriptor(),\n [DeviceModelId.NANO_SP]: createMockDescriptor(),\n [DeviceModelId.NANO_X]: createMockDescriptor(),\n [DeviceModelId.FLEX]: createMockDescriptor(),\n [DeviceModelId.STAX]: {\n data: \"0x0101\",\n descriptorType: \"network\",\n descriptorVersion: \"v1\",\n signatures: {\n prod: \"prod-sig\",\n test: \"test-sig\",\n },\n icon: undefined,\n },\n },\n };\n vi.spyOn(\n mockNetworkDataSource,\n \"getDynamicNetworkConfiguration\",\n ).mockResolvedValue(Right(networkConfig));\n\n // WHEN\n const result = await testModeLoader.load(transaction);\n\n // THEN\n expect(result).toHaveLength(1);\n const context = result[0];\n if (context && \"payload\" in context) {\n expect(context.payload).toContain(\"test-sig\");\n }\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["DeviceModelId", "Left", "Right", "DynamicNetworkContextLoader", "KeyId", "KeyUsage", "ClearSignContextType", "mockNetworkDataSource", "mockConfig", "mockCertificateLoader", "mockCertificate", "loader", "createMockDescriptor", "partial", "transaction", "result", "networkConfig", "context", "testModeLoader"]
7
7
  }
@@ -1,2 +1,2 @@
1
- export*from"./config/model/ContextModuleConfig";export*from"./ContextModule";export*from"./ContextModuleBuilder";export*from"./DefaultContextModule";export*from"./dynamic-network/domain/DynamicNetworkContextLoader";export*from"./dynamic-network/model/DynamicNetworkConfiguration";export*from"./external-plugin/domain/ExternalPluginContextLoader";export*from"./nft/domain/NftContextLoader";export*from"./pki/domain/PkiCertificateLoader";export*from"./pki/model/KeyId";export*from"./pki/model/KeyUsage";export*from"./pki/model/PkiCertificate";export*from"./pki/model/PkiCertificateInfo";export*from"./shared/domain/ContextLoader";export*from"./shared/model/ClearSignContext";export*from"./shared/model/GenericPath";export*from"./shared/model/TransactionContext";export*from"./shared/model/TransactionSubset";export*from"./shared/model/TypedDataClearSignContext";export*from"./shared/model/TypedDataContext";export*from"./token/domain/TokenContextLoader";export*from"./trusted-name/domain/TrustedNameContextLoader";export*from"./web3-check/domain/Web3CheckContextLoader";export*from"./web3-check/domain/web3CheckTypes";
1
+ export*from"./config/model/ContextModuleConfig";export*from"./ContextModule";export*from"./ContextModuleBuilder";export*from"./DefaultContextModule";export*from"./dynamic-network/data/DynamicNetworkDataSource";export*from"./dynamic-network/data/HttpDynamicNetworkDataSource";export*from"./dynamic-network/domain/DynamicNetworkContextLoader";export*from"./dynamic-network/model/DynamicNetworkConfiguration";export*from"./external-plugin/data/ExternalPluginDataSource";export*from"./external-plugin/data/HttpExternalPluginDataSource";export*from"./external-plugin/domain/ExternalPluginContextLoader";export*from"./nft/data/HttpNftDataSource";export*from"./nft/data/NftDataSource";export*from"./nft/domain/NftContextFieldLoader";export*from"./nft/domain/NftContextLoader";export*from"./pki/data/HttpPkiCertificateDataSource";export*from"./pki/data/PkiCertificateDataSource";export*from"./pki/domain/DefaultPkiCertificateLoader";export*from"./pki/domain/PkiCertificateLoader";export*from"./pki/model/KeyId";export*from"./pki/model/KeyUsage";export*from"./pki/model/PkiCertificate";export*from"./pki/model/PkiCertificateInfo";export*from"./proxy/data/HttpProxyDataSource";export*from"./proxy/domain/ProxyContextFieldLoader";export*from"./shared/domain/ContextFieldLoader";export*from"./shared/domain/ContextLoader";export*from"./shared/model/ClearSignContext";export*from"./shared/model/GenericPath";export*from"./shared/model/TransactionContext";export*from"./shared/model/TransactionFieldContext";export*from"./shared/model/TransactionSubset";export*from"./shared/model/TypedDataClearSignContext";export*from"./shared/model/TypedDataContext";export*from"./solana/data/HttpSolanaOwnerInfoDataSource";export*from"./solana/data/SolanaDataSource";export*from"./solana/domain/DefaultSolanaContextLoader";export*from"./solana/domain/SolanaContextLoader";export*from"./token/data/HttpTokenDataSource";export*from"./token/data/TokenDataSource";export*from"./token/domain/TokenContextFieldLoader";export*from"./token/domain/TokenContextLoader";export*from"./transaction/data/HttpTransactionDataSource";export*from"./transaction/data/TransactionDataSource";export*from"./transaction/domain/TransactionContextLoader";export*from"./trusted-name/data/HttpTrustedNameDataSource";export*from"./trusted-name/data/TrustedNameDataSource";export*from"./trusted-name/domain/TrustedNameContextFieldLoader";export*from"./trusted-name/domain/TrustedNameContextLoader";export*from"./typed-data/data/HttpTypedDataDataSource";export*from"./typed-data/data/TypedDataDataSource";export*from"./typed-data/domain/DefaultTypedDataContextLoader";export*from"./typed-data/domain/TypedDataContextLoader";export*from"./uniswap/data/AbiDecoderDataSource";export*from"./uniswap/data/CommandDecoderDataSource";export*from"./uniswap/data/DefaultCommandDecoderDataSource";export*from"./uniswap/data/EthersAbiDecoderDataSource";export*from"./uniswap/domain/UniswapContextLoader";export*from"./web3-check/data/HttpWeb3CheckDataSource";export*from"./web3-check/data/Web3CheckDataSource";export*from"./web3-check/domain/DefaultWeb3CheckLoader";export*from"./web3-check/domain/Web3CheckContextLoader";export*from"./web3-check/domain/web3CheckTypes";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/index.ts"],
4
- "sourcesContent": ["export * from \"./config/model/ContextModuleConfig\";\nexport * from \"./ContextModule\";\nexport * from \"./ContextModuleBuilder\";\nexport * from \"./DefaultContextModule\";\nexport * from \"./dynamic-network/domain/DynamicNetworkContextLoader\";\nexport * from \"./dynamic-network/model/DynamicNetworkConfiguration\";\nexport * from \"./external-plugin/domain/ExternalPluginContextLoader\";\nexport * from \"./nft/domain/NftContextLoader\";\nexport * from \"./pki/domain/PkiCertificateLoader\";\nexport * from \"./pki/model/KeyId\";\nexport * from \"./pki/model/KeyUsage\";\nexport * from \"./pki/model/PkiCertificate\";\nexport * from \"./pki/model/PkiCertificateInfo\";\nexport * from \"./shared/domain/ContextLoader\";\nexport * from \"./shared/model/ClearSignContext\";\nexport * from \"./shared/model/GenericPath\";\nexport * from \"./shared/model/TransactionContext\";\nexport * from \"./shared/model/TransactionSubset\";\nexport * from \"./shared/model/TypedDataClearSignContext\";\nexport * from \"./shared/model/TypedDataContext\";\nexport * from \"./token/domain/TokenContextLoader\";\nexport * from \"./trusted-name/domain/TrustedNameContextLoader\";\nexport * from \"./web3-check/domain/Web3CheckContextLoader\";\nexport * from \"./web3-check/domain/web3CheckTypes\";\n"],
5
- "mappings": "AAAA,WAAc,qCACd,WAAc,kBACd,WAAc,yBACd,WAAc,yBACd,WAAc,uDACd,WAAc,sDACd,WAAc,uDACd,WAAc,gCACd,WAAc,oCACd,WAAc,oBACd,WAAc,uBACd,WAAc,6BACd,WAAc,iCACd,WAAc,gCACd,WAAc,kCACd,WAAc,6BACd,WAAc,oCACd,WAAc,mCACd,WAAc,2CACd,WAAc,kCACd,WAAc,oCACd,WAAc,iDACd,WAAc,6CACd,WAAc",
4
+ "sourcesContent": ["export * from \"./config/model/ContextModuleConfig\";\nexport * from \"./ContextModule\";\nexport * from \"./ContextModuleBuilder\";\nexport * from \"./DefaultContextModule\";\nexport * from \"./dynamic-network/data/DynamicNetworkDataSource\";\nexport * from \"./dynamic-network/data/HttpDynamicNetworkDataSource\";\nexport * from \"./dynamic-network/domain/DynamicNetworkContextLoader\";\nexport * from \"./dynamic-network/model/DynamicNetworkConfiguration\";\nexport * from \"./external-plugin/data/ExternalPluginDataSource\";\nexport * from \"./external-plugin/data/HttpExternalPluginDataSource\";\nexport * from \"./external-plugin/domain/ExternalPluginContextLoader\";\nexport * from \"./nft/data/HttpNftDataSource\";\nexport * from \"./nft/data/NftDataSource\";\nexport * from \"./nft/domain/NftContextFieldLoader\";\nexport * from \"./nft/domain/NftContextLoader\";\nexport * from \"./pki/data/HttpPkiCertificateDataSource\";\nexport * from \"./pki/data/PkiCertificateDataSource\";\nexport * from \"./pki/domain/DefaultPkiCertificateLoader\";\nexport * from \"./pki/domain/PkiCertificateLoader\";\nexport * from \"./pki/model/KeyId\";\nexport * from \"./pki/model/KeyUsage\";\nexport * from \"./pki/model/PkiCertificate\";\nexport * from \"./pki/model/PkiCertificateInfo\";\nexport * from \"./proxy/data/HttpProxyDataSource\";\nexport * from \"./proxy/domain/ProxyContextFieldLoader\";\nexport * from \"./shared/domain/ContextFieldLoader\";\nexport * from \"./shared/domain/ContextLoader\";\nexport * from \"./shared/model/ClearSignContext\";\nexport * from \"./shared/model/GenericPath\";\nexport * from \"./shared/model/TransactionContext\";\nexport * from \"./shared/model/TransactionFieldContext\";\nexport * from \"./shared/model/TransactionSubset\";\nexport * from \"./shared/model/TypedDataClearSignContext\";\nexport * from \"./shared/model/TypedDataContext\";\nexport * from \"./solana/data/HttpSolanaOwnerInfoDataSource\";\nexport * from \"./solana/data/SolanaDataSource\";\nexport * from \"./solana/domain/DefaultSolanaContextLoader\";\nexport * from \"./solana/domain/SolanaContextLoader\";\nexport * from \"./token/data/HttpTokenDataSource\";\nexport * from \"./token/data/TokenDataSource\";\nexport * from \"./token/domain/TokenContextFieldLoader\";\nexport * from \"./token/domain/TokenContextLoader\";\nexport * from \"./transaction/data/HttpTransactionDataSource\";\nexport * from \"./transaction/data/TransactionDataSource\";\nexport * from \"./transaction/domain/TransactionContextLoader\";\nexport * from \"./trusted-name/data/HttpTrustedNameDataSource\";\nexport * from \"./trusted-name/data/TrustedNameDataSource\";\nexport * from \"./trusted-name/domain/TrustedNameContextFieldLoader\";\nexport * from \"./trusted-name/domain/TrustedNameContextLoader\";\nexport * from \"./typed-data/data/HttpTypedDataDataSource\";\nexport * from \"./typed-data/data/TypedDataDataSource\";\nexport * from \"./typed-data/domain/DefaultTypedDataContextLoader\";\nexport * from \"./typed-data/domain/TypedDataContextLoader\";\nexport * from \"./uniswap/data/AbiDecoderDataSource\";\nexport * from \"./uniswap/data/CommandDecoderDataSource\";\nexport * from \"./uniswap/data/DefaultCommandDecoderDataSource\";\nexport * from \"./uniswap/data/EthersAbiDecoderDataSource\";\nexport * from \"./uniswap/domain/UniswapContextLoader\";\nexport * from \"./web3-check/data/HttpWeb3CheckDataSource\";\nexport * from \"./web3-check/data/Web3CheckDataSource\";\nexport * from \"./web3-check/domain/DefaultWeb3CheckLoader\";\nexport * from \"./web3-check/domain/Web3CheckContextLoader\";\nexport * from \"./web3-check/domain/web3CheckTypes\";\n"],
5
+ "mappings": "AAAA,WAAc,qCACd,WAAc,kBACd,WAAc,yBACd,WAAc,yBACd,WAAc,kDACd,WAAc,sDACd,WAAc,uDACd,WAAc,sDACd,WAAc,kDACd,WAAc,sDACd,WAAc,uDACd,WAAc,+BACd,WAAc,2BACd,WAAc,qCACd,WAAc,gCACd,WAAc,0CACd,WAAc,sCACd,WAAc,2CACd,WAAc,oCACd,WAAc,oBACd,WAAc,uBACd,WAAc,6BACd,WAAc,iCACd,WAAc,mCACd,WAAc,yCACd,WAAc,qCACd,WAAc,gCACd,WAAc,kCACd,WAAc,6BACd,WAAc,oCACd,WAAc,yCACd,WAAc,mCACd,WAAc,2CACd,WAAc,kCACd,WAAc,8CACd,WAAc,iCACd,WAAc,6CACd,WAAc,sCACd,WAAc,mCACd,WAAc,+BACd,WAAc,yCACd,WAAc,oCACd,WAAc,+CACd,WAAc,2CACd,WAAc,gDACd,WAAc,gDACd,WAAc,4CACd,WAAc,sDACd,WAAc,iDACd,WAAc,4CACd,WAAc,wCACd,WAAc,oDACd,WAAc,6CACd,WAAc,sCACd,WAAc,0CACd,WAAc,iDACd,WAAc,4CACd,WAAc,wCACd,WAAc,4CACd,WAAc,wCACd,WAAc,6CACd,WAAc,6CACd,WAAc",
6
6
  "names": []
7
7
  }
@@ -1,2 +1,2 @@
1
- var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var p=(r,t,o,e)=>{for(var a=e>1?void 0:e?m(t,o):t,i=r.length-1,d;i>=0;i--)(d=r[i])&&(a=(e?d(t,o,a):d(a))||a);return e&&a&&s(t,o,a),a},c=(r,t)=>(o,e)=>t(o,e,r);import{inject as C,injectable as y}from"inversify";import{nftTypes as f}from"../../nft/di/nftTypes";import{ContextFieldLoaderKind as x}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as l}from"../../shared/model/ClearSignContext";let n=class{constructor(t){this._dataSource=t}kind=x.NFT;async loadField(t){return(await this._dataSource.getNftInfosPayload({address:t.address,chainId:t.chainId})).caseOf({Left:e=>({type:l.ERROR,error:e}),Right:e=>({type:l.NFT,payload:e})})}};n=p([y(),c(0,C(f.NftDataSource))],n);export{n as NftContextFieldLoader};
1
+ var l=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var p=(o,t,n,e)=>{for(var a=e>1?void 0:e?u(t,n):t,i=o.length-1,d;i>=0;i--)(d=o[i])&&(a=(e?d(t,n,a):d(a))||a);return e&&a&&l(t,n,a),a},s=(o,t)=>(n,e)=>t(n,e,o);import{inject as m,injectable as y}from"inversify";import{nftTypes as f}from"../../nft/di/nftTypes";import{ContextFieldLoaderKind as C}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as c}from"../../shared/model/ClearSignContext";let r=class{constructor(t){this._dataSource=t}canHandle(t){return typeof t=="object"&&t!==null&&"kind"in t&&t.kind===C.NFT&&"chainId"in t&&"address"in t}async loadField(t){return(await this._dataSource.getNftInfosPayload({address:t.address,chainId:t.chainId})).caseOf({Left:e=>({type:c.ERROR,error:e}),Right:e=>({type:c.NFT,payload:e})})}};r=p([y(),s(0,m(f.NftDataSource))],r);export{r as NftContextFieldLoader};
2
2
  //# sourceMappingURL=NftContextFieldLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/nft/domain/NftContextFieldLoader.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport * as NftDataSource from \"@/nft/data/NftDataSource\";\nimport { nftTypes } from \"@/nft/di/nftTypes\";\nimport {\n type ContextFieldLoader,\n ContextFieldLoaderKind,\n} from \"@/shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionContext\";\n\n@injectable()\nexport class NftContextFieldLoader\n implements ContextFieldLoader<ContextFieldLoaderKind.NFT>\n{\n kind: ContextFieldLoaderKind.NFT = ContextFieldLoaderKind.NFT;\n\n constructor(\n @inject(nftTypes.NftDataSource)\n private _dataSource: NftDataSource.NftDataSource,\n ) {}\n\n async loadField(\n field: TransactionFieldContext<ContextFieldLoaderKind.NFT>,\n ): Promise<ClearSignContext> {\n const payload = await this._dataSource.getNftInfosPayload({\n address: field.address,\n chainId: field.chainId,\n });\n return payload.caseOf({\n Left: (error): ClearSignContext => ({\n type: ClearSignContextType.ERROR,\n error,\n }),\n Right: (value): ClearSignContext => ({\n type: ClearSignContextType.NFT,\n payload: value,\n }),\n });\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAGnC,OAAS,YAAAC,MAAgB,oBACzB,OAEE,0BAAAC,MACK,qCACP,OAEE,wBAAAC,MACK,kCAIA,IAAMC,EAAN,KAEP,CAGE,YAEUC,EACR,CADQ,iBAAAA,CACP,CALH,KAAmCC,EAAuB,IAO1D,MAAM,UACJC,EAC2B,CAK3B,OAJgB,MAAM,KAAK,YAAY,mBAAmB,CACxD,QAASA,EAAM,QACf,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOC,IAA6B,CAClC,KAAMC,EAAqB,MAC3B,MAAAD,CACF,GACA,MAAQE,IAA6B,CACnC,KAAMD,EAAqB,IAC3B,QAASC,CACX,EACF,CAAC,CACH,CACF,EA5BaN,EAANO,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAS,aAAa,IANrBX",
6
- "names": ["inject", "injectable", "nftTypes", "ContextFieldLoaderKind", "ClearSignContextType", "NftContextFieldLoader", "_dataSource", "ContextFieldLoaderKind", "field", "error", "ClearSignContextType", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "nftTypes"]
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport * as NftDataSource from \"@/nft/data/NftDataSource\";\nimport { nftTypes } from \"@/nft/di/nftTypes\";\nimport {\n type ContextFieldLoader,\n ContextFieldLoaderKind,\n} from \"@/shared/domain/ContextFieldLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\ntype NftFieldInput = {\n kind: ContextFieldLoaderKind.NFT;\n chainId: number;\n address: string;\n};\n\n@injectable()\nexport class NftContextFieldLoader\n implements ContextFieldLoader<NftFieldInput>\n{\n constructor(\n @inject(nftTypes.NftDataSource)\n private _dataSource: NftDataSource.NftDataSource,\n ) {}\n\n canHandle(field: unknown): field is NftFieldInput {\n return (\n typeof field === \"object\" &&\n field !== null &&\n \"kind\" in field &&\n field.kind === ContextFieldLoaderKind.NFT &&\n \"chainId\" in field &&\n \"address\" in field\n );\n }\n\n async loadField(field: NftFieldInput): Promise<ClearSignContext> {\n const payload = await this._dataSource.getNftInfosPayload({\n address: field.address,\n chainId: field.chainId,\n });\n return payload.caseOf({\n Left: (error): ClearSignContext => ({\n type: ClearSignContextType.ERROR,\n error,\n }),\n Right: (value): ClearSignContext => ({\n type: ClearSignContextType.NFT,\n payload: value,\n }),\n });\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAGnC,OAAS,YAAAC,MAAgB,oBACzB,OAEE,0BAAAC,MACK,qCACP,OAEE,wBAAAC,MACK,kCASA,IAAMC,EAAN,KAEP,CACE,YAEUC,EACR,CADQ,iBAAAA,CACP,CAEH,UAAUC,EAAwC,CAChD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,SAAUA,GACVA,EAAM,OAASC,EAAuB,KACtC,YAAaD,GACb,YAAaA,CAEjB,CAEA,MAAM,UAAUA,EAAiD,CAK/D,OAJgB,MAAM,KAAK,YAAY,mBAAmB,CACxD,QAASA,EAAM,QACf,QAASA,EAAM,OACjB,CAAC,GACc,OAAO,CACpB,KAAOE,IAA6B,CAClC,KAAMC,EAAqB,MAC3B,MAAAD,CACF,GACA,MAAQE,IAA6B,CACnC,KAAMD,EAAqB,IAC3B,QAASC,CACX,EACF,CAAC,CACH,CACF,EAnCaN,EAANO,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAS,aAAa,IAJrBX",
6
+ "names": ["inject", "injectable", "nftTypes", "ContextFieldLoaderKind", "ClearSignContextType", "NftContextFieldLoader", "_dataSource", "field", "ContextFieldLoaderKind", "error", "ClearSignContextType", "value", "__decorateClass", "injectable", "__decorateParam", "inject", "nftTypes"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ import{Left as i,Right as r}from"purify-ts";import{NftContextFieldLoader as c}from"../../nft/domain/NftContextFieldLoader";import{ContextFieldLoaderKind as n}from"../../shared/domain/ContextFieldLoader";import{ClearSignContextType as s}from"../../shared/model/ClearSignContext";describe("NftContextFieldLoader",()=>{const a={getNftInfosPayload:vi.fn(),getSetPluginPayload:vi.fn()},d=new c(a),t={kind:n.NFT,chainId:1,address:"0x1234567890abcdef"},l="0x123456789abcdef0";beforeEach(()=>{vi.resetAllMocks()}),describe("canHandle",()=>{it("should return true for valid NFT field",()=>{const e={kind:n.NFT,chainId:1,address:"0x1234567890abcdef"};expect(d.canHandle(e)).toBe(!0)}),describe("should return false for invalid fields",()=>{const e=[{name:"null",value:null},{name:"undefined",value:void 0},{name:"string",value:"invalid"},{name:"number",value:123},{name:"boolean",value:!0},{name:"array",value:[]},{name:"empty object",value:{}},{name:"object missing kind",value:{chainId:1,address:"0x123"}},{name:"object missing chainId",value:{kind:n.NFT,address:"0x123"}},{name:"object missing address",value:{kind:n.NFT,chainId:1}},{name:"object with wrong kind",value:{kind:n.TOKEN,chainId:1,address:"0x123"}}];test.each(e)("$name",({value:o})=>{expect(d.canHandle(o)).toBe(!1)})})}),describe("loadField",()=>{it("should return error context when NFT data source fails",async()=>{const e=new Error("NFT data source error");vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(i(e));const o=await d.loadField(t);expect(a.getNftInfosPayload).toHaveBeenCalledWith({address:t.address,chainId:t.chainId}),expect(o).toEqual({type:s.ERROR,error:e})}),it("should return NFT context when successful",async()=>{vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(r(l));const e=await d.loadField(t);expect(a.getNftInfosPayload).toHaveBeenCalledWith({address:t.address,chainId:t.chainId}),expect(e).toEqual({type:s.NFT,payload:l})}),it("should handle different chain IDs and addresses correctly",async()=>{const e={...t,chainId:137,address:"0xdeadbeef"};vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(r(l));const o=await d.loadField(e);expect(a.getNftInfosPayload).toHaveBeenCalledWith({address:"0xdeadbeef",chainId:137}),expect(o).toEqual({type:s.NFT,payload:l})}),it("should preserve error message from NFT data source",async()=>{const e=new Error("Network timeout error");vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(i(e));const o=await d.loadField(t);expect(o).toEqual({type:s.ERROR,error:e})}),it("should handle empty NFT payload",async()=>{const e="";vi.spyOn(a,"getNftInfosPayload").mockResolvedValue(r(e));const o=await d.loadField(t);expect(o).toEqual({type:s.NFT,payload:e})})})});
2
+ //# sourceMappingURL=NftContextFieldLoader.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/nft/domain/NftContextFieldLoader.test.ts"],
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { type NftDataSource } from \"@/nft/data/NftDataSource\";\nimport { NftContextFieldLoader } from \"@/nft/domain/NftContextFieldLoader\";\nimport { ContextFieldLoaderKind } from \"@/shared/domain/ContextFieldLoader\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\nimport { type TransactionFieldContext } from \"@/shared/model/TransactionFieldContext\";\n\ndescribe(\"NftContextFieldLoader\", () => {\n const mockNftDataSource: NftDataSource = {\n getNftInfosPayload: vi.fn(),\n getSetPluginPayload: vi.fn(),\n };\n const nftContextFieldLoader = new NftContextFieldLoader(mockNftDataSource);\n\n const mockTransactionField: TransactionFieldContext<ContextFieldLoaderKind.NFT> =\n {\n kind: ContextFieldLoaderKind.NFT,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n const mockNftPayload = \"0x123456789abcdef0\";\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"canHandle\", () => {\n it(\"should return true for valid NFT field\", () => {\n // GIVEN\n const validField = {\n kind: ContextFieldLoaderKind.NFT,\n chainId: 1,\n address: \"0x1234567890abcdef\",\n };\n\n // THEN\n expect(nftContextFieldLoader.canHandle(validField)).toBe(true);\n });\n\n describe(\"should return false for invalid fields\", () => {\n const invalidFields = [\n { name: \"null\", value: null },\n { name: \"undefined\", value: undefined },\n { name: \"string\", value: \"invalid\" },\n { name: \"number\", value: 123 },\n { name: \"boolean\", value: true },\n { name: \"array\", value: [] },\n { name: \"empty object\", value: {} },\n {\n name: \"object missing kind\",\n value: { chainId: 1, address: \"0x123\" },\n },\n {\n name: \"object missing chainId\",\n value: { kind: ContextFieldLoaderKind.NFT, address: \"0x123\" },\n },\n {\n name: \"object missing address\",\n value: { kind: ContextFieldLoaderKind.NFT, chainId: 1 },\n },\n {\n name: \"object with wrong kind\",\n value: {\n kind: ContextFieldLoaderKind.TOKEN,\n chainId: 1,\n address: \"0x123\",\n },\n },\n ];\n\n test.each(invalidFields)(\"$name\", ({ value }) => {\n expect(nftContextFieldLoader.canHandle(value)).toBe(false);\n });\n });\n });\n\n describe(\"loadField\", () => {\n it(\"should return error context when NFT data source fails\", async () => {\n // GIVEN\n const error = new Error(\"NFT data source error\");\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Left(error),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: error,\n });\n });\n\n it(\"should return NFT context when successful\", async () => {\n // GIVEN\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(mockNftPayload),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).toHaveBeenCalledWith({\n address: mockTransactionField.address,\n chainId: mockTransactionField.chainId,\n });\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: mockNftPayload,\n });\n });\n\n it(\"should handle different chain IDs and addresses correctly\", async () => {\n // GIVEN\n const customField = {\n ...mockTransactionField,\n chainId: 137,\n address: \"0xdeadbeef\",\n };\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(mockNftPayload),\n );\n\n // WHEN\n const result = await nftContextFieldLoader.loadField(customField);\n\n // THEN\n expect(mockNftDataSource.getNftInfosPayload).toHaveBeenCalledWith({\n address: \"0xdeadbeef\",\n chainId: 137,\n });\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: mockNftPayload,\n });\n });\n\n it(\"should preserve error message from NFT data source\", async () => {\n // GIVEN\n const specificError = new Error(\"Network timeout error\");\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Left(specificError),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.ERROR,\n error: specificError,\n });\n });\n\n it(\"should handle empty NFT payload\", async () => {\n // GIVEN\n const emptyPayload = \"\";\n vi.spyOn(mockNftDataSource, \"getNftInfosPayload\").mockResolvedValue(\n Right(emptyPayload),\n );\n\n // WHEN\n const result =\n await nftContextFieldLoader.loadField(mockTransactionField);\n\n // THEN\n expect(result).toEqual({\n type: ClearSignContextType.NFT,\n payload: emptyPayload,\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["Left", "Right", "NftContextFieldLoader", "ContextFieldLoaderKind", "ClearSignContextType", "mockNftDataSource", "nftContextFieldLoader", "mockTransactionField", "mockNftPayload", "validField", "invalidFields", "value", "error", "result", "customField", "specificError", "emptyPayload"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var p=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var l=(i,e,r,n)=>{for(var t=n>1?void 0:n?f(e,r):e,o=i.length-1,a;o>=0;o--)(a=i[o])&&(t=(n?a(e,r,t):a(t))||t);return n&&t&&p(e,r,t),t},m=(i,e)=>(r,n)=>e(r,n,i);import y from"axios";import{inject as c,injectable as x}from"inversify";import{Left as s,Right as g}from"purify-ts";import{configTypes as D}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as u,LEDGER_ORIGIN_TOKEN_HEADER as E}from"../../shared/constant/HttpHeaders";import P from"../../../package.json";let d=class{constructor(e){this.config=e}async getProxyImplementationAddress({proxyAddress:e,chainId:r,challenge:n,calldata:t}){let o;try{o=(await y.request({method:"POST",url:`${this.config.metadataServiceDomain.url}/v2/ethereum/${r}/contract/proxy/delegate`,headers:{[u]:`context-module/${P.version}`,[E]:this.config.originToken},data:{proxy:e,data:t,challenge:n}})).data}catch{return s(new Error("[ContextModule] HttpProxyDataSource: Failed to fetch delegate proxy"))}return o?this.isProxyDelegateCallDto(o)?o.addresses[0]?g({implementationAddress:o.addresses[0],signedDescriptor:o.signedDescriptor}):s(new Error(`[ContextModule] HttpProxyDataSource: No implementation address found for proxy ${e} on chain ${r}`)):s(new Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${e} on chain ${r}`)):s(new Error(`[ContextModule] HttpProxyDataSource: No data received for proxy ${e} on chain ${r}`))}isProxyDelegateCallDto(e){return typeof e=="object"&&e!==null&&"addresses"in e&&"signedDescriptor"in e&&Array.isArray(e.addresses)&&e.addresses.every(r=>typeof r=="string")&&typeof e.signedDescriptor=="string"}};d=l([x(),m(0,c(D.Config))],d);export{d as HttpProxyDataSource};
2
+ //# sourceMappingURL=HttpProxyDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/proxy/data/HttpProxyDataSource.ts"],
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport {\n LEDGER_CLIENT_VERSION_HEADER,\n LEDGER_ORIGIN_TOKEN_HEADER,\n} from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { ProxyDelegateCallDto } from \"./dto/ProxyDelegateCallDto\";\nimport {\n GetProxyImplementationAddressParam,\n ProxyDataSource,\n ProxyImplementationAddress,\n} from \"./ProxyDataSource\";\n\n@injectable()\nexport class HttpProxyDataSource implements ProxyDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async getProxyImplementationAddress({\n proxyAddress,\n chainId,\n challenge,\n calldata,\n }: GetProxyImplementationAddressParam): Promise<\n Either<Error, ProxyImplementationAddress>\n > {\n let dto: ProxyDelegateCallDto | undefined;\n try {\n const response = await axios.request<ProxyDelegateCallDto>({\n method: \"POST\",\n url: `${this.config.metadataServiceDomain.url}/v2/ethereum/${chainId}/contract/proxy/delegate`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n [LEDGER_ORIGIN_TOKEN_HEADER]: this.config.originToken,\n },\n data: {\n proxy: proxyAddress,\n data: calldata,\n challenge,\n },\n });\n dto = response.data;\n } catch (_error) {\n return Left(\n new Error(\n `[ContextModule] HttpProxyDataSource: Failed to fetch delegate proxy`,\n ),\n );\n }\n\n if (!dto) {\n return Left(\n new Error(\n `[ContextModule] HttpProxyDataSource: No data received for proxy ${proxyAddress} on chain ${chainId}`,\n ),\n );\n }\n\n if (!this.isProxyDelegateCallDto(dto)) {\n return Left(\n new Error(\n `[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${proxyAddress} on chain ${chainId}`,\n ),\n );\n }\n\n if (!dto.addresses[0]) {\n return Left(\n new Error(\n `[ContextModule] HttpProxyDataSource: No implementation address found for proxy ${proxyAddress} on chain ${chainId}`,\n ),\n );\n }\n\n return Right({\n implementationAddress: dto.addresses[0],\n signedDescriptor: dto.signedDescriptor,\n });\n }\n\n /**\n * Type guard to validate ProxyDelegateCallDto\n */\n private isProxyDelegateCallDto(\n value: unknown,\n ): value is ProxyDelegateCallDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"addresses\" in value &&\n \"signedDescriptor\" in value &&\n Array.isArray(value.addresses) &&\n value.addresses.every((address) => typeof address === \"string\") &&\n typeof value.signedDescriptor === \"string\"\n );\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAE5B,OACE,gCAAAC,EACA,8BAAAC,MACK,gCACP,OAAOC,MAAa,qBAUb,IAAMC,EAAN,KAAqD,CAC1D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,8BAA8B,CAClC,aAAAC,EACA,QAAAC,EACA,UAAAC,EACA,SAAAC,CACF,EAEE,CACA,IAAIC,EACJ,GAAI,CAcFA,GAbiB,MAAMC,EAAM,QAA8B,CACzD,OAAQ,OACR,IAAK,GAAG,KAAK,OAAO,sBAAsB,GAAG,gBAAgBJ,CAAO,2BACpE,QAAS,CACP,CAACK,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,GACjE,CAACC,CAA0B,EAAG,KAAK,OAAO,WAC5C,EACA,KAAM,CACJ,MAAOR,EACP,KAAMG,EACN,UAAAD,CACF,CACF,CAAC,GACc,IACjB,MAAiB,CACf,OAAOO,EACL,IAAI,MACF,qEACF,CACF,CACF,CAEA,OAAKL,EAQA,KAAK,uBAAuBA,CAAG,EAQ/BA,EAAI,UAAU,CAAC,EAQbM,EAAM,CACX,sBAAuBN,EAAI,UAAU,CAAC,EACtC,iBAAkBA,EAAI,gBACxB,CAAC,EAVQK,EACL,IAAI,MACF,kFAAkFT,CAAY,aAAaC,CAAO,EACpH,CACF,EAZOQ,EACL,IAAI,MACF,8FAA8FT,CAAY,aAAaC,CAAO,EAChI,CACF,EAZOQ,EACL,IAAI,MACF,mEAAmET,CAAY,aAAaC,CAAO,EACrG,CACF,CAuBJ,CAKQ,uBACNU,EAC+B,CAC/B,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,cAAeA,GACf,qBAAsBA,GACtB,MAAM,QAAQA,EAAM,SAAS,GAC7BA,EAAM,UAAU,MAAOC,GAAY,OAAOA,GAAY,QAAQ,GAC9D,OAAOD,EAAM,kBAAqB,QAEtC,CACF,EAnFab,EAANe,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBnB",
6
+ "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER", "PACKAGE", "HttpProxyDataSource", "config", "proxyAddress", "chainId", "challenge", "calldata", "dto", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "LEDGER_ORIGIN_TOKEN_HEADER", "Left", "Right", "value", "address", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import o from"axios";import{LEDGER_CLIENT_VERSION_HEADER as i,LEDGER_ORIGIN_TOKEN_HEADER as c}from"../../shared/constant/HttpHeaders";import l from"../../../package.json";import{HttpProxyDataSource as p}from"./HttpProxyDataSource";vi.mock("axios");const d={metadataServiceDomain:{url:"https://metadata.api.live.ledger.com"},originToken:"test-origin-token"};describe("HttpProxyDataSource",()=>{let a;beforeAll(()=>{a=new p(d),vi.clearAllMocks()}),beforeEach(()=>{vi.clearAllMocks()});const t={proxyAddress:"0x1234567890123456789012345678901234567890",chainId:1,challenge:"test-challenge",calldata:"0xabcdef"},s={addresses:["0x9876543210987654321098765432109876543210"],signedDescriptor:"signed-descriptor-data"};describe("getProxyImplementationAddress",()=>{it("should call axios with correct URL, headers, and data",async()=>{const e=`context-module/${l.version}`,r=vi.fn(()=>Promise.resolve({data:s}));vi.spyOn(o,"request").mockImplementation(r),await a.getProxyImplementationAddress(t),expect(r).toHaveBeenCalledWith({method:"POST",url:`${d.metadataServiceDomain.url}/v2/ethereum/${t.chainId}/contract/proxy/delegate`,headers:{[i]:e,[c]:d.originToken},data:{proxy:t.proxyAddress,data:t.calldata,challenge:t.challenge}})}),it("should return Right with proxy implementation data when request succeeds with valid DTO",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:s});const e=await a.getProxyImplementationAddress(t);expect(e.isRight()).toBe(!0),expect(e.extract()).toEqual({implementationAddress:s.addresses[0],signedDescriptor:s.signedDescriptor})}),it("should return Right with first address when multiple addresses are provided",async()=>{const e={addresses:["0x9876543210987654321098765432109876543210","0x1111111111111111111111111111111111111111"],signedDescriptor:"signed-descriptor-data"};vi.spyOn(o,"request").mockResolvedValue({data:e});const r=await a.getProxyImplementationAddress(t);expect(r.isRight()).toBe(!0),expect(r.extract()).toEqual({implementationAddress:e.addresses[0],signedDescriptor:e.signedDescriptor})}),it("should return Left with error when axios throws an error",async()=>{vi.spyOn(o,"request").mockRejectedValue(new Error("Network error"));const e=await a.getProxyImplementationAddress(t);expect(e.isLeft()).toBe(!0),expect(e.extract()).toEqual(new Error("[ContextModule] HttpProxyDataSource: Failed to fetch delegate proxy"))}),it("should return Left with error when response data is undefined",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:void 0});const e=await a.getProxyImplementationAddress(t);expect(e.isLeft()).toBe(!0),expect(e.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: No data received for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when response data is null",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:null});const e=await a.getProxyImplementationAddress(t);expect(e.isLeft()).toBe(!0),expect(e.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: No data received for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when addresses field is missing",async()=>{const{addresses:e,...r}=s;vi.spyOn(o,"request").mockResolvedValue({data:r});const n=await a.getProxyImplementationAddress(t);expect(n.isLeft()).toBe(!0),expect(n.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when signedDescriptor is missing",async()=>{const{signedDescriptor:e,...r}=s;vi.spyOn(o,"request").mockResolvedValue({data:r});const n=await a.getProxyImplementationAddress(t);expect(n.isLeft()).toBe(!0),expect(n.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when addresses is not an array",async()=>{const e={...s,addresses:"not-an-array"};vi.spyOn(o,"request").mockResolvedValue({data:e});const r=await a.getProxyImplementationAddress(t);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when addresses array contains non-string values",async()=>{const e={...s,addresses:[123,"valid-address"]};vi.spyOn(o,"request").mockResolvedValue({data:e});const r=await a.getProxyImplementationAddress(t);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when signedDescriptor is not a string",async()=>{const e={...s,signedDescriptor:123};vi.spyOn(o,"request").mockResolvedValue({data:e});const r=await a.getProxyImplementationAddress(t);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when addresses array is empty",async()=>{const e={addresses:[],signedDescriptor:"signed-descriptor-data"};vi.spyOn(o,"request").mockResolvedValue({data:e});const r=await a.getProxyImplementationAddress(t);expect(r.isLeft()).toBe(!0),expect(r.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: No implementation address found for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should return Left with error when response is not an object",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:"not an object"});const e=await a.getProxyImplementationAddress(t);expect(e.isLeft()).toBe(!0),expect(e.extract()).toEqual(new Error(`[ContextModule] HttpProxyDataSource: Invalid proxy delegate call response format for proxy ${t.proxyAddress} on chain ${t.chainId}`))}),it("should handle different chainId values correctly",async()=>{const e={...t,chainId:137};vi.spyOn(o,"request").mockResolvedValue({data:s});const r=await a.getProxyImplementationAddress(e);expect(r.isRight()).toBe(!0),expect(o.request).toHaveBeenCalledWith(expect.objectContaining({url:`${d.metadataServiceDomain.url}/v2/ethereum/137/contract/proxy/delegate`}))}),it("should handle different proxy addresses correctly",async()=>{const e="0xabcdefabcdefabcdefabcdefabcdefabcdefabcd",r={...t,proxyAddress:e};vi.spyOn(o,"request").mockResolvedValue({data:s});const n=await a.getProxyImplementationAddress(r);expect(n.isRight()).toBe(!0),expect(o.request).toHaveBeenCalledWith(expect.objectContaining({data:expect.objectContaining({proxy:e})}))}),it("should handle different calldata values correctly",async()=>{const e="0x123456789abcdef",r={...t,calldata:e};vi.spyOn(o,"request").mockResolvedValue({data:s});const n=await a.getProxyImplementationAddress(r);expect(n.isRight()).toBe(!0),expect(o.request).toHaveBeenCalledWith(expect.objectContaining({data:expect.objectContaining({data:e})}))}),it("should pass challenge parameter correctly",async()=>{const e="custom-challenge-string",r={...t,challenge:e};vi.spyOn(o,"request").mockResolvedValue({data:s});const n=await a.getProxyImplementationAddress(r);expect(n.isRight()).toBe(!0),expect(o.request).toHaveBeenCalledWith(expect.objectContaining({data:expect.objectContaining({challenge:e})}))})})});
2
+ //# sourceMappingURL=HttpProxyDataSource.test.js.map