@ledgerhq/context-module 2.1.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/lib/cjs/package.json +2 -2
  2. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  3. package/lib/cjs/src/ContextModuleBuilder.js.map +2 -2
  4. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  5. package/lib/cjs/src/ContextModuleBuilder.test.js.map +2 -2
  6. package/lib/cjs/src/DefaultContextModule.js +1 -1
  7. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  8. package/lib/cjs/src/di.js +1 -1
  9. package/lib/cjs/src/di.js.map +3 -3
  10. package/lib/cjs/src/index.js +1 -1
  11. package/lib/cjs/src/index.js.map +2 -2
  12. package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  13. package/lib/cjs/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
  14. package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  15. package/lib/cjs/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  16. package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  17. package/lib/cjs/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  18. package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  19. package/lib/cjs/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
  20. package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  21. package/lib/cjs/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  22. package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
  23. package/lib/cjs/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
  24. package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  25. package/lib/cjs/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  26. package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  27. package/lib/cjs/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
  28. package/lib/cjs/src/modules/multichain/pki/model/KeyId.js +1 -1
  29. package/lib/cjs/src/modules/multichain/pki/model/KeyId.js.map +2 -2
  30. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
  31. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
  32. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
  33. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
  34. package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +2 -0
  35. package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
  36. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
  37. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
  38. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
  39. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
  40. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
  41. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
  42. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
  43. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
  44. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
  45. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
  46. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
  47. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
  48. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
  49. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
  50. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
  51. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
  52. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
  53. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
  54. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
  55. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
  56. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
  57. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
  58. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
  59. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
  60. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +2 -0
  61. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
  62. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
  63. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
  64. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
  65. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
  66. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
  67. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
  68. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
  69. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
  70. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
  71. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
  72. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
  73. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
  74. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
  75. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
  76. package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
  77. package/lib/cjs/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
  78. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
  79. package/lib/cjs/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +2 -2
  80. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  81. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
  82. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js +1 -1
  83. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js.map +1 -1
  84. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js +1 -1
  85. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js.map +3 -3
  86. package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
  87. package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
  88. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
  89. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
  90. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
  91. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
  92. package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js +1 -1
  93. package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js.map +1 -1
  94. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  95. package/lib/cjs/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  96. package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
  97. package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
  98. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
  99. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
  100. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
  101. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
  102. package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +2 -0
  103. package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
  104. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
  105. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
  106. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
  107. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
  108. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
  109. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
  110. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
  111. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
  112. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
  113. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
  114. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
  115. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
  116. package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js +2 -0
  117. package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
  118. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
  119. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
  120. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
  121. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
  122. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
  123. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
  124. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
  125. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
  126. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
  127. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
  128. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
  129. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
  130. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +2 -0
  131. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
  132. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
  133. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
  134. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
  135. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
  136. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
  137. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
  138. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
  139. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
  140. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  141. package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
  142. package/lib/cjs/src/shared/utils/HexStringUtils.js +1 -1
  143. package/lib/cjs/src/shared/utils/HexStringUtils.js.map +3 -3
  144. package/lib/cjs/src/shared/utils/HexStringUtils.test.js +1 -1
  145. package/lib/cjs/src/shared/utils/HexStringUtils.test.js.map +2 -2
  146. package/lib/cjs/src/shared/utils/certificateCache.js +2 -0
  147. package/lib/cjs/src/shared/utils/certificateCache.js.map +7 -0
  148. package/lib/cjs/src/shared/utils/certificateCache.test.js +2 -0
  149. package/lib/cjs/src/shared/utils/certificateCache.test.js.map +7 -0
  150. package/lib/cjs/src/shared/utils/certificateResult.js +2 -0
  151. package/lib/cjs/src/shared/utils/certificateResult.js.map +7 -0
  152. package/lib/cjs/src/shared/utils/certificateResult.test.js +2 -0
  153. package/lib/cjs/src/shared/utils/certificateResult.test.js.map +7 -0
  154. package/lib/cjs/src/shared/utils/challengeBoundLoader.js +2 -0
  155. package/lib/cjs/src/shared/utils/challengeBoundLoader.js.map +7 -0
  156. package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js +2 -0
  157. package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
  158. package/lib/cjs/src/shared/utils/deviceModelIdCodec.js +2 -0
  159. package/lib/cjs/src/shared/utils/deviceModelIdCodec.js.map +7 -0
  160. package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js +2 -0
  161. package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
  162. package/lib/cjs/src/shared/utils/signedDescriptorDto.js +2 -0
  163. package/lib/cjs/src/shared/utils/signedDescriptorDto.js.map +7 -0
  164. package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js +2 -0
  165. package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
  166. package/lib/cjs/src/shared/utils/uIntCodec.js +2 -0
  167. package/lib/cjs/src/shared/utils/uIntCodec.js.map +7 -0
  168. package/lib/cjs/src/shared/utils/uIntCodec.test.js +2 -0
  169. package/lib/cjs/src/shared/utils/uIntCodec.test.js.map +7 -0
  170. package/lib/esm/package.json +2 -2
  171. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  172. package/lib/esm/src/ContextModuleBuilder.js.map +2 -2
  173. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  174. package/lib/esm/src/ContextModuleBuilder.test.js.map +2 -2
  175. package/lib/esm/src/DefaultContextModule.js +1 -1
  176. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  177. package/lib/esm/src/di.js +1 -1
  178. package/lib/esm/src/di.js.map +3 -3
  179. package/lib/esm/src/index.js +1 -1
  180. package/lib/esm/src/index.js.map +2 -2
  181. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js +1 -1
  182. package/lib/esm/src/modules/ethereum/calldata/data/HttpCalldataDescriptorDataSource.test.js.map +2 -2
  183. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js +1 -1
  184. package/lib/esm/src/modules/ethereum/dynamic-network/data/HttpDynamicNetworkDataSource.test.js.map +2 -2
  185. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js +1 -1
  186. package/lib/esm/src/modules/ethereum/dynamic-network/domain/DynamicNetworkContextLoader.test.js.map +2 -2
  187. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  188. package/lib/esm/src/modules/ethereum/external-plugin/data/HttpExternalPluginDataSource.test.js.map +2 -2
  189. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js +1 -1
  190. package/lib/esm/src/modules/ethereum/gated-signing/data/HttpGatedDescriptorDataSource.test.js.map +2 -2
  191. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js +1 -1
  192. package/lib/esm/src/modules/ethereum/token/data/HttpTokenDataSource.test.js.map +2 -2
  193. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  194. package/lib/esm/src/modules/ethereum/trusted-name/data/HttpTrustedNameDataSource.test.js.map +2 -2
  195. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  196. package/lib/esm/src/modules/ethereum/typed-data/data/HttpTypedDataDataSource.test.js.map +2 -2
  197. package/lib/esm/src/modules/multichain/pki/model/KeyId.js +1 -1
  198. package/lib/esm/src/modules/multichain/pki/model/KeyId.js.map +2 -2
  199. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
  200. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
  201. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
  202. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
  203. package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +1 -0
  204. package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
  205. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
  206. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
  207. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
  208. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
  209. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
  210. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
  211. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
  212. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
  213. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
  214. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
  215. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
  216. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
  217. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
  218. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
  219. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
  220. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
  221. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
  222. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
  223. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
  224. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
  225. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
  226. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
  227. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
  228. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
  229. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +1 -0
  230. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
  231. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
  232. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
  233. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
  234. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
  235. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
  236. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
  237. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
  238. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
  239. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
  240. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
  241. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
  242. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
  243. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
  244. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
  245. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js +1 -1
  246. package/lib/esm/src/modules/solana/lifi/data/HttpLifiDataSource.test.js.map +2 -2
  247. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js +1 -1
  248. package/lib/esm/src/modules/solana/lifi/domain/LifiContextLoader.test.js.map +2 -2
  249. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  250. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
  251. package/lib/esm/src/modules/solana/model/SolanaPayloads.js +1 -0
  252. package/lib/esm/src/modules/solana/model/SolanaPayloads.js.map +4 -4
  253. package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
  254. package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
  255. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
  256. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
  257. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
  258. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
  259. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js +2 -2
  260. package/lib/esm/src/modules/solana/token/data/HttpTokenDataSource.test.js.map +2 -2
  261. package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
  262. package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
  263. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
  264. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
  265. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
  266. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
  267. package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +1 -0
  268. package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
  269. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
  270. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
  271. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
  272. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
  273. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
  274. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
  275. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
  276. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
  277. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
  278. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
  279. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
  280. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
  281. package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js +1 -0
  282. package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
  283. package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
  284. package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
  285. package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
  286. package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
  287. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
  288. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
  289. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
  290. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
  291. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
  292. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
  293. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
  294. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
  295. package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +1 -0
  296. package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
  297. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
  298. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
  299. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
  300. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
  301. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
  302. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
  303. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
  304. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
  305. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  306. package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
  307. package/lib/esm/src/shared/utils/HexStringUtils.js +1 -1
  308. package/lib/esm/src/shared/utils/HexStringUtils.js.map +3 -3
  309. package/lib/esm/src/shared/utils/HexStringUtils.test.js +1 -1
  310. package/lib/esm/src/shared/utils/HexStringUtils.test.js.map +2 -2
  311. package/lib/esm/src/shared/utils/certificateCache.js +2 -0
  312. package/lib/esm/src/shared/utils/certificateCache.js.map +7 -0
  313. package/lib/esm/src/shared/utils/certificateCache.test.js +2 -0
  314. package/lib/esm/src/shared/utils/certificateCache.test.js.map +7 -0
  315. package/lib/esm/src/shared/utils/certificateResult.js +2 -0
  316. package/lib/esm/src/shared/utils/certificateResult.js.map +7 -0
  317. package/lib/esm/src/shared/utils/certificateResult.test.js +2 -0
  318. package/lib/esm/src/shared/utils/certificateResult.test.js.map +7 -0
  319. package/lib/esm/src/shared/utils/challengeBoundLoader.js +2 -0
  320. package/lib/esm/src/shared/utils/challengeBoundLoader.js.map +7 -0
  321. package/lib/esm/src/shared/utils/challengeBoundLoader.test.js +2 -0
  322. package/lib/esm/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
  323. package/lib/esm/src/shared/utils/deviceModelIdCodec.js +2 -0
  324. package/lib/esm/src/shared/utils/deviceModelIdCodec.js.map +7 -0
  325. package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js +2 -0
  326. package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
  327. package/lib/esm/src/shared/utils/signedDescriptorDto.js +2 -0
  328. package/lib/esm/src/shared/utils/signedDescriptorDto.js.map +7 -0
  329. package/lib/esm/src/shared/utils/signedDescriptorDto.test.js +2 -0
  330. package/lib/esm/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
  331. package/lib/esm/src/shared/utils/uIntCodec.js +2 -0
  332. package/lib/esm/src/shared/utils/uIntCodec.js.map +7 -0
  333. package/lib/esm/src/shared/utils/uIntCodec.test.js +2 -0
  334. package/lib/esm/src/shared/utils/uIntCodec.test.js.map +7 -0
  335. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  336. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  337. package/lib/types/src/di.d.ts.map +1 -1
  338. package/lib/types/src/index.d.ts +16 -0
  339. package/lib/types/src/index.d.ts.map +1 -1
  340. package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts +1 -0
  341. package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts.map +1 -1
  342. package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts +1 -1
  343. package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts.map +1 -1
  344. package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts +17 -0
  345. package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts.map +1 -0
  346. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts +11 -0
  347. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts.map +1 -0
  348. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts +2 -0
  349. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts.map +1 -0
  350. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts +3 -0
  351. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts.map +1 -0
  352. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts +5 -0
  353. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts.map +1 -0
  354. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts +23 -0
  355. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts.map +1 -0
  356. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts +2 -0
  357. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts.map +1 -0
  358. package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts +3 -0
  359. package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts.map +1 -0
  360. package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts +4 -0
  361. package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts.map +1 -0
  362. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts +45 -0
  363. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts.map +1 -0
  364. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts +2 -0
  365. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts.map +1 -0
  366. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts +11 -0
  367. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts.map +1 -0
  368. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts +2 -0
  369. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts.map +1 -0
  370. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts +32 -0
  371. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts.map +1 -0
  372. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts +129 -0
  373. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts.map +1 -0
  374. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts +26 -0
  375. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts.map +1 -0
  376. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts +2 -0
  377. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts.map +1 -0
  378. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts +3 -0
  379. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts.map +1 -0
  380. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts +5 -0
  381. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts.map +1 -0
  382. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts +39 -0
  383. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts.map +1 -0
  384. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts +2 -0
  385. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts.map +1 -0
  386. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts +33 -2
  387. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts.map +1 -1
  388. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts +8 -1
  389. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts.map +1 -1
  390. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts +124 -0
  391. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts.map +1 -1
  392. package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts +6 -5
  393. package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts.map +1 -1
  394. package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts +2 -5
  395. package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts.map +1 -1
  396. package/lib/types/src/modules/solana/token/domain/TokenContextLoader.d.ts.map +1 -1
  397. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts +11 -0
  398. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts.map +1 -0
  399. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts +2 -0
  400. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts.map +1 -0
  401. package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts +15 -0
  402. package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts.map +1 -0
  403. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts +3 -0
  404. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts.map +1 -0
  405. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts +5 -0
  406. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts.map +1 -0
  407. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts +26 -0
  408. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts.map +1 -0
  409. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts +2 -0
  410. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts.map +1 -0
  411. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts +11 -0
  412. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts.map +1 -0
  413. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts +2 -0
  414. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts.map +1 -0
  415. package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts +24 -0
  416. package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts.map +1 -0
  417. package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts +3 -0
  418. package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts.map +1 -0
  419. package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts +5 -0
  420. package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts.map +1 -0
  421. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts +26 -0
  422. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts.map +1 -0
  423. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts +2 -0
  424. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts.map +1 -0
  425. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts +11 -0
  426. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -0
  427. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts +2 -0
  428. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts.map +1 -0
  429. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts +17 -0
  430. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -0
  431. package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts +3 -0
  432. package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -0
  433. package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts +5 -0
  434. package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts.map +1 -0
  435. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts +28 -0
  436. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -0
  437. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts +2 -0
  438. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts.map +1 -0
  439. package/lib/types/src/shared/model/ClearSignContext.d.ts +7 -1
  440. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  441. package/lib/types/src/shared/utils/HexStringUtils.d.ts +7 -0
  442. package/lib/types/src/shared/utils/HexStringUtils.d.ts.map +1 -1
  443. package/lib/types/src/shared/utils/certificateCache.d.ts +23 -0
  444. package/lib/types/src/shared/utils/certificateCache.d.ts.map +1 -0
  445. package/lib/types/src/shared/utils/certificateCache.test.d.ts +2 -0
  446. package/lib/types/src/shared/utils/certificateCache.test.d.ts.map +1 -0
  447. package/lib/types/src/shared/utils/certificateResult.d.ts +26 -0
  448. package/lib/types/src/shared/utils/certificateResult.d.ts.map +1 -0
  449. package/lib/types/src/shared/utils/certificateResult.test.d.ts +2 -0
  450. package/lib/types/src/shared/utils/certificateResult.test.d.ts.map +1 -0
  451. package/lib/types/src/shared/utils/challengeBoundLoader.d.ts +43 -0
  452. package/lib/types/src/shared/utils/challengeBoundLoader.d.ts.map +1 -0
  453. package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts +2 -0
  454. package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts.map +1 -0
  455. package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts +7 -0
  456. package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts.map +1 -0
  457. package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts +2 -0
  458. package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts.map +1 -0
  459. package/lib/types/src/shared/utils/signedDescriptorDto.d.ts +15 -0
  460. package/lib/types/src/shared/utils/signedDescriptorDto.d.ts.map +1 -0
  461. package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts +2 -0
  462. package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts.map +1 -0
  463. package/lib/types/src/shared/utils/uIntCodec.d.ts +20 -0
  464. package/lib/types/src/shared/utils/uIntCodec.d.ts.map +1 -0
  465. package/lib/types/src/shared/utils/uIntCodec.test.d.ts +2 -0
  466. package/lib/types/src/shared/utils/uIntCodec.test.d.ts.map +1 -0
  467. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  468. package/package.json +6 -6
@@ -1,2 +1,2 @@
1
- var d=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=(i,e,r,t)=>{for(var o=t>1?void 0:t?g(e,r):e,a=i.length-1,l;a>=0;a--)(l=i[a])&&(o=(t?l(e,r,o):l(o))||o);return t&&o&&d(e,r,o),o},n=(i,e)=>(r,t)=>e(r,t,i);import{inject as f,injectable as m}from"inversify";import{configTypes as u}from"../../../../config/di/configTypes";import{pkiTypes as C}from"../../../../modules/multichain/pki/di/pkiTypes";import{KeyUsage as S}from"../../../../modules/multichain/pki/model/KeyUsage";import{ownerInfoTypes as y}from"../../../../modules/solana/owner-info/di/ownerInfoTypes";import{ClearSignContextType as s}from"../../../../shared/model/ClearSignContext";const T=[s.SOLANA_TRUSTED_NAME];let c=class{constructor(e,r,t){this._dataSource=e;this._certificateLoader=r;this.logger=t("OwnerInfoContextLoader")}logger;canHandle(e,r){if(!T.every(o=>r.includes(o))||typeof e!="object"||e===null)return!1;const t=e;return!!(t.tokenAddress||t.createATA)}async load(e){this.logger.debug("[load] Loading solana owner info context",{data:{input:e}});const{deviceModelId:r}=e,t=await this._certificateLoader.loadCertificate({keyId:"domain_metadata_key",keyUsage:S.TrustedName,targetDevice:r});return t?(await this._dataSource.getOwnerInfo(e)).caseOf({Left:a=>[{type:s.ERROR,error:a}],Right:({tlvDescriptor:a})=>a!==void 0?[{type:s.SOLANA_TRUSTED_NAME,payload:a,certificate:t}]:[]}):[{type:s.ERROR,error:new Error("[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing")}]}};c=p([m(),n(0,f(y.OwnerInfoDataSource)),n(1,f(C.PkiCertificateLoader)),n(2,f(u.ContextModuleLoggerFactory))],c);export{c as OwnerInfoContextLoader};
1
+ var d=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var p=(i,e,r,t)=>{for(var o=t>1?void 0:t?g(e,r):e,a=i.length-1,l;a>=0;a--)(l=i[a])&&(o=(t?l(e,r,o):l(o))||o);return t&&o&&d(e,r,o),o},n=(i,e)=>(r,t)=>e(r,t,i);import{inject as f,injectable as m}from"inversify";import{configTypes as u}from"../../../../config/di/configTypes";import{pkiTypes as C}from"../../../../modules/multichain/pki/di/pkiTypes";import{KeyUsage as S}from"../../../../modules/multichain/pki/model/KeyUsage";import{ownerInfoTypes as y}from"../../../../modules/solana/owner-info/di/ownerInfoTypes";import{ClearSignContextType as s}from"../../../../shared/model/ClearSignContext";const T=[s.SOLANA_BASIC_TRUSTED_NAME];let c=class{constructor(e,r,t){this._dataSource=e;this._certificateLoader=r;this.logger=t("OwnerInfoContextLoader")}logger;canHandle(e,r){if(!T.every(o=>r.includes(o))||typeof e!="object"||e===null)return!1;const t=e;return!!(t.tokenAddress||t.createATA)}async load(e){this.logger.debug("[load] Loading solana owner info context",{data:{input:e}});const{deviceModelId:r}=e,t=await this._certificateLoader.loadCertificate({keyId:"domain_metadata_key",keyUsage:S.TrustedName,targetDevice:r});return t?(await this._dataSource.getOwnerInfo(e)).caseOf({Left:a=>[{type:s.ERROR,error:a}],Right:({tlvDescriptor:a})=>a!==void 0?[{type:s.SOLANA_BASIC_TRUSTED_NAME,payload:a,certificate:t}]:[]}):[{type:s.ERROR,error:new Error("[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing")}]}};c=p([m(),n(0,f(y.OwnerInfoDataSource)),n(1,f(C.PkiCertificateLoader)),n(2,f(u.ContextModuleLoggerFactory))],c);export{c as OwnerInfoContextLoader};
2
2
  //# sourceMappingURL=OwnerInfoContextLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/owner-info/domain/OwnerInfoContextLoader.ts"],
4
- "sourcesContent": ["import { LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { type SolanaTransactionContext } from \"@/modules/solana/model/SolanaTransactionContext\";\nimport { type OwnerInfoDataSource } from \"@/modules/solana/owner-info/data/OwnerInfoDataSource\";\nimport { ownerInfoTypes } from \"@/modules/solana/owner-info/di/ownerInfoTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TRUSTED_NAME,\n];\n\n@injectable()\nexport class OwnerInfoContextLoader\n implements ContextLoader<SolanaTransactionContext>\n{\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(ownerInfoTypes.OwnerInfoDataSource)\n private readonly _dataSource: OwnerInfoDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"OwnerInfoContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTransactionContext {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) {\n return false;\n }\n if (typeof input !== \"object\" || input === null) {\n return false;\n }\n const ctx = input as Partial<SolanaTransactionContext>;\n return !!(ctx.tokenAddress || ctx.createATA);\n }\n\n public async load(\n solanaContext: SolanaTransactionContext,\n ): Promise<ClearSignContext[]> {\n this.logger.debug(\"[load] Loading solana owner info context\", {\n data: { input: solanaContext },\n });\n\n const { deviceModelId } = solanaContext;\n\n const trustedNamePKICertificate =\n await this._certificateLoader.loadCertificate({\n keyId: \"domain_metadata_key\",\n keyUsage: KeyUsage.TrustedName,\n targetDevice: deviceModelId,\n });\n\n if (!trustedNamePKICertificate) {\n return [\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\n \"[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing\",\n ),\n },\n ];\n }\n\n const tlvDescriptorEither =\n await this._dataSource.getOwnerInfo(solanaContext);\n\n return tlvDescriptorEither.caseOf({\n Left: (error): ClearSignContext[] => [\n { type: ClearSignContextType.ERROR, error },\n ],\n Right: ({ tlvDescriptor }): ClearSignContext[] => {\n if (tlvDescriptor !== undefined) {\n return [\n {\n type: ClearSignContextType.SOLANA_TRUSTED_NAME,\n payload: tlvDescriptor,\n certificate: trustedNamePKICertificate,\n },\n ];\n }\n return [];\n },\n });\n }\n}\n"],
5
- "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAC5B,OAAS,YAAAC,MAAgB,uCAEzB,OAAS,YAAAC,MAAgB,0CAGzB,OAAS,kBAAAC,MAAsB,gDAE/B,OAEE,wBAAAC,MACK,kCAEP,MAAMC,EAA0C,CAC9CC,EAAqB,mBACvB,EAGO,IAAMC,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEjBC,EACA,CALiB,iBAAAF,EAEA,wBAAAC,EAIjB,KAAK,OAASC,EAAc,wBAAwB,CACtD,CAXQ,OAaD,UACLC,EACAC,EACmC,CAInC,GAHI,CAACP,EAAgB,MAAOQ,GAAMD,EAAc,SAASC,CAAC,CAAC,GAGvD,OAAOF,GAAU,UAAYA,IAAU,KACzC,MAAO,GAET,MAAMG,EAAMH,EACZ,MAAO,CAAC,EAAEG,EAAI,cAAgBA,EAAI,UACpC,CAEA,MAAa,KACXC,EAC6B,CAC7B,KAAK,OAAO,MAAM,2CAA4C,CAC5D,KAAM,CAAE,MAAOA,CAAc,CAC/B,CAAC,EAED,KAAM,CAAE,cAAAC,CAAc,EAAID,EAEpBE,EACJ,MAAM,KAAK,mBAAmB,gBAAgB,CAC5C,MAAO,sBACP,SAAUC,EAAS,YACnB,aAAcF,CAChB,CAAC,EAEH,OAAKC,GAYH,MAAM,KAAK,YAAY,aAAaF,CAAa,GAExB,OAAO,CAChC,KAAOI,GAA8B,CACnC,CAAE,KAAMb,EAAqB,MAAO,MAAAa,CAAM,CAC5C,EACA,MAAO,CAAC,CAAE,cAAAC,CAAc,IAClBA,IAAkB,OACb,CACL,CACE,KAAMd,EAAqB,oBAC3B,QAASc,EACT,YAAaH,CACf,CACF,EAEK,CAAC,CAEZ,CAAC,EA7BQ,CACL,CACE,KAAMX,EAAqB,MAC3B,MAAO,IAAI,MACT,8EACF,CACF,CACF,CAuBJ,CACF,EA9EaC,EAANc,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAe,mBAAmB,GAEzCF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,GAEpCH,EAAA,EAAAC,EAAOG,EAAY,0BAA0B,IAVrCpB",
4
+ "sourcesContent": ["import { LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { type SolanaTransactionContext } from \"@/modules/solana/model/SolanaTransactionContext\";\nimport { type OwnerInfoDataSource } from \"@/modules/solana/owner-info/data/OwnerInfoDataSource\";\nimport { ownerInfoTypes } from \"@/modules/solana/owner-info/di/ownerInfoTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n];\n\n@injectable()\nexport class OwnerInfoContextLoader\n implements ContextLoader<SolanaTransactionContext>\n{\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(ownerInfoTypes.OwnerInfoDataSource)\n private readonly _dataSource: OwnerInfoDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"OwnerInfoContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTransactionContext {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) {\n return false;\n }\n if (typeof input !== \"object\" || input === null) {\n return false;\n }\n const ctx = input as Partial<SolanaTransactionContext>;\n return !!(ctx.tokenAddress || ctx.createATA);\n }\n\n public async load(\n solanaContext: SolanaTransactionContext,\n ): Promise<ClearSignContext[]> {\n this.logger.debug(\"[load] Loading solana owner info context\", {\n data: { input: solanaContext },\n });\n\n const { deviceModelId } = solanaContext;\n\n const trustedNamePKICertificate =\n await this._certificateLoader.loadCertificate({\n keyId: \"domain_metadata_key\",\n keyUsage: KeyUsage.TrustedName,\n targetDevice: deviceModelId,\n });\n\n if (!trustedNamePKICertificate) {\n return [\n {\n type: ClearSignContextType.ERROR,\n error: new Error(\n \"[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing\",\n ),\n },\n ];\n }\n\n const tlvDescriptorEither =\n await this._dataSource.getOwnerInfo(solanaContext);\n\n return tlvDescriptorEither.caseOf({\n Left: (error): ClearSignContext[] => [\n { type: ClearSignContextType.ERROR, error },\n ],\n Right: ({ tlvDescriptor }): ClearSignContext[] => {\n if (tlvDescriptor !== undefined) {\n return [\n {\n type: ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n payload: tlvDescriptor,\n certificate: trustedNamePKICertificate,\n },\n ];\n }\n return [];\n },\n });\n }\n}\n"],
5
+ "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAC5B,OAAS,YAAAC,MAAgB,uCAEzB,OAAS,YAAAC,MAAgB,0CAGzB,OAAS,kBAAAC,MAAsB,gDAE/B,OAEE,wBAAAC,MACK,kCAEP,MAAMC,EAA0C,CAC9CC,EAAqB,yBACvB,EAGO,IAAMC,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEjBC,EACA,CALiB,iBAAAF,EAEA,wBAAAC,EAIjB,KAAK,OAASC,EAAc,wBAAwB,CACtD,CAXQ,OAaD,UACLC,EACAC,EACmC,CAInC,GAHI,CAACP,EAAgB,MAAOQ,GAAMD,EAAc,SAASC,CAAC,CAAC,GAGvD,OAAOF,GAAU,UAAYA,IAAU,KACzC,MAAO,GAET,MAAMG,EAAMH,EACZ,MAAO,CAAC,EAAEG,EAAI,cAAgBA,EAAI,UACpC,CAEA,MAAa,KACXC,EAC6B,CAC7B,KAAK,OAAO,MAAM,2CAA4C,CAC5D,KAAM,CAAE,MAAOA,CAAc,CAC/B,CAAC,EAED,KAAM,CAAE,cAAAC,CAAc,EAAID,EAEpBE,EACJ,MAAM,KAAK,mBAAmB,gBAAgB,CAC5C,MAAO,sBACP,SAAUC,EAAS,YACnB,aAAcF,CAChB,CAAC,EAEH,OAAKC,GAYH,MAAM,KAAK,YAAY,aAAaF,CAAa,GAExB,OAAO,CAChC,KAAOI,GAA8B,CACnC,CAAE,KAAMb,EAAqB,MAAO,MAAAa,CAAM,CAC5C,EACA,MAAO,CAAC,CAAE,cAAAC,CAAc,IAClBA,IAAkB,OACb,CACL,CACE,KAAMd,EAAqB,0BAC3B,QAASc,EACT,YAAaH,CACf,CACF,EAEK,CAAC,CAEZ,CAAC,EA7BQ,CACL,CACE,KAAMX,EAAqB,MAC3B,MAAO,IAAI,MACT,8EACF,CACF,CACF,CAuBJ,CACF,EA9EaC,EAANc,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAe,mBAAmB,GAEzCF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,GAEpCH,EAAA,EAAAC,EAAOG,EAAY,0BAA0B,IAVrCpB",
6
6
  "names": ["inject", "injectable", "configTypes", "pkiTypes", "KeyUsage", "ownerInfoTypes", "ClearSignContextType", "SUPPORTED_TYPES", "ClearSignContextType", "OwnerInfoContextLoader", "_dataSource", "_certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "ctx", "solanaContext", "deviceModelId", "trustedNamePKICertificate", "KeyUsage", "error", "tlvDescriptor", "__decorateClass", "injectable", "__decorateParam", "inject", "ownerInfoTypes", "pkiTypes", "configTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as f}from"@ledgerhq/device-management-kit";import{Left as p,Right as m}from"purify-ts";import{beforeEach as w,describe as A,expect as t,it as a,vi as n}from"vitest";import{ClearSignContextType as s}from"../../../../shared/model/ClearSignContext";import{OwnerInfoContextLoader as y}from"./OwnerInfoContextLoader";const O=()=>({debug:n.fn(),info:n.fn(),warn:n.fn(),error:n.fn(),subscribers:[]});A("OwnerInfoContextLoader",()=>{let i,c;const l={keyUsageNumber:4,payload:new Uint8Array([170,187,204])},d={deviceModelId:f.FLEX,tokenAddress:"SomeTokenAddress"};w(()=>{n.restoreAllMocks(),i={getOwnerInfo:n.fn()},c={loadCertificate:n.fn()}});const r=()=>new y(i,c,O);A("canHandle",()=>{a("returns true when SOLANA_TRUSTED_NAME is in expectedTypes and tokenAddress is present",()=>{const e=r();t(e.canHandle(d,[s.SOLANA_TRUSTED_NAME])).toBe(!0)}),a("returns true when createATA is present (and tokenAddress absent)",()=>{const e=r(),o={deviceModelId:f.FLEX,createATA:{address:"addr",mintAddress:"mint"}};t(e.canHandle(o,[s.SOLANA_TRUSTED_NAME])).toBe(!0)}),a("returns false when SOLANA_TRUSTED_NAME is not in expectedTypes",()=>{const e=r();t(e.canHandle(d,[s.SOLANA_TOKEN])).toBe(!1)}),a("returns false when neither tokenAddress nor createATA is present",()=>{const e=r(),o={deviceModelId:f.FLEX};t(e.canHandle(o,[s.SOLANA_TRUSTED_NAME])).toBe(!1)}),a("returns false for non-object inputs",()=>{const e=r();t(e.canHandle(null,[s.SOLANA_TRUSTED_NAME])).toBe(!1),t(e.canHandle("string",[s.SOLANA_TRUSTED_NAME])).toBe(!1)})}),A("load",()=>{a("returns SOLANA_TRUSTED_NAME context with cert when datasource returns Right with tlvDescriptor",async()=>{const e=r(),o=new Uint8Array([1,2,3]);n.spyOn(c,"loadCertificate").mockResolvedValue(l),n.spyOn(i,"getOwnerInfo").mockResolvedValue(m({tlvDescriptor:o}));const u=await e.load(d);t(c.loadCertificate).toHaveBeenCalledWith({keyId:"domain_metadata_key",keyUsage:"trusted_name",targetDevice:f.FLEX}),t(i.getOwnerInfo).toHaveBeenCalledWith(d),t(u).toEqual([{type:s.SOLANA_TRUSTED_NAME,payload:o,certificate:l}])}),a("returns empty array when datasource returns Right with undefined tlvDescriptor",async()=>{const e=r();n.spyOn(c,"loadCertificate").mockResolvedValue(l),n.spyOn(i,"getOwnerInfo").mockResolvedValue(m({tlvDescriptor:void 0}));const o=await e.load(d);t(o).toEqual([])}),a("returns error when PKI certificate is missing",async()=>{const e=r();n.spyOn(c,"loadCertificate").mockResolvedValue(void 0),n.spyOn(i,"getOwnerInfo");const o=await e.load(d);t(i.getOwnerInfo).not.toHaveBeenCalled(),t(o).toEqual([{type:s.ERROR,error:t.objectContaining({message:t.stringContaining("trustedNamePKICertificate is missing")})}])}),a("returns error when datasource returns Left(error)",async()=>{const e=r(),o=new Error("owner info fetch failed");n.spyOn(c,"loadCertificate").mockResolvedValue(l),n.spyOn(i,"getOwnerInfo").mockResolvedValue(p(o));const u=await e.load(d);t(u).toEqual([{type:s.ERROR,error:o}])})})});
1
+ import{DeviceModelId as f}from"@ledgerhq/device-management-kit";import{Left as p,Right as m}from"purify-ts";import{beforeEach as S,describe as A,expect as t,it as a,vi as n}from"vitest";import{ClearSignContextType as s}from"../../../../shared/model/ClearSignContext";import{OwnerInfoContextLoader as w}from"./OwnerInfoContextLoader";const C=()=>({debug:n.fn(),info:n.fn(),warn:n.fn(),error:n.fn(),subscribers:[]});A("OwnerInfoContextLoader",()=>{let i,c;const l={keyUsageNumber:4,payload:new Uint8Array([170,187,204])},d={deviceModelId:f.FLEX,tokenAddress:"SomeTokenAddress"};S(()=>{n.restoreAllMocks(),i={getOwnerInfo:n.fn()},c={loadCertificate:n.fn()}});const r=()=>new w(i,c,C);A("canHandle",()=>{a("returns true when SOLANA_BASIC_TRUSTED_NAME is in expectedTypes and tokenAddress is present",()=>{const e=r();t(e.canHandle(d,[s.SOLANA_BASIC_TRUSTED_NAME])).toBe(!0)}),a("returns true when createATA is present (and tokenAddress absent)",()=>{const e=r(),o={deviceModelId:f.FLEX,createATA:{address:"addr",mintAddress:"mint"}};t(e.canHandle(o,[s.SOLANA_BASIC_TRUSTED_NAME])).toBe(!0)}),a("returns false when SOLANA_BASIC_TRUSTED_NAME is not in expectedTypes",()=>{const e=r();t(e.canHandle(d,[s.SOLANA_TOKEN])).toBe(!1)}),a("returns false when neither tokenAddress nor createATA is present",()=>{const e=r(),o={deviceModelId:f.FLEX};t(e.canHandle(o,[s.SOLANA_BASIC_TRUSTED_NAME])).toBe(!1)}),a("returns false for non-object inputs",()=>{const e=r();t(e.canHandle(null,[s.SOLANA_BASIC_TRUSTED_NAME])).toBe(!1),t(e.canHandle("string",[s.SOLANA_BASIC_TRUSTED_NAME])).toBe(!1)})}),A("load",()=>{a("returns SOLANA_BASIC_TRUSTED_NAME context with cert when datasource returns Right with tlvDescriptor",async()=>{const e=r(),o=new Uint8Array([1,2,3]);n.spyOn(c,"loadCertificate").mockResolvedValue(l),n.spyOn(i,"getOwnerInfo").mockResolvedValue(m({tlvDescriptor:o}));const u=await e.load(d);t(c.loadCertificate).toHaveBeenCalledWith({keyId:"domain_metadata_key",keyUsage:"trusted_name",targetDevice:f.FLEX}),t(i.getOwnerInfo).toHaveBeenCalledWith(d),t(u).toEqual([{type:s.SOLANA_BASIC_TRUSTED_NAME,payload:o,certificate:l}])}),a("returns empty array when datasource returns Right with undefined tlvDescriptor",async()=>{const e=r();n.spyOn(c,"loadCertificate").mockResolvedValue(l),n.spyOn(i,"getOwnerInfo").mockResolvedValue(m({tlvDescriptor:void 0}));const o=await e.load(d);t(o).toEqual([])}),a("returns error when PKI certificate is missing",async()=>{const e=r();n.spyOn(c,"loadCertificate").mockResolvedValue(void 0),n.spyOn(i,"getOwnerInfo");const o=await e.load(d);t(i.getOwnerInfo).not.toHaveBeenCalled(),t(o).toEqual([{type:s.ERROR,error:t.objectContaining({message:t.stringContaining("trustedNamePKICertificate is missing")})}])}),a("returns error when datasource returns Left(error)",async()=>{const e=r(),o=new Error("owner info fetch failed");n.spyOn(c,"loadCertificate").mockResolvedValue(l),n.spyOn(i,"getOwnerInfo").mockResolvedValue(p(o));const u=await e.load(d);t(u).toEqual([{type:s.ERROR,error:o}])})})});
2
2
  //# sourceMappingURL=OwnerInfoContextLoader.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport type { PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport type { OwnerInfoDataSource } from \"@/modules/solana/owner-info/data/OwnerInfoDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { OwnerInfoContextLoader } from \"./OwnerInfoContextLoader\";\nimport type { SolanaTransactionContext } from \"./solanaContextTypes\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"OwnerInfoContextLoader\", () => {\n let mockDataSource: OwnerInfoDataSource;\n let mockCertLoader: PkiCertificateLoader;\n\n const mockCert = {\n keyUsageNumber: 4,\n payload: new Uint8Array([0xaa, 0xbb, 0xcc]),\n };\n\n const baseCtx: SolanaTransactionContext = {\n deviceModelId: DeviceModelId.FLEX,\n tokenAddress: \"SomeTokenAddress\",\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n\n mockDataSource = {\n getOwnerInfo: vi.fn(),\n } as unknown as OwnerInfoDataSource;\n\n mockCertLoader = {\n loadCertificate: vi.fn(),\n } as unknown as PkiCertificateLoader;\n });\n\n const makeLoader = () =>\n new OwnerInfoContextLoader(\n mockDataSource,\n mockCertLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_TRUSTED_NAME is in expectedTypes and tokenAddress is present\", () => {\n const loader = makeLoader();\n expect(\n loader.canHandle(baseCtx, [ClearSignContextType.SOLANA_TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"returns true when createATA is present (and tokenAddress absent)\", () => {\n const loader = makeLoader();\n const ctx: SolanaTransactionContext = {\n deviceModelId: DeviceModelId.FLEX,\n createATA: { address: \"addr\", mintAddress: \"mint\" },\n };\n expect(\n loader.canHandle(ctx, [ClearSignContextType.SOLANA_TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_TRUSTED_NAME is not in expectedTypes\", () => {\n const loader = makeLoader();\n expect(\n loader.canHandle(baseCtx, [ClearSignContextType.SOLANA_TOKEN]),\n ).toBe(false);\n });\n\n it(\"returns false when neither tokenAddress nor createATA is present\", () => {\n const loader = makeLoader();\n const ctx: SolanaTransactionContext = {\n deviceModelId: DeviceModelId.FLEX,\n };\n expect(\n loader.canHandle(ctx, [ClearSignContextType.SOLANA_TRUSTED_NAME]),\n ).toBe(false);\n });\n\n it(\"returns false for non-object inputs\", () => {\n const loader = makeLoader();\n expect(\n loader.canHandle(null, [ClearSignContextType.SOLANA_TRUSTED_NAME]),\n ).toBe(false);\n expect(\n loader.canHandle(\"string\", [ClearSignContextType.SOLANA_TRUSTED_NAME]),\n ).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"returns SOLANA_TRUSTED_NAME context with cert when datasource returns Right with tlvDescriptor\", async () => {\n const loader = makeLoader();\n const tlvDescriptor = new Uint8Array([0x01, 0x02, 0x03]);\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(mockCert);\n vi.spyOn(mockDataSource, \"getOwnerInfo\").mockResolvedValue(\n Right({ tlvDescriptor }),\n );\n\n const result = await loader.load(baseCtx);\n\n expect(mockCertLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n targetDevice: DeviceModelId.FLEX,\n });\n expect(mockDataSource.getOwnerInfo).toHaveBeenCalledWith(baseCtx);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.SOLANA_TRUSTED_NAME,\n payload: tlvDescriptor,\n certificate: mockCert,\n },\n ]);\n });\n\n it(\"returns empty array when datasource returns Right with undefined tlvDescriptor\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(mockCert);\n vi.spyOn(mockDataSource, \"getOwnerInfo\").mockResolvedValue(\n Right({ tlvDescriptor: undefined as unknown as Uint8Array }),\n );\n\n const result = await loader.load(baseCtx);\n\n expect(result).toEqual([]);\n });\n\n it(\"returns error when PKI certificate is missing\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(undefined);\n // getOwnerInfo should NOT be called if cert is missing\n vi.spyOn(mockDataSource, \"getOwnerInfo\");\n\n const result = await loader.load(baseCtx);\n\n expect(mockDataSource.getOwnerInfo).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: expect.objectContaining({\n message: expect.stringContaining(\n \"trustedNamePKICertificate is missing\",\n ),\n }),\n },\n ]);\n });\n\n it(\"returns error when datasource returns Left(error)\", async () => {\n const loader = makeLoader();\n const error = new Error(\"owner info fetch failed\");\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(mockCert);\n vi.spyOn(mockDataSource, \"getOwnerInfo\").mockResolvedValue(Left(error));\n\n const result = await loader.load(baseCtx);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport type { PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport type { OwnerInfoDataSource } from \"@/modules/solana/owner-info/data/OwnerInfoDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { OwnerInfoContextLoader } from \"./OwnerInfoContextLoader\";\nimport type { SolanaTransactionContext } from \"./solanaContextTypes\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\ndescribe(\"OwnerInfoContextLoader\", () => {\n let mockDataSource: OwnerInfoDataSource;\n let mockCertLoader: PkiCertificateLoader;\n\n const mockCert = {\n keyUsageNumber: 4,\n payload: new Uint8Array([0xaa, 0xbb, 0xcc]),\n };\n\n const baseCtx: SolanaTransactionContext = {\n deviceModelId: DeviceModelId.FLEX,\n tokenAddress: \"SomeTokenAddress\",\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n\n mockDataSource = {\n getOwnerInfo: vi.fn(),\n } as unknown as OwnerInfoDataSource;\n\n mockCertLoader = {\n loadCertificate: vi.fn(),\n } as unknown as PkiCertificateLoader;\n });\n\n const makeLoader = () =>\n new OwnerInfoContextLoader(\n mockDataSource,\n mockCertLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_BASIC_TRUSTED_NAME is in expectedTypes and tokenAddress is present\", () => {\n const loader = makeLoader();\n expect(\n loader.canHandle(baseCtx, [\n ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n ]),\n ).toBe(true);\n });\n\n it(\"returns true when createATA is present (and tokenAddress absent)\", () => {\n const loader = makeLoader();\n const ctx: SolanaTransactionContext = {\n deviceModelId: DeviceModelId.FLEX,\n createATA: { address: \"addr\", mintAddress: \"mint\" },\n };\n expect(\n loader.canHandle(ctx, [ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME]),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_BASIC_TRUSTED_NAME is not in expectedTypes\", () => {\n const loader = makeLoader();\n expect(\n loader.canHandle(baseCtx, [ClearSignContextType.SOLANA_TOKEN]),\n ).toBe(false);\n });\n\n it(\"returns false when neither tokenAddress nor createATA is present\", () => {\n const loader = makeLoader();\n const ctx: SolanaTransactionContext = {\n deviceModelId: DeviceModelId.FLEX,\n };\n expect(\n loader.canHandle(ctx, [ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME]),\n ).toBe(false);\n });\n\n it(\"returns false for non-object inputs\", () => {\n const loader = makeLoader();\n expect(\n loader.canHandle(null, [\n ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n ]),\n ).toBe(false);\n expect(\n loader.canHandle(\"string\", [\n ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n ]),\n ).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"returns SOLANA_BASIC_TRUSTED_NAME context with cert when datasource returns Right with tlvDescriptor\", async () => {\n const loader = makeLoader();\n const tlvDescriptor = new Uint8Array([0x01, 0x02, 0x03]);\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(mockCert);\n vi.spyOn(mockDataSource, \"getOwnerInfo\").mockResolvedValue(\n Right({ tlvDescriptor }),\n );\n\n const result = await loader.load(baseCtx);\n\n expect(mockCertLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"domain_metadata_key\",\n keyUsage: \"trusted_name\",\n targetDevice: DeviceModelId.FLEX,\n });\n expect(mockDataSource.getOwnerInfo).toHaveBeenCalledWith(baseCtx);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n payload: tlvDescriptor,\n certificate: mockCert,\n },\n ]);\n });\n\n it(\"returns empty array when datasource returns Right with undefined tlvDescriptor\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(mockCert);\n vi.spyOn(mockDataSource, \"getOwnerInfo\").mockResolvedValue(\n Right({ tlvDescriptor: undefined as unknown as Uint8Array }),\n );\n\n const result = await loader.load(baseCtx);\n\n expect(result).toEqual([]);\n });\n\n it(\"returns error when PKI certificate is missing\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(undefined);\n // getOwnerInfo should NOT be called if cert is missing\n vi.spyOn(mockDataSource, \"getOwnerInfo\");\n\n const result = await loader.load(baseCtx);\n\n expect(mockDataSource.getOwnerInfo).not.toHaveBeenCalled();\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error: expect.objectContaining({\n message: expect.stringContaining(\n \"trustedNamePKICertificate is missing\",\n ),\n }),\n },\n ]);\n });\n\n it(\"returns error when datasource returns Left(error)\", async () => {\n const loader = makeLoader();\n const error = new Error(\"owner info fetch failed\");\n\n vi.spyOn(mockCertLoader, \"loadCertificate\").mockResolvedValue(mockCert);\n vi.spyOn(mockDataSource, \"getOwnerInfo\").mockResolvedValue(Left(error));\n\n const result = await loader.load(baseCtx);\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["DeviceModelId", "Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "ClearSignContextType", "OwnerInfoContextLoader", "mockLoggerFactory", "mockDataSource", "mockCertLoader", "mockCert", "baseCtx", "makeLoader", "loader", "ctx", "tlvDescriptor", "result", "error"]
7
7
  }
@@ -1,7 +1,7 @@
1
- import{Left as l,Right as m}from"purify-ts";import{beforeEach as k,describe as i,expect as r,it as n,vi as d}from"vitest";import{HttpTokenDataSource as g}from"./HttpTokenDataSource";i("HttpTokenDataSource",()=>{let a,e;const o="sol:usdc",s={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}},p=t=>`[ContextModule] HttpTokenDataSource: no token metadata for id ${t}`;k(()=>{d.clearAllMocks(),e={get:d.fn()},a=new g(s,e)}),n("should call http.get with the correct url and params",async()=>{e.get.mockResolvedValue([]),await a.getTokenInfosPayload({tokenInternalId:o}),r(e.get).toHaveBeenCalledTimes(1),r(e.get).toHaveBeenCalledWith(`${s.cal.url}/tokens`,{params:{id:o,output:"id,name,network,network_family,network_type,exchange_app_config_serialized,live_signature,ticker,decimals,blockchain_name,chain_id,contract_address,descriptor,descriptor_exchange_app,units,symbol",ref:`branch:${s.cal.branch}`}})}),n("should return Right(data[0]) when http.get responds with a non-empty array",async()=>{const t={descriptor:{data:"ABCD",signatures:{prod:"SIG-PROD",test:"SIG-TEST"}}};e.get.mockResolvedValue([t]);const c=await a.getTokenInfosPayload({tokenInternalId:o});r(c).toEqual(m(t))}),i.each`
1
+ import{Left as c,Right as m}from"purify-ts";import{beforeEach as k,describe as i,expect as n,it as r,vi as d}from"vitest";import{HttpTokenDataSource as g}from"./HttpTokenDataSource";i("HttpTokenDataSource",()=>{let a,e;const o="sol:usdc",s={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"}},p=t=>`[ContextModule] HttpTokenDataSource: no token metadata for id ${t}`;k(()=>{d.clearAllMocks(),e={get:d.fn()},a=new g(s,e)}),r("should call http.get with the correct url and params",async()=>{e.get.mockResolvedValue([]),await a.getTokenInfosPayload({tokenInternalId:o}),n(e.get).toHaveBeenCalledTimes(1),n(e.get).toHaveBeenCalledWith(`${s.cal.url}/tokens`,{params:{id:o,output:"id,name,network,network_family,network_type,exchange_app_config_serialized,live_signature,ticker,decimals,blockchain_name,chain_id,contract_address,descriptor,descriptor_exchange_app,units,symbol",ref:`branch:${s.cal.branch}`}})}),r("should return Right(data[0]) when http.get responds with a non-empty array",async()=>{const t={descriptor:{data:"ABCD",signatures:{prod:"SIG-PROD",test:"SIG-TEST"}}};e.get.mockResolvedValue([t]);const l=await a.getTokenInfosPayload({tokenInternalId:o});n(l).toEqual(m(t))}),i.each`
2
2
  caseName | responseBody
3
3
  ${"data is undefined"} | ${null}
4
4
  ${"data array is empty"} | ${[]}
5
5
  ${"first element is falsy"} | ${[null]}
6
- `("Error cases",({caseName:t,responseBody:c})=>{n(`should return an error when ${t}`,async()=>{e.get.mockResolvedValue(c);const u=await a.getTokenInfosPayload({tokenInternalId:o});r(u).toEqual(l(new Error(p(o))))})}),n("should return an error when http.get throws",async()=>{e.get.mockRejectedValue(new Error("network"));const t=await a.getTokenInfosPayload({tokenInternalId:o});r(t).toEqual(l(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
6
+ `("Error cases",({caseName:t,responseBody:l})=>{r(`should return an error when ${t}`,async()=>{e.get.mockResolvedValue(l);const u=await a.getTokenInfosPayload({tokenInternalId:o});n(u).toEqual(c(new Error(p(o))))})}),r("should return an error when http.get throws",async()=>{e.get.mockRejectedValue(new Error("network"));const t=await a.getTokenInfosPayload({tokenInternalId:o});n(t).toEqual(c(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
7
7
  //# sourceMappingURL=HttpTokenDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/token/data/HttpTokenDataSource.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpTokenDataSource } from \"./HttpTokenDataSource\";\nimport {\n type TokenDataResponse,\n type TokenDataSource,\n} from \"./TokenDataSource\";\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const tokenInternalId = \"sol:usdc\";\n const config: ContextModuleServiceConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const errorMessage = (id: string) =>\n `[ContextModule] HttpTokenDataSource: no token metadata for id ${id}`;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call http.get with the correct url and params\", async () => {\n // given\n httpMock.get.mockResolvedValue([]);\n\n // when\n await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(httpMock.get).toHaveBeenCalledTimes(1);\n expect(httpMock.get).toHaveBeenCalledWith(`${config.cal.url}/tokens`, {\n params: {\n id: tokenInternalId,\n output:\n \"id,name,network,network_family,network_type,exchange_app_config_serialized,live_signature,ticker,decimals,blockchain_name,chain_id,contract_address,descriptor,descriptor_exchange_app,units,symbol\",\n ref: `branch:${config.cal.branch}`,\n },\n });\n });\n\n it(\"should return Right(data[0]) when http.get responds with a non-empty array\", async () => {\n // given\n const response0: TokenDataResponse = {\n descriptor: {\n data: \"ABCD\",\n signatures: {\n prod: \"SIG-PROD\",\n test: \"SIG-TEST\",\n } as any,\n },\n } as any;\n\n httpMock.get.mockResolvedValue([response0]);\n\n // when\n const result = await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(result).toEqual(Right(response0));\n });\n\n describe.each`\n caseName | responseBody\n ${\"data is undefined\"} | ${null}\n ${\"data array is empty\"} | ${[]}\n ${\"first element is falsy\"} | ${[null]}\n `(\"Error cases\", ({ caseName, responseBody }) => {\n it(`should return an error when ${caseName}`, async () => {\n // given\n httpMock.get.mockResolvedValue(responseBody);\n\n // when\n const result = await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(result).toEqual(Left(new Error(errorMessage(tokenInternalId))));\n });\n });\n\n it(\"should return an error when http.get throws\", async () => {\n // given\n httpMock.get.mockRejectedValue(new Error(\"network\"));\n\n // when\n const result = await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
- "mappings": "AAGA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAC5B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAIrD,OAAS,uBAAAC,MAA2B,wBAMpCJ,EAAS,sBAAuB,IAAM,CACpC,IAAIK,EACAC,EACJ,MAAMC,EAAkB,WAClBC,EAAqC,CACzC,IAAK,CACH,IAAK,kDACL,KAAM,OACN,OAAQ,MACV,CACF,EAEMC,EAAgBC,GACpB,iEAAiEA,CAAE,GAErEX,EAAW,IAAM,CACfI,EAAG,cAAc,EACjBG,EAAW,CAAE,IAAKH,EAAG,GAAG,CAAE,EAC1BE,EAAa,IAAID,EACfI,EACAF,CACF,CACF,CAAC,EAEDJ,EAAG,uDAAwD,SAAY,CAErEI,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGzDN,EAAOK,EAAS,GAAG,EAAE,sBAAsB,CAAC,EAC5CL,EAAOK,EAAS,GAAG,EAAE,qBAAqB,GAAGE,EAAO,IAAI,GAAG,UAAW,CACpE,OAAQ,CACN,GAAID,EACJ,OACE,sMACF,IAAK,UAAUC,EAAO,IAAI,MAAM,EAClC,CACF,CAAC,CACH,CAAC,EAEDN,EAAG,6EAA8E,SAAY,CAE3F,MAAMS,EAA+B,CACnC,WAAY,CACV,KAAM,OACN,WAAY,CACV,KAAM,WACN,KAAM,UACR,CACF,CACF,EAEAL,EAAS,IAAI,kBAAkB,CAACK,CAAS,CAAC,EAG1C,MAAMC,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGxEN,EAAOW,CAAM,EAAE,QAAQd,EAAMa,CAAS,CAAC,CACzC,CAAC,EAEDX,EAAS;AAAA;AAAA,MAEL,mBAAmB,WAAW,IAAI;AAAA,MAClC,qBAAqB,SAAS,CAAC,CAAC;AAAA,MAChC,wBAAwB,MAAM,CAAC,IAAI,CAAC;AAAA,IACtC,cAAe,CAAC,CAAE,SAAAa,EAAU,aAAAC,CAAa,IAAM,CAC/CZ,EAAG,+BAA+BW,CAAQ,GAAI,SAAY,CAExDP,EAAS,IAAI,kBAAkBQ,CAAY,EAG3C,MAAMF,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGxEN,EAAOW,CAAM,EAAE,QAAQf,EAAK,IAAI,MAAMY,EAAaF,CAAe,CAAC,CAAC,CAAC,CACvE,CAAC,CACH,CAAC,EAEDL,EAAG,8CAA+C,SAAY,CAE5DI,EAAS,IAAI,kBAAkB,IAAI,MAAM,SAAS,CAAC,EAGnD,MAAMM,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGxEN,EAAOW,CAAM,EAAE,QACbf,EACE,IAAI,MACF,yEACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpTokenDataSource } from \"./HttpTokenDataSource\";\nimport {\n type TokenDataResponse,\n type TokenDataSource,\n} from \"./TokenDataSource\";\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const tokenInternalId = \"sol:usdc\";\n const config: ContextModuleServiceConfig = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n const errorMessage = (id: string) =>\n `[ContextModule] HttpTokenDataSource: no token metadata for id ${id}`;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"should call http.get with the correct url and params\", async () => {\n // given\n httpMock.get.mockResolvedValue([]);\n\n // when\n await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(httpMock.get).toHaveBeenCalledTimes(1);\n expect(httpMock.get).toHaveBeenCalledWith(`${config.cal.url}/tokens`, {\n params: {\n id: tokenInternalId,\n output:\n \"id,name,network,network_family,network_type,exchange_app_config_serialized,live_signature,ticker,decimals,blockchain_name,chain_id,contract_address,descriptor,descriptor_exchange_app,units,symbol\",\n ref: `branch:${config.cal.branch}`,\n },\n });\n });\n\n it(\"should return Right(data[0]) when http.get responds with a non-empty array\", async () => {\n // given\n const response0: TokenDataResponse = {\n descriptor: {\n data: \"ABCD\",\n signatures: {\n prod: \"SIG-PROD\",\n test: \"SIG-TEST\",\n } as any,\n },\n } as any;\n\n httpMock.get.mockResolvedValue([response0]);\n\n // when\n const result = await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(result).toEqual(Right(response0));\n });\n\n describe.each`\n caseName | responseBody\n ${\"data is undefined\"} | ${null}\n ${\"data array is empty\"} | ${[]}\n ${\"first element is falsy\"} | ${[null]}\n `(\"Error cases\", ({ caseName, responseBody }) => {\n it(`should return an error when ${caseName}`, async () => {\n // given\n httpMock.get.mockResolvedValue(responseBody);\n\n // when\n const result = await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(result).toEqual(Left(new Error(errorMessage(tokenInternalId))));\n });\n });\n\n it(\"should return an error when http.get throws\", async () => {\n // given\n httpMock.get.mockRejectedValue(new Error(\"network\"));\n\n // when\n const result = await datasource.getTokenInfosPayload({ tokenInternalId });\n\n // then\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "AAGA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAC5B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAIrD,OAAS,uBAAAC,MAA2B,wBAMpCJ,EAAS,sBAAuB,IAAM,CACpC,IAAIK,EACAC,EACJ,MAAMC,EAAkB,WAClBC,EAAqC,CACzC,IAAK,CACH,IAAK,2CACL,KAAM,OACN,OAAQ,MACV,CACF,EAEMC,EAAgBC,GACpB,iEAAiEA,CAAE,GAErEX,EAAW,IAAM,CACfI,EAAG,cAAc,EACjBG,EAAW,CAAE,IAAKH,EAAG,GAAG,CAAE,EAC1BE,EAAa,IAAID,EACfI,EACAF,CACF,CACF,CAAC,EAEDJ,EAAG,uDAAwD,SAAY,CAErEI,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGzDN,EAAOK,EAAS,GAAG,EAAE,sBAAsB,CAAC,EAC5CL,EAAOK,EAAS,GAAG,EAAE,qBAAqB,GAAGE,EAAO,IAAI,GAAG,UAAW,CACpE,OAAQ,CACN,GAAID,EACJ,OACE,sMACF,IAAK,UAAUC,EAAO,IAAI,MAAM,EAClC,CACF,CAAC,CACH,CAAC,EAEDN,EAAG,6EAA8E,SAAY,CAE3F,MAAMS,EAA+B,CACnC,WAAY,CACV,KAAM,OACN,WAAY,CACV,KAAM,WACN,KAAM,UACR,CACF,CACF,EAEAL,EAAS,IAAI,kBAAkB,CAACK,CAAS,CAAC,EAG1C,MAAMC,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGxEN,EAAOW,CAAM,EAAE,QAAQd,EAAMa,CAAS,CAAC,CACzC,CAAC,EAEDX,EAAS;AAAA;AAAA,MAEL,mBAAmB,WAAW,IAAI;AAAA,MAClC,qBAAqB,SAAS,CAAC,CAAC;AAAA,MAChC,wBAAwB,MAAM,CAAC,IAAI,CAAC;AAAA,IACtC,cAAe,CAAC,CAAE,SAAAa,EAAU,aAAAC,CAAa,IAAM,CAC/CZ,EAAG,+BAA+BW,CAAQ,GAAI,SAAY,CAExDP,EAAS,IAAI,kBAAkBQ,CAAY,EAG3C,MAAMF,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGxEN,EAAOW,CAAM,EAAE,QAAQf,EAAK,IAAI,MAAMY,EAAaF,CAAe,CAAC,CAAC,CAAC,CACvE,CAAC,CACH,CAAC,EAEDL,EAAG,8CAA+C,SAAY,CAE5DI,EAAS,IAAI,kBAAkB,IAAI,MAAM,SAAS,CAAC,EAGnD,MAAMM,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,EAGxEN,EAAOW,CAAM,EAAE,QACbf,EACE,IAAI,MACF,yEACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
6
  "names": ["Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "HttpTokenDataSource", "datasource", "httpMock", "tokenInternalId", "config", "errorMessage", "id", "response0", "result", "caseName", "responseBody"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var g=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=(l,e,t,o)=>{for(var a=o>1?void 0:o?u(e,t):e,i=l.length-1,r;i>=0;i--)(r=l[i])&&(a=(o?r(e,t,a):r(a))||a);return o&&a&&g(e,t,a),a},s=(l,e)=>(t,o)=>e(t,o,l);import{inject as c,injectable as y}from"inversify";import{configTypes as f}from"../../../../config/di/configTypes";import{pkiTypes as S}from"../../../../modules/multichain/pki/di/pkiTypes";import{KeyUsage as k}from"../../../../modules/multichain/pki/model/KeyUsage";import{tokenTypes as C}from"../../../../modules/solana/token/di/tokenTypes";import{ClearSignContextType as n}from"../../../../shared/model/ClearSignContext";const m=[n.SOLANA_TOKEN];let p=class{constructor(e,t,o,a){this.dataSource=e;this.config=t;this._certificateLoader=o;this.logger=a("TokenContextLoader")}logger;canHandle(e,t){if(!m.every(a=>t.includes(a))||typeof e!="object"||e===null||!("tokenInternalId"in e))return!1;const o=e.tokenInternalId;return typeof o=="string"&&o.length>0}async load(e){this.logger.debug("[load] Loading solana token context",{data:{input:e}});const t=await this._loadInternal(e);if(t.type===n.ERROR)return[{type:n.ERROR,error:t.error}];const o=t;return[{type:n.SOLANA_TOKEN,payload:o.payload,certificate:o.certificate}]}async _loadInternal(e){const{tokenInternalId:t,deviceModelId:o}=e;if(!t)return{type:n.ERROR,error:new Error("[ContextModule] TokenContextLoader: tokenInternalId is missing")};const a=await this.dataSource.getTokenInfosPayload({tokenInternalId:t}),i=await this._certificateLoader.loadCertificate({keyId:"token_metadata_key",keyUsage:k.CoinMeta,targetDevice:o});return i?a.caseOf({Left:r=>(this.logger.error("[_loadInternal] Error loading solana token context",{data:{error:r}}),{type:n.ERROR,error:r}),Right:r=>(this.logger.debug("[_loadInternal] Successfully loaded solana token context",{data:{payload:this.pluckTokenData(r),certificate:i}}),{type:n.SOLANA_TOKEN,payload:this.pluckTokenData(r),certificate:i})}):{type:n.ERROR,error:new Error("[ContextModule] TokenContextLoader: tokenMetadataCertificate is missing")}}pluckTokenData(e){const t=this.config.cal.mode||"prod";return{solanaTokenDescriptor:{data:e.descriptor.data,signature:e.descriptor.signatures[t]}}}};p=d([y(),s(0,c(C.TokenDataSource)),s(1,c(f.Config)),s(2,c(S.PkiCertificateLoader)),s(3,c(f.ContextModuleLoggerFactory))],p);export{p as TokenContextLoader};
1
+ var g=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var d=(l,e,t,o)=>{for(var r=o>1?void 0:o?u(e,t):e,i=l.length-1,a;i>=0;i--)(a=l[i])&&(r=(o?a(e,t,r):a(r))||r);return o&&r&&g(e,t,r),r},s=(l,e)=>(t,o)=>e(t,o,l);import{inject as c,injectable as y}from"inversify";import{configTypes as f}from"../../../../config/di/configTypes";import{pkiTypes as S}from"../../../../modules/multichain/pki/di/pkiTypes";import{KeyId as C}from"../../../../modules/multichain/pki/model/KeyId";import{KeyUsage as k}from"../../../../modules/multichain/pki/model/KeyUsage";import{tokenTypes as m}from"../../../../modules/solana/token/di/tokenTypes";import{ClearSignContextType as n}from"../../../../shared/model/ClearSignContext";const T=[n.SOLANA_TOKEN];let p=class{constructor(e,t,o,r){this.dataSource=e;this.config=t;this._certificateLoader=o;this.logger=r("TokenContextLoader")}logger;canHandle(e,t){if(!T.every(r=>t.includes(r))||typeof e!="object"||e===null||!("tokenInternalId"in e))return!1;const o=e.tokenInternalId;return typeof o=="string"&&o.length>0}async load(e){this.logger.debug("[load] Loading solana token context",{data:{input:e}});const t=await this._loadInternal(e);if(t.type===n.ERROR)return[{type:n.ERROR,error:t.error}];const o=t;return[{type:n.SOLANA_TOKEN,payload:o.payload,certificate:o.certificate}]}async _loadInternal(e){const{tokenInternalId:t,deviceModelId:o}=e;if(!t)return{type:n.ERROR,error:new Error("[ContextModule] TokenContextLoader: tokenInternalId is missing")};const r=await this.dataSource.getTokenInfosPayload({tokenInternalId:t}),i=await this._certificateLoader.loadCertificate({keyId:C.TokenMetadataKey,keyUsage:k.CoinMeta,targetDevice:o});return i?r.caseOf({Left:a=>(this.logger.error("[_loadInternal] Error loading solana token context",{data:{error:a}}),{type:n.ERROR,error:a}),Right:a=>(this.logger.debug("[_loadInternal] Successfully loaded solana token context",{data:{payload:this.pluckTokenData(a),certificate:i}}),{type:n.SOLANA_TOKEN,payload:this.pluckTokenData(a),certificate:i})}):{type:n.ERROR,error:new Error("[ContextModule] TokenContextLoader: tokenMetadataCertificate is missing")}}pluckTokenData(e){const t=this.config.cal.mode||"prod";return{solanaTokenDescriptor:{data:e.descriptor.data,signature:e.descriptor.signatures[t]}}}};p=d([y(),s(0,c(m.TokenDataSource)),s(1,c(f.Config)),s(2,c(S.PkiCertificateLoader)),s(3,c(f.ContextModuleLoggerFactory))],p);export{p as TokenContextLoader};
2
2
  //# sourceMappingURL=TokenContextLoader.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/token/domain/TokenContextLoader.ts"],
4
- "sourcesContent": ["import { LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport {\n type SolanaContextError,\n type SolanaTokenContextSuccess,\n} from \"@/modules/solana/model/SolanaContextTypes\";\nimport { type SolanaTokenData } from \"@/modules/solana/model/SolanaPayloads\";\nimport { type SolanaTransactionContext } from \"@/modules/solana/model/SolanaTransactionContext\";\nimport {\n type TokenDataResponse,\n type TokenDataSource,\n} from \"@/modules/solana/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/modules/solana/token/di/tokenTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TOKEN,\n];\n\n@injectable()\nexport class TokenContextLoader\n implements ContextLoader<SolanaTransactionContext>\n{\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(tokenTypes.TokenDataSource)\n private readonly dataSource: TokenDataSource,\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"TokenContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTransactionContext {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) {\n return false;\n }\n\n if (\n typeof input !== \"object\" ||\n input === null ||\n !(\"tokenInternalId\" in input)\n ) {\n return false;\n }\n\n const tokenInternalId = (input as { tokenInternalId: unknown })\n .tokenInternalId;\n\n return typeof tokenInternalId === \"string\" && tokenInternalId.length > 0;\n }\n\n public async load(\n solanaTokenContextInput: SolanaTransactionContext,\n ): Promise<ClearSignContext[]> {\n this.logger.debug(\"[load] Loading solana token context\", {\n data: { input: solanaTokenContextInput },\n });\n const result = await this._loadInternal(solanaTokenContextInput);\n if (result.type === ClearSignContextType.ERROR) {\n return [{ type: ClearSignContextType.ERROR, error: result.error }];\n }\n const r = result as SolanaTokenContextSuccess;\n return [\n {\n type: ClearSignContextType.SOLANA_TOKEN,\n payload: r.payload,\n certificate: r.certificate,\n },\n ];\n }\n\n private async _loadInternal(\n solanaTokenContextInput: SolanaTransactionContext,\n ): Promise<SolanaTokenContextSuccess | SolanaContextError> {\n const { tokenInternalId, deviceModelId } = solanaTokenContextInput;\n\n if (!tokenInternalId) {\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n \"[ContextModule] TokenContextLoader: tokenInternalId is missing\",\n ),\n };\n }\n\n const payload = await this.dataSource.getTokenInfosPayload({\n tokenInternalId,\n });\n\n const certificate: PkiCertificate | undefined =\n await this._certificateLoader.loadCertificate({\n keyId: \"token_metadata_key\",\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: deviceModelId,\n });\n\n if (!certificate) {\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n \"[ContextModule] TokenContextLoader: tokenMetadataCertificate is missing\",\n ),\n };\n }\n\n return payload.caseOf({\n Left: (error): SolanaTokenContextSuccess | SolanaContextError => {\n this.logger.error(\n \"[_loadInternal] Error loading solana token context\",\n {\n data: { error },\n },\n );\n\n return {\n type: ClearSignContextType.ERROR,\n error,\n };\n },\n Right: (value): SolanaTokenContextSuccess | SolanaContextError => {\n this.logger.debug(\n \"[_loadInternal] Successfully loaded solana token context\",\n {\n data: { payload: this.pluckTokenData(value), certificate },\n },\n );\n\n return {\n type: ClearSignContextType.SOLANA_TOKEN,\n payload: this.pluckTokenData(value),\n certificate,\n };\n },\n });\n }\n\n private pluckTokenData(tokenData: TokenDataResponse): SolanaTokenData {\n const signatureKind = this.config.cal.mode || \"prod\";\n return {\n solanaTokenDescriptor: {\n data: tokenData.descriptor.data,\n signature: tokenData.descriptor.signatures[signatureKind],\n },\n };\n }\n}\n"],
5
- "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,YAAAC,MAAgB,uCAEzB,OAAS,YAAAC,MAAgB,0CAYzB,OAAS,cAAAC,MAAkB,uCAE3B,OAEE,wBAAAC,MACK,kCAEP,MAAMC,EAA0C,CAC9CC,EAAqB,YACvB,EAGO,IAAMC,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEAC,EAEjBC,EACA,CAPiB,gBAAAH,EAEA,YAAAC,EAEA,wBAAAC,EAIjB,KAAK,OAASC,EAAc,oBAAoB,CAClD,CAbQ,OAeD,UACLC,EACAC,EACmC,CAKnC,GAJI,CAACR,EAAgB,MAAOS,GAAMD,EAAc,SAASC,CAAC,CAAC,GAKzD,OAAOF,GAAU,UACjBA,IAAU,MACV,EAAE,oBAAqBA,GAEvB,MAAO,GAGT,MAAMG,EAAmBH,EACtB,gBAEH,OAAO,OAAOG,GAAoB,UAAYA,EAAgB,OAAS,CACzE,CAEA,MAAa,KACXC,EAC6B,CAC7B,KAAK,OAAO,MAAM,sCAAuC,CACvD,KAAM,CAAE,MAAOA,CAAwB,CACzC,CAAC,EACD,MAAMC,EAAS,MAAM,KAAK,cAAcD,CAAuB,EAC/D,GAAIC,EAAO,OAASX,EAAqB,MACvC,MAAO,CAAC,CAAE,KAAMA,EAAqB,MAAO,MAAOW,EAAO,KAAM,CAAC,EAEnE,MAAMC,EAAID,EACV,MAAO,CACL,CACE,KAAMX,EAAqB,aAC3B,QAASY,EAAE,QACX,YAAaA,EAAE,WACjB,CACF,CACF,CAEA,MAAc,cACZF,EACyD,CACzD,KAAM,CAAE,gBAAAD,EAAiB,cAAAI,CAAc,EAAIH,EAE3C,GAAI,CAACD,EACH,MAAO,CACL,KAAMT,EAAqB,MAC3B,MAAO,IAAI,MACT,gEACF,CACF,EAGF,MAAMc,EAAU,MAAM,KAAK,WAAW,qBAAqB,CACzD,gBAAAL,CACF,CAAC,EAEKM,EACJ,MAAM,KAAK,mBAAmB,gBAAgB,CAC5C,MAAO,qBACP,SAAUC,EAAS,SACnB,aAAcH,CAChB,CAAC,EAEH,OAAKE,EASED,EAAQ,OAAO,CACpB,KAAOG,IACL,KAAK,OAAO,MACV,qDACA,CACE,KAAM,CAAE,MAAAA,CAAM,CAChB,CACF,EAEO,CACL,KAAMjB,EAAqB,MAC3B,MAAAiB,CACF,GAEF,MAAQC,IACN,KAAK,OAAO,MACV,2DACA,CACE,KAAM,CAAE,QAAS,KAAK,eAAeA,CAAK,EAAG,YAAAH,CAAY,CAC3D,CACF,EAEO,CACL,KAAMf,EAAqB,aAC3B,QAAS,KAAK,eAAekB,CAAK,EAClC,YAAAH,CACF,EAEJ,CAAC,EApCQ,CACL,KAAMf,EAAqB,MAC3B,MAAO,IAAI,MACT,yEACF,CACF,CAgCJ,CAEQ,eAAemB,EAA+C,CACpE,MAAMC,EAAgB,KAAK,OAAO,IAAI,MAAQ,OAC9C,MAAO,CACL,sBAAuB,CACrB,KAAMD,EAAU,WAAW,KAC3B,UAAWA,EAAU,WAAW,WAAWC,CAAa,CAC1D,CACF,CACF,CACF,EAtIanB,EAANoB,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAW,eAAe,GAEjCF,EAAA,EAAAC,EAAOE,EAAY,MAAM,GAEzBH,EAAA,EAAAC,EAAOG,EAAS,oBAAoB,GAEpCJ,EAAA,EAAAC,EAAOE,EAAY,0BAA0B,IAZrCzB",
6
- "names": ["inject", "injectable", "configTypes", "pkiTypes", "KeyUsage", "tokenTypes", "ClearSignContextType", "SUPPORTED_TYPES", "ClearSignContextType", "TokenContextLoader", "dataSource", "config", "_certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "tokenInternalId", "solanaTokenContextInput", "result", "r", "deviceModelId", "payload", "certificate", "KeyUsage", "error", "value", "tokenData", "signatureKind", "__decorateClass", "injectable", "__decorateParam", "inject", "tokenTypes", "configTypes", "pkiTypes"]
4
+ "sourcesContent": ["import { LoggerPublisherService } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/modules/multichain/pki/model/KeyId\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport {\n type SolanaContextError,\n type SolanaTokenContextSuccess,\n} from \"@/modules/solana/model/SolanaContextTypes\";\nimport { type SolanaTokenData } from \"@/modules/solana/model/SolanaPayloads\";\nimport { type SolanaTransactionContext } from \"@/modules/solana/model/SolanaTransactionContext\";\nimport {\n type TokenDataResponse,\n type TokenDataSource,\n} from \"@/modules/solana/token/data/TokenDataSource\";\nimport { tokenTypes } from \"@/modules/solana/token/di/tokenTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TOKEN,\n];\n\n@injectable()\nexport class TokenContextLoader\n implements ContextLoader<SolanaTransactionContext>\n{\n private logger: LoggerPublisherService;\n\n constructor(\n @inject(tokenTypes.TokenDataSource)\n private readonly dataSource: TokenDataSource,\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly _certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"TokenContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTransactionContext {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) {\n return false;\n }\n\n if (\n typeof input !== \"object\" ||\n input === null ||\n !(\"tokenInternalId\" in input)\n ) {\n return false;\n }\n\n const tokenInternalId = (input as { tokenInternalId: unknown })\n .tokenInternalId;\n\n return typeof tokenInternalId === \"string\" && tokenInternalId.length > 0;\n }\n\n public async load(\n solanaTokenContextInput: SolanaTransactionContext,\n ): Promise<ClearSignContext[]> {\n this.logger.debug(\"[load] Loading solana token context\", {\n data: { input: solanaTokenContextInput },\n });\n const result = await this._loadInternal(solanaTokenContextInput);\n if (result.type === ClearSignContextType.ERROR) {\n return [{ type: ClearSignContextType.ERROR, error: result.error }];\n }\n const r = result as SolanaTokenContextSuccess;\n return [\n {\n type: ClearSignContextType.SOLANA_TOKEN,\n payload: r.payload,\n certificate: r.certificate,\n },\n ];\n }\n\n private async _loadInternal(\n solanaTokenContextInput: SolanaTransactionContext,\n ): Promise<SolanaTokenContextSuccess | SolanaContextError> {\n const { tokenInternalId, deviceModelId } = solanaTokenContextInput;\n\n if (!tokenInternalId) {\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n \"[ContextModule] TokenContextLoader: tokenInternalId is missing\",\n ),\n };\n }\n\n const payload = await this.dataSource.getTokenInfosPayload({\n tokenInternalId,\n });\n\n const certificate: PkiCertificate | undefined =\n await this._certificateLoader.loadCertificate({\n keyId: KeyId.TokenMetadataKey,\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: deviceModelId,\n });\n\n if (!certificate) {\n return {\n type: ClearSignContextType.ERROR,\n error: new Error(\n \"[ContextModule] TokenContextLoader: tokenMetadataCertificate is missing\",\n ),\n };\n }\n\n return payload.caseOf({\n Left: (error): SolanaTokenContextSuccess | SolanaContextError => {\n this.logger.error(\n \"[_loadInternal] Error loading solana token context\",\n {\n data: { error },\n },\n );\n\n return {\n type: ClearSignContextType.ERROR,\n error,\n };\n },\n Right: (value): SolanaTokenContextSuccess | SolanaContextError => {\n this.logger.debug(\n \"[_loadInternal] Successfully loaded solana token context\",\n {\n data: { payload: this.pluckTokenData(value), certificate },\n },\n );\n\n return {\n type: ClearSignContextType.SOLANA_TOKEN,\n payload: this.pluckTokenData(value),\n certificate,\n };\n },\n });\n }\n\n private pluckTokenData(tokenData: TokenDataResponse): SolanaTokenData {\n const signatureKind = this.config.cal.mode || \"prod\";\n return {\n solanaTokenDescriptor: {\n data: tokenData.descriptor.data,\n signature: tokenData.descriptor.signatures[signatureKind],\n },\n };\n }\n}\n"],
5
+ "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YAEnC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,YAAAC,MAAgB,uCAEzB,OAAS,SAAAC,MAAa,uCACtB,OAAS,YAAAC,MAAgB,0CAYzB,OAAS,cAAAC,MAAkB,uCAE3B,OAEE,wBAAAC,MACK,kCAEP,MAAMC,EAA0C,CAC9CC,EAAqB,YACvB,EAGO,IAAMC,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEAC,EAEjBC,EACA,CAPiB,gBAAAH,EAEA,YAAAC,EAEA,wBAAAC,EAIjB,KAAK,OAASC,EAAc,oBAAoB,CAClD,CAbQ,OAeD,UACLC,EACAC,EACmC,CAKnC,GAJI,CAACR,EAAgB,MAAOS,GAAMD,EAAc,SAASC,CAAC,CAAC,GAKzD,OAAOF,GAAU,UACjBA,IAAU,MACV,EAAE,oBAAqBA,GAEvB,MAAO,GAGT,MAAMG,EAAmBH,EACtB,gBAEH,OAAO,OAAOG,GAAoB,UAAYA,EAAgB,OAAS,CACzE,CAEA,MAAa,KACXC,EAC6B,CAC7B,KAAK,OAAO,MAAM,sCAAuC,CACvD,KAAM,CAAE,MAAOA,CAAwB,CACzC,CAAC,EACD,MAAMC,EAAS,MAAM,KAAK,cAAcD,CAAuB,EAC/D,GAAIC,EAAO,OAASX,EAAqB,MACvC,MAAO,CAAC,CAAE,KAAMA,EAAqB,MAAO,MAAOW,EAAO,KAAM,CAAC,EAEnE,MAAMC,EAAID,EACV,MAAO,CACL,CACE,KAAMX,EAAqB,aAC3B,QAASY,EAAE,QACX,YAAaA,EAAE,WACjB,CACF,CACF,CAEA,MAAc,cACZF,EACyD,CACzD,KAAM,CAAE,gBAAAD,EAAiB,cAAAI,CAAc,EAAIH,EAE3C,GAAI,CAACD,EACH,MAAO,CACL,KAAMT,EAAqB,MAC3B,MAAO,IAAI,MACT,gEACF,CACF,EAGF,MAAMc,EAAU,MAAM,KAAK,WAAW,qBAAqB,CACzD,gBAAAL,CACF,CAAC,EAEKM,EACJ,MAAM,KAAK,mBAAmB,gBAAgB,CAC5C,MAAOC,EAAM,iBACb,SAAUC,EAAS,SACnB,aAAcJ,CAChB,CAAC,EAEH,OAAKE,EASED,EAAQ,OAAO,CACpB,KAAOI,IACL,KAAK,OAAO,MACV,qDACA,CACE,KAAM,CAAE,MAAAA,CAAM,CAChB,CACF,EAEO,CACL,KAAMlB,EAAqB,MAC3B,MAAAkB,CACF,GAEF,MAAQC,IACN,KAAK,OAAO,MACV,2DACA,CACE,KAAM,CAAE,QAAS,KAAK,eAAeA,CAAK,EAAG,YAAAJ,CAAY,CAC3D,CACF,EAEO,CACL,KAAMf,EAAqB,aAC3B,QAAS,KAAK,eAAemB,CAAK,EAClC,YAAAJ,CACF,EAEJ,CAAC,EApCQ,CACL,KAAMf,EAAqB,MAC3B,MAAO,IAAI,MACT,yEACF,CACF,CAgCJ,CAEQ,eAAeoB,EAA+C,CACpE,MAAMC,EAAgB,KAAK,OAAO,IAAI,MAAQ,OAC9C,MAAO,CACL,sBAAuB,CACrB,KAAMD,EAAU,WAAW,KAC3B,UAAWA,EAAU,WAAW,WAAWC,CAAa,CAC1D,CACF,CACF,CACF,EAtIapB,EAANqB,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAW,eAAe,GAEjCF,EAAA,EAAAC,EAAOE,EAAY,MAAM,GAEzBH,EAAA,EAAAC,EAAOG,EAAS,oBAAoB,GAEpCJ,EAAA,EAAAC,EAAOE,EAAY,0BAA0B,IAZrC1B",
6
+ "names": ["inject", "injectable", "configTypes", "pkiTypes", "KeyId", "KeyUsage", "tokenTypes", "ClearSignContextType", "SUPPORTED_TYPES", "ClearSignContextType", "TokenContextLoader", "dataSource", "config", "_certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "tokenInternalId", "solanaTokenContextInput", "result", "r", "deviceModelId", "payload", "certificate", "KeyId", "KeyUsage", "error", "value", "tokenData", "signatureKind", "__decorateClass", "injectable", "__decorateParam", "inject", "tokenTypes", "configTypes", "pkiTypes"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ var g=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var m=(i,t,o,r)=>{for(var e=r>1?void 0:r?l(t,o):t,n=i.length-1,s;n>=0;n--)(s=i[n])&&(e=(r?s(t,o,e):s(e))||e);return r&&e&&g(t,o,e),e},a=(i,t)=>(o,r)=>t(o,r,i);import{inject as u,injectable as f}from"inversify";import{Left as p,Right as k}from"purify-ts";import{configTypes as d}from"../../../../config/di/configTypes";import{networkTypes as y}from"../../../../shared/network/di/networkTypes";import{HexStringUtils as S}from"../../../../shared/utils/HexStringUtils";import{signedDescriptorDtoCodec as T}from"../../../../shared/utils/signedDescriptorDto";let c=class{constructor(t,o){this.config=t;this.http=o}async getTokenAccountState({tokenAccount:t,challenge:o}){let r;try{r=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/token-account-state/${t}`,{params:{challenge:o}})}catch(e){const n=e instanceof Error?e.message:String(e);return p(new Error(`[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: ${n}`))}return T.decode(r).caseOf({Left:e=>p(new Error(`[ContextModule] HttpTokenAccountStateDataSource: malformed response for ${t}: ${e}`)),Right:e=>{let n;try{n=S.hexToBytes(e.signedDescriptor)}catch(s){return p(new Error(`[ContextModule] HttpTokenAccountStateDataSource: invalid hex in signedDescriptor for ${t}: ${s.message}`))}return k({tokenAccount:t,descriptor:n,keyId:e.keyId,keyUsage:e.keyUsage})}})}};c=m([f(),a(0,u(d.Config)),a(1,u(y.NetworkClient))],c);export{c as HttpTokenAccountStateDataSource};
2
+ //# sourceMappingURL=HttpTokenAccountStateDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.ts"],
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/shared/network/di/networkTypes\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport { signedDescriptorDtoCodec } from \"@/shared/utils/signedDescriptorDto\";\n\nimport {\n type GetTokenAccountStateParams,\n type TokenAccountStateDataSource,\n type TokenAccountStateResult,\n} from \"./TokenAccountStateDataSource\";\n\ntype TokenAccountStateResponseDto = {\n descriptorType?: string;\n descriptorVersion?: number;\n tokenAccount?: string;\n mint?: string;\n owner?: string;\n preBalance?: number;\n signedDescriptor: string;\n keyId: string;\n keyUsage: string;\n};\n\n@injectable()\nexport class HttpTokenAccountStateDataSource\n implements TokenAccountStateDataSource\n{\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getTokenAccountState({\n tokenAccount,\n challenge,\n }: GetTokenAccountStateParams): Promise<\n Either<Error, TokenAccountStateResult>\n > {\n let dto: TokenAccountStateResponseDto;\n try {\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/solana/token-account-state/${tokenAccount}`,\n { params: { challenge } },\n )) as TokenAccountStateResponseDto;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return Left(\n new Error(\n `[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: ${reason}`,\n ),\n );\n }\n\n return signedDescriptorDtoCodec\n .decode(dto)\n .caseOf<Either<Error, TokenAccountStateResult>>({\n Left: (error) =>\n Left(\n new Error(\n `[ContextModule] HttpTokenAccountStateDataSource: malformed response for ${tokenAccount}: ${error}`,\n ),\n ),\n Right: (validated) => {\n let descriptor: Uint8Array;\n try {\n descriptor = HexStringUtils.hexToBytes(validated.signedDescriptor);\n } catch (error) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenAccountStateDataSource: invalid hex in signedDescriptor for ${tokenAccount}: ${(error as Error).message}`,\n ),\n );\n }\n\n return Right({\n tokenAccount,\n descriptor,\n keyId: validated.keyId,\n keyUsage: validated.keyUsage,\n });\n },\n });\n }\n}\n"],
5
+ "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,gBAAAC,MAAoB,mCAC7B,OAAS,kBAAAC,MAAsB,gCAC/B,OAAS,4BAAAC,MAAgC,qCAqBlC,IAAMC,EAAN,KAEP,CACE,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAa,qBAAqB,CAChC,aAAAC,EACA,UAAAC,CACF,EAEE,CACA,IAAIC,EACJ,GAAI,CACFA,EAAO,MAAM,KAAK,KAAK,IACrB,GAAG,KAAK,OAAO,sBAAsB,GAAG,kCAAkCF,CAAY,GACtF,CAAE,OAAQ,CAAE,UAAAC,CAAU,CAAE,CAC1B,CACF,OAASE,EAAO,CACd,MAAMC,EAASD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EACpE,OAAOE,EACL,IAAI,MACF,yFAAyFD,CAAM,EACjG,CACF,CACF,CAEA,OAAOE,EACJ,OAAOJ,CAAG,EACV,OAA+C,CAC9C,KAAOC,GACLE,EACE,IAAI,MACF,2EAA2EL,CAAY,KAAKG,CAAK,EACnG,CACF,EACF,MAAQI,GAAc,CACpB,IAAIC,EACJ,GAAI,CACFA,EAAaC,EAAe,WAAWF,EAAU,gBAAgB,CACnE,OAASJ,EAAO,CACd,OAAOE,EACL,IAAI,MACF,wFAAwFL,CAAY,KAAMG,EAAgB,OAAO,EACnI,CACF,CACF,CAEA,OAAOO,EAAM,CACX,aAAAV,EACA,WAAAQ,EACA,MAAOD,EAAU,MACjB,SAAUA,EAAU,QACtB,CAAC,CACH,CACF,CAAC,CACL,CACF,EA7DaV,EAANc,EAAA,CADNC,EAAW,EAKPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,GAEzBF,EAAA,EAAAC,EAAOE,EAAa,aAAa,IANzBnB",
6
+ "names": ["inject", "injectable", "Left", "Right", "configTypes", "networkTypes", "HexStringUtils", "signedDescriptorDtoCodec", "HttpTokenAccountStateDataSource", "config", "http", "tokenAccount", "challenge", "dto", "error", "reason", "Left", "signedDescriptorDtoCodec", "validated", "descriptor", "HexStringUtils", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{Left as u,Right as d}from"purify-ts";import{beforeEach as l,describe as k,expect as a,it as r,vi as s}from"vitest";import{HttpTokenAccountStateDataSource as g}from"./HttpTokenAccountStateDataSource";k("HttpTokenAccountStateDataSource",()=>{let n,t;const o="TokenAccountAddrXXXXXXXXXXXXXXXXXXXXXXXXXXX",c="deadbeef",i={metadataServiceDomain:{url:"https://nft.api.ledger.com"}};l(()=>{s.clearAllMocks(),t={get:s.fn()},n=new g(i,t)}),r("calls the metadata endpoint with the challenge param",async()=>{t.get.mockResolvedValue({descriptorType:"token_account_state",signedDescriptor:"01020304",keyId:"tas_key",keyUsage:"coin_meta"}),await n.getTokenAccountState({tokenAccount:o,challenge:c}),a(t.get).toHaveBeenCalledWith(`https://nft.api.ledger.com/v2/solana/token-account-state/${o}`,{params:{challenge:c}})}),r("decodes signedDescriptor hex into Uint8Array",async()=>{t.get.mockResolvedValue({signedDescriptor:"deadbeef",keyId:"k",keyUsage:"u"});const e=await n.getTokenAccountState({tokenAccount:o,challenge:c});a(e).toEqual(d({tokenAccount:o,descriptor:new Uint8Array([222,173,190,239]),keyId:"k",keyUsage:"u"}))}),r("returns Left on malformed response (missing signedDescriptor)",async()=>{t.get.mockResolvedValue({keyId:"k",keyUsage:"u"});const e=await n.getTokenAccountState({tokenAccount:o,challenge:c});a(e.isLeft()).toBe(!0),a(e.extract().message).toMatch(new RegExp(String.raw`\[ContextModule\] HttpTokenAccountStateDataSource: malformed response for ${o}:`))}),r("returns Left when signedDescriptor is not valid hex",async()=>{t.get.mockResolvedValue({signedDescriptor:"ZZZZ",keyId:"k",keyUsage:"u"});const e=await n.getTokenAccountState({tokenAccount:o,challenge:c});a(e.isLeft()).toBe(!0),a(e.extract().message).toMatch(/invalid hex/)}),r("returns Left when HTTP client throws",async()=>{t.get.mockRejectedValue(new Error("net"));const e=await n.getTokenAccountState({tokenAccount:o,challenge:c});a(e).toEqual(u(new Error("[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: net")))})});
2
+ //# sourceMappingURL=HttpTokenAccountStateDataSource.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.ts"],
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpTokenAccountStateDataSource } from \"./HttpTokenAccountStateDataSource\";\nimport { type TokenAccountStateDataSource } from \"./TokenAccountStateDataSource\";\n\ndescribe(\"HttpTokenAccountStateDataSource\", () => {\n let datasource: TokenAccountStateDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const tokenAccount = \"TokenAccountAddrXXXXXXXXXXXXXXXXXXXXXXXXXXX\";\n const challenge = \"deadbeef\";\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: { url: \"https://nft.api.ledger.com\" },\n } as ContextModuleServiceConfig;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenAccountStateDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"calls the metadata endpoint with the challenge param\", async () => {\n httpMock.get.mockResolvedValue({\n descriptorType: \"token_account_state\",\n signedDescriptor: \"01020304\",\n keyId: \"tas_key\",\n keyUsage: \"coin_meta\",\n });\n\n await datasource.getTokenAccountState({ tokenAccount, challenge });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `https://nft.api.ledger.com/v2/solana/token-account-state/${tokenAccount}`,\n { params: { challenge } },\n );\n });\n\n it(\"decodes signedDescriptor hex into Uint8Array\", async () => {\n httpMock.get.mockResolvedValue({\n signedDescriptor: \"deadbeef\",\n keyId: \"k\",\n keyUsage: \"u\",\n });\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result).toEqual(\n Right({\n tokenAccount,\n descriptor: new Uint8Array([0xde, 0xad, 0xbe, 0xef]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n );\n });\n\n it(\"returns Left on malformed response (missing signedDescriptor)\", async () => {\n httpMock.get.mockResolvedValue({ keyId: \"k\", keyUsage: \"u\" });\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result.isLeft()).toBe(true);\n expect((result.extract() as Error).message).toMatch(\n new RegExp(\n String.raw`\\[ContextModule\\] HttpTokenAccountStateDataSource: malformed response for ${tokenAccount}:`,\n ),\n );\n });\n\n it(\"returns Left when signedDescriptor is not valid hex\", async () => {\n httpMock.get.mockResolvedValue({\n signedDescriptor: \"ZZZZ\",\n keyId: \"k\",\n keyUsage: \"u\",\n });\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result.isLeft()).toBe(true);\n expect((result.extract() as Error).message).toMatch(/invalid hex/);\n });\n\n it(\"returns Left when HTTP client throws\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"net\"));\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: net\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "AACA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAC5B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAIrD,OAAS,mCAAAC,MAAuC,oCAGhDJ,EAAS,kCAAmC,IAAM,CAChD,IAAIK,EACAC,EACJ,MAAMC,EAAe,8CACfC,EAAY,WACZC,EAAqC,CACzC,sBAAuB,CAAE,IAAK,4BAA6B,CAC7D,EAEAV,EAAW,IAAM,CACfI,EAAG,cAAc,EACjBG,EAAW,CAAE,IAAKH,EAAG,GAAG,CAAE,EAC1BE,EAAa,IAAID,EACfK,EACAH,CACF,CACF,CAAC,EAEDJ,EAAG,uDAAwD,SAAY,CACrEI,EAAS,IAAI,kBAAkB,CAC7B,eAAgB,sBAChB,iBAAkB,WAClB,MAAO,UACP,SAAU,WACZ,CAAC,EAED,MAAMD,EAAW,qBAAqB,CAAE,aAAAE,EAAc,UAAAC,CAAU,CAAC,EAEjEP,EAAOK,EAAS,GAAG,EAAE,qBACnB,4DAA4DC,CAAY,GACxE,CAAE,OAAQ,CAAE,UAAAC,CAAU,CAAE,CAC1B,CACF,CAAC,EAEDN,EAAG,+CAAgD,SAAY,CAC7DI,EAAS,IAAI,kBAAkB,CAC7B,iBAAkB,WAClB,MAAO,IACP,SAAU,GACZ,CAAC,EAED,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,EAEDP,EAAOS,CAAM,EAAE,QACbZ,EAAM,CACJ,aAAAS,EACA,WAAY,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,EACnD,MAAO,IACP,SAAU,GACZ,CAAC,CACH,CACF,CAAC,EAEDL,EAAG,gEAAiE,SAAY,CAC9EI,EAAS,IAAI,kBAAkB,CAAE,MAAO,IAAK,SAAU,GAAI,CAAC,EAE5D,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,EAEDP,EAAOS,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCT,EAAQS,EAAO,QAAQ,EAAY,OAAO,EAAE,QAC1C,IAAI,OACF,OAAO,gFAAgFH,CAAY,GACrG,CACF,CACF,CAAC,EAEDL,EAAG,sDAAuD,SAAY,CACpEI,EAAS,IAAI,kBAAkB,CAC7B,iBAAkB,OAClB,MAAO,IACP,SAAU,GACZ,CAAC,EAED,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,EAEDP,EAAOS,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCT,EAAQS,EAAO,QAAQ,EAAY,OAAO,EAAE,QAAQ,aAAa,CACnE,CAAC,EAEDR,EAAG,uCAAwC,SAAY,CACrDI,EAAS,IAAI,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAE/C,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,EAEDP,EAAOS,CAAM,EAAE,QACbb,EACE,IAAI,MACF,2FACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "HttpTokenAccountStateDataSource", "datasource", "httpMock", "tokenAccount", "challenge", "config", "result"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=TokenAccountStateDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{ContainerModule as e}from"inversify";import{HttpTokenAccountStateDataSource as n}from"../../../../modules/solana/token-account-state/data/HttpTokenAccountStateDataSource";import{tokenAccountStateTypes as o}from"../../../../modules/solana/token-account-state/di/tokenAccountStateTypes";import{TokenAccountStateContextLoader as c}from"../../../../modules/solana/token-account-state/domain/TokenAccountStateContextLoader";const S=()=>new e(({bind:t})=>{t(o.TokenAccountStateDataSource).to(n),t(o.TokenAccountStateContextLoader).to(c)});export{S as tokenAccountStateModuleFactory};
2
+ //# sourceMappingURL=tokenAccountStateModuleFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpTokenAccountStateDataSource } from \"@/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource\";\nimport { tokenAccountStateTypes } from \"@/modules/solana/token-account-state/di/tokenAccountStateTypes\";\nimport { TokenAccountStateContextLoader } from \"@/modules/solana/token-account-state/domain/TokenAccountStateContextLoader\";\n\nexport const tokenAccountStateModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(tokenAccountStateTypes.TokenAccountStateDataSource).to(\n HttpTokenAccountStateDataSource,\n );\n bind(tokenAccountStateTypes.TokenAccountStateContextLoader).to(\n TokenAccountStateContextLoader,\n );\n });\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,mCAAAC,MAAuC,4EAChD,OAAS,0BAAAC,MAA8B,iEACvC,OAAS,kCAAAC,MAAsC,6EAExC,MAAMC,EAAiC,IAC5C,IAAIJ,EAAgB,CAAC,CAAE,KAAAK,CAAK,IAAM,CAChCA,EAAKH,EAAuB,2BAA2B,EAAE,GACvDD,CACF,EACAI,EAAKH,EAAuB,8BAA8B,EAAE,GAC1DC,CACF,CACF,CAAC",
6
+ "names": ["ContainerModule", "HttpTokenAccountStateDataSource", "tokenAccountStateTypes", "TokenAccountStateContextLoader", "tokenAccountStateModuleFactory", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ const t={TokenAccountStateDataSource:Symbol.for("TokenAccountStateDataSource"),TokenAccountStateContextLoader:Symbol.for("TokenAccountStateContextLoader")};export{t as tokenAccountStateTypes};
2
+ //# sourceMappingURL=tokenAccountStateTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/di/tokenAccountStateTypes.ts"],
4
+ "sourcesContent": ["export const tokenAccountStateTypes = {\n TokenAccountStateDataSource: Symbol.for(\"TokenAccountStateDataSource\"),\n TokenAccountStateContextLoader: Symbol.for(\"TokenAccountStateContextLoader\"),\n};\n"],
5
+ "mappings": "AAAO,MAAMA,EAAyB,CACpC,4BAA6B,OAAO,IAAI,6BAA6B,EACrE,+BAAgC,OAAO,IAAI,gCAAgC,CAC7E",
6
+ "names": ["tokenAccountStateTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var g=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var u=(r,o,t,e)=>{for(var n=e>1?void 0:e?C(o,t):o,i=r.length-1,l;i>=0;i--)(l=r[i])&&(n=(e?l(o,t,n):l(n))||n);return e&&n&&g(o,t,n),n},a=(r,o)=>(t,e)=>o(t,e,r);import{inject as d,injectable as T}from"inversify";import{array as m,Codec as s,string as p}from"purify-ts";import{configTypes as f}from"../../../../config/di/configTypes";import{pkiTypes as A}from"../../../../modules/multichain/pki/di/pkiTypes";import{tokenAccountStateTypes as y}from"../../../../modules/solana/token-account-state/di/tokenAccountStateTypes";import{ClearSignContextType as S}from"../../../../shared/model/ClearSignContext";import{loadChallengeBoundContexts as k}from"../../../../shared/utils/challengeBoundLoader";import{deviceModelIdCodec as h}from"../../../../shared/utils/deviceModelIdCodec";const v=[S.SOLANA_TOKEN_ACCOUNT_STATE],x=s.interface({tokenAccount:p,challenge:p}),L=s.interface({deviceModelId:h,requests:m(x)});let c=class{constructor(o,t,e){this.dataSource=o;this.certificateLoader=t;this.logger=e("TokenAccountStateContextLoader")}logger;canHandle(o,t){return v.every(e=>t.includes(e))?L.decode(o).caseOf({Left:()=>!1,Right:({requests:e})=>e.length>0&&e.every(n=>n.tokenAccount.length>0&&n.challenge.length>0)}):!1}async load(o){return k({requests:o.requests,deviceModelId:o.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"TOKEN_ACCOUNT_STATE",fetch:t=>this.dataSource.getTokenAccountState(t),toContext:(t,e)=>{const n={descriptor:t.descriptor};return{type:S.SOLANA_TOKEN_ACCOUNT_STATE,payload:n,certificate:e}},describe:t=>({tokenAccount:t.tokenAccount})})}};c=u([T(),a(0,d(y.TokenAccountStateDataSource)),a(1,d(A.PkiCertificateLoader)),a(2,d(f.ContextModuleLoggerFactory))],c);export{c as TokenAccountStateContextLoader};
2
+ //# sourceMappingURL=TokenAccountStateContextLoader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.ts"],
4
+ "sourcesContent": ["import {\n type DeviceModelId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { array, Codec, string } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type SolanaTokenAccountStatePayload } from \"@/modules/solana/model/SolanaPayloads\";\nimport { type TokenAccountStateDataSource } from \"@/modules/solana/token-account-state/data/TokenAccountStateDataSource\";\nimport { tokenAccountStateTypes } from \"@/modules/solana/token-account-state/di/tokenAccountStateTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { loadChallengeBoundContexts } from \"@/shared/utils/challengeBoundLoader\";\nimport { deviceModelIdCodec } from \"@/shared/utils/deviceModelIdCodec\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n];\n\n/**\n * One token-account-state request. The caller must obtain a fresh challenge\n * immediately before fetching each entry.\n */\nexport type SolanaTokenAccountStateRequest = {\n tokenAccount: string;\n challenge: string;\n};\n\nexport type SolanaTokenAccountStateContextInput = {\n deviceModelId: DeviceModelId;\n requests: SolanaTokenAccountStateRequest[];\n};\n\nconst tokenAccountStateRequestCodec = Codec.interface({\n tokenAccount: string,\n challenge: string,\n});\n\nconst solanaTokenAccountStateInputCodec = Codec.interface({\n deviceModelId: deviceModelIdCodec,\n requests: array(tokenAccountStateRequestCodec),\n});\n\n@injectable()\nexport class TokenAccountStateContextLoader\n implements ContextLoader<SolanaTokenAccountStateContextInput>\n{\n private readonly logger: LoggerPublisherService;\n\n constructor(\n @inject(tokenAccountStateTypes.TokenAccountStateDataSource)\n private readonly dataSource: TokenAccountStateDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"TokenAccountStateContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTokenAccountStateContextInput {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) return false;\n return solanaTokenAccountStateInputCodec.decode(input).caseOf({\n Left: () => false,\n Right: ({ requests }) =>\n requests.length > 0 &&\n requests.every(\n (r) => r.tokenAccount.length > 0 && r.challenge.length > 0,\n ),\n });\n }\n\n public async load(\n input: SolanaTokenAccountStateContextInput,\n ): Promise<ClearSignContext[]> {\n return loadChallengeBoundContexts({\n requests: input.requests,\n deviceModelId: input.deviceModelId,\n certificateLoader: this.certificateLoader,\n logger: this.logger,\n label: \"TOKEN_ACCOUNT_STATE\",\n fetch: (request) => this.dataSource.getTokenAccountState(request),\n toContext: (value, certificate) => {\n const payload: SolanaTokenAccountStatePayload = {\n descriptor: value.descriptor,\n };\n return {\n type: ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n payload,\n certificate,\n };\n },\n describe: (request) => ({ tokenAccount: request.tokenAccount }),\n });\n }\n}\n"],
5
+ "mappings": "iOAIA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAS,SAAAC,EAAO,SAAAC,EAAO,UAAAC,MAAc,YAErC,OAAS,eAAAC,MAAmB,0BAC5B,OAAS,YAAAC,MAAgB,uCAIzB,OAAS,0BAAAC,MAA8B,iEAEvC,OAEE,wBAAAC,MACK,kCACP,OAAS,8BAAAC,MAAkC,sCAC3C,OAAS,sBAAAC,MAA0B,oCAEnC,MAAMC,EAA0C,CAC9CC,EAAqB,0BACvB,EAgBMC,EAAgCC,EAAM,UAAU,CACpD,aAAcC,EACd,UAAWA,CACb,CAAC,EAEKC,EAAoCF,EAAM,UAAU,CACxD,cAAeG,EACf,SAAUC,EAAML,CAA6B,CAC/C,CAAC,EAGM,IAAMM,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEjBC,EACA,CALiB,gBAAAF,EAEA,uBAAAC,EAIjB,KAAK,OAASC,EAAc,gCAAgC,CAC9D,CAXiB,OAaV,UACLC,EACAC,EAC8C,CAC9C,OAAKb,EAAgB,MAAOc,GAAMD,EAAc,SAASC,CAAC,CAAC,EACpDT,EAAkC,OAAOO,CAAK,EAAE,OAAO,CAC5D,KAAM,IAAM,GACZ,MAAO,CAAC,CAAE,SAAAG,CAAS,IACjBA,EAAS,OAAS,GAClBA,EAAS,MACNC,GAAMA,EAAE,aAAa,OAAS,GAAKA,EAAE,UAAU,OAAS,CAC3D,CACJ,CAAC,EARoE,EASvE,CAEA,MAAa,KACXJ,EAC6B,CAC7B,OAAOK,EAA2B,CAChC,SAAUL,EAAM,SAChB,cAAeA,EAAM,cACrB,kBAAmB,KAAK,kBACxB,OAAQ,KAAK,OACb,MAAO,sBACP,MAAQM,GAAY,KAAK,WAAW,qBAAqBA,CAAO,EAChE,UAAW,CAACC,EAAOC,IAAgB,CACjC,MAAMC,EAA0C,CAC9C,WAAYF,EAAM,UACpB,EACA,MAAO,CACL,KAAMlB,EAAqB,2BAC3B,QAAAoB,EACA,YAAAD,CACF,CACF,EACA,SAAWF,IAAa,CAAE,aAAcA,EAAQ,YAAa,EAC/D,CAAC,CACH,CACF,EAtDaV,EAANc,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAuB,2BAA2B,GAEzDF,EAAA,EAAAC,EAAOE,EAAS,oBAAoB,GAEpCH,EAAA,EAAAC,EAAOG,EAAY,0BAA0B,IAVrCpB",
6
+ "names": ["inject", "injectable", "array", "Codec", "string", "configTypes", "pkiTypes", "tokenAccountStateTypes", "ClearSignContextType", "loadChallengeBoundContexts", "deviceModelIdCodec", "SUPPORTED_TYPES", "ClearSignContextType", "tokenAccountStateRequestCodec", "Codec", "string", "solanaTokenAccountStateInputCodec", "deviceModelIdCodec", "array", "TokenAccountStateContextLoader", "dataSource", "certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "requests", "r", "loadChallengeBoundContexts", "request", "value", "certificate", "payload", "__decorateClass", "injectable", "__decorateParam", "inject", "tokenAccountStateTypes", "pkiTypes", "configTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{DeviceModelId as s}from"@ledgerhq/device-management-kit";import{Left as T,Right as d}from"purify-ts";import{beforeEach as f,describe as A,expect as t,it as i,vi as o}from"vitest";import{ClearSignContextType as a}from"../../../../shared/model/ClearSignContext";import{TokenAccountStateContextLoader as m}from"./TokenAccountStateContextLoader";const O=()=>({debug:o.fn(),info:o.fn(),warn:o.fn(),error:o.fn(),subscribers:[]}),u={keyUsageNumber:8,payload:new Uint8Array([66])},c="TokenAccountUSDCxxxxxxxxxxxxxxxxxxxxxxxxxxx",k="TokenAccountSOLxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";A("TokenAccountStateContextLoader",()=>{let l,x;f(()=>{o.restoreAllMocks(),l={getTokenAccountState:o.fn()},x={loadCertificate:o.fn().mockResolvedValue(u)}});const r=()=>new m(l,x,O);A("canHandle",()=>{i("returns true when SOLANA_TOKEN_ACCOUNT_STATE is requested and requests are well-formed",()=>{t(r().canHandle({deviceModelId:s.NANO_X,requests:[{tokenAccount:c,challenge:"c1"}]},[a.SOLANA_TOKEN_ACCOUNT_STATE])).toBe(!0)}),i("returns false when SOLANA_TOKEN_ACCOUNT_STATE is not requested",()=>{t(r().canHandle({deviceModelId:s.NANO_X,requests:[{tokenAccount:c,challenge:"c1"}]},[a.SOLANA_TOKEN])).toBe(!1)}),i("returns false on malformed input",()=>{const e=r(),n=[a.SOLANA_TOKEN_ACCOUNT_STATE];t(e.canHandle({requests:[]},n)).toBe(!1),t(e.canHandle({requests:[{tokenAccount:"",challenge:"c"}]},n)).toBe(!1),t(e.canHandle({requests:[{tokenAccount:c,challenge:""}]},n)).toBe(!1),t(e.canHandle(null,n)).toBe(!1)})}),A("load",()=>{i("emits one SOLANA_TOKEN_ACCOUNT_STATE per request with certificate",async()=>{o.spyOn(l,"getTokenAccountState").mockImplementation(async({tokenAccount:n})=>d({tokenAccount:n,descriptor:new Uint8Array([171,205]),keyId:"k1",keyUsage:"coin_meta"}));const e=await r().load({deviceModelId:s.NANO_X,requests:[{tokenAccount:c,challenge:"c1"},{tokenAccount:k,challenge:"c2"}]});t(e).toHaveLength(2),t(e[0]).toMatchObject({type:a.SOLANA_TOKEN_ACCOUNT_STATE,payload:{descriptor:new Uint8Array([171,205])},certificate:u}),t(x.loadCertificate).toHaveBeenCalledWith({keyId:"k1",keyUsage:"coin_meta",targetDevice:s.NANO_X})}),i("emits an ERROR (not a cert-less success) when the certificate resolves undefined",async()=>{o.spyOn(x,"loadCertificate").mockResolvedValue(void 0),o.spyOn(l,"getTokenAccountState").mockImplementation(async({tokenAccount:n})=>d({tokenAccount:n,descriptor:new Uint8Array([171]),keyId:"k",keyUsage:"u"}));const e=await r().load({deviceModelId:s.NANO_X,requests:[{tokenAccount:c,challenge:"c1"}]});t(e).toHaveLength(1),t(e[0]?.type).toBe(a.ERROR),t(e[0].error.message).toMatch(/certificate is missing/)}),i("emits an ERROR per failing request and keeps the others",async()=>{o.spyOn(l,"getTokenAccountState").mockImplementation(async({tokenAccount:n})=>n===c?d({tokenAccount:n,descriptor:new Uint8Array([171]),keyId:"k",keyUsage:"u"}):T(new Error("upstream-404")));const e=await r().load({deviceModelId:s.NANO_X,requests:[{tokenAccount:c,challenge:"c1"},{tokenAccount:k,challenge:"c2"}]});t(e[0]?.type).toBe(a.SOLANA_TOKEN_ACCOUNT_STATE),t(e[1]?.type).toBe(a.ERROR)})})});
2
+ //# sourceMappingURL=TokenAccountStateContextLoader.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type TokenAccountStateDataSource } from \"@/modules/solana/token-account-state/data/TokenAccountStateDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { TokenAccountStateContextLoader } from \"./TokenAccountStateContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst mockCertificate = {\n keyUsageNumber: 8,\n payload: new Uint8Array([0x42]),\n};\n\nconst TA_USDC = \"TokenAccountUSDCxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\nconst TA_SOL = \"TokenAccountSOLxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\n\ndescribe(\"TokenAccountStateContextLoader\", () => {\n let dataSource: TokenAccountStateDataSource;\n let certificateLoader: PkiCertificateLoader;\n\n beforeEach(() => {\n vi.restoreAllMocks();\n dataSource = {\n getTokenAccountState: vi.fn(),\n };\n certificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n };\n });\n\n const makeLoader = () =>\n new TokenAccountStateContextLoader(\n dataSource,\n certificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_TOKEN_ACCOUNT_STATE is requested and requests are well-formed\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n requests: [{ tokenAccount: TA_USDC, challenge: \"c1\" }],\n },\n [ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_TOKEN_ACCOUNT_STATE is not requested\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n requests: [{ tokenAccount: TA_USDC, challenge: \"c1\" }],\n },\n [ClearSignContextType.SOLANA_TOKEN],\n ),\n ).toBe(false);\n });\n\n it(\"returns false on malformed input\", () => {\n const loader = makeLoader();\n const types = [ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE];\n expect(loader.canHandle({ requests: [] } as any, types)).toBe(false);\n expect(\n loader.canHandle(\n { requests: [{ tokenAccount: \"\", challenge: \"c\" }] } as any,\n types,\n ),\n ).toBe(false);\n expect(\n loader.canHandle(\n { requests: [{ tokenAccount: TA_USDC, challenge: \"\" }] } as any,\n types,\n ),\n ).toBe(false);\n expect(loader.canHandle(null, types)).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"emits one SOLANA_TOKEN_ACCOUNT_STATE per request with certificate\", async () => {\n vi.spyOn(dataSource, \"getTokenAccountState\").mockImplementation(\n async ({ tokenAccount }) =>\n Right({\n tokenAccount,\n descriptor: new Uint8Array([0xab, 0xcd]),\n keyId: \"k1\",\n keyUsage: \"coin_meta\",\n }),\n );\n\n const result = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [\n { tokenAccount: TA_USDC, challenge: \"c1\" },\n { tokenAccount: TA_SOL, challenge: \"c2\" },\n ],\n });\n\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n payload: { descriptor: new Uint8Array([0xab, 0xcd]) },\n certificate: mockCertificate,\n });\n expect(certificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"k1\",\n keyUsage: \"coin_meta\",\n targetDevice: DeviceModelId.NANO_X,\n });\n });\n\n it(\"emits an ERROR (not a cert-less success) when the certificate resolves undefined\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n vi.spyOn(dataSource, \"getTokenAccountState\").mockImplementation(\n async ({ tokenAccount }) =>\n Right({\n tokenAccount,\n descriptor: new Uint8Array([0xab]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n );\n\n const out = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [{ tokenAccount: TA_USDC, challenge: \"c1\" }],\n });\n\n expect(out).toHaveLength(1);\n expect(out[0]?.type).toBe(ClearSignContextType.ERROR);\n expect((out[0] as any).error.message).toMatch(/certificate is missing/);\n });\n\n it(\"emits an ERROR per failing request and keeps the others\", async () => {\n vi.spyOn(dataSource, \"getTokenAccountState\").mockImplementation(\n async ({ tokenAccount }) => {\n if (tokenAccount === TA_USDC) {\n return Right({\n tokenAccount,\n descriptor: new Uint8Array([0xab]),\n keyId: \"k\",\n keyUsage: \"u\",\n });\n }\n return Left(new Error(\"upstream-404\"));\n },\n );\n\n const out = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [\n { tokenAccount: TA_USDC, challenge: \"c1\" },\n { tokenAccount: TA_SOL, challenge: \"c2\" },\n ],\n });\n\n expect(out[0]?.type).toBe(\n ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n );\n expect(out[1]?.type).toBe(ClearSignContextType.ERROR);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["DeviceModelId", "Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "ClearSignContextType", "TokenAccountStateContextLoader", "mockLoggerFactory", "mockCertificate", "TA_USDC", "TA_SOL", "dataSource", "certificateLoader", "makeLoader", "loader", "types", "tokenAccount", "result", "out"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var k=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var l=(n,o,r,t)=>{for(var e=t>1?void 0:t?g(o,r):o,i=n.length-1,c;i>=0;i--)(c=n[i])&&(e=(t?c(o,r,e):c(e))||e);return t&&e&&k(o,r,e),e},s=(n,o)=>(r,t)=>o(r,t,n);import{inject as m,injectable as h}from"inversify";import{Codec as p,Left as f,optional as u,Right as C,string as d}from"purify-ts";import{configTypes as y}from"../../../../config/di/configTypes";import{networkTypes as w}from"../../../../shared/network/di/networkTypes";const E=p.interface({prod:u(d),test:u(d)}),T=p.interface({descriptor:p.interface({data:d,signatures:E})});let a=class{constructor(o,r){this.config=o;this.http=r}async getTokenInfo({mint:o,network:r}){let t;try{t=await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:o,network:r,output:"contract_address,network,descriptor",ref:`branch:${this.config.cal.branch}`}})}catch(e){const i=e instanceof Error?e.message:String(e);return f(new Error(`[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: ${i}`))}return!Array.isArray(t)||t.length===0?f(new Error(`[ContextModule] HttpTokenInfoDataSource: no token info for mint ${o}`)):T.decode(t[0]).caseOf({Left:e=>f(new Error(`[ContextModule] HttpTokenInfoDataSource: malformed descriptor for mint ${o}: ${e}`)),Right:e=>C({mint:o,descriptor:e.descriptor})})}};a=l([h(),s(0,m(y.Config)),s(1,m(w.NetworkClient))],a);export{a as HttpTokenInfoDataSource};
2
+ //# sourceMappingURL=HttpTokenInfoDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/data/HttpTokenInfoDataSource.ts"],
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Codec, Either, Left, optional, Right, string } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/shared/network/di/networkTypes\";\n\nimport {\n type GetTokenInfoParams,\n type TokenInfoDataSource,\n type TokenInfoResult,\n} from \"./TokenInfoDataSource\";\n\nconst calSignaturesCodec = Codec.interface({\n prod: optional(string),\n test: optional(string),\n});\n\nconst tokenInfoResponseEntryCodec = Codec.interface({\n descriptor: Codec.interface({\n data: string,\n signatures: calSignaturesCodec,\n }),\n});\n\n@injectable()\nexport class HttpTokenInfoDataSource implements TokenInfoDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getTokenInfo({\n mint,\n network,\n }: GetTokenInfoParams): Promise<Either<Error, TokenInfoResult>> {\n let data: unknown;\n try {\n data = await this.http.get(`${this.config.cal.url}/tokens`, {\n params: {\n contract_address: mint,\n network,\n output: \"contract_address,network,descriptor\",\n ref: `branch:${this.config.cal.branch}`,\n },\n });\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: ${reason}`,\n ),\n );\n }\n\n if (!Array.isArray(data) || data.length === 0) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: no token info for mint ${mint}`,\n ),\n );\n }\n\n return tokenInfoResponseEntryCodec\n .decode(data[0])\n .caseOf<Either<Error, TokenInfoResult>>({\n Left: (error) =>\n Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: malformed descriptor for mint ${mint}: ${error}`,\n ),\n ),\n Right: (entry) =>\n Right({\n mint,\n descriptor: entry.descriptor,\n }),\n });\n }\n}\n"],
5
+ "mappings": "iOACA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAS,SAAAC,EAAe,QAAAC,EAAM,YAAAC,EAAU,SAAAC,EAAO,UAAAC,MAAc,YAE7D,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,gBAAAC,MAAoB,mCAQ7B,MAAMC,EAAqBC,EAAM,UAAU,CACzC,KAAMC,EAASC,CAAM,EACrB,KAAMD,EAASC,CAAM,CACvB,CAAC,EAEKC,EAA8BH,EAAM,UAAU,CAClD,WAAYA,EAAM,UAAU,CAC1B,KAAME,EACN,WAAYH,CACd,CAAC,CACH,CAAC,EAGM,IAAMK,EAAN,KAA6D,CAClE,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAa,aAAa,CACxB,KAAAC,EACA,QAAAC,CACF,EAAgE,CAC9D,IAAIC,EACJ,GAAI,CACFA,EAAO,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,UAAW,CAC1D,OAAQ,CACN,iBAAkBF,EAClB,QAAAC,EACA,OAAQ,sCACR,IAAK,UAAU,KAAK,OAAO,IAAI,MAAM,EACvC,CACF,CAAC,CACH,OAASE,EAAO,CACd,MAAMC,EAASD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EACpE,OAAOE,EACL,IAAI,MACF,wEAAwED,CAAM,EAChF,CACF,CACF,CAEA,MAAI,CAAC,MAAM,QAAQF,CAAI,GAAKA,EAAK,SAAW,EACnCG,EACL,IAAI,MACF,mEAAmEL,CAAI,EACzE,CACF,EAGKJ,EACJ,OAAOM,EAAK,CAAC,CAAC,EACd,OAAuC,CACtC,KAAOC,GACLE,EACE,IAAI,MACF,0EAA0EL,CAAI,KAAKG,CAAK,EAC1F,CACF,EACF,MAAQG,GACNC,EAAM,CACJ,KAAAP,EACA,WAAYM,EAAM,UACpB,CAAC,CACL,CAAC,CACL,CACF,EAvDaT,EAANW,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,GAEzBF,EAAA,EAAAC,EAAOE,EAAa,aAAa,IAJzBhB",
6
+ "names": ["inject", "injectable", "Codec", "Left", "optional", "Right", "string", "configTypes", "networkTypes", "calSignaturesCodec", "Codec", "optional", "string", "tokenInfoResponseEntryCodec", "HttpTokenInfoDataSource", "config", "http", "mint", "network", "data", "error", "reason", "Left", "entry", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes", "networkTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{Left as c,Right as l}from"purify-ts";import{beforeEach as p,describe as f,expect as a,it as s,vi as i}from"vitest";import{HttpTokenInfoDataSource as u}from"./HttpTokenInfoDataSource";f("HttpTokenInfoDataSource",()=>{let r,e;const t="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",n="solana-mainnet",d={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"}};p(()=>{i.clearAllMocks(),e={get:i.fn()},r=new u(d,e)}),s("calls /tokens with contract_address, network and ref params",async()=>{e.get.mockResolvedValue([{contract_address:t,network:"solana-mainnet",descriptor:{data:"01020304",signatures:{prod:"p",test:"t"}}}]),await r.getTokenInfo({mint:t,network:n}),a(e.get).toHaveBeenCalledWith("https://global.api.prd.ledger.com/cal/v1/tokens",{params:{contract_address:t,network:n,output:"contract_address,network,descriptor",ref:"branch:main"}})}),s("returns Right on success",async()=>{e.get.mockResolvedValue([{contract_address:t,descriptor:{data:"01020304",signatures:{prod:"psig",test:"tsig"}}}]);const o=await r.getTokenInfo({mint:t,network:n});a(o).toEqual(l({mint:t,descriptor:{data:"01020304",signatures:{prod:"psig",test:"tsig"}}}))}),s("returns Left when response is empty",async()=>{e.get.mockResolvedValue([]);const o=await r.getTokenInfo({mint:t,network:n});a(o).toEqual(c(new Error(`[ContextModule] HttpTokenInfoDataSource: no token info for mint ${t}`)))}),s("returns Left when descriptor is malformed",async()=>{e.get.mockResolvedValue([{contract_address:t}]);const o=await r.getTokenInfo({mint:t,network:n});a(o.isLeft()).toBe(!0),a(o.extract().message).toMatch(new RegExp(String.raw`\[ContextModule\] HttpTokenInfoDataSource: malformed descriptor for mint ${t}:`))}),s("returns Left when HTTP client throws",async()=>{e.get.mockRejectedValue(new Error("net"));const o=await r.getTokenInfo({mint:t,network:n});a(o).toEqual(c(new Error("[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: net")))})});
2
+ //# sourceMappingURL=HttpTokenInfoDataSource.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpTokenInfoDataSource } from \"./HttpTokenInfoDataSource\";\nimport { type TokenInfoDataSource } from \"./TokenInfoDataSource\";\n\ndescribe(\"HttpTokenInfoDataSource\", () => {\n let datasource: TokenInfoDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const mint = \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\";\n const network = \"solana-mainnet\";\n const config: ContextModuleServiceConfig = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenInfoDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"calls /tokens with contract_address, network and ref params\", async () => {\n httpMock.get.mockResolvedValue([\n {\n contract_address: mint,\n network: \"solana-mainnet\",\n descriptor: { data: \"01020304\", signatures: { prod: \"p\", test: \"t\" } },\n },\n ]);\n\n await datasource.getTokenInfo({ mint, network });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://global.api.prd.ledger.com/cal/v1/tokens\",\n {\n params: {\n contract_address: mint,\n network,\n output: \"contract_address,network,descriptor\",\n ref: \"branch:main\",\n },\n },\n );\n });\n\n it(\"returns Right on success\", async () => {\n httpMock.get.mockResolvedValue([\n {\n contract_address: mint,\n descriptor: {\n data: \"01020304\",\n signatures: { prod: \"psig\", test: \"tsig\" },\n },\n },\n ]);\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result).toEqual(\n Right({\n mint,\n descriptor: {\n data: \"01020304\",\n signatures: { prod: \"psig\", test: \"tsig\" },\n },\n }),\n );\n });\n\n it(\"returns Left when response is empty\", async () => {\n httpMock.get.mockResolvedValue([]);\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result).toEqual(\n Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: no token info for mint ${mint}`,\n ),\n ),\n );\n });\n\n it(\"returns Left when descriptor is malformed\", async () => {\n httpMock.get.mockResolvedValue([{ contract_address: mint } as any]);\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result.isLeft()).toBe(true);\n expect((result.extract() as Error).message).toMatch(\n new RegExp(\n String.raw`\\[ContextModule\\] HttpTokenInfoDataSource: malformed descriptor for mint ${mint}:`,\n ),\n );\n });\n\n it(\"returns Left when HTTP client throws\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"net\"));\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: net\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "AAEA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAC5B,OAAS,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAIrD,OAAS,2BAAAC,MAA+B,4BAGxCJ,EAAS,0BAA2B,IAAM,CACxC,IAAIK,EACAC,EACJ,MAAMC,EAAO,+CACPC,EAAU,iBACVC,EAAqC,CACzC,IAAK,CACH,IAAK,2CACL,KAAM,OACN,OAAQ,MACV,CACF,EAEAV,EAAW,IAAM,CACfI,EAAG,cAAc,EACjBG,EAAW,CAAE,IAAKH,EAAG,GAAG,CAAE,EAC1BE,EAAa,IAAID,EACfK,EACAH,CACF,CACF,CAAC,EAEDJ,EAAG,8DAA+D,SAAY,CAC5EI,EAAS,IAAI,kBAAkB,CAC7B,CACE,iBAAkBC,EAClB,QAAS,iBACT,WAAY,CAAE,KAAM,WAAY,WAAY,CAAE,KAAM,IAAK,KAAM,GAAI,CAAE,CACvE,CACF,CAAC,EAED,MAAMF,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,EAE/CP,EAAOK,EAAS,GAAG,EAAE,qBACnB,kDACA,CACE,OAAQ,CACN,iBAAkBC,EAClB,QAAAC,EACA,OAAQ,sCACR,IAAK,aACP,CACF,CACF,CACF,CAAC,EAEDN,EAAG,2BAA4B,SAAY,CACzCI,EAAS,IAAI,kBAAkB,CAC7B,CACE,iBAAkBC,EAClB,WAAY,CACV,KAAM,WACN,WAAY,CAAE,KAAM,OAAQ,KAAM,MAAO,CAC3C,CACF,CACF,CAAC,EAED,MAAMG,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,EAE9DP,EAAOS,CAAM,EAAE,QACbZ,EAAM,CACJ,KAAAS,EACA,WAAY,CACV,KAAM,WACN,WAAY,CAAE,KAAM,OAAQ,KAAM,MAAO,CAC3C,CACF,CAAC,CACH,CACF,CAAC,EAEDL,EAAG,sCAAuC,SAAY,CACpDI,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAEjC,MAAMI,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,EAE9DP,EAAOS,CAAM,EAAE,QACbb,EACE,IAAI,MACF,mEAAmEU,CAAI,EACzE,CACF,CACF,CACF,CAAC,EAEDL,EAAG,4CAA6C,SAAY,CAC1DI,EAAS,IAAI,kBAAkB,CAAC,CAAE,iBAAkBC,CAAK,CAAQ,CAAC,EAElE,MAAMG,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,EAE9DP,EAAOS,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,EACjCT,EAAQS,EAAO,QAAQ,EAAY,OAAO,EAAE,QAC1C,IAAI,OACF,OAAO,+EAA+EH,CAAI,GAC5F,CACF,CACF,CAAC,EAEDL,EAAG,uCAAwC,SAAY,CACrDI,EAAS,IAAI,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAE/C,MAAMI,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,EAE9DP,EAAOS,CAAM,EAAE,QACbb,EACE,IAAI,MACF,0EACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["Left", "Right", "beforeEach", "describe", "expect", "it", "vi", "HttpTokenInfoDataSource", "datasource", "httpMock", "mint", "network", "config", "result"]
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=TokenInfoDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ import{ContainerModule as e}from"inversify";import{HttpTokenInfoDataSource as n}from"../../../../modules/solana/token-info/data/HttpTokenInfoDataSource";import{tokenInfoTypes as t}from"../../../../modules/solana/token-info/di/tokenInfoTypes";import{TokenInfoContextLoader as r}from"../../../../modules/solana/token-info/domain/TokenInfoContextLoader";const k=()=>new e(({bind:o})=>{o(t.TokenInfoDataSource).to(n),o(t.TokenInfoContextLoader).to(r)});export{k as tokenInfoModuleFactory};
2
+ //# sourceMappingURL=tokenInfoModuleFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/di/tokenInfoModuleFactory.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpTokenInfoDataSource } from \"@/modules/solana/token-info/data/HttpTokenInfoDataSource\";\nimport { tokenInfoTypes } from \"@/modules/solana/token-info/di/tokenInfoTypes\";\nimport { TokenInfoContextLoader } from \"@/modules/solana/token-info/domain/TokenInfoContextLoader\";\n\nexport const tokenInfoModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(tokenInfoTypes.TokenInfoDataSource).to(HttpTokenInfoDataSource);\n bind(tokenInfoTypes.TokenInfoContextLoader).to(TokenInfoContextLoader);\n });\n"],
5
+ "mappings": "AAAA,OAAS,mBAAAA,MAAuB,YAEhC,OAAS,2BAAAC,MAA+B,2DACxC,OAAS,kBAAAC,MAAsB,gDAC/B,OAAS,0BAAAC,MAA8B,4DAEhC,MAAMC,EAAyB,IACpC,IAAIJ,EAAgB,CAAC,CAAE,KAAAK,CAAK,IAAM,CAChCA,EAAKH,EAAe,mBAAmB,EAAE,GAAGD,CAAuB,EACnEI,EAAKH,EAAe,sBAAsB,EAAE,GAAGC,CAAsB,CACvE,CAAC",
6
+ "names": ["ContainerModule", "HttpTokenInfoDataSource", "tokenInfoTypes", "TokenInfoContextLoader", "tokenInfoModuleFactory", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ const o={TokenInfoDataSource:Symbol.for("TokenInfoDataSource"),TokenInfoContextLoader:Symbol.for("TokenInfoContextLoader")};export{o as tokenInfoTypes};
2
+ //# sourceMappingURL=tokenInfoTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/di/tokenInfoTypes.ts"],
4
+ "sourcesContent": ["export const tokenInfoTypes = {\n TokenInfoDataSource: Symbol.for(\"TokenInfoDataSource\"),\n TokenInfoContextLoader: Symbol.for(\"TokenInfoContextLoader\"),\n};\n"],
5
+ "mappings": "AAAO,MAAMA,EAAiB,CAC5B,oBAAqB,OAAO,IAAI,qBAAqB,EACrD,uBAAwB,OAAO,IAAI,wBAAwB,CAC7D",
6
+ "names": ["tokenInfoTypes"]
7
+ }
@@ -0,0 +1,2 @@
1
+ var v=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var u=(i,o,r,e)=>{for(var t=e>1?void 0:e?h(o,r):o,s=i.length-1,a;s>=0;s--)(a=i[s])&&(t=(e?a(o,r,t):a(t))||t);return e&&t&&v(o,r,t),t},l=(i,o)=>(r,e)=>o(r,e,i);import{inject as p,injectable as x}from"inversify";import{array as R,Codec as L,optional as P,string as y}from"purify-ts";import{configTypes as C}from"../../../../config/di/configTypes";import{pkiTypes as E}from"../../../../modules/multichain/pki/di/pkiTypes";import{KeyId as N}from"../../../../modules/multichain/pki/model/KeyId";import{KeyUsage as M}from"../../../../modules/multichain/pki/model/KeyUsage";import{tokenInfoTypes as w}from"../../../../modules/solana/token-info/di/tokenInfoTypes";import{ClearSignContextType as d}from"../../../../shared/model/ClearSignContext";import{loadCertificateResult as K}from"../../../../shared/utils/certificateResult";import{deviceModelIdCodec as _}from"../../../../shared/utils/deviceModelIdCodec";const F=[d.SOLANA_TOKEN_INFO],b="solana-mainnet",D=L.interface({deviceModelId:_,mints:R(y),network:P(y)});let f=class{constructor(o,r,e,t){this.dataSource=o;this.config=r;this.certificateLoader=e;this.logger=t("TokenInfoContextLoader")}logger;canHandle(o,r){return F.every(e=>r.includes(e))?D.decode(o).caseOf({Left:()=>!1,Right:({mints:e})=>e.length>0&&e.every(t=>t.length>0)}):!1}async load(o){const r=o.network||b,e=Array.from(new Set(o.mints));this.logger.debug("[load] Fetching TOKEN_INFO descriptors",{data:{network:r,mintCount:e.length}});const t=K(this.certificateLoader,{keyId:N.TokenMetadataKey,keyUsage:M.CoinMeta,targetDevice:o.deviceModelId}),s=Promise.all(e.map(async n=>({mint:n,either:await this.dataSource.getTokenInfo({mint:n,network:r})}))),[a,I]=await Promise.all([t,s]);if(!a.ok||!a.value){const n=a.ok?new Error("[ContextModule] TokenInfoContextLoader: certificate is missing"):a.error;return this.logger.warn("[load] TOKEN_INFO certificate unavailable",{data:{error:n.message}}),e.map(()=>({type:d.ERROR,error:n}))}const T=a.value,g=this.config.cal.mode??"prod";return I.map(({mint:n,either:k})=>k.caseOf({Left:c=>(this.logger.warn("[load] TOKEN_INFO fetch failed",{data:{mint:n,error:c.message}}),{type:d.ERROR,error:c}),Right:c=>{const m=c.descriptor.signatures[g];if(!m){const O=new Error(`[ContextModule] TokenInfoContextLoader: missing '${g}' signature for mint ${n}`);return this.logger.warn("[load] TOKEN_INFO missing signature",{data:{mint:n,mode:g}}),{type:d.ERROR,error:O}}const S={mint:n,descriptor:{data:c.descriptor.data,signature:m}};return{type:d.SOLANA_TOKEN_INFO,payload:S,certificate:T}}}))}};f=u([x(),l(0,p(w.TokenInfoDataSource)),l(1,p(C.Config)),l(2,p(E.PkiCertificateLoader)),l(3,p(C.ContextModuleLoggerFactory))],f);export{f as TokenInfoContextLoader};
2
+ //# sourceMappingURL=TokenInfoContextLoader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/domain/TokenInfoContextLoader.ts"],
4
+ "sourcesContent": ["import {\n type DeviceModelId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { array, Codec, optional, string } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/modules/multichain/pki/model/KeyId\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { type SolanaTokenInfoPayload } from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type TokenInfoDataSource,\n type TokenInfoResult,\n} from \"@/modules/solana/token-info/data/TokenInfoDataSource\";\nimport { tokenInfoTypes } from \"@/modules/solana/token-info/di/tokenInfoTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { loadCertificateResult } from \"@/shared/utils/certificateResult\";\nimport { deviceModelIdCodec } from \"@/shared/utils/deviceModelIdCodec\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TOKEN_INFO,\n];\n\nconst NETWORK_DEFAULT = \"solana-mainnet\";\n\n/**\n * Input shape for the new clear-signing token-info lookup. The dedup key\n * is the on-chain **mint pubkey**, not the legacy Ledger CAL internal id\n * used by the original {@link TokenContextLoader}.\n */\nexport type SolanaTokenInfoContextInput = {\n deviceModelId: DeviceModelId;\n mints: string[];\n network?: string;\n};\n\nconst solanaTokenInfoInputCodec = Codec.interface({\n deviceModelId: deviceModelIdCodec,\n mints: array(string),\n network: optional(string),\n});\n\n@injectable()\nexport class TokenInfoContextLoader\n implements ContextLoader<SolanaTokenInfoContextInput>\n{\n private readonly logger: LoggerPublisherService;\n\n constructor(\n @inject(tokenInfoTypes.TokenInfoDataSource)\n private readonly dataSource: TokenInfoDataSource,\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"TokenInfoContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTokenInfoContextInput {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) return false;\n return solanaTokenInfoInputCodec.decode(input).caseOf({\n Left: () => false,\n Right: ({ mints }) =>\n mints.length > 0 && mints.every((m) => m.length > 0),\n });\n }\n\n public async load(\n input: SolanaTokenInfoContextInput,\n ): Promise<ClearSignContext[]> {\n const network = input.network || NETWORK_DEFAULT;\n const uniqueMints = Array.from(new Set(input.mints));\n\n this.logger.debug(\"[load] Fetching TOKEN_INFO descriptors\", {\n data: { network, mintCount: uniqueMints.length },\n });\n\n // Cert load and per-mint fetches are independent \u2014 kick them off\n // together. The tagged-Result wrapper on the cert lets us still\n // return per-mint ERROR contexts on PKI failure without dropping\n // the data fetches that already started.\n const certPromise = loadCertificateResult(this.certificateLoader, {\n keyId: KeyId.TokenMetadataKey,\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: input.deviceModelId,\n });\n\n const dataPromise = Promise.all(\n uniqueMints.map(async (mint) => ({\n mint,\n either: await this.dataSource.getTokenInfo({ mint, network }),\n })),\n );\n\n const [certResult, results] = await Promise.all([certPromise, dataPromise]);\n\n if (!certResult.ok || !certResult.value) {\n const error = certResult.ok\n ? new Error(\n \"[ContextModule] TokenInfoContextLoader: certificate is missing\",\n )\n : certResult.error;\n this.logger.warn(\"[load] TOKEN_INFO certificate unavailable\", {\n data: { error: error.message },\n });\n return uniqueMints.map(() => ({\n type: ClearSignContextType.ERROR,\n error,\n }));\n }\n const certificate = certResult.value;\n\n const mode = this.config.cal.mode ?? \"prod\";\n\n return results.map(({ mint, either }) =>\n either.caseOf<ClearSignContext>({\n Left: (error) => {\n this.logger.warn(\"[load] TOKEN_INFO fetch failed\", {\n data: { mint, error: error.message },\n });\n return { type: ClearSignContextType.ERROR, error };\n },\n Right: (value: TokenInfoResult) => {\n const signature = value.descriptor.signatures[mode];\n if (!signature) {\n const error = new Error(\n `[ContextModule] TokenInfoContextLoader: missing '${mode}' signature for mint ${mint}`,\n );\n this.logger.warn(\"[load] TOKEN_INFO missing signature\", {\n data: { mint, mode },\n });\n return { type: ClearSignContextType.ERROR, error };\n }\n const payload: SolanaTokenInfoPayload = {\n mint,\n descriptor: {\n data: value.descriptor.data,\n signature,\n },\n };\n return {\n type: ClearSignContextType.SOLANA_TOKEN_INFO,\n payload,\n certificate,\n };\n },\n }),\n );\n }\n}\n"],
5
+ "mappings": "iOAIA,OAAS,UAAAA,EAAQ,cAAAC,MAAkB,YACnC,OAAS,SAAAC,EAAO,SAAAC,EAAO,YAAAC,EAAU,UAAAC,MAAc,YAE/C,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,YAAAC,MAAgB,uCAEzB,OAAS,SAAAC,MAAa,uCACtB,OAAS,YAAAC,MAAgB,0CAMzB,OAAS,kBAAAC,MAAsB,gDAE/B,OAEE,wBAAAC,MACK,kCACP,OAAS,yBAAAC,MAA6B,mCACtC,OAAS,sBAAAC,MAA0B,oCAEnC,MAAMC,EAA0C,CAC9CC,EAAqB,iBACvB,EAEMC,EAAkB,iBAalBC,EAA4BC,EAAM,UAAU,CAChD,cAAeC,EACf,MAAOC,EAAMC,CAAM,EACnB,QAASC,EAASD,CAAM,CAC1B,CAAC,EAGM,IAAME,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEAC,EAEjBC,EACA,CAPiB,gBAAAH,EAEA,YAAAC,EAEA,uBAAAC,EAIjB,KAAK,OAASC,EAAc,wBAAwB,CACtD,CAbiB,OAeV,UACLC,EACAC,EACsC,CACtC,OAAKf,EAAgB,MAAOgB,GAAMD,EAAc,SAASC,CAAC,CAAC,EACpDb,EAA0B,OAAOW,CAAK,EAAE,OAAO,CACpD,KAAM,IAAM,GACZ,MAAO,CAAC,CAAE,MAAAG,CAAM,IACdA,EAAM,OAAS,GAAKA,EAAM,MAAOC,GAAMA,EAAE,OAAS,CAAC,CACvD,CAAC,EALoE,EAMvE,CAEA,MAAa,KACXJ,EAC6B,CAC7B,MAAMK,EAAUL,EAAM,SAAWZ,EAC3BkB,EAAc,MAAM,KAAK,IAAI,IAAIN,EAAM,KAAK,CAAC,EAEnD,KAAK,OAAO,MAAM,yCAA0C,CAC1D,KAAM,CAAE,QAAAK,EAAS,UAAWC,EAAY,MAAO,CACjD,CAAC,EAMD,MAAMC,EAAcC,EAAsB,KAAK,kBAAmB,CAChE,MAAOC,EAAM,iBACb,SAAUC,EAAS,SACnB,aAAcV,EAAM,aACtB,CAAC,EAEKW,EAAc,QAAQ,IAC1BL,EAAY,IAAI,MAAOM,IAAU,CAC/B,KAAAA,EACA,OAAQ,MAAM,KAAK,WAAW,aAAa,CAAE,KAAAA,EAAM,QAAAP,CAAQ,CAAC,CAC9D,EAAE,CACJ,EAEM,CAACQ,EAAYC,CAAO,EAAI,MAAM,QAAQ,IAAI,CAACP,EAAaI,CAAW,CAAC,EAE1E,GAAI,CAACE,EAAW,IAAM,CAACA,EAAW,MAAO,CACvC,MAAME,EAAQF,EAAW,GACrB,IAAI,MACF,gEACF,EACAA,EAAW,MACf,YAAK,OAAO,KAAK,4CAA6C,CAC5D,KAAM,CAAE,MAAOE,EAAM,OAAQ,CAC/B,CAAC,EACMT,EAAY,IAAI,KAAO,CAC5B,KAAMnB,EAAqB,MAC3B,MAAA4B,CACF,EAAE,CACJ,CACA,MAAMC,EAAcH,EAAW,MAEzBI,EAAO,KAAK,OAAO,IAAI,MAAQ,OAErC,OAAOH,EAAQ,IAAI,CAAC,CAAE,KAAAF,EAAM,OAAAM,CAAO,IACjCA,EAAO,OAAyB,CAC9B,KAAOH,IACL,KAAK,OAAO,KAAK,iCAAkC,CACjD,KAAM,CAAE,KAAAH,EAAM,MAAOG,EAAM,OAAQ,CACrC,CAAC,EACM,CAAE,KAAM5B,EAAqB,MAAO,MAAA4B,CAAM,GAEnD,MAAQI,GAA2B,CACjC,MAAMC,EAAYD,EAAM,WAAW,WAAWF,CAAI,EAClD,GAAI,CAACG,EAAW,CACd,MAAML,EAAQ,IAAI,MAChB,oDAAoDE,CAAI,wBAAwBL,CAAI,EACtF,EACA,YAAK,OAAO,KAAK,sCAAuC,CACtD,KAAM,CAAE,KAAAA,EAAM,KAAAK,CAAK,CACrB,CAAC,EACM,CAAE,KAAM9B,EAAqB,MAAO,MAAA4B,CAAM,CACnD,CACA,MAAMM,EAAkC,CACtC,KAAAT,EACA,WAAY,CACV,KAAMO,EAAM,WAAW,KACvB,UAAAC,CACF,CACF,EACA,MAAO,CACL,KAAMjC,EAAqB,kBAC3B,QAAAkC,EACA,YAAAL,CACF,CACF,CACF,CAAC,CACH,CACF,CACF,EAhHarB,EAAN2B,EAAA,CADNC,EAAW,EAOPC,EAAA,EAAAC,EAAOC,EAAe,mBAAmB,GAEzCF,EAAA,EAAAC,EAAOE,EAAY,MAAM,GAEzBH,EAAA,EAAAC,EAAOG,EAAS,oBAAoB,GAEpCJ,EAAA,EAAAC,EAAOE,EAAY,0BAA0B,IAZrChC",
6
+ "names": ["inject", "injectable", "array", "Codec", "optional", "string", "configTypes", "pkiTypes", "KeyId", "KeyUsage", "tokenInfoTypes", "ClearSignContextType", "loadCertificateResult", "deviceModelIdCodec", "SUPPORTED_TYPES", "ClearSignContextType", "NETWORK_DEFAULT", "solanaTokenInfoInputCodec", "Codec", "deviceModelIdCodec", "array", "string", "optional", "TokenInfoContextLoader", "dataSource", "config", "certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "mints", "m", "network", "uniqueMints", "certPromise", "loadCertificateResult", "KeyId", "KeyUsage", "dataPromise", "mint", "certResult", "results", "error", "certificate", "mode", "either", "value", "signature", "payload", "__decorateClass", "injectable", "__decorateParam", "inject", "tokenInfoTypes", "configTypes", "pkiTypes"]
7
+ }