@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,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/lifi/domain/LifiContextLoader.test.ts"],
4
- "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport {\n type GetTransactionDescriptorsResponse,\n type LifiDataSource,\n} from \"@/modules/solana/lifi/data/LifiDataSource\";\nimport {\n type SolanaTransactionDescriptorList,\n type SolanaTransactionDescriptorRaw,\n} from \"@/modules/solana/model/SolanaContextTypes\";\nimport { type SolanaTransactionDescriptor } from \"@/modules/solana/model/SolanaPayloads\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { LifiContextLoader } from \"./LifiContextLoader\";\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: 13,\n payload: new Uint8Array([0x01, 0x02]),\n};\n\nconst mockConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com\",\n mode: \"test\",\n branch: \"main\",\n },\n} as ContextModuleServiceConfig;\n\ndescribe(\"LifiContextLoader\", () => {\n let mockDataSource: LifiDataSource;\n let mockCertificateLoader: PkiCertificateLoader;\n\n const makeRawDescriptor = (\n data: string,\n sig = \"deadbeef\",\n ): SolanaTransactionDescriptorRaw => ({\n data,\n descriptorType: \"swap_template\",\n descriptorVersion: \"v1\",\n signatures: { test: sig, prod: `prod_${sig}` },\n });\n\n const makeResolvedDescriptor = (\n data: string,\n sig = \"deadbeef\",\n ): SolanaTransactionDescriptor => ({\n data,\n descriptorType: \"swap_template\",\n descriptorVersion: \"v1\",\n signature: sig,\n });\n\n const responseDescriptorsArray: GetTransactionDescriptorsResponse[\"descriptors\"] =\n [\n {\n program_id: \"SomeProgram\",\n discriminator_hex: \"1\",\n descriptor: makeRawDescriptor(\"abc123\"),\n },\n {\n program_id: \"AnotherProgram\",\n // discriminator_hex intentionally omitted -> defaults to \"\"\n descriptor: makeRawDescriptor(\"def456\"),\n },\n ];\n\n const expectedPlucked: SolanaTransactionDescriptorList = {\n \"SomeProgram:1\": makeResolvedDescriptor(\"abc123\"),\n \"AnotherProgram:\": makeResolvedDescriptor(\"def456\"),\n };\n\n const responseInstructionsArray: GetTransactionDescriptorsResponse[\"instructions\"] =\n [\n {\n program_id: \"SomeProgram\",\n discriminator: 1,\n discriminator_hex: \"1\",\n },\n {\n program_id: \"AnotherProgram\",\n // discriminator_hex intentionally omitted\n },\n ];\n\n const txDescriptorsResponse: GetTransactionDescriptorsResponse = {\n id: \"tpl-1\",\n chain_id: 101,\n instructions: responseInstructionsArray,\n descriptors: responseDescriptorsArray,\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n mockDataSource = {\n getTransactionDescriptorsPayload: vi.fn(),\n } as unknown as LifiDataSource;\n mockCertificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n } as unknown as PkiCertificateLoader;\n });\n\n const makeLoader = () =>\n new LifiContextLoader(\n mockDataSource,\n mockConfig,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when templateId is provided and SOLANA_LIFI is in expectedTypes\", () => {\n const loader = makeLoader();\n\n expect(\n loader.canHandle(\n {\n templateId: \"tpl-123\",\n deviceModelId: \"nanoS\" as any,\n },\n [ClearSignContextType.SOLANA_LIFI],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_LIFI is not in expectedTypes\", () => {\n const loader = makeLoader();\n\n expect(\n loader.canHandle({ templateId: \"tpl-123\" } as any, [\n ClearSignContextType.SOLANA_TOKEN,\n ]),\n ).toBe(false);\n });\n\n it(\"returns false when templateId is missing or falsy\", () => {\n const loader = makeLoader();\n\n expect(\n loader.canHandle({ templateId: \"\" } as any, [\n ClearSignContextType.SOLANA_LIFI,\n ]),\n ).toBe(false);\n expect(\n loader.canHandle({ templateId: undefined } as any, [\n ClearSignContextType.SOLANA_LIFI,\n ]),\n ).toBe(false);\n expect(\n loader.canHandle({} as any, [ClearSignContextType.SOLANA_LIFI]),\n ).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"returns an array with an error when datasource returns Left(error)\", async () => {\n const loader = makeLoader();\n const error = new Error(\"boom\");\n\n vi.spyOn(\n mockDataSource,\n \"getTransactionDescriptorsPayload\",\n ).mockResolvedValue(Left(error));\n\n const input = { templateId: \"tpl-err\", deviceModelId: \"nanoS\" as any };\n const result = await loader.load(input);\n\n expect(\n mockDataSource.getTransactionDescriptorsPayload,\n ).toHaveBeenCalledWith({\n templateId: \"tpl-err\",\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n\n it(\"returns SOLANA_LIFI array with plucked descriptors and certificate when datasource returns Right(value)\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(\n mockDataSource,\n \"getTransactionDescriptorsPayload\",\n ).mockResolvedValue(Right(txDescriptorsResponse));\n\n const input = { templateId: \"tpl-ok\", deviceModelId: \"nanoS\" as any };\n const result = await loader.load(input);\n\n expect(\n mockDataSource.getTransactionDescriptorsPayload,\n ).toHaveBeenCalledWith({\n templateId: \"tpl-ok\",\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"swap_template_key\",\n keyUsage: \"swap_template\",\n targetDevice: \"nanoS\",\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.SOLANA_LIFI,\n payload: {\n descriptors: expectedPlucked,\n instructions: [\n { program_id: \"SomeProgram\", discriminator_hex: \"1\" },\n { program_id: \"AnotherProgram\" },\n ],\n },\n certificate: mockCertificate,\n },\n ]);\n });\n });\n\n describe(\"pluckTransactionData (private)\", () => {\n it(\"returns a map keyed by `${program_id}:${discriminator_hex ?? '0'}`\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(\n txDescriptorsResponse,\n );\n\n expect(result).toEqual(expectedPlucked);\n });\n });\n\n describe(\"extractInstructionsMeta (private)\", () => {\n it(\"returns instruction metadata from the API response\", () => {\n const loader = makeLoader();\n const extract = (loader as any).extractInstructionsMeta.bind(loader);\n\n const result = extract(txDescriptorsResponse);\n\n expect(result).toEqual([\n { program_id: \"SomeProgram\", discriminator_hex: \"1\" },\n { program_id: \"AnotherProgram\" },\n ]);\n });\n\n it(\"returns empty array when instructions are missing\", () => {\n const loader = makeLoader();\n const extract = (loader as any).extractInstructionsMeta.bind(loader);\n\n const result = extract({\n ...txDescriptorsResponse,\n instructions: undefined,\n });\n\n expect(result).toEqual([]);\n });\n });\n\n describe(\"pluckTransactionData mode resolution (private)\", () => {\n it(\"resolves signature using config.cal.mode\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(\n txDescriptorsResponse,\n );\n\n expect(result[\"SomeProgram:1\"]?.signature).toBe(\"deadbeef\");\n });\n });\n\n describe(\"real CAL payload (LiFi template 4c694669)\", () => {\n const realApiResponse: GetTransactionDescriptorsResponse = {\n id: \"4c694669\",\n chain_id: 101,\n instructions: [\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator: 1,\n discriminator_hex: \"1\",\n },\n {\n program_id: \"11111111111111111111111111111111\",\n discriminator: 2,\n discriminator_hex: \"2\",\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator: 3.0753642362361016e18,\n discriminator_hex: \"2aade37a97cb17e0\",\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator: 9.339575302786589e18,\n discriminator_hex: \"819cd641339b2148\",\n },\n { program_id: \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\" },\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator: 1,\n discriminator_hex: \"1\",\n },\n { program_id: \"3i5JeuZuUxeKtVysUnwQNGerJP2bSMX9fTFfS4Nxe3Br\" },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator: 2,\n discriminator_hex: \"2\",\n },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator: 3,\n discriminator_hex: \"3\",\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator: 3,\n discriminator_hex: \"3\",\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator: 17,\n discriminator_hex: \"11\",\n },\n { program_id: \"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB\" },\n ],\n descriptors: [\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator_hex: \"1\",\n descriptor: makeRawDescriptor(\"atoken_1\", \"sig_atoken\"),\n },\n {\n program_id: \"11111111111111111111111111111111\",\n discriminator_hex: \"2\",\n descriptor: makeRawDescriptor(\"system_2\", \"sig_system\"),\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"2aade37a97cb17e0\",\n descriptor: makeRawDescriptor(\"jup_route\", \"sig_jup_route\"),\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"819cd641339b2148\",\n descriptor: makeRawDescriptor(\"jup_shared\", \"sig_jup_shared\"),\n },\n {\n program_id: \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\",\n descriptor: makeRawDescriptor(\"memo\", \"sig_memo\"),\n },\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator_hex: \"1\",\n descriptor: makeRawDescriptor(\"atoken_1\", \"sig_atoken\"),\n },\n {\n program_id: \"3i5JeuZuUxeKtVysUnwQNGerJP2bSMX9fTFfS4Nxe3Br\",\n descriptor: makeRawDescriptor(\"3i5jeu\", \"sig_3i5jeu\"),\n },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator_hex: \"2\",\n descriptor: makeRawDescriptor(\"cb_2\", \"sig_cb2\"),\n },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator_hex: \"3\",\n descriptor: makeRawDescriptor(\"cb_3\", \"sig_cb3\"),\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator_hex: \"3\",\n descriptor: makeRawDescriptor(\"tokenkeg_3\", \"sig_tk3\"),\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator_hex: \"11\",\n descriptor: makeRawDescriptor(\"tokenkeg_11\", \"sig_tk11\"),\n },\n {\n program_id: \"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB\",\n descriptor: makeRawDescriptor(\"brdg\", \"sig_brdg\"),\n },\n ],\n };\n\n it(\"produces 11 unique descriptor keys (ATokenGP:1 appears twice but deduplicates)\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(realApiResponse);\n const keys = Object.keys(result);\n\n // 12 descriptors but ATokenGP:1 appears twice -> 11 unique keys\n expect(keys).toHaveLength(11);\n });\n\n it(\"creates distinct keys for same program_id with different discriminators\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(realApiResponse);\n\n // JUP6 has two different discriminators -> two distinct entries\n expect(\n result[\"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:2aade37a97cb17e0\"]\n ?.data,\n ).toBe(\"jup_route\");\n expect(\n result[\"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:819cd641339b2148\"]\n ?.data,\n ).toBe(\"jup_shared\");\n\n // ComputeBudget has discriminator 2 and 3\n expect(\n result[\"ComputeBudget111111111111111111111111111111:2\"]?.data,\n ).toBe(\"cb_2\");\n expect(\n result[\"ComputeBudget111111111111111111111111111111:3\"]?.data,\n ).toBe(\"cb_3\");\n\n // TokenkegQ has discriminator 3 and 11\n expect(\n result[\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA:3\"]?.data,\n ).toBe(\"tokenkeg_3\");\n expect(\n result[\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA:11\"]?.data,\n ).toBe(\"tokenkeg_11\");\n });\n\n it(\"uses :0 suffix for programs without a discriminator\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(realApiResponse);\n\n expect(result[\"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr:\"]?.data).toBe(\n \"memo\",\n );\n expect(\n result[\"3i5JeuZuUxeKtVysUnwQNGerJP2bSMX9fTFfS4Nxe3Br:\"]?.data,\n ).toBe(\"3i5jeu\");\n expect(\n result[\"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB:\"]?.data,\n ).toBe(\"brdg\");\n });\n\n it(\"extracts 12 instruction metadata entries preserving order and discriminators\", () => {\n const loader = makeLoader();\n const extract = (loader as any).extractInstructionsMeta.bind(loader);\n\n const result = extract(realApiResponse);\n\n expect(result).toHaveLength(12);\n\n // First: ATokenGP with discriminator\n expect(result[0]).toEqual({\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator_hex: \"1\",\n });\n // JUP6 route (8-byte discriminator)\n expect(result[2]).toEqual({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"2aade37a97cb17e0\",\n });\n // JUP6 shared (8-byte discriminator)\n expect(result[3]).toEqual({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"819cd641339b2148\",\n });\n // Memo: no discriminator\n expect(result[4]).toEqual({\n program_id: \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\",\n });\n // BrdgN2: no discriminator (last entry)\n expect(result[11]).toEqual({\n program_id: \"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB\",\n });\n });\n\n it(\"load returns full payload with descriptors and instructions from real API response\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(\n mockDataSource,\n \"getTransactionDescriptorsPayload\",\n ).mockResolvedValue(Right(realApiResponse));\n\n const input = { templateId: \"4c694669\", deviceModelId: \"nanoS\" as any };\n const result = await loader.load(input);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.SOLANA_LIFI,\n payload: {\n descriptors: expect.objectContaining({\n \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:2aade37a97cb17e0\":\n expect.objectContaining({ data: \"jup_route\" }),\n \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:819cd641339b2148\":\n expect.objectContaining({ data: \"jup_shared\" }),\n }),\n instructions: expect.arrayContaining([\n expect.objectContaining({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"2aade37a97cb17e0\",\n }),\n expect.objectContaining({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"819cd641339b2148\",\n }),\n ]),\n },\n });\n\n expect(Object.keys((result[0] as any).payload.descriptors)).toHaveLength(\n 11,\n );\n expect((result[0] as any).payload.instructions).toHaveLength(12);\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport {\n type GetTransactionDescriptorsResponse,\n type LifiDataSource,\n} from \"@/modules/solana/lifi/data/LifiDataSource\";\nimport {\n type SolanaTransactionDescriptorList,\n type SolanaTransactionDescriptorRaw,\n} from \"@/modules/solana/model/SolanaContextTypes\";\nimport { type SolanaTransactionDescriptor } from \"@/modules/solana/model/SolanaPayloads\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { LifiContextLoader } from \"./LifiContextLoader\";\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: 13,\n payload: new Uint8Array([0x01, 0x02]),\n};\n\nconst mockConfig = {\n cal: {\n url: \"https://global.api.prd.ledger.com/cal/v1\",\n mode: \"test\",\n branch: \"main\",\n },\n} as ContextModuleServiceConfig;\n\ndescribe(\"LifiContextLoader\", () => {\n let mockDataSource: LifiDataSource;\n let mockCertificateLoader: PkiCertificateLoader;\n\n const makeRawDescriptor = (\n data: string,\n sig = \"deadbeef\",\n ): SolanaTransactionDescriptorRaw => ({\n data,\n descriptorType: \"swap_template\",\n descriptorVersion: \"v1\",\n signatures: { test: sig, prod: `prod_${sig}` },\n });\n\n const makeResolvedDescriptor = (\n data: string,\n sig = \"deadbeef\",\n ): SolanaTransactionDescriptor => ({\n data,\n descriptorType: \"swap_template\",\n descriptorVersion: \"v1\",\n signature: sig,\n });\n\n const responseDescriptorsArray: GetTransactionDescriptorsResponse[\"descriptors\"] =\n [\n {\n program_id: \"SomeProgram\",\n discriminator_hex: \"1\",\n descriptor: makeRawDescriptor(\"abc123\"),\n },\n {\n program_id: \"AnotherProgram\",\n // discriminator_hex intentionally omitted -> defaults to \"\"\n descriptor: makeRawDescriptor(\"def456\"),\n },\n ];\n\n const expectedPlucked: SolanaTransactionDescriptorList = {\n \"SomeProgram:1\": makeResolvedDescriptor(\"abc123\"),\n \"AnotherProgram:\": makeResolvedDescriptor(\"def456\"),\n };\n\n const responseInstructionsArray: GetTransactionDescriptorsResponse[\"instructions\"] =\n [\n {\n program_id: \"SomeProgram\",\n discriminator: 1,\n discriminator_hex: \"1\",\n },\n {\n program_id: \"AnotherProgram\",\n // discriminator_hex intentionally omitted\n },\n ];\n\n const txDescriptorsResponse: GetTransactionDescriptorsResponse = {\n id: \"tpl-1\",\n chain_id: 101,\n instructions: responseInstructionsArray,\n descriptors: responseDescriptorsArray,\n };\n\n beforeEach(() => {\n vi.restoreAllMocks();\n mockDataSource = {\n getTransactionDescriptorsPayload: vi.fn(),\n } as unknown as LifiDataSource;\n mockCertificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n } as unknown as PkiCertificateLoader;\n });\n\n const makeLoader = () =>\n new LifiContextLoader(\n mockDataSource,\n mockConfig,\n mockCertificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when templateId is provided and SOLANA_LIFI is in expectedTypes\", () => {\n const loader = makeLoader();\n\n expect(\n loader.canHandle(\n {\n templateId: \"tpl-123\",\n deviceModelId: \"nanoS\" as any,\n },\n [ClearSignContextType.SOLANA_LIFI],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_LIFI is not in expectedTypes\", () => {\n const loader = makeLoader();\n\n expect(\n loader.canHandle({ templateId: \"tpl-123\" } as any, [\n ClearSignContextType.SOLANA_TOKEN,\n ]),\n ).toBe(false);\n });\n\n it(\"returns false when templateId is missing or falsy\", () => {\n const loader = makeLoader();\n\n expect(\n loader.canHandle({ templateId: \"\" } as any, [\n ClearSignContextType.SOLANA_LIFI,\n ]),\n ).toBe(false);\n expect(\n loader.canHandle({ templateId: undefined } as any, [\n ClearSignContextType.SOLANA_LIFI,\n ]),\n ).toBe(false);\n expect(\n loader.canHandle({} as any, [ClearSignContextType.SOLANA_LIFI]),\n ).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"returns an array with an error when datasource returns Left(error)\", async () => {\n const loader = makeLoader();\n const error = new Error(\"boom\");\n\n vi.spyOn(\n mockDataSource,\n \"getTransactionDescriptorsPayload\",\n ).mockResolvedValue(Left(error));\n\n const input = { templateId: \"tpl-err\", deviceModelId: \"nanoS\" as any };\n const result = await loader.load(input);\n\n expect(\n mockDataSource.getTransactionDescriptorsPayload,\n ).toHaveBeenCalledWith({\n templateId: \"tpl-err\",\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.ERROR,\n error,\n },\n ]);\n });\n\n it(\"returns SOLANA_LIFI array with plucked descriptors and certificate when datasource returns Right(value)\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(\n mockDataSource,\n \"getTransactionDescriptorsPayload\",\n ).mockResolvedValue(Right(txDescriptorsResponse));\n\n const input = { templateId: \"tpl-ok\", deviceModelId: \"nanoS\" as any };\n const result = await loader.load(input);\n\n expect(\n mockDataSource.getTransactionDescriptorsPayload,\n ).toHaveBeenCalledWith({\n templateId: \"tpl-ok\",\n });\n\n expect(mockCertificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"swap_template_key\",\n keyUsage: \"swap_template\",\n targetDevice: \"nanoS\",\n });\n\n expect(result).toEqual([\n {\n type: ClearSignContextType.SOLANA_LIFI,\n payload: {\n descriptors: expectedPlucked,\n instructions: [\n { program_id: \"SomeProgram\", discriminator_hex: \"1\" },\n { program_id: \"AnotherProgram\" },\n ],\n },\n certificate: mockCertificate,\n },\n ]);\n });\n });\n\n describe(\"pluckTransactionData (private)\", () => {\n it(\"returns a map keyed by `${program_id}:${discriminator_hex ?? '0'}`\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(\n txDescriptorsResponse,\n );\n\n expect(result).toEqual(expectedPlucked);\n });\n });\n\n describe(\"extractInstructionsMeta (private)\", () => {\n it(\"returns instruction metadata from the API response\", () => {\n const loader = makeLoader();\n const extract = (loader as any).extractInstructionsMeta.bind(loader);\n\n const result = extract(txDescriptorsResponse);\n\n expect(result).toEqual([\n { program_id: \"SomeProgram\", discriminator_hex: \"1\" },\n { program_id: \"AnotherProgram\" },\n ]);\n });\n\n it(\"returns empty array when instructions are missing\", () => {\n const loader = makeLoader();\n const extract = (loader as any).extractInstructionsMeta.bind(loader);\n\n const result = extract({\n ...txDescriptorsResponse,\n instructions: undefined,\n });\n\n expect(result).toEqual([]);\n });\n });\n\n describe(\"pluckTransactionData mode resolution (private)\", () => {\n it(\"resolves signature using config.cal.mode\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(\n txDescriptorsResponse,\n );\n\n expect(result[\"SomeProgram:1\"]?.signature).toBe(\"deadbeef\");\n });\n });\n\n describe(\"real CAL payload (LiFi template 4c694669)\", () => {\n const realApiResponse: GetTransactionDescriptorsResponse = {\n id: \"4c694669\",\n chain_id: 101,\n instructions: [\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator: 1,\n discriminator_hex: \"1\",\n },\n {\n program_id: \"11111111111111111111111111111111\",\n discriminator: 2,\n discriminator_hex: \"2\",\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator: 3.0753642362361016e18,\n discriminator_hex: \"2aade37a97cb17e0\",\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator: 9.339575302786589e18,\n discriminator_hex: \"819cd641339b2148\",\n },\n { program_id: \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\" },\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator: 1,\n discriminator_hex: \"1\",\n },\n { program_id: \"3i5JeuZuUxeKtVysUnwQNGerJP2bSMX9fTFfS4Nxe3Br\" },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator: 2,\n discriminator_hex: \"2\",\n },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator: 3,\n discriminator_hex: \"3\",\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator: 3,\n discriminator_hex: \"3\",\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator: 17,\n discriminator_hex: \"11\",\n },\n { program_id: \"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB\" },\n ],\n descriptors: [\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator_hex: \"1\",\n descriptor: makeRawDescriptor(\"atoken_1\", \"sig_atoken\"),\n },\n {\n program_id: \"11111111111111111111111111111111\",\n discriminator_hex: \"2\",\n descriptor: makeRawDescriptor(\"system_2\", \"sig_system\"),\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"2aade37a97cb17e0\",\n descriptor: makeRawDescriptor(\"jup_route\", \"sig_jup_route\"),\n },\n {\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"819cd641339b2148\",\n descriptor: makeRawDescriptor(\"jup_shared\", \"sig_jup_shared\"),\n },\n {\n program_id: \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\",\n descriptor: makeRawDescriptor(\"memo\", \"sig_memo\"),\n },\n {\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator_hex: \"1\",\n descriptor: makeRawDescriptor(\"atoken_1\", \"sig_atoken\"),\n },\n {\n program_id: \"3i5JeuZuUxeKtVysUnwQNGerJP2bSMX9fTFfS4Nxe3Br\",\n descriptor: makeRawDescriptor(\"3i5jeu\", \"sig_3i5jeu\"),\n },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator_hex: \"2\",\n descriptor: makeRawDescriptor(\"cb_2\", \"sig_cb2\"),\n },\n {\n program_id: \"ComputeBudget111111111111111111111111111111\",\n discriminator_hex: \"3\",\n descriptor: makeRawDescriptor(\"cb_3\", \"sig_cb3\"),\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator_hex: \"3\",\n descriptor: makeRawDescriptor(\"tokenkeg_3\", \"sig_tk3\"),\n },\n {\n program_id: \"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA\",\n discriminator_hex: \"11\",\n descriptor: makeRawDescriptor(\"tokenkeg_11\", \"sig_tk11\"),\n },\n {\n program_id: \"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB\",\n descriptor: makeRawDescriptor(\"brdg\", \"sig_brdg\"),\n },\n ],\n };\n\n it(\"produces 11 unique descriptor keys (ATokenGP:1 appears twice but deduplicates)\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(realApiResponse);\n const keys = Object.keys(result);\n\n // 12 descriptors but ATokenGP:1 appears twice -> 11 unique keys\n expect(keys).toHaveLength(11);\n });\n\n it(\"creates distinct keys for same program_id with different discriminators\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(realApiResponse);\n\n // JUP6 has two different discriminators -> two distinct entries\n expect(\n result[\"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:2aade37a97cb17e0\"]\n ?.data,\n ).toBe(\"jup_route\");\n expect(\n result[\"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:819cd641339b2148\"]\n ?.data,\n ).toBe(\"jup_shared\");\n\n // ComputeBudget has discriminator 2 and 3\n expect(\n result[\"ComputeBudget111111111111111111111111111111:2\"]?.data,\n ).toBe(\"cb_2\");\n expect(\n result[\"ComputeBudget111111111111111111111111111111:3\"]?.data,\n ).toBe(\"cb_3\");\n\n // TokenkegQ has discriminator 3 and 11\n expect(\n result[\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA:3\"]?.data,\n ).toBe(\"tokenkeg_3\");\n expect(\n result[\"TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA:11\"]?.data,\n ).toBe(\"tokenkeg_11\");\n });\n\n it(\"uses :0 suffix for programs without a discriminator\", () => {\n const loader = makeLoader();\n const pluck = (loader as any).pluckTransactionData.bind(loader);\n\n const result: SolanaTransactionDescriptorList = pluck(realApiResponse);\n\n expect(result[\"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr:\"]?.data).toBe(\n \"memo\",\n );\n expect(\n result[\"3i5JeuZuUxeKtVysUnwQNGerJP2bSMX9fTFfS4Nxe3Br:\"]?.data,\n ).toBe(\"3i5jeu\");\n expect(\n result[\"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB:\"]?.data,\n ).toBe(\"brdg\");\n });\n\n it(\"extracts 12 instruction metadata entries preserving order and discriminators\", () => {\n const loader = makeLoader();\n const extract = (loader as any).extractInstructionsMeta.bind(loader);\n\n const result = extract(realApiResponse);\n\n expect(result).toHaveLength(12);\n\n // First: ATokenGP with discriminator\n expect(result[0]).toEqual({\n program_id: \"ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL\",\n discriminator_hex: \"1\",\n });\n // JUP6 route (8-byte discriminator)\n expect(result[2]).toEqual({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"2aade37a97cb17e0\",\n });\n // JUP6 shared (8-byte discriminator)\n expect(result[3]).toEqual({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"819cd641339b2148\",\n });\n // Memo: no discriminator\n expect(result[4]).toEqual({\n program_id: \"MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr\",\n });\n // BrdgN2: no discriminator (last entry)\n expect(result[11]).toEqual({\n program_id: \"BrdgN2RPzEMWF96ZbnnJaUtQDQx7VRXYaHHbYCBvceWB\",\n });\n });\n\n it(\"load returns full payload with descriptors and instructions from real API response\", async () => {\n const loader = makeLoader();\n\n vi.spyOn(\n mockDataSource,\n \"getTransactionDescriptorsPayload\",\n ).mockResolvedValue(Right(realApiResponse));\n\n const input = { templateId: \"4c694669\", deviceModelId: \"nanoS\" as any };\n const result = await loader.load(input);\n\n expect(result).toHaveLength(1);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.SOLANA_LIFI,\n payload: {\n descriptors: expect.objectContaining({\n \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:2aade37a97cb17e0\":\n expect.objectContaining({ data: \"jup_route\" }),\n \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4:819cd641339b2148\":\n expect.objectContaining({ data: \"jup_shared\" }),\n }),\n instructions: expect.arrayContaining([\n expect.objectContaining({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"2aade37a97cb17e0\",\n }),\n expect.objectContaining({\n program_id: \"JUP6LkbZbjS1jKKwapdHNy74zcZ3tLUZoi5QNyVTaV4\",\n discriminator_hex: \"819cd641339b2148\",\n }),\n ]),\n },\n });\n\n expect(Object.keys((result[0] as any).payload.descriptors)).toHaveLength(\n 11,\n );\n expect((result[0] as any).payload.instructions).toHaveLength(12);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_purify_ts", "import_vitest", "import_ClearSignContext", "import_LifiContextLoader", "mockLoggerFactory", "mockCertificate", "mockConfig", "mockDataSource", "mockCertificateLoader", "makeRawDescriptor", "data", "sig", "makeResolvedDescriptor", "responseDescriptorsArray", "expectedPlucked", "txDescriptorsResponse", "makeLoader", "loader", "error", "input", "result", "realApiResponse", "keys"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var S=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var y=(a,e)=>{for(var n in e)S(a,n,{get:e[n],enumerable:!0})},T=(a,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of c(e))!p.call(a,t)&&t!==n&&S(a,t,{get:()=>e[t],enumerable:!(i=r(e,t))||i.enumerable});return a};var s=a=>T(S({},"__esModule",{value:!0}),a);var x={};y(x,{SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES:()=>l,SolanaContextType:()=>C,isSolanaContextSuccess:()=>A});module.exports=s(x);var o=require("../../../shared/model/ClearSignContext");const C={TOKEN:o.ClearSignContextType.SOLANA_TOKEN,LIFI:o.ClearSignContextType.SOLANA_LIFI,TRUSTED_NAME:o.ClearSignContextType.SOLANA_TRUSTED_NAME,TRANSACTION_CHECK:o.ClearSignContextType.SOLANA_TRANSACTION_CHECK},l=new Set(Object.values(C));function A(a){return l.has(a.type)}0&&(module.exports={SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES,SolanaContextType,isSolanaContextSuccess});
1
+ "use strict";var S=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var y=(t,e)=>{for(var n in e)S(t,n,{get:e[n],enumerable:!0})},N=(t,e,n,l)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of A(e))!c.call(t,o)&&o!==n&&S(t,o,{get:()=>e[o],enumerable:!(l=T(e,o))||l.enumerable});return t};var p=t=>N(S({},"__esModule",{value:!0}),t);var O={};y(O,{SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES:()=>r,SolanaContextType:()=>i,SolanaInstructionSubstructureKind:()=>C.SolanaInstructionSubstructureKind,isSolanaContextSuccess:()=>_});module.exports=p(O);var a=require("../../../shared/model/ClearSignContext"),C=require("../../../modules/solana/model/SolanaPayloads");const i={TOKEN:a.ClearSignContextType.SOLANA_TOKEN,LIFI:a.ClearSignContextType.SOLANA_LIFI,TRUSTED_NAME:a.ClearSignContextType.SOLANA_TRUSTED_NAME,BASIC_TRUSTED_NAME:a.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,TRANSACTION_CHECK:a.ClearSignContextType.SOLANA_TRANSACTION_CHECK,INSTRUCTION_INFO:a.ClearSignContextType.SOLANA_INSTRUCTION_INFO,ENUM_VARIANT:a.ClearSignContextType.SOLANA_ENUM_VARIANT,TOKEN_INFO:a.ClearSignContextType.SOLANA_TOKEN_INFO,TOKEN_ACCOUNT_STATE:a.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,ALT_RESOLUTION:a.ClearSignContextType.SOLANA_ALT_RESOLUTION},r=new Set(Object.values(i));function _(t){return r.has(t.type)}0&&(module.exports={SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES,SolanaContextType,SolanaInstructionSubstructureKind,isSolanaContextSuccess});
2
2
  //# sourceMappingURL=SolanaClearSignContext.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/solana/model/SolanaClearSignContext.ts"],
4
- "sourcesContent": ["import { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport {\n type SolanaLifiPayload,\n type SolanaTokenData,\n type SolanaTransactionCheckPayload,\n} from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\n// Re-export Solana payload types so consumers can import from this file\nexport type {\n SolanaLifiInstructionMeta,\n SolanaLifiPayload,\n SolanaTokenData,\n SolanaTransactionCheckPayload,\n SolanaTransactionDescriptor,\n} from \"@/modules/solana/model/SolanaPayloads\";\n\n/**\n * Solana-specific payload overrides \u2014 contributed to the shared\n * ClearSignContextSuccessPayloads map at the integration boundary.\n */\nexport type SolanaPayloadOverrides = {\n [ClearSignContextType.SOLANA_TOKEN]: {\n payload: SolanaTokenData;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_LIFI]: {\n payload: SolanaLifiPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRUSTED_NAME]: {\n payload: Uint8Array;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRANSACTION_CHECK]: {\n payload: SolanaTransactionCheckPayload;\n certificate?: PkiCertificate;\n };\n};\n\nexport const SolanaContextType = {\n TOKEN: ClearSignContextType.SOLANA_TOKEN,\n LIFI: ClearSignContextType.SOLANA_LIFI,\n TRUSTED_NAME: ClearSignContextType.SOLANA_TRUSTED_NAME,\n TRANSACTION_CHECK: ClearSignContextType.SOLANA_TRANSACTION_CHECK,\n} as const;\n\n/**\n * Union of all Solana-relevant success context types.\n */\nexport type SolanaClearSignContextSuccessType =\n (typeof SolanaContextType)[keyof typeof SolanaContextType];\n\n/**\n * A ClearSignContextSuccess narrowed to only Solana-relevant types.\n */\nexport type SolanaClearSignContextSuccess =\n ClearSignContextSuccess<SolanaClearSignContextSuccessType>;\n\n/**\n * Set of all Solana-relevant success ClearSignContextType values.\n * Used by the type guard below to filter out non-Solana contexts at runtime.\n */\nexport const SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES =\n new Set<ClearSignContextType>(Object.values(SolanaContextType));\n\n/**\n * Type guard that narrows a ClearSignContextSuccess to a\n * SolanaClearSignContextSuccess, filtering out non-Solana types.\n */\nexport function isSolanaContextSuccess(\n ctx: ClearSignContext,\n): ctx is SolanaClearSignContextSuccess {\n return SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES.has(ctx.type);\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6CAAAE,EAAA,sBAAAC,EAAA,2BAAAC,IAAA,eAAAC,EAAAL,GAMA,IAAAM,EAIO,2CAkCA,MAAMH,EAAoB,CAC/B,MAAO,uBAAqB,aAC5B,KAAM,uBAAqB,YAC3B,aAAc,uBAAqB,oBACnC,kBAAmB,uBAAqB,wBAC1C,EAkBaD,EACX,IAAI,IAA0B,OAAO,OAAOC,CAAiB,CAAC,EAMzD,SAASC,EACdG,EACsC,CACtC,OAAOL,EAAwC,IAAIK,EAAI,IAAI,CAC7D",
6
- "names": ["SolanaClearSignContext_exports", "__export", "SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES", "SolanaContextType", "isSolanaContextSuccess", "__toCommonJS", "import_ClearSignContext", "ctx"]
4
+ "sourcesContent": ["import { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport {\n type SolanaAltResolutionPayload,\n type SolanaEnumVariantPayload,\n type SolanaInstructionInfoPayload,\n type SolanaLifiPayload,\n type SolanaTokenAccountStatePayload,\n type SolanaTokenData,\n type SolanaTokenInfoPayload,\n type SolanaTransactionCheckPayload,\n} from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContext,\n type ClearSignContextSuccess,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\n// Re-export Solana payload types so consumers can import from this file\nexport type {\n SolanaAltResolutionPayload,\n SolanaCalAccountReset,\n SolanaCalDisplayField,\n SolanaCalMintAssociation,\n SolanaCalTokenValue,\n SolanaCalTypePoolEntry,\n SolanaCalValue,\n SolanaCalValueFlowPort,\n SolanaEnumVariantPayload,\n SolanaInstructionEnumVariant,\n SolanaInstructionInfoPayload,\n SolanaInstructionSubstructure,\n SolanaLifiInstructionMeta,\n SolanaLifiPayload,\n SolanaSignedDescriptor,\n SolanaTokenAccountStatePayload,\n SolanaTokenData,\n SolanaTokenInfoPayload,\n SolanaTransactionCheckPayload,\n SolanaTransactionDescriptor,\n} from \"@/modules/solana/model/SolanaPayloads\";\nexport { SolanaInstructionSubstructureKind } from \"@/modules/solana/model/SolanaPayloads\";\n\n/**\n * Solana-specific payload overrides \u2014 contributed to the shared\n * ClearSignContextSuccessPayloads map at the integration boundary.\n */\nexport type SolanaPayloadOverrides = {\n [ClearSignContextType.SOLANA_TOKEN]: {\n payload: SolanaTokenData;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_LIFI]: {\n payload: SolanaLifiPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRUSTED_NAME]: {\n payload: Uint8Array;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME]: {\n payload: Uint8Array;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TRANSACTION_CHECK]: {\n payload: SolanaTransactionCheckPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_INSTRUCTION_INFO]: {\n payload: SolanaInstructionInfoPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_ENUM_VARIANT]: {\n payload: SolanaEnumVariantPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TOKEN_INFO]: {\n payload: SolanaTokenInfoPayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE]: {\n payload: SolanaTokenAccountStatePayload;\n certificate?: PkiCertificate;\n };\n [ClearSignContextType.SOLANA_ALT_RESOLUTION]: {\n payload: SolanaAltResolutionPayload;\n certificate?: PkiCertificate;\n };\n};\n\nexport const SolanaContextType = {\n TOKEN: ClearSignContextType.SOLANA_TOKEN,\n LIFI: ClearSignContextType.SOLANA_LIFI,\n TRUSTED_NAME: ClearSignContextType.SOLANA_TRUSTED_NAME,\n BASIC_TRUSTED_NAME: ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,\n TRANSACTION_CHECK: ClearSignContextType.SOLANA_TRANSACTION_CHECK,\n INSTRUCTION_INFO: ClearSignContextType.SOLANA_INSTRUCTION_INFO,\n ENUM_VARIANT: ClearSignContextType.SOLANA_ENUM_VARIANT,\n TOKEN_INFO: ClearSignContextType.SOLANA_TOKEN_INFO,\n TOKEN_ACCOUNT_STATE: ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n ALT_RESOLUTION: ClearSignContextType.SOLANA_ALT_RESOLUTION,\n} as const;\n\n/**\n * Union of all Solana-relevant success context types.\n */\nexport type SolanaClearSignContextSuccessType =\n (typeof SolanaContextType)[keyof typeof SolanaContextType];\n\n/**\n * A ClearSignContextSuccess narrowed to only Solana-relevant types.\n */\nexport type SolanaClearSignContextSuccess =\n ClearSignContextSuccess<SolanaClearSignContextSuccessType>;\n\n/**\n * Set of all Solana-relevant success ClearSignContextType values.\n * Used by the type guard below to filter out non-Solana contexts at runtime.\n */\nexport const SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES =\n new Set<ClearSignContextType>(Object.values(SolanaContextType));\n\n/**\n * Type guard that narrows a ClearSignContextSuccess to a\n * SolanaClearSignContextSuccess, filtering out non-Solana types.\n */\nexport function isSolanaContextSuccess(\n ctx: ClearSignContext,\n): ctx is SolanaClearSignContextSuccess {\n return SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES.has(ctx.type);\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6CAAAE,EAAA,sBAAAC,EAAA,qGAAAC,IAAA,eAAAC,EAAAL,GAWA,IAAAM,EAIO,2CAyBPC,EAAkD,iDAiD3C,MAAMJ,EAAoB,CAC/B,MAAO,uBAAqB,aAC5B,KAAM,uBAAqB,YAC3B,aAAc,uBAAqB,oBACnC,mBAAoB,uBAAqB,0BACzC,kBAAmB,uBAAqB,yBACxC,iBAAkB,uBAAqB,wBACvC,aAAc,uBAAqB,oBACnC,WAAY,uBAAqB,kBACjC,oBAAqB,uBAAqB,2BAC1C,eAAgB,uBAAqB,qBACvC,EAkBaD,EACX,IAAI,IAA0B,OAAO,OAAOC,CAAiB,CAAC,EAMzD,SAASC,EACdI,EACsC,CACtC,OAAON,EAAwC,IAAIM,EAAI,IAAI,CAC7D",
6
+ "names": ["SolanaClearSignContext_exports", "__export", "SOLANA_CLEAR_SIGN_CONTEXT_SUCCESS_TYPES", "SolanaContextType", "isSolanaContextSuccess", "__toCommonJS", "import_ClearSignContext", "import_SolanaPayloads", "ctx"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var c=(e,t,a,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of i(t))!S.call(e,n)&&n!==a&&r(e,n,{get:()=>t[n],enumerable:!(o=s(t,n))||o.enumerable});return e};var p=e=>c(r({},"__esModule",{value:!0}),e);var C={};module.exports=p(C);
1
+ "use strict";var r=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var i=(t,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of s(e))!C.call(t,n)&&n!==a&&r(t,n,{get:()=>e[n],enumerable:!(o=S(e,n))||o.enumerable});return t};var c=t=>i(r({},"__esModule",{value:!0}),t);var p={};module.exports=c(p);
2
2
  //# sourceMappingURL=SolanaContextTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/solana/model/SolanaContextTypes.ts"],
4
- "sourcesContent": ["import { type SolanaTransactionDescriptor } from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContextError,\n type ClearSignContextSuccess,\n type ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport type SolanaTransactionDescriptorRaw = {\n data: string;\n descriptorType: string;\n descriptorVersion: string;\n signatures: {\n prod?: string;\n test?: string;\n };\n};\n\nexport type SolanaLifiDescriptorEntry = {\n program_id: string;\n discriminator_hex?: string;\n descriptor: SolanaTransactionDescriptorRaw;\n};\n\nexport type GetTransactionDescriptorsResponse = {\n id: string;\n chain_id: number;\n instructions: Array<{\n program_id: string;\n discriminator?: number;\n discriminator_hex?: string;\n }>;\n descriptors: SolanaLifiDescriptorEntry[];\n};\n\nexport type SolanaTransactionDescriptorList = Record<\n string,\n SolanaTransactionDescriptor\n>;\n\nexport type SolanaContextSuccessType =\n | ClearSignContextType.SOLANA_TOKEN\n | ClearSignContextType.SOLANA_LIFI\n | ClearSignContextType.SOLANA_TRANSACTION_CHECK;\n\nexport type SolanaContextSuccess<\n T extends SolanaContextSuccessType = SolanaContextSuccessType,\n> = ClearSignContextSuccess<T>;\n\nexport type SolanaContextError = ClearSignContextError;\n\nexport type SolanaContext = SolanaContextSuccess | SolanaContextError;\n\nexport type SolanaTokenContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN>;\n\nexport type SolanaLifiContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_LIFI>;\n\nexport type SolanaTransactionCheckContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TRANSACTION_CHECK>;\n\nexport type SolanaTokenContextResult =\n | SolanaTokenContextSuccess\n | SolanaContextError;\n\nexport type SolanaLifiContextResult =\n | SolanaLifiContextSuccess\n | SolanaContextError;\n\nexport type SolanaTransactionCheckContextResult =\n | SolanaTransactionCheckContextSuccess\n | SolanaContextError;\n\nexport type LoaderResult =\n | SolanaTokenContextResult\n | SolanaLifiContextResult\n | SolanaTransactionCheckContextResult;\n"],
4
+ "sourcesContent": ["import { type SolanaTransactionDescriptor } from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type ClearSignContextError,\n type ClearSignContextSuccess,\n type ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\n\nexport type SolanaTransactionDescriptorRaw = {\n data: string;\n descriptorType: string;\n descriptorVersion: string;\n signatures: {\n prod?: string;\n test?: string;\n };\n};\n\nexport type SolanaLifiDescriptorEntry = {\n program_id: string;\n discriminator_hex?: string;\n descriptor: SolanaTransactionDescriptorRaw;\n};\n\nexport type GetTransactionDescriptorsResponse = {\n id: string;\n chain_id: number;\n instructions: Array<{\n program_id: string;\n discriminator?: number;\n discriminator_hex?: string;\n }>;\n descriptors: SolanaLifiDescriptorEntry[];\n};\n\nexport type SolanaTransactionDescriptorList = Record<\n string,\n SolanaTransactionDescriptor\n>;\n\n// The signer registry (`provideContextRegistry.ts`) uses a required mapped\n// type over this union, so every member listed here MUST have a matching\n// provide handler in the signer. The generic clear-signing types below are\n// declared together with their handlers\nexport type SolanaContextSuccessType =\n | ClearSignContextType.SOLANA_TOKEN\n | ClearSignContextType.SOLANA_LIFI\n | ClearSignContextType.SOLANA_TRANSACTION_CHECK\n | ClearSignContextType.SOLANA_INSTRUCTION_INFO\n | ClearSignContextType.SOLANA_ENUM_VARIANT\n | ClearSignContextType.SOLANA_TOKEN_INFO\n | ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE\n | ClearSignContextType.SOLANA_ALT_RESOLUTION\n | ClearSignContextType.SOLANA_TRUSTED_NAME\n | ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME;\n\nexport type SolanaContextSuccess<\n T extends SolanaContextSuccessType = SolanaContextSuccessType,\n> = ClearSignContextSuccess<T>;\n\nexport type SolanaContextError = ClearSignContextError;\n\nexport type SolanaContext = SolanaContextSuccess | SolanaContextError;\n\nexport type SolanaTokenContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN>;\n\nexport type SolanaLifiContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_LIFI>;\n\nexport type SolanaTransactionCheckContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TRANSACTION_CHECK>;\n\nexport type SolanaInstructionInfoContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_INSTRUCTION_INFO>;\n\nexport type SolanaEnumVariantContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_ENUM_VARIANT>;\n\nexport type SolanaTokenInfoContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN_INFO>;\n\nexport type SolanaTokenAccountStateContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE>;\n\nexport type SolanaAltResolutionContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_ALT_RESOLUTION>;\n\nexport type SolanaTrustedNameContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_TRUSTED_NAME>;\n\nexport type SolanaBasicTrustedNameContextSuccess =\n ClearSignContextSuccess<ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME>;\n\nexport type SolanaTokenContextResult =\n | SolanaTokenContextSuccess\n | SolanaContextError;\n\nexport type SolanaLifiContextResult =\n | SolanaLifiContextSuccess\n | SolanaContextError;\n\nexport type SolanaTransactionCheckContextResult =\n | SolanaTransactionCheckContextSuccess\n | SolanaContextError;\n\nexport type LoaderResult =\n | SolanaTokenContextResult\n | SolanaLifiContextResult\n | SolanaTransactionCheckContextResult;\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["SolanaContextTypes_exports", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var e=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(r,t,o,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of e(t))!p.call(r,a)&&a!==o&&n(r,a,{get:()=>t[a],enumerable:!(i=s(t,a))||i.enumerable});return r};var g=r=>c(n({},"__esModule",{value:!0}),r);var d={};module.exports=g(d);
1
+ "use strict";var o=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(t,n)=>{for(var e in n)o(t,e,{get:n[e],enumerable:!0})},d=(t,n,e,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let a of l(n))!p.call(t,a)&&a!==e&&o(t,a,{get:()=>n[a],enumerable:!(r=s(n,a))||r.enumerable});return t};var g=t=>d(o({},"__esModule",{value:!0}),t);var u={};c(u,{SolanaInstructionSubstructureKind:()=>i});module.exports=g(u);var i=(a=>(a[a.DISPLAY_FIELD=0]="DISPLAY_FIELD",a[a.VALUE_FLOW_PORT=1]="VALUE_FLOW_PORT",a[a.HIDE_RULE=2]="HIDE_RULE",a[a.ACCOUNT_RESET=3]="ACCOUNT_RESET",a))(i||{});0&&(module.exports={SolanaInstructionSubstructureKind});
2
2
  //# sourceMappingURL=SolanaPayloads.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/solana/model/SolanaPayloads.ts"],
4
- "sourcesContent": ["// Solana payload types \u2014 used both by Solana loaders and (type-only)\n// referenced by the shared ClearSignContext union for typed-payload variants.\n\nexport type SolanaTokenData = {\n solanaTokenDescriptor: {\n data: string;\n signature: string;\n };\n};\n\nexport type SolanaTransactionDescriptor = {\n data: string;\n descriptorType: string;\n descriptorVersion: string;\n signature: string;\n};\n\nexport type SolanaLifiInstructionMeta = {\n program_id: string;\n discriminator_hex?: string;\n};\n\nexport type SolanaLifiPayload = {\n descriptors: Record<string, SolanaTransactionDescriptor>;\n instructions: SolanaLifiInstructionMeta[];\n};\n\nexport type SolanaTransactionCheckPayload = {\n descriptor: string;\n};\n"],
5
- "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
- "names": ["SolanaPayloads_exports", "__toCommonJS"]
4
+ "sourcesContent": ["// Solana payload types \u2014 used both by Solana loaders and (type-only)\n// referenced by the shared ClearSignContext union for typed-payload variants.\n\nexport type SolanaTokenData = {\n solanaTokenDescriptor: {\n data: string;\n signature: string;\n };\n};\n\nexport type SolanaTransactionDescriptor = {\n data: string;\n descriptorType: string;\n descriptorVersion: string;\n signature: string;\n};\n\nexport type SolanaLifiInstructionMeta = {\n program_id: string;\n discriminator_hex?: string;\n};\n\nexport type SolanaLifiPayload = {\n descriptors: Record<string, SolanaTransactionDescriptor>;\n instructions: SolanaLifiInstructionMeta[];\n};\n\nexport type SolanaTransactionCheckPayload = {\n descriptor: string;\n};\n\n// --- Generic clear-signing payloads ---\n\n// CAL static descriptor payloads. `data` is the signed TLV (hex string);\n// `signature` is the resolved signature for the configured CAL signature\n// kind (`prod` | `test`).\n\nexport type SolanaSignedDescriptor = {\n data: string;\n signature: string;\n};\n\n/**\n * One enum-variant descriptor bundled with an instruction descriptor by CAL.\n * The signed TLV (`descriptor.data`) feeds the host-side type-pool decode\n * cache, `enumId`/`variantIndex` identify which variant it describes (and let\n * the host stream the selected variant's signed descriptor to the device).\n */\nexport type SolanaInstructionEnumVariant = {\n enumId: string;\n variantIndex: number;\n descriptor: SolanaSignedDescriptor;\n};\n\n/**\n * Payload for ClearSignContextType.SOLANA_INSTRUCTION_INFO.\n *\n * `instructionInfo` + `substructures` are the signed TLVs streamed to the\n * device, and `enumVariants` are the signed enum-variant descriptors CAL\n * bundles for the program's enums (used to build the host decode cache). The\n * remaining fields are CAL's decoded JSON consumed host-side by the\n * requirement builder.\n */\nexport type SolanaInstructionInfoPayload = {\n programId: string;\n discriminator: string;\n instructionInfo: SolanaSignedDescriptor;\n substructures: SolanaInstructionSubstructure[];\n enumVariants: SolanaInstructionEnumVariant[];\n idlDescriptor: {\n typePool: SolanaCalTypePoolEntry[];\n rootType: number;\n };\n mintAssociations: SolanaCalMintAssociation[];\n valueFlowPorts: SolanaCalValueFlowPort[];\n accountResets: SolanaCalAccountReset[];\n displayFields: SolanaCalDisplayField[];\n};\n\nexport enum SolanaInstructionSubstructureKind {\n DISPLAY_FIELD = 0x00,\n VALUE_FLOW_PORT = 0x01,\n HIDE_RULE = 0x02,\n ACCOUNT_RESET = 0x03,\n}\n\nexport type SolanaInstructionSubstructure = {\n kind: SolanaInstructionSubstructureKind;\n // TLV payload (hex string) for the substructure.\n data: string;\n};\n\n// --- Decoded CAL JSON (snake_case mirrors the CAL response) ---\n\nexport type SolanaCalValue = {\n source: string;\n /** ACCOUNT_PATH: index into the instruction's accounts. */\n account_index?: number;\n /** CONSTANT: hex-encoded bytes. */\n data?: string;\n /** ARGUMENT_PATH: decoded steps. */\n path?: { steps: number[] };\n};\n\nexport type SolanaCalTokenValue = {\n kind: string;\n value?: SolanaCalValue;\n account_index?: number;\n};\n\nexport type SolanaCalValueFlowPort = {\n /** Ordered candidate list of account indices (length 1 for a single-account port). */\n account_indices: number[];\n optional_account_strategy?: string;\n token_value: SolanaCalTokenValue;\n};\n\nexport type SolanaCalAccountReset = {\n account_index: number;\n require_pre_balance_zero?: boolean;\n};\n\nexport type SolanaCalDisplayField = {\n name?: string;\n param: { type: string; value?: SolanaCalValue; token?: SolanaCalValue };\n};\n\nexport type SolanaCalTypePoolEntry = {\n index: number;\n kind: string;\n refs?: number[];\n size?: number;\n encoding?: number;\n len_kind?: string;\n flag_kind?: string;\n sentinel?: string;\n disc_kind?: string;\n total_variants?: number;\n enum_id?: string;\n};\n\nexport type SolanaCalMintAssociation = {\n account_index: number;\n mint_index: number;\n};\n\n/**\n * Payload for ClearSignContextType.SOLANA_ENUM_VARIANT: one signed\n * ENUM_VARIANT descriptor for a `(programId, enumId, variantIndex)` triple.\n */\nexport type SolanaEnumVariantPayload = {\n programId: string;\n enumId: string;\n variantIndex: number;\n descriptor: SolanaSignedDescriptor;\n};\n\n/**\n * Payload for ClearSignContextType.SOLANA_TOKEN_INFO, keyed by mint pubkey.\n * Distinct from the legacy SOLANA_TOKEN context.\n */\nexport type SolanaTokenInfoPayload = {\n mint: string;\n descriptor: SolanaSignedDescriptor;\n};\n\n// --- Dynamic descriptor payloads (challenge-bound) ---\n//\n// Each payload carries the raw signed TLV bytes decoded from the backend's\n// hex `signedDescriptor`.\n\nexport type SolanaTokenAccountStatePayload = {\n descriptor: Uint8Array;\n};\n\nexport type SolanaAltResolutionPayload = {\n descriptor: Uint8Array;\n};\n\n// SOLANA_TRUSTED_NAME (generic flow, with 2-byte length prefix) is emitted by\n// SolanaTrustedNameContextLoader. SOLANA_BASIC_TRUSTED_NAME (basic flow, raw\n// bytes) is emitted by OwnerInfoContextLoader. Both carry `payload: Uint8Array`.\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uCAAAE,IAAA,eAAAC,EAAAH,GA+EO,IAAKE,OACVA,IAAA,cAAgB,GAAhB,gBACAA,IAAA,gBAAkB,GAAlB,kBACAA,IAAA,UAAY,GAAZ,YACAA,IAAA,cAAgB,GAAhB,gBAJUA,OAAA",
6
+ "names": ["SolanaPayloads_exports", "__export", "SolanaInstructionSubstructureKind", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var u=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var V=(e,E)=>{for(var p in E)u(e,p,{get:E[p],enumerable:!0})},b=(e,E,p,N)=>{if(E&&typeof E=="object"||typeof E=="function")for(let m of D(E))!M.call(e,m)&&m!==p&&u(e,m,{get:()=>E[m],enumerable:!(N=A(E,m))||N.enumerable});return e};var f=e=>b(u({},"__esModule",{value:!0}),e);var g={};V(g,{SolanaTransactionScanChainId:()=>x});module.exports=f(g);var x=(N=>(N[N.MAINNET=1]="MAINNET",N[N.DEVNET=2]="DEVNET",N[N.TESTNET=3]="TESTNET",N))(x||{});0&&(module.exports={SolanaTransactionScanChainId});
1
+ "use strict";var u=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var M=Object.prototype.hasOwnProperty;var V=(e,E)=>{for(var p in E)u(e,p,{get:E[p],enumerable:!0})},b=(e,E,p,N)=>{if(E&&typeof E=="object"||typeof E=="function")for(let m of D(E))!M.call(e,m)&&m!==p&&u(e,m,{get:()=>E[m],enumerable:!(N=A(E,m))||N.enumerable});return e};var f=e=>b(u({},"__esModule",{value:!0}),e);var g={};V(g,{SolanaTransactionScanChainId:()=>x});module.exports=f(g);var x=(N=>(N[N.MAINNET=900]="MAINNET",N[N.DEVNET=901]="DEVNET",N[N.TESTNET=902]="TESTNET",N))(x||{});0&&(module.exports={SolanaTransactionScanChainId});
2
2
  //# sourceMappingURL=SolanaTransactionScanChainId.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/solana/model/SolanaTransactionScanChainId.ts"],
4
- "sourcesContent": ["/**\n * Web3Checks scan chain identifiers for Solana clusters.\n * Mirrors the backend contract for the `chain` field on Solana scan requests.\n */\nexport enum SolanaTransactionScanChainId {\n MAINNET = 1,\n DEVNET = 2,\n TESTNET = 3,\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kCAAAE,IAAA,eAAAC,EAAAH,GAIO,IAAKE,OACVA,IAAA,QAAU,GAAV,UACAA,IAAA,OAAS,GAAT,SACAA,IAAA,QAAU,GAAV,UAHUA,OAAA",
4
+ "sourcesContent": ["/**\n * Transaction-check scan chain identifiers for Solana clusters.\n * Mirrors the backend contract for the `chain` field on Solana scan requests:\n * the extended network ids (900/901/902) introduced in the latest spec.\n */\nexport enum SolanaTransactionScanChainId {\n MAINNET = 900,\n DEVNET = 901,\n TESTNET = 902,\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kCAAAE,IAAA,eAAAC,EAAAH,GAKO,IAAKE,OACVA,IAAA,QAAU,KAAV,UACAA,IAAA,OAAS,KAAT,SACAA,IAAA,QAAU,KAAV,UAHUA,OAAA",
6
6
  "names": ["SolanaTransactionScanChainId_exports", "__export", "SolanaTransactionScanChainId", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var l=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var x=(a,e)=>{for(var o in e)l(a,o,{get:e[o],enumerable:!0})},L=(a,e,o,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of y(e))!T.call(a,r)&&r!==o&&l(a,r,{get:()=>e[r],enumerable:!(t=d(e,r))||t.enumerable});return a};var P=a=>L(l({},"__esModule",{value:!0}),a),g=(a,e,o,t)=>{for(var r=t>1?void 0:t?d(e,o):e,i=a.length-1,p;i>=0;i--)(p=a[i])&&(r=(t?p(e,o,r):p(r))||r);return t&&r&&l(e,o,r),r},f=(a,e)=>(o,t)=>e(o,t,a);var _={};x(_,{OwnerInfoContextLoader:()=>c});module.exports=P(_);var n=require("inversify"),m=require("../../../../config/di/configTypes"),u=require("../../../../modules/multichain/pki/di/pkiTypes"),C=require("../../../../modules/multichain/pki/model/KeyUsage"),S=require("../../../../modules/solana/owner-info/di/ownerInfoTypes"),s=require("../../../../shared/model/ClearSignContext");const E=[s.ClearSignContextType.SOLANA_TRUSTED_NAME];let c=class{constructor(e,o,t){this._dataSource=e;this._certificateLoader=o;this.logger=t("OwnerInfoContextLoader")}logger;canHandle(e,o){if(!E.every(r=>o.includes(r))||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:o}=e,t=await this._certificateLoader.loadCertificate({keyId:"domain_metadata_key",keyUsage:C.KeyUsage.TrustedName,targetDevice:o});return t?(await this._dataSource.getOwnerInfo(e)).caseOf({Left:i=>[{type:s.ClearSignContextType.ERROR,error:i}],Right:({tlvDescriptor:i})=>i!==void 0?[{type:s.ClearSignContextType.SOLANA_TRUSTED_NAME,payload:i,certificate:t}]:[]}):[{type:s.ClearSignContextType.ERROR,error:new Error("[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing")}]}};c=g([(0,n.injectable)(),f(0,(0,n.inject)(S.ownerInfoTypes.OwnerInfoDataSource)),f(1,(0,n.inject)(u.pkiTypes.PkiCertificateLoader)),f(2,(0,n.inject)(m.configTypes.ContextModuleLoggerFactory))],c);0&&(module.exports={OwnerInfoContextLoader});
1
+ "use strict";var l=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var x=(a,e)=>{for(var o in e)l(a,o,{get:e[o],enumerable:!0})},L=(a,e,o,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of y(e))!T.call(a,r)&&r!==o&&l(a,r,{get:()=>e[r],enumerable:!(t=d(e,r))||t.enumerable});return a};var P=a=>L(l({},"__esModule",{value:!0}),a),g=(a,e,o,t)=>{for(var r=t>1?void 0:t?d(e,o):e,i=a.length-1,p;i>=0;i--)(p=a[i])&&(r=(t?p(e,o,r):p(r))||r);return t&&r&&l(e,o,r),r},f=(a,e)=>(o,t)=>e(o,t,a);var A={};x(A,{OwnerInfoContextLoader:()=>c});module.exports=P(A);var n=require("inversify"),m=require("../../../../config/di/configTypes"),u=require("../../../../modules/multichain/pki/di/pkiTypes"),C=require("../../../../modules/multichain/pki/model/KeyUsage"),S=require("../../../../modules/solana/owner-info/di/ownerInfoTypes"),s=require("../../../../shared/model/ClearSignContext");const _=[s.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME];let c=class{constructor(e,o,t){this._dataSource=e;this._certificateLoader=o;this.logger=t("OwnerInfoContextLoader")}logger;canHandle(e,o){if(!_.every(r=>o.includes(r))||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:o}=e,t=await this._certificateLoader.loadCertificate({keyId:"domain_metadata_key",keyUsage:C.KeyUsage.TrustedName,targetDevice:o});return t?(await this._dataSource.getOwnerInfo(e)).caseOf({Left:i=>[{type:s.ClearSignContextType.ERROR,error:i}],Right:({tlvDescriptor:i})=>i!==void 0?[{type:s.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,payload:i,certificate:t}]:[]}):[{type:s.ClearSignContextType.ERROR,error:new Error("[ContextModule] OwnerInfoContextLoader: trustedNamePKICertificate is missing")}]}};c=g([(0,n.injectable)(),f(0,(0,n.inject)(S.ownerInfoTypes.OwnerInfoDataSource)),f(1,(0,n.inject)(u.pkiTypes.PkiCertificateLoader)),f(2,(0,n.inject)(m.configTypes.ContextModuleLoggerFactory))],c);0&&(module.exports={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": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBAEnCC,EAA4B,mCAC5BC,EAAyB,gDAEzBC,EAAyB,mDAGzBC,EAA+B,yDAE/BC,EAGO,2CAEP,MAAMC,EAA0C,CAC9C,uBAAqB,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,CAACN,EAAgB,MAAOO,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,SAAU,WAAS,YACnB,aAAcD,CAChB,CAAC,EAEH,OAAKC,GAYH,MAAM,KAAK,YAAY,aAAaF,CAAa,GAExB,OAAO,CAChC,KAAOG,GAA8B,CACnC,CAAE,KAAM,uBAAqB,MAAO,MAAAA,CAAM,CAC5C,EACA,MAAO,CAAC,CAAE,cAAAC,CAAc,IAClBA,IAAkB,OACb,CACL,CACE,KAAM,uBAAqB,oBAC3B,QAASA,EACT,YAAaF,CACf,CACF,EAEK,CAAC,CAEZ,CAAC,EA7BQ,CACL,CACE,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MACT,8EACF,CACF,CACF,CAuBJ,CACF,EA9EaV,EAANa,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,iBAAe,mBAAmB,GAEzCA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,cAAY,0BAA0B,IAVrCd",
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": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBAEnCC,EAA4B,mCAC5BC,EAAyB,gDAEzBC,EAAyB,mDAGzBC,EAA+B,yDAE/BC,EAGO,2CAEP,MAAMC,EAA0C,CAC9C,uBAAqB,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,CAACN,EAAgB,MAAOO,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,SAAU,WAAS,YACnB,aAAcD,CAChB,CAAC,EAEH,OAAKC,GAYH,MAAM,KAAK,YAAY,aAAaF,CAAa,GAExB,OAAO,CAChC,KAAOG,GAA8B,CACnC,CAAE,KAAM,uBAAqB,MAAO,MAAAA,CAAM,CAC5C,EACA,MAAO,CAAC,CAAE,cAAAC,CAAc,IAClBA,IAAkB,OACb,CACL,CACE,KAAM,uBAAqB,0BAC3B,QAASA,EACT,YAAaF,CACf,CACF,EAEK,CAAC,CAEZ,CAAC,EA7BQ,CACL,CACE,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MACT,8EACF,CACF,CACF,CAuBJ,CACF,EA9EaV,EAANa,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,iBAAe,mBAAmB,GAEzCA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,cAAY,0BAA0B,IAVrCd",
6
6
  "names": ["OwnerInfoContextLoader_exports", "__export", "OwnerInfoContextLoader", "__toCommonJS", "import_inversify", "import_configTypes", "import_pkiTypes", "import_KeyUsage", "import_ownerInfoTypes", "import_ClearSignContext", "SUPPORTED_TYPES", "OwnerInfoContextLoader", "_dataSource", "_certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "ctx", "solanaContext", "deviceModelId", "trustedNamePKICertificate", "error", "tlvDescriptor", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),e=require("vitest"),o=require("../../../../shared/model/ClearSignContext"),u=require("./OwnerInfoContextLoader");const A=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]});(0,e.describe)("OwnerInfoContextLoader",()=>{let a,s;const l={keyUsageNumber:4,payload:new Uint8Array([170,187,204])},i={deviceModelId:c.DeviceModelId.FLEX,tokenAddress:"SomeTokenAddress"};(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),a={getOwnerInfo:e.vi.fn()},s={loadCertificate:e.vi.fn()}});const r=()=>new u.OwnerInfoContextLoader(a,s,A);(0,e.describe)("canHandle",()=>{(0,e.it)("returns true when SOLANA_TRUSTED_NAME is in expectedTypes and tokenAddress is present",()=>{const t=r();(0,e.expect)(t.canHandle(i,[o.ClearSignContextType.SOLANA_TRUSTED_NAME])).toBe(!0)}),(0,e.it)("returns true when createATA is present (and tokenAddress absent)",()=>{const t=r(),n={deviceModelId:c.DeviceModelId.FLEX,createATA:{address:"addr",mintAddress:"mint"}};(0,e.expect)(t.canHandle(n,[o.ClearSignContextType.SOLANA_TRUSTED_NAME])).toBe(!0)}),(0,e.it)("returns false when SOLANA_TRUSTED_NAME is not in expectedTypes",()=>{const t=r();(0,e.expect)(t.canHandle(i,[o.ClearSignContextType.SOLANA_TOKEN])).toBe(!1)}),(0,e.it)("returns false when neither tokenAddress nor createATA is present",()=>{const t=r(),n={deviceModelId:c.DeviceModelId.FLEX};(0,e.expect)(t.canHandle(n,[o.ClearSignContextType.SOLANA_TRUSTED_NAME])).toBe(!1)}),(0,e.it)("returns false for non-object inputs",()=>{const t=r();(0,e.expect)(t.canHandle(null,[o.ClearSignContextType.SOLANA_TRUSTED_NAME])).toBe(!1),(0,e.expect)(t.canHandle("string",[o.ClearSignContextType.SOLANA_TRUSTED_NAME])).toBe(!1)})}),(0,e.describe)("load",()=>{(0,e.it)("returns SOLANA_TRUSTED_NAME context with cert when datasource returns Right with tlvDescriptor",async()=>{const t=r(),n=new Uint8Array([1,2,3]);e.vi.spyOn(s,"loadCertificate").mockResolvedValue(l),e.vi.spyOn(a,"getOwnerInfo").mockResolvedValue((0,d.Right)({tlvDescriptor:n}));const f=await t.load(i);(0,e.expect)(s.loadCertificate).toHaveBeenCalledWith({keyId:"domain_metadata_key",keyUsage:"trusted_name",targetDevice:c.DeviceModelId.FLEX}),(0,e.expect)(a.getOwnerInfo).toHaveBeenCalledWith(i),(0,e.expect)(f).toEqual([{type:o.ClearSignContextType.SOLANA_TRUSTED_NAME,payload:n,certificate:l}])}),(0,e.it)("returns empty array when datasource returns Right with undefined tlvDescriptor",async()=>{const t=r();e.vi.spyOn(s,"loadCertificate").mockResolvedValue(l),e.vi.spyOn(a,"getOwnerInfo").mockResolvedValue((0,d.Right)({tlvDescriptor:void 0}));const n=await t.load(i);(0,e.expect)(n).toEqual([])}),(0,e.it)("returns error when PKI certificate is missing",async()=>{const t=r();e.vi.spyOn(s,"loadCertificate").mockResolvedValue(void 0),e.vi.spyOn(a,"getOwnerInfo");const n=await t.load(i);(0,e.expect)(a.getOwnerInfo).not.toHaveBeenCalled(),(0,e.expect)(n).toEqual([{type:o.ClearSignContextType.ERROR,error:e.expect.objectContaining({message:e.expect.stringContaining("trustedNamePKICertificate is missing")})}])}),(0,e.it)("returns error when datasource returns Left(error)",async()=>{const t=r(),n=new Error("owner info fetch failed");e.vi.spyOn(s,"loadCertificate").mockResolvedValue(l),e.vi.spyOn(a,"getOwnerInfo").mockResolvedValue((0,d.Left)(n));const f=await t.load(i);(0,e.expect)(f).toEqual([{type:o.ClearSignContextType.ERROR,error:n}])})})});
1
+ "use strict";var c=require("@ledgerhq/device-management-kit"),d=require("purify-ts"),e=require("vitest"),o=require("../../../../shared/model/ClearSignContext"),u=require("./OwnerInfoContextLoader");const A=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]});(0,e.describe)("OwnerInfoContextLoader",()=>{let a,s;const l={keyUsageNumber:4,payload:new Uint8Array([170,187,204])},i={deviceModelId:c.DeviceModelId.FLEX,tokenAddress:"SomeTokenAddress"};(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),a={getOwnerInfo:e.vi.fn()},s={loadCertificate:e.vi.fn()}});const r=()=>new u.OwnerInfoContextLoader(a,s,A);(0,e.describe)("canHandle",()=>{(0,e.it)("returns true when SOLANA_BASIC_TRUSTED_NAME is in expectedTypes and tokenAddress is present",()=>{const t=r();(0,e.expect)(t.canHandle(i,[o.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME])).toBe(!0)}),(0,e.it)("returns true when createATA is present (and tokenAddress absent)",()=>{const t=r(),n={deviceModelId:c.DeviceModelId.FLEX,createATA:{address:"addr",mintAddress:"mint"}};(0,e.expect)(t.canHandle(n,[o.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME])).toBe(!0)}),(0,e.it)("returns false when SOLANA_BASIC_TRUSTED_NAME is not in expectedTypes",()=>{const t=r();(0,e.expect)(t.canHandle(i,[o.ClearSignContextType.SOLANA_TOKEN])).toBe(!1)}),(0,e.it)("returns false when neither tokenAddress nor createATA is present",()=>{const t=r(),n={deviceModelId:c.DeviceModelId.FLEX};(0,e.expect)(t.canHandle(n,[o.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME])).toBe(!1)}),(0,e.it)("returns false for non-object inputs",()=>{const t=r();(0,e.expect)(t.canHandle(null,[o.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME])).toBe(!1),(0,e.expect)(t.canHandle("string",[o.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME])).toBe(!1)})}),(0,e.describe)("load",()=>{(0,e.it)("returns SOLANA_BASIC_TRUSTED_NAME context with cert when datasource returns Right with tlvDescriptor",async()=>{const t=r(),n=new Uint8Array([1,2,3]);e.vi.spyOn(s,"loadCertificate").mockResolvedValue(l),e.vi.spyOn(a,"getOwnerInfo").mockResolvedValue((0,d.Right)({tlvDescriptor:n}));const f=await t.load(i);(0,e.expect)(s.loadCertificate).toHaveBeenCalledWith({keyId:"domain_metadata_key",keyUsage:"trusted_name",targetDevice:c.DeviceModelId.FLEX}),(0,e.expect)(a.getOwnerInfo).toHaveBeenCalledWith(i),(0,e.expect)(f).toEqual([{type:o.ClearSignContextType.SOLANA_BASIC_TRUSTED_NAME,payload:n,certificate:l}])}),(0,e.it)("returns empty array when datasource returns Right with undefined tlvDescriptor",async()=>{const t=r();e.vi.spyOn(s,"loadCertificate").mockResolvedValue(l),e.vi.spyOn(a,"getOwnerInfo").mockResolvedValue((0,d.Right)({tlvDescriptor:void 0}));const n=await t.load(i);(0,e.expect)(n).toEqual([])}),(0,e.it)("returns error when PKI certificate is missing",async()=>{const t=r();e.vi.spyOn(s,"loadCertificate").mockResolvedValue(void 0),e.vi.spyOn(a,"getOwnerInfo");const n=await t.load(i);(0,e.expect)(a.getOwnerInfo).not.toHaveBeenCalled(),(0,e.expect)(n).toEqual([{type:o.ClearSignContextType.ERROR,error:e.expect.objectContaining({message:e.expect.stringContaining("trustedNamePKICertificate is missing")})}])}),(0,e.it)("returns error when datasource returns Left(error)",async()=>{const t=r(),n=new Error("owner info fetch failed");e.vi.spyOn(s,"loadCertificate").mockResolvedValue(l),e.vi.spyOn(a,"getOwnerInfo").mockResolvedValue((0,d.Left)(n));const f=await t.load(i);(0,e.expect)(f).toEqual([{type:o.ClearSignContextType.ERROR,error:n}])})})});
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": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_ClearSignContext", "import_OwnerInfoContextLoader", "mockLoggerFactory", "mockDataSource", "mockCertLoader", "mockCert", "baseCtx", "makeLoader", "loader", "ctx", "tlvDescriptor", "result", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var a=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of s(t))!l.call(e,o)&&o!==n&&a(e,o,{get:()=>t[o],enumerable:!(r=i(t,o))||r.enumerable});return e};var m=e=>c(a({},"__esModule",{value:!0}),e);var p={};module.exports=m(p);
1
+ "use strict";var e=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var S=(t,o,r,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of s(o))!x.call(t,n)&&n!==r&&e(t,n,{get:()=>o[n],enumerable:!(a=l(o,n))||a.enumerable});return t};var c=t=>S(e({},"__esModule",{value:!0}),t);var m={};module.exports=c(m);
2
2
  //# sourceMappingURL=solanaContextTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/modules/solana/owner-info/domain/solanaContextTypes.ts"],
4
- "sourcesContent": ["import { type PkiCertificate } from \"@/modules/multichain/pki/model/PkiCertificate\";\nimport { type LoaderResult } from \"@/modules/solana/model/SolanaContextTypes\";\n\nexport type {\n SolanaSPLOwnerInfo,\n SolanaTransactionContext,\n} from \"@/modules/solana/model/SolanaTransactionContext\";\n\nexport type SolanaTransactionContextResultSuccess = {\n trustedNamePKICertificate?: PkiCertificate;\n tlvDescriptor?: Uint8Array;\n loadersResults: LoaderResult[];\n contextErrorCount: number;\n};\n"],
4
+ "sourcesContent": ["import { type SolanaContext } from \"@/modules/solana/model/SolanaContextTypes\";\n\nexport type {\n SolanaSPLOwnerInfo,\n SolanaTransactionContext,\n} from \"@/modules/solana/model/SolanaTransactionContext\";\n\nexport type SolanaTransactionContextResultSuccess = {\n loadersResults: SolanaContext[];\n contextErrorCount: number;\n};\n"],
5
5
  "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
6
  "names": ["solanaContextTypes_exports", "__toCommonJS"]
7
7
  }
@@ -1,7 +1,7 @@
1
- "use strict";var n=require("purify-ts"),e=require("vitest"),l=require("./HttpTokenDataSource");(0,e.describe)("HttpTokenDataSource",()=>{let r,t;const a="sol:usdc",s={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}},i=o=>`[ContextModule] HttpTokenDataSource: no token metadata for id ${o}`;(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),t={get:e.vi.fn()},r=new l.HttpTokenDataSource(s,t)}),(0,e.it)("should call http.get with the correct url and params",async()=>{t.get.mockResolvedValue([]),await r.getTokenInfosPayload({tokenInternalId:a}),(0,e.expect)(t.get).toHaveBeenCalledTimes(1),(0,e.expect)(t.get).toHaveBeenCalledWith(`${s.cal.url}/tokens`,{params:{id:a,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}`}})}),(0,e.it)("should return Right(data[0]) when http.get responds with a non-empty array",async()=>{const o={descriptor:{data:"ABCD",signatures:{prod:"SIG-PROD",test:"SIG-TEST"}}};t.get.mockResolvedValue([o]);const c=await r.getTokenInfosPayload({tokenInternalId:a});(0,e.expect)(c).toEqual((0,n.Right)(o))}),e.describe.each`
1
+ "use strict";var r=require("purify-ts"),e=require("vitest"),c=require("./HttpTokenDataSource");(0,e.describe)("HttpTokenDataSource",()=>{let n,t;const a="sol:usdc",s={cal:{url:"https://global.api.prd.ledger.com/cal/v1",mode:"prod",branch:"main"}},i=o=>`[ContextModule] HttpTokenDataSource: no token metadata for id ${o}`;(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),t={get:e.vi.fn()},n=new c.HttpTokenDataSource(s,t)}),(0,e.it)("should call http.get with the correct url and params",async()=>{t.get.mockResolvedValue([]),await n.getTokenInfosPayload({tokenInternalId:a}),(0,e.expect)(t.get).toHaveBeenCalledTimes(1),(0,e.expect)(t.get).toHaveBeenCalledWith(`${s.cal.url}/tokens`,{params:{id:a,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}`}})}),(0,e.it)("should return Right(data[0]) when http.get responds with a non-empty array",async()=>{const o={descriptor:{data:"ABCD",signatures:{prod:"SIG-PROD",test:"SIG-TEST"}}};t.get.mockResolvedValue([o]);const l=await n.getTokenInfosPayload({tokenInternalId:a});(0,e.expect)(l).toEqual((0,r.Right)(o))}),e.describe.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:o,responseBody:c})=>{(0,e.it)(`should return an error when ${o}`,async()=>{t.get.mockResolvedValue(c);const d=await r.getTokenInfosPayload({tokenInternalId:a});(0,e.expect)(d).toEqual((0,n.Left)(new Error(i(a))))})}),(0,e.it)("should return an error when http.get throws",async()=>{t.get.mockRejectedValue(new Error("network"));const o=await r.getTokenInfosPayload({tokenInternalId:a});(0,e.expect)(o).toEqual((0,n.Left)(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
6
+ `("Error cases",({caseName:o,responseBody:l})=>{(0,e.it)(`should return an error when ${o}`,async()=>{t.get.mockResolvedValue(l);const d=await n.getTokenInfosPayload({tokenInternalId:a});(0,e.expect)(d).toEqual((0,r.Left)(new Error(i(a))))})}),(0,e.it)("should return an error when http.get throws",async()=>{t.get.mockRejectedValue(new Error("network"));const o=await n.getTokenInfosPayload({tokenInternalId:a});(0,e.expect)(o).toEqual((0,r.Left)(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,IAAAA,EAA4B,qBAC5BC,EAAqD,kBAIrDC,EAAoC,oCAMpC,YAAS,sBAAuB,IAAM,CACpC,IAAIC,EACAC,EACJ,MAAMC,EAAkB,WAClBC,EAAqC,CACzC,IAAK,CACH,IAAK,kDACL,KAAM,OACN,OAAQ,MACV,CACF,EAEMC,EAAgBC,GACpB,iEAAiEA,CAAE,MAErE,cAAW,IAAM,CACf,KAAG,cAAc,EACjBJ,EAAW,CAAE,IAAK,KAAG,GAAG,CAAE,EAC1BD,EAAa,IAAI,sBACfG,EACAF,CACF,CACF,CAAC,KAED,MAAG,uDAAwD,SAAY,CAErEA,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,KAGzD,UAAOD,EAAS,GAAG,EAAE,sBAAsB,CAAC,KAC5C,UAAOA,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,KAED,MAAG,6EAA8E,SAAY,CAE3F,MAAMG,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,KAGxE,UAAOK,CAAM,EAAE,WAAQ,SAAMD,CAAS,CAAC,CACzC,CAAC,EAED,WAAS;AAAA;AAAA,MAEL,mBAAmB,WAAW,IAAI;AAAA,MAClC,qBAAqB,SAAS,CAAC,CAAC;AAAA,MAChC,wBAAwB,MAAM,CAAC,IAAI,CAAC;AAAA,IACtC,cAAe,CAAC,CAAE,SAAAE,EAAU,aAAAC,CAAa,IAAM,IAC/C,MAAG,+BAA+BD,CAAQ,GAAI,SAAY,CAExDP,EAAS,IAAI,kBAAkBQ,CAAY,EAG3C,MAAMF,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,KAGxE,UAAOK,CAAM,EAAE,WAAQ,QAAK,IAAI,MAAMH,EAAaF,CAAe,CAAC,CAAC,CAAC,CACvE,CAAC,CACH,CAAC,KAED,MAAG,8CAA+C,SAAY,CAE5DD,EAAS,IAAI,kBAAkB,IAAI,MAAM,SAAS,CAAC,EAGnD,MAAMM,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,KAGxE,UAAOK,CAAM,EAAE,WACb,QACE,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,IAAAA,EAA4B,qBAC5BC,EAAqD,kBAIrDC,EAAoC,oCAMpC,YAAS,sBAAuB,IAAM,CACpC,IAAIC,EACAC,EACJ,MAAMC,EAAkB,WAClBC,EAAqC,CACzC,IAAK,CACH,IAAK,2CACL,KAAM,OACN,OAAQ,MACV,CACF,EAEMC,EAAgBC,GACpB,iEAAiEA,CAAE,MAErE,cAAW,IAAM,CACf,KAAG,cAAc,EACjBJ,EAAW,CAAE,IAAK,KAAG,GAAG,CAAE,EAC1BD,EAAa,IAAI,sBACfG,EACAF,CACF,CACF,CAAC,KAED,MAAG,uDAAwD,SAAY,CAErEA,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAGjC,MAAMD,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,KAGzD,UAAOD,EAAS,GAAG,EAAE,sBAAsB,CAAC,KAC5C,UAAOA,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,KAED,MAAG,6EAA8E,SAAY,CAE3F,MAAMG,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,KAGxE,UAAOK,CAAM,EAAE,WAAQ,SAAMD,CAAS,CAAC,CACzC,CAAC,EAED,WAAS;AAAA;AAAA,MAEL,mBAAmB,WAAW,IAAI;AAAA,MAClC,qBAAqB,SAAS,CAAC,CAAC;AAAA,MAChC,wBAAwB,MAAM,CAAC,IAAI,CAAC;AAAA,IACtC,cAAe,CAAC,CAAE,SAAAE,EAAU,aAAAC,CAAa,IAAM,IAC/C,MAAG,+BAA+BD,CAAQ,GAAI,SAAY,CAExDP,EAAS,IAAI,kBAAkBQ,CAAY,EAG3C,MAAMF,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,KAGxE,UAAOK,CAAM,EAAE,WAAQ,QAAK,IAAI,MAAMH,EAAaF,CAAe,CAAC,CAAC,CAAC,CACvE,CAAC,CACH,CAAC,KAED,MAAG,8CAA+C,SAAY,CAE5DD,EAAS,IAAI,kBAAkB,IAAI,MAAM,SAAS,CAAC,EAGnD,MAAMM,EAAS,MAAMP,EAAW,qBAAqB,CAAE,gBAAAE,CAAgB,CAAC,KAGxE,UAAOK,CAAM,EAAE,WACb,QACE,IAAI,MACF,yEACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
6
  "names": ["import_purify_ts", "import_vitest", "import_HttpTokenDataSource", "datasource", "httpMock", "tokenInternalId", "config", "errorMessage", "id", "response0", "result", "caseName", "responseBody"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var d=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var m=Object.prototype.hasOwnProperty;var T=(r,e)=>{for(var t in e)d(r,t,{get:e[t],enumerable:!0})},x=(r,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of C(e))!m.call(r,o)&&o!==t&&d(r,o,{get:()=>e[o],enumerable:!(a=g(e,o))||a.enumerable});return r};var R=r=>x(d({},"__esModule",{value:!0}),r),u=(r,e,t,a)=>{for(var o=a>1?void 0:a?g(e,t):e,l=r.length-1,n;l>=0;l--)(n=r[l])&&(o=(a?n(e,t,o):n(o))||o);return a&&o&&d(e,t,o),o},c=(r,e)=>(t,a)=>e(t,a,r);var E={};T(E,{TokenContextLoader:()=>p});module.exports=R(E);var s=require("inversify"),f=require("../../../../config/di/configTypes"),y=require("../../../../modules/multichain/pki/di/pkiTypes"),S=require("../../../../modules/multichain/pki/model/KeyUsage"),k=require("../../../../modules/solana/token/di/tokenTypes"),i=require("../../../../shared/model/ClearSignContext");const I=[i.ClearSignContextType.SOLANA_TOKEN];let p=class{constructor(e,t,a,o){this.dataSource=e;this.config=t;this._certificateLoader=a;this.logger=o("TokenContextLoader")}logger;canHandle(e,t){if(!I.every(o=>t.includes(o))||typeof e!="object"||e===null||!("tokenInternalId"in e))return!1;const a=e.tokenInternalId;return typeof a=="string"&&a.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===i.ClearSignContextType.ERROR)return[{type:i.ClearSignContextType.ERROR,error:t.error}];const a=t;return[{type:i.ClearSignContextType.SOLANA_TOKEN,payload:a.payload,certificate:a.certificate}]}async _loadInternal(e){const{tokenInternalId:t,deviceModelId:a}=e;if(!t)return{type:i.ClearSignContextType.ERROR,error:new Error("[ContextModule] TokenContextLoader: tokenInternalId is missing")};const o=await this.dataSource.getTokenInfosPayload({tokenInternalId:t}),l=await this._certificateLoader.loadCertificate({keyId:"token_metadata_key",keyUsage:S.KeyUsage.CoinMeta,targetDevice:a});return l?o.caseOf({Left:n=>(this.logger.error("[_loadInternal] Error loading solana token context",{data:{error:n}}),{type:i.ClearSignContextType.ERROR,error:n}),Right:n=>(this.logger.debug("[_loadInternal] Successfully loaded solana token context",{data:{payload:this.pluckTokenData(n),certificate:l}}),{type:i.ClearSignContextType.SOLANA_TOKEN,payload:this.pluckTokenData(n),certificate:l})}):{type:i.ClearSignContextType.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=u([(0,s.injectable)(),c(0,(0,s.inject)(k.tokenTypes.TokenDataSource)),c(1,(0,s.inject)(f.configTypes.Config)),c(2,(0,s.inject)(y.pkiTypes.PkiCertificateLoader)),c(3,(0,s.inject)(f.configTypes.ContextModuleLoggerFactory))],p);0&&(module.exports={TokenContextLoader});
1
+ "use strict";var d=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var x=(a,e)=>{for(var t in e)d(a,t,{get:e[t],enumerable:!0})},I=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of m(e))!T.call(a,o)&&o!==t&&d(a,o,{get:()=>e[o],enumerable:!(r=g(e,o))||r.enumerable});return a};var R=a=>I(d({},"__esModule",{value:!0}),a),u=(a,e,t,r)=>{for(var o=r>1?void 0:r?g(e,t):e,l=a.length-1,n;l>=0;l--)(n=a[l])&&(o=(r?n(e,t,o):n(o))||o);return r&&o&&d(e,t,o),o},c=(a,e)=>(t,r)=>e(t,r,a);var L={};x(L,{TokenContextLoader:()=>p});module.exports=R(L);var s=require("inversify"),f=require("../../../../config/di/configTypes"),y=require("../../../../modules/multichain/pki/di/pkiTypes"),S=require("../../../../modules/multichain/pki/model/KeyId"),C=require("../../../../modules/multichain/pki/model/KeyUsage"),k=require("../../../../modules/solana/token/di/tokenTypes"),i=require("../../../../shared/model/ClearSignContext");const E=[i.ClearSignContextType.SOLANA_TOKEN];let p=class{constructor(e,t,r,o){this.dataSource=e;this.config=t;this._certificateLoader=r;this.logger=o("TokenContextLoader")}logger;canHandle(e,t){if(!E.every(o=>t.includes(o))||typeof e!="object"||e===null||!("tokenInternalId"in e))return!1;const r=e.tokenInternalId;return typeof r=="string"&&r.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===i.ClearSignContextType.ERROR)return[{type:i.ClearSignContextType.ERROR,error:t.error}];const r=t;return[{type:i.ClearSignContextType.SOLANA_TOKEN,payload:r.payload,certificate:r.certificate}]}async _loadInternal(e){const{tokenInternalId:t,deviceModelId:r}=e;if(!t)return{type:i.ClearSignContextType.ERROR,error:new Error("[ContextModule] TokenContextLoader: tokenInternalId is missing")};const o=await this.dataSource.getTokenInfosPayload({tokenInternalId:t}),l=await this._certificateLoader.loadCertificate({keyId:S.KeyId.TokenMetadataKey,keyUsage:C.KeyUsage.CoinMeta,targetDevice:r});return l?o.caseOf({Left:n=>(this.logger.error("[_loadInternal] Error loading solana token context",{data:{error:n}}),{type:i.ClearSignContextType.ERROR,error:n}),Right:n=>(this.logger.debug("[_loadInternal] Successfully loaded solana token context",{data:{payload:this.pluckTokenData(n),certificate:l}}),{type:i.ClearSignContextType.SOLANA_TOKEN,payload:this.pluckTokenData(n),certificate:l})}):{type:i.ClearSignContextType.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=u([(0,s.injectable)(),c(0,(0,s.inject)(k.tokenTypes.TokenDataSource)),c(1,(0,s.inject)(f.configTypes.Config)),c(2,(0,s.inject)(y.pkiTypes.PkiCertificateLoader)),c(3,(0,s.inject)(f.configTypes.ContextModuleLoggerFactory))],p);0&&(module.exports={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": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBAEnCC,EAA4B,mCAE5BC,EAAyB,gDAEzBC,EAAyB,mDAYzBC,EAA2B,gDAE3BC,EAGO,2CAEP,MAAMC,EAA0C,CAC9C,uBAAqB,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,CAACP,EAAgB,MAAOQ,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,OAAS,uBAAqB,MACvC,MAAO,CAAC,CAAE,KAAM,uBAAqB,MAAO,MAAOA,EAAO,KAAM,CAAC,EAEnE,MAAMC,EAAID,EACV,MAAO,CACL,CACE,KAAM,uBAAqB,aAC3B,QAASC,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,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MACT,gEACF,CACF,EAGF,MAAMK,EAAU,MAAM,KAAK,WAAW,qBAAqB,CACzD,gBAAAL,CACF,CAAC,EAEKM,EACJ,MAAM,KAAK,mBAAmB,gBAAgB,CAC5C,MAAO,qBACP,SAAU,WAAS,SACnB,aAAcF,CAChB,CAAC,EAEH,OAAKE,EASED,EAAQ,OAAO,CACpB,KAAOE,IACL,KAAK,OAAO,MACV,qDACA,CACE,KAAM,CAAE,MAAAA,CAAM,CAChB,CACF,EAEO,CACL,KAAM,uBAAqB,MAC3B,MAAAA,CACF,GAEF,MAAQC,IACN,KAAK,OAAO,MACV,2DACA,CACE,KAAM,CAAE,QAAS,KAAK,eAAeA,CAAK,EAAG,YAAAF,CAAY,CAC3D,CACF,EAEO,CACL,KAAM,uBAAqB,aAC3B,QAAS,KAAK,eAAeE,CAAK,EAClC,YAAAF,CACF,EAEJ,CAAC,EApCQ,CACL,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MACT,yEACF,CACF,CAgCJ,CAEQ,eAAeG,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,EAtIalB,EAANmB,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,aAAW,eAAe,GAEjCA,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,cAAY,0BAA0B,IAZrCpB",
6
- "names": ["TokenContextLoader_exports", "__export", "TokenContextLoader", "__toCommonJS", "import_inversify", "import_configTypes", "import_pkiTypes", "import_KeyUsage", "import_tokenTypes", "import_ClearSignContext", "SUPPORTED_TYPES", "TokenContextLoader", "dataSource", "config", "_certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "tokenInternalId", "solanaTokenContextInput", "result", "r", "deviceModelId", "payload", "certificate", "error", "value", "tokenData", "signatureKind", "__decorateClass", "__decorateParam"]
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": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBAEnCC,EAA4B,mCAE5BC,EAAyB,gDAEzBC,EAAsB,gDACtBC,EAAyB,mDAYzBC,EAA2B,gDAE3BC,EAGO,2CAEP,MAAMC,EAA0C,CAC9C,uBAAqB,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,CAACP,EAAgB,MAAOQ,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,OAAS,uBAAqB,MACvC,MAAO,CAAC,CAAE,KAAM,uBAAqB,MAAO,MAAOA,EAAO,KAAM,CAAC,EAEnE,MAAM,EAAIA,EACV,MAAO,CACL,CACE,KAAM,uBAAqB,aAC3B,QAAS,EAAE,QACX,YAAa,EAAE,WACjB,CACF,CACF,CAEA,MAAc,cACZD,EACyD,CACzD,KAAM,CAAE,gBAAAD,EAAiB,cAAAG,CAAc,EAAIF,EAE3C,GAAI,CAACD,EACH,MAAO,CACL,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MACT,gEACF,CACF,EAGF,MAAMI,EAAU,MAAM,KAAK,WAAW,qBAAqB,CACzD,gBAAAJ,CACF,CAAC,EAEKK,EACJ,MAAM,KAAK,mBAAmB,gBAAgB,CAC5C,MAAO,QAAM,iBACb,SAAU,WAAS,SACnB,aAAcF,CAChB,CAAC,EAEH,OAAKE,EASED,EAAQ,OAAO,CACpB,KAAOE,IACL,KAAK,OAAO,MACV,qDACA,CACE,KAAM,CAAE,MAAAA,CAAM,CAChB,CACF,EAEO,CACL,KAAM,uBAAqB,MAC3B,MAAAA,CACF,GAEF,MAAQC,IACN,KAAK,OAAO,MACV,2DACA,CACE,KAAM,CAAE,QAAS,KAAK,eAAeA,CAAK,EAAG,YAAAF,CAAY,CAC3D,CACF,EAEO,CACL,KAAM,uBAAqB,aAC3B,QAAS,KAAK,eAAeE,CAAK,EAClC,YAAAF,CACF,EAEJ,CAAC,EApCQ,CACL,KAAM,uBAAqB,MAC3B,MAAO,IAAI,MACT,yEACF,CACF,CAgCJ,CAEQ,eAAeG,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,EAtIajB,EAANkB,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,aAAW,eAAe,GAEjCA,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,cAAY,0BAA0B,IAZrCnB",
6
+ "names": ["TokenContextLoader_exports", "__export", "TokenContextLoader", "__toCommonJS", "import_inversify", "import_configTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_tokenTypes", "import_ClearSignContext", "SUPPORTED_TYPES", "TokenContextLoader", "dataSource", "config", "_certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "tokenInternalId", "solanaTokenContextInput", "result", "deviceModelId", "payload", "certificate", "error", "value", "tokenData", "signatureKind", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var h=(r,t)=>{for(var o in t)m(r,o,{get:t[o],enumerable:!0})},D=(r,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of S(t))!T.call(r,e)&&e!==o&&m(r,e,{get:()=>t[e],enumerable:!(n=g(t,e))||n.enumerable});return r};var C=r=>D(m({},"__esModule",{value:!0}),r),l=(r,t,o,n)=>{for(var e=n>1?void 0:n?g(t,o):t,i=r.length-1,c;i>=0;i--)(c=r[i])&&(e=(n?c(t,o,e):c(e))||e);return n&&e&&m(t,o,e),e},u=(r,t)=>(o,n)=>t(o,n,r);var A={};h(A,{HttpTokenAccountStateDataSource:()=>a});module.exports=C(A);var p=require("inversify"),s=require("purify-ts"),f=require("../../../../config/di/configTypes"),k=require("../../../../shared/network/di/networkTypes"),d=require("../../../../shared/utils/HexStringUtils"),y=require("../../../../shared/utils/signedDescriptorDto");let a=class{constructor(t,o){this.config=t;this.http=o}async getTokenAccountState({tokenAccount:t,challenge:o}){let n;try{n=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/token-account-state/${t}`,{params:{challenge:o}})}catch(e){const i=e instanceof Error?e.message:String(e);return(0,s.Left)(new Error(`[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: ${i}`))}return y.signedDescriptorDtoCodec.decode(n).caseOf({Left:e=>(0,s.Left)(new Error(`[ContextModule] HttpTokenAccountStateDataSource: malformed response for ${t}: ${e}`)),Right:e=>{let i;try{i=d.HexStringUtils.hexToBytes(e.signedDescriptor)}catch(c){return(0,s.Left)(new Error(`[ContextModule] HttpTokenAccountStateDataSource: invalid hex in signedDescriptor for ${t}: ${c.message}`))}return(0,s.Right)({tokenAccount:t,descriptor:i,keyId:e.keyId,keyUsage:e.keyUsage})}})}};a=l([(0,p.injectable)(),u(0,(0,p.inject)(f.configTypes.Config)),u(1,(0,p.inject)(k.networkTypes.NetworkClient))],a);0&&(module.exports={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": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBACnCC,EAAoC,qBAEpCC,EAA4B,mCAE5BC,EAA6B,4CAC7BC,EAA+B,yCAC/BC,EAAyC,8CAqBlC,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,SAAO,QACL,IAAI,MACF,yFAAyFC,CAAM,EACjG,CACF,CACF,CAEA,OAAO,2BACJ,OAAOF,CAAG,EACV,OAA+C,CAC9C,KAAOC,MACL,QACE,IAAI,MACF,2EAA2EH,CAAY,KAAKG,CAAK,EACnG,CACF,EACF,MAAQE,GAAc,CACpB,IAAIC,EACJ,GAAI,CACFA,EAAa,iBAAe,WAAWD,EAAU,gBAAgB,CACnE,OAASF,EAAO,CACd,SAAO,QACL,IAAI,MACF,wFAAwFH,CAAY,KAAMG,EAAgB,OAAO,EACnI,CACF,CACF,CAEA,SAAO,SAAM,CACX,aAAAH,EACA,WAAAM,EACA,MAAOD,EAAU,MACjB,SAAUA,EAAU,QACtB,CAAC,CACH,CACF,CAAC,CACL,CACF,EA7DaR,EAANU,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,eAAa,aAAa,IANzBX",
6
+ "names": ["HttpTokenAccountStateDataSource_exports", "__export", "HttpTokenAccountStateDataSource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "import_HexStringUtils", "import_signedDescriptorDto", "HttpTokenAccountStateDataSource", "config", "http", "tokenAccount", "challenge", "dto", "error", "reason", "validated", "descriptor", "__decorateClass", "__decorateParam"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=require("purify-ts"),e=require("vitest"),s=require("./HttpTokenAccountStateDataSource");(0,e.describe)("HttpTokenAccountStateDataSource",()=>{let n,o;const a="TokenAccountAddrXXXXXXXXXXXXXXXXXXXXXXXXXXX",c="deadbeef",i={metadataServiceDomain:{url:"https://nft.api.ledger.com"}};(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),o={get:e.vi.fn()},n=new s.HttpTokenAccountStateDataSource(i,o)}),(0,e.it)("calls the metadata endpoint with the challenge param",async()=>{o.get.mockResolvedValue({descriptorType:"token_account_state",signedDescriptor:"01020304",keyId:"tas_key",keyUsage:"coin_meta"}),await n.getTokenAccountState({tokenAccount:a,challenge:c}),(0,e.expect)(o.get).toHaveBeenCalledWith(`https://nft.api.ledger.com/v2/solana/token-account-state/${a}`,{params:{challenge:c}})}),(0,e.it)("decodes signedDescriptor hex into Uint8Array",async()=>{o.get.mockResolvedValue({signedDescriptor:"deadbeef",keyId:"k",keyUsage:"u"});const t=await n.getTokenAccountState({tokenAccount:a,challenge:c});(0,e.expect)(t).toEqual((0,r.Right)({tokenAccount:a,descriptor:new Uint8Array([222,173,190,239]),keyId:"k",keyUsage:"u"}))}),(0,e.it)("returns Left on malformed response (missing signedDescriptor)",async()=>{o.get.mockResolvedValue({keyId:"k",keyUsage:"u"});const t=await n.getTokenAccountState({tokenAccount:a,challenge:c});(0,e.expect)(t.isLeft()).toBe(!0),(0,e.expect)(t.extract().message).toMatch(new RegExp(String.raw`\[ContextModule\] HttpTokenAccountStateDataSource: malformed response for ${a}:`))}),(0,e.it)("returns Left when signedDescriptor is not valid hex",async()=>{o.get.mockResolvedValue({signedDescriptor:"ZZZZ",keyId:"k",keyUsage:"u"});const t=await n.getTokenAccountState({tokenAccount:a,challenge:c});(0,e.expect)(t.isLeft()).toBe(!0),(0,e.expect)(t.extract().message).toMatch(/invalid hex/)}),(0,e.it)("returns Left when HTTP client throws",async()=>{o.get.mockRejectedValue(new Error("net"));const t=await n.getTokenAccountState({tokenAccount:a,challenge:c});(0,e.expect)(t).toEqual((0,r.Left)(new Error("[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: net")))})});
2
+ //# sourceMappingURL=HttpTokenAccountStateDataSource.test.js.map