@ledgerhq/context-module 2.1.0 → 2.2.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 (415) hide show
  1. package/lib/cjs/package.json +2 -2
  2. package/lib/cjs/src/DefaultContextModule.js +1 -1
  3. package/lib/cjs/src/DefaultContextModule.js.map +3 -3
  4. package/lib/cjs/src/di.js +1 -1
  5. package/lib/cjs/src/di.js.map +3 -3
  6. package/lib/cjs/src/index.js +1 -1
  7. package/lib/cjs/src/index.js.map +2 -2
  8. package/lib/cjs/src/modules/multichain/pki/model/KeyId.js +1 -1
  9. package/lib/cjs/src/modules/multichain/pki/model/KeyId.js.map +2 -2
  10. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
  11. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
  12. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
  13. package/lib/cjs/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
  14. package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +2 -0
  15. package/lib/cjs/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
  16. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
  17. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
  18. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
  19. package/lib/cjs/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
  20. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
  21. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
  22. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
  23. package/lib/cjs/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
  24. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
  25. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
  26. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
  27. package/lib/cjs/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
  28. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
  29. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
  30. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
  31. package/lib/cjs/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
  32. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
  33. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
  34. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
  35. package/lib/cjs/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
  36. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
  37. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
  38. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
  39. package/lib/cjs/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
  40. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +2 -0
  41. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
  42. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
  43. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
  44. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
  45. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
  46. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
  47. package/lib/cjs/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
  48. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
  49. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
  50. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
  51. package/lib/cjs/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
  52. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
  53. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
  54. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
  55. package/lib/cjs/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
  56. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  57. package/lib/cjs/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
  58. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js +1 -1
  59. package/lib/cjs/src/modules/solana/model/SolanaContextTypes.js.map +1 -1
  60. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js +1 -1
  61. package/lib/cjs/src/modules/solana/model/SolanaPayloads.js.map +3 -3
  62. package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
  63. package/lib/cjs/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
  64. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
  65. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
  66. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
  67. package/lib/cjs/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
  68. package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js +1 -1
  69. package/lib/cjs/src/modules/solana/owner-info/domain/solanaContextTypes.js.map +1 -1
  70. package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
  71. package/lib/cjs/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
  72. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
  73. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
  74. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
  75. package/lib/cjs/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
  76. package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +2 -0
  77. package/lib/cjs/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
  78. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
  79. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
  80. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
  81. package/lib/cjs/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
  82. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
  83. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
  84. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
  85. package/lib/cjs/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
  86. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
  87. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
  88. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
  89. package/lib/cjs/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
  90. package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js +2 -0
  91. package/lib/cjs/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
  92. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
  93. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
  94. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
  95. package/lib/cjs/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
  96. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
  97. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
  98. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
  99. package/lib/cjs/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
  100. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
  101. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
  102. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
  103. package/lib/cjs/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
  104. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +2 -0
  105. package/lib/cjs/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
  106. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
  107. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
  108. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
  109. package/lib/cjs/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
  110. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
  111. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
  112. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
  113. package/lib/cjs/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
  114. package/lib/cjs/src/shared/model/ClearSignContext.js +1 -1
  115. package/lib/cjs/src/shared/model/ClearSignContext.js.map +2 -2
  116. package/lib/cjs/src/shared/utils/HexStringUtils.js +1 -1
  117. package/lib/cjs/src/shared/utils/HexStringUtils.js.map +3 -3
  118. package/lib/cjs/src/shared/utils/HexStringUtils.test.js +1 -1
  119. package/lib/cjs/src/shared/utils/HexStringUtils.test.js.map +2 -2
  120. package/lib/cjs/src/shared/utils/certificateCache.js +2 -0
  121. package/lib/cjs/src/shared/utils/certificateCache.js.map +7 -0
  122. package/lib/cjs/src/shared/utils/certificateCache.test.js +2 -0
  123. package/lib/cjs/src/shared/utils/certificateCache.test.js.map +7 -0
  124. package/lib/cjs/src/shared/utils/certificateResult.js +2 -0
  125. package/lib/cjs/src/shared/utils/certificateResult.js.map +7 -0
  126. package/lib/cjs/src/shared/utils/certificateResult.test.js +2 -0
  127. package/lib/cjs/src/shared/utils/certificateResult.test.js.map +7 -0
  128. package/lib/cjs/src/shared/utils/challengeBoundLoader.js +2 -0
  129. package/lib/cjs/src/shared/utils/challengeBoundLoader.js.map +7 -0
  130. package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js +2 -0
  131. package/lib/cjs/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
  132. package/lib/cjs/src/shared/utils/deviceModelIdCodec.js +2 -0
  133. package/lib/cjs/src/shared/utils/deviceModelIdCodec.js.map +7 -0
  134. package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js +2 -0
  135. package/lib/cjs/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
  136. package/lib/cjs/src/shared/utils/signedDescriptorDto.js +2 -0
  137. package/lib/cjs/src/shared/utils/signedDescriptorDto.js.map +7 -0
  138. package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js +2 -0
  139. package/lib/cjs/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
  140. package/lib/cjs/src/shared/utils/uIntCodec.js +2 -0
  141. package/lib/cjs/src/shared/utils/uIntCodec.js.map +7 -0
  142. package/lib/cjs/src/shared/utils/uIntCodec.test.js +2 -0
  143. package/lib/cjs/src/shared/utils/uIntCodec.test.js.map +7 -0
  144. package/lib/esm/package.json +2 -2
  145. package/lib/esm/src/DefaultContextModule.js +1 -1
  146. package/lib/esm/src/DefaultContextModule.js.map +3 -3
  147. package/lib/esm/src/di.js +1 -1
  148. package/lib/esm/src/di.js.map +3 -3
  149. package/lib/esm/src/index.js +1 -1
  150. package/lib/esm/src/index.js.map +2 -2
  151. package/lib/esm/src/modules/multichain/pki/model/KeyId.js +1 -1
  152. package/lib/esm/src/modules/multichain/pki/model/KeyId.js.map +2 -2
  153. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js +1 -1
  154. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.js.map +3 -3
  155. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js +1 -1
  156. package/lib/esm/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.test.js.map +3 -3
  157. package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js +1 -0
  158. package/lib/esm/src/modules/solana/alt-resolution/data/AltResolutionDataSource.js.map +7 -0
  159. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js +2 -0
  160. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.js.map +7 -0
  161. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js +2 -0
  162. package/lib/esm/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.js.map +7 -0
  163. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js +2 -0
  164. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.js.map +7 -0
  165. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js +2 -0
  166. package/lib/esm/src/modules/solana/alt-resolution/di/altResolutionTypes.js.map +7 -0
  167. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js +2 -0
  168. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.js.map +7 -0
  169. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js +2 -0
  170. package/lib/esm/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.js.map +7 -0
  171. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js +2 -0
  172. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantModuleFactory.js.map +7 -0
  173. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js +2 -0
  174. package/lib/esm/src/modules/solana/enum-variant/di/enumVariantTypes.js.map +7 -0
  175. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js +2 -0
  176. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.js.map +7 -0
  177. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js +2 -0
  178. package/lib/esm/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.js.map +7 -0
  179. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js +2 -0
  180. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.js.map +7 -0
  181. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js +2 -0
  182. package/lib/esm/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.js.map +7 -0
  183. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js +1 -0
  184. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDataSource.js.map +7 -0
  185. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js +2 -0
  186. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoDto.js.map +7 -0
  187. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js +2 -0
  188. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.js.map +7 -0
  189. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js +2 -0
  190. package/lib/esm/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.js.map +7 -0
  191. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js +2 -0
  192. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.js.map +7 -0
  193. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js +2 -0
  194. package/lib/esm/src/modules/solana/instruction-info/di/instructionInfoTypes.js.map +7 -0
  195. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js +2 -0
  196. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.js.map +7 -0
  197. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js +2 -0
  198. package/lib/esm/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.js.map +7 -0
  199. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js +1 -1
  200. package/lib/esm/src/modules/solana/model/SolanaClearSignContext.js.map +3 -3
  201. package/lib/esm/src/modules/solana/model/SolanaPayloads.js +1 -0
  202. package/lib/esm/src/modules/solana/model/SolanaPayloads.js.map +4 -4
  203. package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js +1 -1
  204. package/lib/esm/src/modules/solana/model/SolanaTransactionScanChainId.js.map +2 -2
  205. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js +1 -1
  206. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.js.map +2 -2
  207. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js +1 -1
  208. package/lib/esm/src/modules/solana/owner-info/domain/OwnerInfoContextLoader.test.js.map +2 -2
  209. package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js +1 -1
  210. package/lib/esm/src/modules/solana/token/domain/TokenContextLoader.js.map +3 -3
  211. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js +2 -0
  212. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.js.map +7 -0
  213. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js +2 -0
  214. package/lib/esm/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.js.map +7 -0
  215. package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js +1 -0
  216. package/lib/esm/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.js.map +7 -0
  217. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js +2 -0
  218. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.js.map +7 -0
  219. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js +2 -0
  220. package/lib/esm/src/modules/solana/token-account-state/di/tokenAccountStateTypes.js.map +7 -0
  221. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js +2 -0
  222. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.js.map +7 -0
  223. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js +2 -0
  224. package/lib/esm/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.js.map +7 -0
  225. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js +2 -0
  226. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.js.map +7 -0
  227. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js +2 -0
  228. package/lib/esm/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.js.map +7 -0
  229. package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js +1 -0
  230. package/lib/esm/src/modules/solana/token-info/data/TokenInfoDataSource.js.map +7 -0
  231. package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js +2 -0
  232. package/lib/esm/src/modules/solana/token-info/di/tokenInfoModuleFactory.js.map +7 -0
  233. package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js +2 -0
  234. package/lib/esm/src/modules/solana/token-info/di/tokenInfoTypes.js.map +7 -0
  235. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js +2 -0
  236. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.js.map +7 -0
  237. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js +2 -0
  238. package/lib/esm/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.js.map +7 -0
  239. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js +2 -0
  240. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.js.map +7 -0
  241. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js +2 -0
  242. package/lib/esm/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.js.map +7 -0
  243. package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js +1 -0
  244. package/lib/esm/src/modules/solana/trusted-name/data/TrustedNameDataSource.js.map +7 -0
  245. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js +2 -0
  246. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameModuleFactory.js.map +7 -0
  247. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js +2 -0
  248. package/lib/esm/src/modules/solana/trusted-name/di/trustedNameTypes.js.map +7 -0
  249. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js +2 -0
  250. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.js.map +7 -0
  251. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js +2 -0
  252. package/lib/esm/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.js.map +7 -0
  253. package/lib/esm/src/shared/model/ClearSignContext.js +1 -1
  254. package/lib/esm/src/shared/model/ClearSignContext.js.map +2 -2
  255. package/lib/esm/src/shared/utils/HexStringUtils.js +1 -1
  256. package/lib/esm/src/shared/utils/HexStringUtils.js.map +3 -3
  257. package/lib/esm/src/shared/utils/HexStringUtils.test.js +1 -1
  258. package/lib/esm/src/shared/utils/HexStringUtils.test.js.map +2 -2
  259. package/lib/esm/src/shared/utils/certificateCache.js +2 -0
  260. package/lib/esm/src/shared/utils/certificateCache.js.map +7 -0
  261. package/lib/esm/src/shared/utils/certificateCache.test.js +2 -0
  262. package/lib/esm/src/shared/utils/certificateCache.test.js.map +7 -0
  263. package/lib/esm/src/shared/utils/certificateResult.js +2 -0
  264. package/lib/esm/src/shared/utils/certificateResult.js.map +7 -0
  265. package/lib/esm/src/shared/utils/certificateResult.test.js +2 -0
  266. package/lib/esm/src/shared/utils/certificateResult.test.js.map +7 -0
  267. package/lib/esm/src/shared/utils/challengeBoundLoader.js +2 -0
  268. package/lib/esm/src/shared/utils/challengeBoundLoader.js.map +7 -0
  269. package/lib/esm/src/shared/utils/challengeBoundLoader.test.js +2 -0
  270. package/lib/esm/src/shared/utils/challengeBoundLoader.test.js.map +7 -0
  271. package/lib/esm/src/shared/utils/deviceModelIdCodec.js +2 -0
  272. package/lib/esm/src/shared/utils/deviceModelIdCodec.js.map +7 -0
  273. package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js +2 -0
  274. package/lib/esm/src/shared/utils/deviceModelIdCodec.test.js.map +7 -0
  275. package/lib/esm/src/shared/utils/signedDescriptorDto.js +2 -0
  276. package/lib/esm/src/shared/utils/signedDescriptorDto.js.map +7 -0
  277. package/lib/esm/src/shared/utils/signedDescriptorDto.test.js +2 -0
  278. package/lib/esm/src/shared/utils/signedDescriptorDto.test.js.map +7 -0
  279. package/lib/esm/src/shared/utils/uIntCodec.js +2 -0
  280. package/lib/esm/src/shared/utils/uIntCodec.js.map +7 -0
  281. package/lib/esm/src/shared/utils/uIntCodec.test.js +2 -0
  282. package/lib/esm/src/shared/utils/uIntCodec.test.js.map +7 -0
  283. package/lib/types/src/DefaultContextModule.d.ts.map +1 -1
  284. package/lib/types/src/di.d.ts.map +1 -1
  285. package/lib/types/src/index.d.ts +16 -0
  286. package/lib/types/src/index.d.ts.map +1 -1
  287. package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts +1 -0
  288. package/lib/types/src/modules/multichain/pki/model/KeyId.d.ts.map +1 -1
  289. package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts +1 -1
  290. package/lib/types/src/modules/multichain/transaction-check/loaders/SolanaTransactionCheckLoader.d.ts.map +1 -1
  291. package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts +17 -0
  292. package/lib/types/src/modules/solana/alt-resolution/data/AltResolutionDataSource.d.ts.map +1 -0
  293. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts +11 -0
  294. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.d.ts.map +1 -0
  295. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts +2 -0
  296. package/lib/types/src/modules/solana/alt-resolution/data/HttpAltResolutionDataSource.test.d.ts.map +1 -0
  297. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts +3 -0
  298. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionModuleFactory.d.ts.map +1 -0
  299. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts +5 -0
  300. package/lib/types/src/modules/solana/alt-resolution/di/altResolutionTypes.d.ts.map +1 -0
  301. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts +23 -0
  302. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.d.ts.map +1 -0
  303. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts +2 -0
  304. package/lib/types/src/modules/solana/alt-resolution/domain/AltResolutionContextLoader.test.d.ts.map +1 -0
  305. package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts +3 -0
  306. package/lib/types/src/modules/solana/enum-variant/di/enumVariantModuleFactory.d.ts.map +1 -0
  307. package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts +4 -0
  308. package/lib/types/src/modules/solana/enum-variant/di/enumVariantTypes.d.ts.map +1 -0
  309. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts +45 -0
  310. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.d.ts.map +1 -0
  311. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts +2 -0
  312. package/lib/types/src/modules/solana/enum-variant/domain/EnumVariantContextLoader.test.d.ts.map +1 -0
  313. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts +11 -0
  314. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.d.ts.map +1 -0
  315. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts +2 -0
  316. package/lib/types/src/modules/solana/instruction-info/data/HttpInstructionInfoDataSource.test.d.ts.map +1 -0
  317. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts +32 -0
  318. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDataSource.d.ts.map +1 -0
  319. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts +135 -0
  320. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoDto.d.ts.map +1 -0
  321. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts +23 -0
  322. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.d.ts.map +1 -0
  323. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts +2 -0
  324. package/lib/types/src/modules/solana/instruction-info/data/InstructionInfoMapper.test.d.ts.map +1 -0
  325. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts +3 -0
  326. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoModuleFactory.d.ts.map +1 -0
  327. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts +5 -0
  328. package/lib/types/src/modules/solana/instruction-info/di/instructionInfoTypes.d.ts.map +1 -0
  329. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts +39 -0
  330. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.d.ts.map +1 -0
  331. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts +2 -0
  332. package/lib/types/src/modules/solana/instruction-info/domain/InstructionInfoContextLoader.test.d.ts.map +1 -0
  333. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts +33 -2
  334. package/lib/types/src/modules/solana/model/SolanaClearSignContext.d.ts.map +1 -1
  335. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts +8 -1
  336. package/lib/types/src/modules/solana/model/SolanaContextTypes.d.ts.map +1 -1
  337. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts +126 -0
  338. package/lib/types/src/modules/solana/model/SolanaPayloads.d.ts.map +1 -1
  339. package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts +6 -5
  340. package/lib/types/src/modules/solana/model/SolanaTransactionScanChainId.d.ts.map +1 -1
  341. package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts +2 -5
  342. package/lib/types/src/modules/solana/owner-info/domain/solanaContextTypes.d.ts.map +1 -1
  343. package/lib/types/src/modules/solana/token/domain/TokenContextLoader.d.ts.map +1 -1
  344. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts +11 -0
  345. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.d.ts.map +1 -0
  346. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts +2 -0
  347. package/lib/types/src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.d.ts.map +1 -0
  348. package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts +15 -0
  349. package/lib/types/src/modules/solana/token-account-state/data/TokenAccountStateDataSource.d.ts.map +1 -0
  350. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts +3 -0
  351. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.d.ts.map +1 -0
  352. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts +5 -0
  353. package/lib/types/src/modules/solana/token-account-state/di/tokenAccountStateTypes.d.ts.map +1 -0
  354. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts +26 -0
  355. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.d.ts.map +1 -0
  356. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts +2 -0
  357. package/lib/types/src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.d.ts.map +1 -0
  358. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts +11 -0
  359. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.d.ts.map +1 -0
  360. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts +2 -0
  361. package/lib/types/src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.d.ts.map +1 -0
  362. package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts +24 -0
  363. package/lib/types/src/modules/solana/token-info/data/TokenInfoDataSource.d.ts.map +1 -0
  364. package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts +3 -0
  365. package/lib/types/src/modules/solana/token-info/di/tokenInfoModuleFactory.d.ts.map +1 -0
  366. package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts +5 -0
  367. package/lib/types/src/modules/solana/token-info/di/tokenInfoTypes.d.ts.map +1 -0
  368. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts +26 -0
  369. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.d.ts.map +1 -0
  370. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts +2 -0
  371. package/lib/types/src/modules/solana/token-info/domain/TokenInfoContextLoader.test.d.ts.map +1 -0
  372. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts +11 -0
  373. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -0
  374. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts +2 -0
  375. package/lib/types/src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.d.ts.map +1 -0
  376. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts +18 -0
  377. package/lib/types/src/modules/solana/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -0
  378. package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts +3 -0
  379. package/lib/types/src/modules/solana/trusted-name/di/trustedNameModuleFactory.d.ts.map +1 -0
  380. package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts +5 -0
  381. package/lib/types/src/modules/solana/trusted-name/di/trustedNameTypes.d.ts.map +1 -0
  382. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts +29 -0
  383. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -0
  384. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts +2 -0
  385. package/lib/types/src/modules/solana/trusted-name/domain/TrustedNameContextLoader.test.d.ts.map +1 -0
  386. package/lib/types/src/shared/model/ClearSignContext.d.ts +7 -1
  387. package/lib/types/src/shared/model/ClearSignContext.d.ts.map +1 -1
  388. package/lib/types/src/shared/utils/HexStringUtils.d.ts +7 -0
  389. package/lib/types/src/shared/utils/HexStringUtils.d.ts.map +1 -1
  390. package/lib/types/src/shared/utils/certificateCache.d.ts +23 -0
  391. package/lib/types/src/shared/utils/certificateCache.d.ts.map +1 -0
  392. package/lib/types/src/shared/utils/certificateCache.test.d.ts +2 -0
  393. package/lib/types/src/shared/utils/certificateCache.test.d.ts.map +1 -0
  394. package/lib/types/src/shared/utils/certificateResult.d.ts +26 -0
  395. package/lib/types/src/shared/utils/certificateResult.d.ts.map +1 -0
  396. package/lib/types/src/shared/utils/certificateResult.test.d.ts +2 -0
  397. package/lib/types/src/shared/utils/certificateResult.test.d.ts.map +1 -0
  398. package/lib/types/src/shared/utils/challengeBoundLoader.d.ts +43 -0
  399. package/lib/types/src/shared/utils/challengeBoundLoader.d.ts.map +1 -0
  400. package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts +2 -0
  401. package/lib/types/src/shared/utils/challengeBoundLoader.test.d.ts.map +1 -0
  402. package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts +7 -0
  403. package/lib/types/src/shared/utils/deviceModelIdCodec.d.ts.map +1 -0
  404. package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts +2 -0
  405. package/lib/types/src/shared/utils/deviceModelIdCodec.test.d.ts.map +1 -0
  406. package/lib/types/src/shared/utils/signedDescriptorDto.d.ts +15 -0
  407. package/lib/types/src/shared/utils/signedDescriptorDto.d.ts.map +1 -0
  408. package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts +2 -0
  409. package/lib/types/src/shared/utils/signedDescriptorDto.test.d.ts.map +1 -0
  410. package/lib/types/src/shared/utils/uIntCodec.d.ts +20 -0
  411. package/lib/types/src/shared/utils/uIntCodec.d.ts.map +1 -0
  412. package/lib/types/src/shared/utils/uIntCodec.test.d.ts +2 -0
  413. package/lib/types/src/shared/utils/uIntCodec.test.d.ts.map +1 -0
  414. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  415. package/package.json +6 -6
@@ -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 u=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var h=(r,e)=>{for(var o in e)m(r,o,{get:e[o],enumerable:!0})},D=(r,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!T.call(r,t)&&t!==o&&m(r,t,{get:()=>e[t],enumerable:!(n=u(e,t))||n.enumerable});return r};var C=r=>D(m({},"__esModule",{value:!0}),r),l=(r,e,o,n)=>{for(var t=n>1?void 0:n?u(e,o):e,i=r.length-1,a;i>=0;i--)(a=r[i])&&(t=(n?a(e,o,t):a(t))||t);return n&&t&&m(e,o,t),t},g=(r,e)=>(o,n)=>e(o,n,r);var E={};h(E,{HttpTokenAccountStateDataSource:()=>c});module.exports=C(E);var p=require("inversify"),s=require("purify-ts"),d=require("../../../../config/di/configTypes"),f=require("../../../../shared/network/di/networkTypes"),k=require("../../../../shared/utils/HexStringUtils"),y=require("../../../../shared/utils/signedDescriptorDto");let c=class{constructor(e,o){this.config=e;this.http=o}async getTokenAccountState({tokenAccount:e,challenge:o}){let n;try{n=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/solana/token-account-state/${e}`,{params:{challenge:o}})}catch(t){const i=t instanceof Error?t.message:String(t);return(0,s.Left)(new Error(`[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: ${i}`))}return y.signedDescriptorDtoCodec.decode(n).caseOf({Left:t=>(0,s.Left)(new Error(`[ContextModule] HttpTokenAccountStateDataSource: malformed response for ${e}: ${t}`)),Right:t=>{let i;try{i=k.HexStringUtils.hexToBytes(t.signedDescriptor)}catch(a){return(0,s.Left)(new Error(`[ContextModule] HttpTokenAccountStateDataSource: invalid hex in signedDescriptor for ${e}: ${a.message}`))}return(0,s.Right)({tokenAccount:e,descriptor:i,keyId:t.keyId,keyUsage:t.keyUsage})}})}};c=l([(0,p.injectable)(),g(0,(0,p.inject)(d.configTypes.Config)),g(1,(0,p.inject)(f.networkTypes.NetworkClient))],c);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?: string;\n account_address?: string;\n mint?: string;\n owner?: string;\n balance?: string;\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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource.test.ts"],
4
+ "sourcesContent": ["import { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpTokenAccountStateDataSource } from \"./HttpTokenAccountStateDataSource\";\nimport { type TokenAccountStateDataSource } from \"./TokenAccountStateDataSource\";\n\ndescribe(\"HttpTokenAccountStateDataSource\", () => {\n let datasource: TokenAccountStateDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const tokenAccount = \"TokenAccountAddrXXXXXXXXXXXXXXXXXXXXXXXXXXX\";\n const challenge = \"deadbeef\";\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: { url: \"https://nft.api.ledger.com\" },\n } as ContextModuleServiceConfig;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenAccountStateDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"calls the metadata endpoint with the challenge param\", async () => {\n httpMock.get.mockResolvedValue({\n descriptorType: \"token_account_state\",\n signedDescriptor: \"01020304\",\n keyId: \"tas_key\",\n keyUsage: \"coin_meta\",\n });\n\n await datasource.getTokenAccountState({ tokenAccount, challenge });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `https://nft.api.ledger.com/v2/solana/token-account-state/${tokenAccount}`,\n { params: { challenge } },\n );\n });\n\n it(\"decodes signedDescriptor hex into Uint8Array\", async () => {\n httpMock.get.mockResolvedValue({\n signedDescriptor: \"deadbeef\",\n keyId: \"k\",\n keyUsage: \"u\",\n });\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result).toEqual(\n Right({\n tokenAccount,\n descriptor: new Uint8Array([0xde, 0xad, 0xbe, 0xef]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n );\n });\n\n it(\"returns Left on malformed response (missing signedDescriptor)\", async () => {\n httpMock.get.mockResolvedValue({ keyId: \"k\", keyUsage: \"u\" });\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result.isLeft()).toBe(true);\n expect((result.extract() as Error).message).toMatch(\n new RegExp(\n String.raw`\\[ContextModule\\] HttpTokenAccountStateDataSource: malformed response for ${tokenAccount}:`,\n ),\n );\n });\n\n it(\"returns Left when signedDescriptor is not valid hex\", async () => {\n httpMock.get.mockResolvedValue({\n signedDescriptor: \"ZZZZ\",\n keyId: \"k\",\n keyUsage: \"u\",\n });\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result.isLeft()).toBe(true);\n expect((result.extract() as Error).message).toMatch(/invalid hex/);\n });\n\n it(\"returns Left when HTTP client throws\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"net\"));\n\n const result = await datasource.getTokenAccountState({\n tokenAccount,\n challenge,\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenAccountStateDataSource: Failed to fetch token account state: net\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "aACA,IAAAA,EAA4B,qBAC5BC,EAAqD,kBAIrDC,EAAgD,gDAGhD,YAAS,kCAAmC,IAAM,CAChD,IAAIC,EACAC,EACJ,MAAMC,EAAe,8CACfC,EAAY,WACZC,EAAqC,CACzC,sBAAuB,CAAE,IAAK,4BAA6B,CAC7D,KAEA,cAAW,IAAM,CACf,KAAG,cAAc,EACjBH,EAAW,CAAE,IAAK,KAAG,GAAG,CAAE,EAC1BD,EAAa,IAAI,kCACfI,EACAH,CACF,CACF,CAAC,KAED,MAAG,uDAAwD,SAAY,CACrEA,EAAS,IAAI,kBAAkB,CAC7B,eAAgB,sBAChB,iBAAkB,WAClB,MAAO,UACP,SAAU,WACZ,CAAC,EAED,MAAMD,EAAW,qBAAqB,CAAE,aAAAE,EAAc,UAAAC,CAAU,CAAC,KAEjE,UAAOF,EAAS,GAAG,EAAE,qBACnB,4DAA4DC,CAAY,GACxE,CAAE,OAAQ,CAAE,UAAAC,CAAU,CAAE,CAC1B,CACF,CAAC,KAED,MAAG,+CAAgD,SAAY,CAC7DF,EAAS,IAAI,kBAAkB,CAC7B,iBAAkB,WAClB,MAAO,IACP,SAAU,GACZ,CAAC,EAED,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,KAED,UAAOE,CAAM,EAAE,WACb,SAAM,CACJ,aAAAH,EACA,WAAY,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,EACnD,MAAO,IACP,SAAU,GACZ,CAAC,CACH,CACF,CAAC,KAED,MAAG,gEAAiE,SAAY,CAC9ED,EAAS,IAAI,kBAAkB,CAAE,MAAO,IAAK,SAAU,GAAI,CAAC,EAE5D,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,KAED,UAAOE,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,KACjC,UAAQA,EAAO,QAAQ,EAAY,OAAO,EAAE,QAC1C,IAAI,OACF,OAAO,gFAAgFH,CAAY,GACrG,CACF,CACF,CAAC,KAED,MAAG,sDAAuD,SAAY,CACpED,EAAS,IAAI,kBAAkB,CAC7B,iBAAkB,OAClB,MAAO,IACP,SAAU,GACZ,CAAC,EAED,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,KAED,UAAOE,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,KACjC,UAAQA,EAAO,QAAQ,EAAY,OAAO,EAAE,QAAQ,aAAa,CACnE,CAAC,KAED,MAAG,uCAAwC,SAAY,CACrDJ,EAAS,IAAI,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAE/C,MAAMI,EAAS,MAAML,EAAW,qBAAqB,CACnD,aAAAE,EACA,UAAAC,CACF,CAAC,KAED,UAAOE,CAAM,EAAE,WACb,QACE,IAAI,MACF,2FACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["import_purify_ts", "import_vitest", "import_HttpTokenAccountStateDataSource", "datasource", "httpMock", "tokenAccount", "challenge", "config", "result"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var u=(e,t,c,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of s(t))!i.call(e,o)&&o!==c&&n(e,o,{get:()=>t[o],enumerable:!(r=a(t,o))||r.enumerable});return e};var k=e=>u(n({},"__esModule",{value:!0}),e);var p={};module.exports=k(p);
2
+ //# sourceMappingURL=TokenAccountStateDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/data/TokenAccountStateDataSource.ts"],
4
+ "sourcesContent": ["import { type Either } from \"purify-ts\";\n\nexport type GetTokenAccountStateParams = {\n tokenAccount: string;\n challenge: string;\n};\n\nexport type TokenAccountStateResult = {\n tokenAccount: string;\n // Raw signed TLV bytes decoded from the backend response.\n descriptor: Uint8Array;\n keyId: string;\n keyUsage: string;\n};\n\nexport interface TokenAccountStateDataSource {\n getTokenAccountState(\n params: GetTokenAccountStateParams,\n ): Promise<Either<Error, TokenAccountStateResult>>;\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["TokenAccountStateDataSource_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var T=(t,o)=>{for(var n in o)c(t,n,{get:o[n],enumerable:!0})},f=(t,o,n,a)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of k(o))!A.call(t,e)&&e!==n&&c(t,e,{get:()=>o[e],enumerable:!(a=p(o,e))||a.enumerable});return t};var i=t=>f(c({},"__esModule",{value:!0}),t);var x={};T(x,{tokenAccountStateModuleFactory:()=>d});module.exports=i(x);var u=require("inversify"),m=require("../../../../modules/solana/token-account-state/data/HttpTokenAccountStateDataSource"),r=require("../../../../modules/solana/token-account-state/di/tokenAccountStateTypes"),S=require("../../../../modules/solana/token-account-state/domain/TokenAccountStateContextLoader");const d=()=>new u.ContainerModule(({bind:t})=>{t(r.tokenAccountStateTypes.TokenAccountStateDataSource).to(m.HttpTokenAccountStateDataSource),t(r.tokenAccountStateTypes.TokenAccountStateContextLoader).to(S.TokenAccountStateContextLoader)});0&&(module.exports={tokenAccountStateModuleFactory});
2
+ //# sourceMappingURL=tokenAccountStateModuleFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/di/tokenAccountStateModuleFactory.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpTokenAccountStateDataSource } from \"@/modules/solana/token-account-state/data/HttpTokenAccountStateDataSource\";\nimport { tokenAccountStateTypes } from \"@/modules/solana/token-account-state/di/tokenAccountStateTypes\";\nimport { TokenAccountStateContextLoader } from \"@/modules/solana/token-account-state/domain/TokenAccountStateContextLoader\";\n\nexport const tokenAccountStateModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(tokenAccountStateTypes.TokenAccountStateDataSource).to(\n HttpTokenAccountStateDataSource,\n );\n bind(tokenAccountStateTypes.TokenAccountStateContextLoader).to(\n TokenAccountStateContextLoader,\n );\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAAgD,qFAChDC,EAAuC,0EACvCC,EAA+C,sFAExC,MAAML,EAAiC,IAC5C,IAAI,kBAAgB,CAAC,CAAE,KAAAM,CAAK,IAAM,CAChCA,EAAK,yBAAuB,2BAA2B,EAAE,GACvD,iCACF,EACAA,EAAK,yBAAuB,8BAA8B,EAAE,GAC1D,gCACF,CACF,CAAC",
6
+ "names": ["tokenAccountStateModuleFactory_exports", "__export", "tokenAccountStateModuleFactory", "__toCommonJS", "import_inversify", "import_HttpTokenAccountStateDataSource", "import_tokenAccountStateTypes", "import_TokenAccountStateContextLoader", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var k=(o,t)=>{for(var c in t)n(o,c,{get:t[c],enumerable:!0})},A=(o,t,c,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of r(t))!u.call(o,e)&&e!==c&&n(o,e,{get:()=>t[e],enumerable:!(a=S(t,e))||a.enumerable});return o};var T=o=>A(n({},"__esModule",{value:!0}),o);var y={};k(y,{tokenAccountStateTypes:()=>x});module.exports=T(y);const x={TokenAccountStateDataSource:Symbol.for("TokenAccountStateDataSource"),TokenAccountStateContextLoader:Symbol.for("TokenAccountStateContextLoader")};0&&(module.exports={tokenAccountStateTypes});
2
+ //# sourceMappingURL=tokenAccountStateTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/di/tokenAccountStateTypes.ts"],
4
+ "sourcesContent": ["export const tokenAccountStateTypes = {\n TokenAccountStateDataSource: Symbol.for(\"TokenAccountStateDataSource\"),\n TokenAccountStateContextLoader: Symbol.for(\"TokenAccountStateContextLoader\"),\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAyB,CACpC,4BAA6B,OAAO,IAAI,6BAA6B,EACrE,+BAAgC,OAAO,IAAI,gCAAgC,CAC7E",
6
+ "names": ["tokenAccountStateTypes_exports", "__export", "tokenAccountStateTypes", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var l=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var h=(r,e)=>{for(var t in e)l(r,t,{get:e[t],enumerable:!0})},v=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of y(e))!k.call(r,n)&&n!==t&&l(r,n,{get:()=>e[n],enumerable:!(o=S(e,n))||o.enumerable});return r};var x=r=>v(l({},"__esModule",{value:!0}),r),g=(r,e,t,o)=>{for(var n=o>1?void 0:o?S(e,t):e,u=r.length-1,p;u>=0;u--)(p=r[u])&&(n=(o?p(e,t,n):p(n))||n);return o&&n&&l(e,t,n),n},d=(r,e)=>(t,o)=>e(t,o,r);var O={};h(O,{TokenAccountStateContextLoader:()=>i});module.exports=x(O);var c=require("inversify"),a=require("purify-ts"),C=require("../../../../config/di/configTypes"),T=require("../../../../modules/multichain/pki/di/pkiTypes"),m=require("../../../../modules/solana/token-account-state/di/tokenAccountStateTypes"),s=require("../../../../shared/model/ClearSignContext"),f=require("../../../../shared/utils/challengeBoundLoader"),A=require("../../../../shared/utils/deviceModelIdCodec");const L=[s.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE],I=a.Codec.interface({tokenAccount:a.string,challenge:a.string}),P=a.Codec.interface({deviceModelId:A.deviceModelIdCodec,requests:(0,a.array)(I)});let i=class{constructor(e,t,o){this.dataSource=e;this.certificateLoader=t;this.logger=o("TokenAccountStateContextLoader")}logger;canHandle(e,t){return L.every(o=>t.includes(o))?P.decode(e).caseOf({Left:()=>!1,Right:({requests:o})=>o.length>0&&o.every(n=>n.tokenAccount.length>0&&n.challenge.length>0)}):!1}async load(e){return(0,f.loadChallengeBoundContexts)({requests:e.requests,deviceModelId:e.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"TOKEN_ACCOUNT_STATE",fetch:t=>this.dataSource.getTokenAccountState(t),toContext:(t,o)=>{const n={descriptor:t.descriptor};return{type:s.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,payload:n,certificate:o}},describe:t=>({tokenAccount:t.tokenAccount})})}};i=g([(0,c.injectable)(),d(0,(0,c.inject)(m.tokenAccountStateTypes.TokenAccountStateDataSource)),d(1,(0,c.inject)(T.pkiTypes.PkiCertificateLoader)),d(2,(0,c.inject)(C.configTypes.ContextModuleLoggerFactory))],i);0&&(module.exports={TokenAccountStateContextLoader});
2
+ //# sourceMappingURL=TokenAccountStateContextLoader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.ts"],
4
+ "sourcesContent": ["import {\n type DeviceModelId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { array, Codec, string } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type SolanaTokenAccountStatePayload } from \"@/modules/solana/model/SolanaPayloads\";\nimport { type TokenAccountStateDataSource } from \"@/modules/solana/token-account-state/data/TokenAccountStateDataSource\";\nimport { tokenAccountStateTypes } from \"@/modules/solana/token-account-state/di/tokenAccountStateTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { loadChallengeBoundContexts } from \"@/shared/utils/challengeBoundLoader\";\nimport { deviceModelIdCodec } from \"@/shared/utils/deviceModelIdCodec\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n];\n\n/**\n * One token-account-state request. The caller must obtain a fresh challenge\n * immediately before fetching each entry.\n */\nexport type SolanaTokenAccountStateRequest = {\n tokenAccount: string;\n challenge: string;\n};\n\nexport type SolanaTokenAccountStateContextInput = {\n deviceModelId: DeviceModelId;\n requests: SolanaTokenAccountStateRequest[];\n};\n\nconst tokenAccountStateRequestCodec = Codec.interface({\n tokenAccount: string,\n challenge: string,\n});\n\nconst solanaTokenAccountStateInputCodec = Codec.interface({\n deviceModelId: deviceModelIdCodec,\n requests: array(tokenAccountStateRequestCodec),\n});\n\n@injectable()\nexport class TokenAccountStateContextLoader\n implements ContextLoader<SolanaTokenAccountStateContextInput>\n{\n private readonly logger: LoggerPublisherService;\n\n constructor(\n @inject(tokenAccountStateTypes.TokenAccountStateDataSource)\n private readonly dataSource: TokenAccountStateDataSource,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"TokenAccountStateContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTokenAccountStateContextInput {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) return false;\n return solanaTokenAccountStateInputCodec.decode(input).caseOf({\n Left: () => false,\n Right: ({ requests }) =>\n requests.length > 0 &&\n requests.every(\n (r) => r.tokenAccount.length > 0 && r.challenge.length > 0,\n ),\n });\n }\n\n public async load(\n input: SolanaTokenAccountStateContextInput,\n ): Promise<ClearSignContext[]> {\n return loadChallengeBoundContexts({\n requests: input.requests,\n deviceModelId: input.deviceModelId,\n certificateLoader: this.certificateLoader,\n logger: this.logger,\n label: \"TOKEN_ACCOUNT_STATE\",\n fetch: (request) => this.dataSource.getTokenAccountState(request),\n toContext: (value, certificate) => {\n const payload: SolanaTokenAccountStatePayload = {\n descriptor: value.descriptor,\n };\n return {\n type: ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n payload,\n certificate,\n };\n },\n describe: (request) => ({ tokenAccount: request.tokenAccount }),\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAAmC,qBACnCC,EAAqC,qBAErCC,EAA4B,mCAC5BC,EAAyB,gDAIzBC,EAAuC,0EAEvCC,EAGO,2CACPC,EAA2C,+CAC3CC,EAAmC,6CAEnC,MAAMC,EAA0C,CAC9C,uBAAqB,0BACvB,EAgBMC,EAAgC,QAAM,UAAU,CACpD,aAAc,SACd,UAAW,QACb,CAAC,EAEKC,EAAoC,QAAM,UAAU,CACxD,cAAe,qBACf,YAAU,SAAMD,CAA6B,CAC/C,CAAC,EAGM,IAAME,EAAN,KAEP,CAGE,YAEmBC,EAEAC,EAEjBC,EACA,CALiB,gBAAAF,EAEA,uBAAAC,EAIjB,KAAK,OAASC,EAAc,gCAAgC,CAC9D,CAXiB,OAaV,UACLC,EACAC,EAC8C,CAC9C,OAAKR,EAAgB,MAAOS,GAAMD,EAAc,SAASC,CAAC,CAAC,EACpDP,EAAkC,OAAOK,CAAK,EAAE,OAAO,CAC5D,KAAM,IAAM,GACZ,MAAO,CAAC,CAAE,SAAAG,CAAS,IACjBA,EAAS,OAAS,GAClBA,EAAS,MACNC,GAAMA,EAAE,aAAa,OAAS,GAAKA,EAAE,UAAU,OAAS,CAC3D,CACJ,CAAC,EARoE,EASvE,CAEA,MAAa,KACXJ,EAC6B,CAC7B,SAAO,8BAA2B,CAChC,SAAUA,EAAM,SAChB,cAAeA,EAAM,cACrB,kBAAmB,KAAK,kBACxB,OAAQ,KAAK,OACb,MAAO,sBACP,MAAQK,GAAY,KAAK,WAAW,qBAAqBA,CAAO,EAChE,UAAW,CAACC,EAAOC,IAAgB,CACjC,MAAMC,EAA0C,CAC9C,WAAYF,EAAM,UACpB,EACA,MAAO,CACL,KAAM,uBAAqB,2BAC3B,QAAAE,EACA,YAAAD,CACF,CACF,EACA,SAAWF,IAAa,CAAE,aAAcA,EAAQ,YAAa,EAC/D,CAAC,CACH,CACF,EAtDaT,EAANa,EAAA,IADN,cAAW,EAOPC,EAAA,eAAO,yBAAuB,2BAA2B,GAEzDA,EAAA,eAAO,WAAS,oBAAoB,GAEpCA,EAAA,eAAO,cAAY,0BAA0B,IAVrCd",
6
+ "names": ["TokenAccountStateContextLoader_exports", "__export", "TokenAccountStateContextLoader", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_pkiTypes", "import_tokenAccountStateTypes", "import_ClearSignContext", "import_challengeBoundLoader", "import_deviceModelIdCodec", "SUPPORTED_TYPES", "tokenAccountStateRequestCodec", "solanaTokenAccountStateInputCodec", "TokenAccountStateContextLoader", "dataSource", "certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "requests", "r", "request", "value", "certificate", "payload", "__decorateClass", "__decorateParam"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),e=require("vitest"),o=require("../../../../shared/model/ClearSignContext"),A=require("./TokenAccountStateContextLoader");const u=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]}),x={keyUsageNumber:8,payload:new Uint8Array([66])},a="TokenAccountUSDCxxxxxxxxxxxxxxxxxxxxxxxxxxx",d="TokenAccountSOLxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";(0,e.describe)("TokenAccountStateContextLoader",()=>{let i,l;(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),i={getTokenAccountState:e.vi.fn()},l={loadCertificate:e.vi.fn().mockResolvedValue(x)}});const r=()=>new A.TokenAccountStateContextLoader(i,l,u);(0,e.describe)("canHandle",()=>{(0,e.it)("returns true when SOLANA_TOKEN_ACCOUNT_STATE is requested and requests are well-formed",()=>{(0,e.expect)(r().canHandle({deviceModelId:c.DeviceModelId.NANO_X,requests:[{tokenAccount:a,challenge:"c1"}]},[o.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE])).toBe(!0)}),(0,e.it)("returns false when SOLANA_TOKEN_ACCOUNT_STATE is not requested",()=>{(0,e.expect)(r().canHandle({deviceModelId:c.DeviceModelId.NANO_X,requests:[{tokenAccount:a,challenge:"c1"}]},[o.ClearSignContextType.SOLANA_TOKEN])).toBe(!1)}),(0,e.it)("returns false on malformed input",()=>{const t=r(),n=[o.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE];(0,e.expect)(t.canHandle({requests:[]},n)).toBe(!1),(0,e.expect)(t.canHandle({requests:[{tokenAccount:"",challenge:"c"}]},n)).toBe(!1),(0,e.expect)(t.canHandle({requests:[{tokenAccount:a,challenge:""}]},n)).toBe(!1),(0,e.expect)(t.canHandle(null,n)).toBe(!1)})}),(0,e.describe)("load",()=>{(0,e.it)("emits one SOLANA_TOKEN_ACCOUNT_STATE per request with certificate",async()=>{e.vi.spyOn(i,"getTokenAccountState").mockImplementation(async({tokenAccount:n})=>(0,s.Right)({tokenAccount:n,descriptor:new Uint8Array([171,205]),keyId:"k1",keyUsage:"coin_meta"}));const t=await r().load({deviceModelId:c.DeviceModelId.NANO_X,requests:[{tokenAccount:a,challenge:"c1"},{tokenAccount:d,challenge:"c2"}]});(0,e.expect)(t).toHaveLength(2),(0,e.expect)(t[0]).toMatchObject({type:o.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,payload:{descriptor:new Uint8Array([171,205])},certificate:x}),(0,e.expect)(l.loadCertificate).toHaveBeenCalledWith({keyId:"k1",keyUsage:"coin_meta",targetDevice:c.DeviceModelId.NANO_X})}),(0,e.it)("emits an ERROR (not a cert-less success) when the certificate resolves undefined",async()=>{e.vi.spyOn(l,"loadCertificate").mockResolvedValue(void 0),e.vi.spyOn(i,"getTokenAccountState").mockImplementation(async({tokenAccount:n})=>(0,s.Right)({tokenAccount:n,descriptor:new Uint8Array([171]),keyId:"k",keyUsage:"u"}));const t=await r().load({deviceModelId:c.DeviceModelId.NANO_X,requests:[{tokenAccount:a,challenge:"c1"}]});(0,e.expect)(t).toHaveLength(1),(0,e.expect)(t[0]?.type).toBe(o.ClearSignContextType.ERROR),(0,e.expect)(t[0].error.message).toMatch(/certificate is missing/)}),(0,e.it)("emits an ERROR per failing request and keeps the others",async()=>{e.vi.spyOn(i,"getTokenAccountState").mockImplementation(async({tokenAccount:n})=>n===a?(0,s.Right)({tokenAccount:n,descriptor:new Uint8Array([171]),keyId:"k",keyUsage:"u"}):(0,s.Left)(new Error("upstream-404")));const t=await r().load({deviceModelId:c.DeviceModelId.NANO_X,requests:[{tokenAccount:a,challenge:"c1"},{tokenAccount:d,challenge:"c2"}]});(0,e.expect)(t[0]?.type).toBe(o.ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE),(0,e.expect)(t[1]?.type).toBe(o.ClearSignContextType.ERROR)})})});
2
+ //# sourceMappingURL=TokenAccountStateContextLoader.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-account-state/domain/TokenAccountStateContextLoader.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type TokenAccountStateDataSource } from \"@/modules/solana/token-account-state/data/TokenAccountStateDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { TokenAccountStateContextLoader } from \"./TokenAccountStateContextLoader\";\n\nconst mockLoggerFactory = () => ({\n debug: vi.fn(),\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n subscribers: [],\n});\n\nconst mockCertificate = {\n keyUsageNumber: 8,\n payload: new Uint8Array([0x42]),\n};\n\nconst TA_USDC = \"TokenAccountUSDCxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\nconst TA_SOL = \"TokenAccountSOLxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\";\n\ndescribe(\"TokenAccountStateContextLoader\", () => {\n let dataSource: TokenAccountStateDataSource;\n let certificateLoader: PkiCertificateLoader;\n\n beforeEach(() => {\n vi.restoreAllMocks();\n dataSource = {\n getTokenAccountState: vi.fn(),\n };\n certificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n };\n });\n\n const makeLoader = () =>\n new TokenAccountStateContextLoader(\n dataSource,\n certificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_TOKEN_ACCOUNT_STATE is requested and requests are well-formed\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n requests: [{ tokenAccount: TA_USDC, challenge: \"c1\" }],\n },\n [ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_TOKEN_ACCOUNT_STATE is not requested\", () => {\n expect(\n makeLoader().canHandle(\n {\n deviceModelId: DeviceModelId.NANO_X,\n requests: [{ tokenAccount: TA_USDC, challenge: \"c1\" }],\n },\n [ClearSignContextType.SOLANA_TOKEN],\n ),\n ).toBe(false);\n });\n\n it(\"returns false on malformed input\", () => {\n const loader = makeLoader();\n const types = [ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE];\n expect(loader.canHandle({ requests: [] } as any, types)).toBe(false);\n expect(\n loader.canHandle(\n { requests: [{ tokenAccount: \"\", challenge: \"c\" }] } as any,\n types,\n ),\n ).toBe(false);\n expect(\n loader.canHandle(\n { requests: [{ tokenAccount: TA_USDC, challenge: \"\" }] } as any,\n types,\n ),\n ).toBe(false);\n expect(loader.canHandle(null, types)).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"emits one SOLANA_TOKEN_ACCOUNT_STATE per request with certificate\", async () => {\n vi.spyOn(dataSource, \"getTokenAccountState\").mockImplementation(\n async ({ tokenAccount }) =>\n Right({\n tokenAccount,\n descriptor: new Uint8Array([0xab, 0xcd]),\n keyId: \"k1\",\n keyUsage: \"coin_meta\",\n }),\n );\n\n const result = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [\n { tokenAccount: TA_USDC, challenge: \"c1\" },\n { tokenAccount: TA_SOL, challenge: \"c2\" },\n ],\n });\n\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n payload: { descriptor: new Uint8Array([0xab, 0xcd]) },\n certificate: mockCertificate,\n });\n expect(certificateLoader.loadCertificate).toHaveBeenCalledWith({\n keyId: \"k1\",\n keyUsage: \"coin_meta\",\n targetDevice: DeviceModelId.NANO_X,\n });\n });\n\n it(\"emits an ERROR (not a cert-less success) when the certificate resolves undefined\", async () => {\n vi.spyOn(certificateLoader, \"loadCertificate\").mockResolvedValue(\n undefined,\n );\n vi.spyOn(dataSource, \"getTokenAccountState\").mockImplementation(\n async ({ tokenAccount }) =>\n Right({\n tokenAccount,\n descriptor: new Uint8Array([0xab]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n );\n\n const out = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [{ tokenAccount: TA_USDC, challenge: \"c1\" }],\n });\n\n expect(out).toHaveLength(1);\n expect(out[0]?.type).toBe(ClearSignContextType.ERROR);\n expect((out[0] as any).error.message).toMatch(/certificate is missing/);\n });\n\n it(\"emits an ERROR per failing request and keeps the others\", async () => {\n vi.spyOn(dataSource, \"getTokenAccountState\").mockImplementation(\n async ({ tokenAccount }) => {\n if (tokenAccount === TA_USDC) {\n return Right({\n tokenAccount,\n descriptor: new Uint8Array([0xab]),\n keyId: \"k\",\n keyUsage: \"u\",\n });\n }\n return Left(new Error(\"upstream-404\"));\n },\n );\n\n const out = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n requests: [\n { tokenAccount: TA_USDC, challenge: \"c1\" },\n { tokenAccount: TA_SOL, challenge: \"c2\" },\n ],\n });\n\n expect(out[0]?.type).toBe(\n ClearSignContextType.SOLANA_TOKEN_ACCOUNT_STATE,\n );\n expect(out[1]?.type).toBe(ClearSignContextType.ERROR);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_ClearSignContext", "import_TokenAccountStateContextLoader", "mockLoggerFactory", "mockCertificate", "TA_USDC", "TA_SOL", "dataSource", "certificateLoader", "makeLoader", "loader", "types", "tokenAccount", "result", "out"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var f=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var C=(n,e)=>{for(var i in e)f(n,i,{get:e[i],enumerable:!0})},y=(n,e,i,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of g(e))!h.call(n,o)&&o!==i&&f(n,o,{get:()=>e[o],enumerable:!(r=l(e,o))||r.enumerable});return n};var w=n=>y(f({},"__esModule",{value:!0}),n),m=(n,e,i,r)=>{for(var o=r>1?void 0:r?l(e,i):e,a=n.length-1,p;a>=0;a--)(p=n[a])&&(o=(r?p(e,i,o):p(o))||o);return r&&o&&f(e,i,o),o},d=(n,e)=>(i,r)=>e(i,r,n);var I={};C(I,{HttpTokenInfoDataSource:()=>c});module.exports=w(I);var s=require("inversify"),t=require("purify-ts"),u=require("../../../../config/di/configTypes"),k=require("../../../../shared/network/di/networkTypes");const E=t.Codec.interface({prod:(0,t.optional)(t.string),test:(0,t.optional)(t.string)}),T=t.Codec.interface({descriptor:t.Codec.interface({data:t.string,signatures:E})});let c=class{constructor(e,i){this.config=e;this.http=i}async getTokenInfo({mint:e,network:i}){let r;try{r=await this.http.get(`${this.config.cal.url}/tokens`,{params:{contract_address:e,network:i,output:"contract_address,network,descriptor",ref:`branch:${this.config.cal.branch}`}})}catch(o){const a=o instanceof Error?o.message:String(o);return(0,t.Left)(new Error(`[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: ${a}`))}return!Array.isArray(r)||r.length===0?(0,t.Left)(new Error(`[ContextModule] HttpTokenInfoDataSource: no token info for mint ${e}`)):T.decode(r[0]).caseOf({Left:o=>(0,t.Left)(new Error(`[ContextModule] HttpTokenInfoDataSource: malformed descriptor for mint ${e}: ${o}`)),Right:o=>(0,t.Right)({mint:e,descriptor:o.descriptor})})}};c=m([(0,s.injectable)(),d(0,(0,s.inject)(u.configTypes.Config)),d(1,(0,s.inject)(k.networkTypes.NetworkClient))],c);0&&(module.exports={HttpTokenInfoDataSource});
2
+ //# sourceMappingURL=HttpTokenInfoDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/data/HttpTokenInfoDataSource.ts"],
4
+ "sourcesContent": ["import { DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { Codec, Either, Left, optional, Right, string } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { networkTypes } from \"@/shared/network/di/networkTypes\";\n\nimport {\n type GetTokenInfoParams,\n type TokenInfoDataSource,\n type TokenInfoResult,\n} from \"./TokenInfoDataSource\";\n\nconst calSignaturesCodec = Codec.interface({\n prod: optional(string),\n test: optional(string),\n});\n\nconst tokenInfoResponseEntryCodec = Codec.interface({\n descriptor: Codec.interface({\n data: string,\n signatures: calSignaturesCodec,\n }),\n});\n\n@injectable()\nexport class HttpTokenInfoDataSource implements TokenInfoDataSource {\n constructor(\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(networkTypes.NetworkClient)\n private readonly http: DmkNetworkClient,\n ) {}\n\n public async getTokenInfo({\n mint,\n network,\n }: GetTokenInfoParams): Promise<Either<Error, TokenInfoResult>> {\n let data: unknown;\n try {\n data = await this.http.get(`${this.config.cal.url}/tokens`, {\n params: {\n contract_address: mint,\n network,\n output: \"contract_address,network,descriptor\",\n ref: `branch:${this.config.cal.branch}`,\n },\n });\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: ${reason}`,\n ),\n );\n }\n\n if (!Array.isArray(data) || data.length === 0) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: no token info for mint ${mint}`,\n ),\n );\n }\n\n return tokenInfoResponseEntryCodec\n .decode(data[0])\n .caseOf<Either<Error, TokenInfoResult>>({\n Left: (error) =>\n Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: malformed descriptor for mint ${mint}: ${error}`,\n ),\n ),\n Right: (entry) =>\n Right({\n mint,\n descriptor: entry.descriptor,\n }),\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAAmC,qBACnCC,EAA6D,qBAE7DC,EAA4B,mCAE5BC,EAA6B,4CAQ7B,MAAMC,EAAqB,QAAM,UAAU,CACzC,QAAM,YAAS,QAAM,EACrB,QAAM,YAAS,QAAM,CACvB,CAAC,EAEKC,EAA8B,QAAM,UAAU,CAClD,WAAY,QAAM,UAAU,CAC1B,KAAM,SACN,WAAYD,CACd,CAAC,CACH,CAAC,EAGM,IAAME,EAAN,KAA6D,CAClE,YAEmBC,EAEAC,EACjB,CAHiB,YAAAD,EAEA,UAAAC,CAChB,CAEH,MAAa,aAAa,CACxB,KAAAC,EACA,QAAAC,CACF,EAAgE,CAC9D,IAAIC,EACJ,GAAI,CACFA,EAAO,MAAM,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,UAAW,CAC1D,OAAQ,CACN,iBAAkBF,EAClB,QAAAC,EACA,OAAQ,sCACR,IAAK,UAAU,KAAK,OAAO,IAAI,MAAM,EACvC,CACF,CAAC,CACH,OAASE,EAAO,CACd,MAAMC,EAASD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EACpE,SAAO,QACL,IAAI,MACF,wEAAwEC,CAAM,EAChF,CACF,CACF,CAEA,MAAI,CAAC,MAAM,QAAQF,CAAI,GAAKA,EAAK,SAAW,KACnC,QACL,IAAI,MACF,mEAAmEF,CAAI,EACzE,CACF,EAGKJ,EACJ,OAAOM,EAAK,CAAC,CAAC,EACd,OAAuC,CACtC,KAAOC,MACL,QACE,IAAI,MACF,0EAA0EH,CAAI,KAAKG,CAAK,EAC1F,CACF,EACF,MAAQE,MACN,SAAM,CACJ,KAAAL,EACA,WAAYK,EAAM,UACpB,CAAC,CACL,CAAC,CACL,CACF,EAvDaR,EAANS,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,eAAa,aAAa,IAJzBV",
6
+ "names": ["HttpTokenInfoDataSource_exports", "__export", "HttpTokenInfoDataSource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "calSignaturesCodec", "tokenInfoResponseEntryCodec", "HttpTokenInfoDataSource", "config", "http", "mint", "network", "data", "error", "reason", "entry", "__decorateClass", "__decorateParam"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var s=require("purify-ts"),e=require("vitest"),c=require("./HttpTokenInfoDataSource");(0,e.describe)("HttpTokenInfoDataSource",()=>{let n,o;const t="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",a="solana-mainnet",i={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}};(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),o={get:e.vi.fn()},n=new c.HttpTokenInfoDataSource(i,o)}),(0,e.it)("calls /tokens with contract_address, network and ref params",async()=>{o.get.mockResolvedValue([{contract_address:t,network:"solana-mainnet",descriptor:{data:"01020304",signatures:{prod:"p",test:"t"}}}]),await n.getTokenInfo({mint:t,network:a}),(0,e.expect)(o.get).toHaveBeenCalledWith("https://crypto-assets-service.api.ledger.com/v1/tokens",{params:{contract_address:t,network:a,output:"contract_address,network,descriptor",ref:"branch:main"}})}),(0,e.it)("returns Right on success",async()=>{o.get.mockResolvedValue([{contract_address:t,descriptor:{data:"01020304",signatures:{prod:"psig",test:"tsig"}}}]);const r=await n.getTokenInfo({mint:t,network:a});(0,e.expect)(r).toEqual((0,s.Right)({mint:t,descriptor:{data:"01020304",signatures:{prod:"psig",test:"tsig"}}}))}),(0,e.it)("returns Left when response is empty",async()=>{o.get.mockResolvedValue([]);const r=await n.getTokenInfo({mint:t,network:a});(0,e.expect)(r).toEqual((0,s.Left)(new Error(`[ContextModule] HttpTokenInfoDataSource: no token info for mint ${t}`)))}),(0,e.it)("returns Left when descriptor is malformed",async()=>{o.get.mockResolvedValue([{contract_address:t}]);const r=await n.getTokenInfo({mint:t,network:a});(0,e.expect)(r.isLeft()).toBe(!0),(0,e.expect)(r.extract().message).toMatch(new RegExp(String.raw`\[ContextModule\] HttpTokenInfoDataSource: malformed descriptor for mint ${t}:`))}),(0,e.it)("returns Left when HTTP client throws",async()=>{o.get.mockRejectedValue(new Error("net"));const r=await n.getTokenInfo({mint:t,network:a});(0,e.expect)(r).toEqual((0,s.Left)(new Error("[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: net")))})});
2
+ //# sourceMappingURL=HttpTokenInfoDataSource.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/data/HttpTokenInfoDataSource.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpTokenInfoDataSource } from \"./HttpTokenInfoDataSource\";\nimport { type TokenInfoDataSource } from \"./TokenInfoDataSource\";\n\ndescribe(\"HttpTokenInfoDataSource\", () => {\n let datasource: TokenInfoDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const mint = \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\";\n const network = \"solana-mainnet\";\n const config: ContextModuleServiceConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleServiceConfig;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpTokenInfoDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"calls /tokens with contract_address, network and ref params\", async () => {\n httpMock.get.mockResolvedValue([\n {\n contract_address: mint,\n network: \"solana-mainnet\",\n descriptor: { data: \"01020304\", signatures: { prod: \"p\", test: \"t\" } },\n },\n ]);\n\n await datasource.getTokenInfo({ mint, network });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n \"https://crypto-assets-service.api.ledger.com/v1/tokens\",\n {\n params: {\n contract_address: mint,\n network,\n output: \"contract_address,network,descriptor\",\n ref: \"branch:main\",\n },\n },\n );\n });\n\n it(\"returns Right on success\", async () => {\n httpMock.get.mockResolvedValue([\n {\n contract_address: mint,\n descriptor: {\n data: \"01020304\",\n signatures: { prod: \"psig\", test: \"tsig\" },\n },\n },\n ]);\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result).toEqual(\n Right({\n mint,\n descriptor: {\n data: \"01020304\",\n signatures: { prod: \"psig\", test: \"tsig\" },\n },\n }),\n );\n });\n\n it(\"returns Left when response is empty\", async () => {\n httpMock.get.mockResolvedValue([]);\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result).toEqual(\n Left(\n new Error(\n `[ContextModule] HttpTokenInfoDataSource: no token info for mint ${mint}`,\n ),\n ),\n );\n });\n\n it(\"returns Left when descriptor is malformed\", async () => {\n httpMock.get.mockResolvedValue([{ contract_address: mint } as any]);\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result.isLeft()).toBe(true);\n expect((result.extract() as Error).message).toMatch(\n new RegExp(\n String.raw`\\[ContextModule\\] HttpTokenInfoDataSource: malformed descriptor for mint ${mint}:`,\n ),\n );\n });\n\n it(\"returns Left when HTTP client throws\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"net\"));\n\n const result = await datasource.getTokenInfo({ mint, network });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenInfoDataSource: Failed to fetch token info: net\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "aAEA,IAAAA,EAA4B,qBAC5BC,EAAqD,kBAIrDC,EAAwC,wCAGxC,YAAS,0BAA2B,IAAM,CACxC,IAAIC,EACAC,EACJ,MAAMC,EAAO,+CACPC,EAAU,iBACVC,EAAqC,CACzC,IAAK,CACH,IAAK,kDACL,KAAM,OACN,OAAQ,MACV,CACF,KAEA,cAAW,IAAM,CACf,KAAG,cAAc,EACjBH,EAAW,CAAE,IAAK,KAAG,GAAG,CAAE,EAC1BD,EAAa,IAAI,0BACfI,EACAH,CACF,CACF,CAAC,KAED,MAAG,8DAA+D,SAAY,CAC5EA,EAAS,IAAI,kBAAkB,CAC7B,CACE,iBAAkBC,EAClB,QAAS,iBACT,WAAY,CAAE,KAAM,WAAY,WAAY,CAAE,KAAM,IAAK,KAAM,GAAI,CAAE,CACvE,CACF,CAAC,EAED,MAAMF,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,KAE/C,UAAOF,EAAS,GAAG,EAAE,qBACnB,yDACA,CACE,OAAQ,CACN,iBAAkBC,EAClB,QAAAC,EACA,OAAQ,sCACR,IAAK,aACP,CACF,CACF,CACF,CAAC,KAED,MAAG,2BAA4B,SAAY,CACzCF,EAAS,IAAI,kBAAkB,CAC7B,CACE,iBAAkBC,EAClB,WAAY,CACV,KAAM,WACN,WAAY,CAAE,KAAM,OAAQ,KAAM,MAAO,CAC3C,CACF,CACF,CAAC,EAED,MAAMG,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,KAE9D,UAAOE,CAAM,EAAE,WACb,SAAM,CACJ,KAAAH,EACA,WAAY,CACV,KAAM,WACN,WAAY,CAAE,KAAM,OAAQ,KAAM,MAAO,CAC3C,CACF,CAAC,CACH,CACF,CAAC,KAED,MAAG,sCAAuC,SAAY,CACpDD,EAAS,IAAI,kBAAkB,CAAC,CAAC,EAEjC,MAAMI,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,KAE9D,UAAOE,CAAM,EAAE,WACb,QACE,IAAI,MACF,mEAAmEH,CAAI,EACzE,CACF,CACF,CACF,CAAC,KAED,MAAG,4CAA6C,SAAY,CAC1DD,EAAS,IAAI,kBAAkB,CAAC,CAAE,iBAAkBC,CAAK,CAAQ,CAAC,EAElE,MAAMG,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,KAE9D,UAAOE,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,KACjC,UAAQA,EAAO,QAAQ,EAAY,OAAO,EAAE,QAC1C,IAAI,OACF,OAAO,+EAA+EH,CAAI,GAC5F,CACF,CACF,CAAC,KAED,MAAG,uCAAwC,SAAY,CACrDD,EAAS,IAAI,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAE/C,MAAMI,EAAS,MAAML,EAAW,aAAa,CAAE,KAAAE,EAAM,QAAAC,CAAQ,CAAC,KAE9D,UAAOE,CAAM,EAAE,WACb,QACE,IAAI,MACF,0EACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["import_purify_ts", "import_vitest", "import_HttpTokenInfoDataSource", "datasource", "httpMock", "mint", "network", "config", "result"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var f=(e,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of a(t))!p.call(e,r)&&r!==s&&o(e,r,{get:()=>t[r],enumerable:!(n=i(t,r))||n.enumerable});return e};var g=e=>f(o({},"__esModule",{value:!0}),e);var m={};module.exports=g(m);
2
+ //# sourceMappingURL=TokenInfoDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/data/TokenInfoDataSource.ts"],
4
+ "sourcesContent": ["import { type Either } from \"purify-ts\";\n\nexport type GetTokenInfoParams = {\n mint: string;\n network: string;\n};\n\nexport type TokenInfoResult = {\n mint: string;\n descriptor: {\n data: string;\n signatures: { prod?: string; test?: string };\n };\n};\n\n/**\n * Resolves the CAL `TOKEN_INFO` descriptor for a given Solana mint pubkey.\n * The lookup key is the on-chain mint pubkey, rather than the legacy CAL\n * internal token id consumed by the existing {@link TokenContextLoader}.\n */\nexport interface TokenInfoDataSource {\n getTokenInfo(\n params: GetTokenInfoParams,\n ): Promise<Either<Error, TokenInfoResult>>;\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["TokenInfoDataSource_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var i=(o,t)=>{for(var n in t)r(o,n,{get:t[n],enumerable:!0})},u=(o,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of T(t))!c.call(o,e)&&e!==n&&r(o,e,{get:()=>t[e],enumerable:!(a=I(t,e))||a.enumerable});return o};var d=o=>u(r({},"__esModule",{value:!0}),o);var C={};i(C,{tokenInfoModuleFactory:()=>x});module.exports=d(C);var m=require("inversify"),p=require("../../../../modules/solana/token-info/data/HttpTokenInfoDataSource"),f=require("../../../../modules/solana/token-info/di/tokenInfoTypes"),k=require("../../../../modules/solana/token-info/domain/TokenInfoContextLoader");const x=()=>new m.ContainerModule(({bind:o})=>{o(f.tokenInfoTypes.TokenInfoDataSource).to(p.HttpTokenInfoDataSource),o(f.tokenInfoTypes.TokenInfoContextLoader).to(k.TokenInfoContextLoader)});0&&(module.exports={tokenInfoModuleFactory});
2
+ //# sourceMappingURL=tokenInfoModuleFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/di/tokenInfoModuleFactory.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpTokenInfoDataSource } from \"@/modules/solana/token-info/data/HttpTokenInfoDataSource\";\nimport { tokenInfoTypes } from \"@/modules/solana/token-info/di/tokenInfoTypes\";\nimport { TokenInfoContextLoader } from \"@/modules/solana/token-info/domain/TokenInfoContextLoader\";\n\nexport const tokenInfoModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(tokenInfoTypes.TokenInfoDataSource).to(HttpTokenInfoDataSource);\n bind(tokenInfoTypes.TokenInfoContextLoader).to(TokenInfoContextLoader);\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAAwC,oEACxCC,EAA+B,yDAC/BC,EAAuC,qEAEhC,MAAML,EAAyB,IACpC,IAAI,kBAAgB,CAAC,CAAE,KAAAM,CAAK,IAAM,CAChCA,EAAK,iBAAe,mBAAmB,EAAE,GAAG,yBAAuB,EACnEA,EAAK,iBAAe,sBAAsB,EAAE,GAAG,wBAAsB,CACvE,CAAC",
6
+ "names": ["tokenInfoModuleFactory_exports", "__export", "tokenInfoModuleFactory", "__toCommonJS", "import_inversify", "import_HttpTokenInfoDataSource", "import_tokenInfoTypes", "import_TokenInfoContextLoader", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var f=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var k=Object.getOwnPropertyNames;var I=Object.prototype.hasOwnProperty;var T=(e,o)=>{for(var t in o)f(e,t,{get:o[t],enumerable:!0})},S=(e,o,t,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let n of k(o))!I.call(e,n)&&n!==t&&f(e,n,{get:()=>o[n],enumerable:!(r=a(o,n))||r.enumerable});return e};var c=e=>S(f({},"__esModule",{value:!0}),e);var y={};T(y,{tokenInfoTypes:()=>x});module.exports=c(y);const x={TokenInfoDataSource:Symbol.for("TokenInfoDataSource"),TokenInfoContextLoader:Symbol.for("TokenInfoContextLoader")};0&&(module.exports={tokenInfoTypes});
2
+ //# sourceMappingURL=tokenInfoTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/di/tokenInfoTypes.ts"],
4
+ "sourcesContent": ["export const tokenInfoTypes = {\n TokenInfoDataSource: Symbol.for(\"TokenInfoDataSource\"),\n TokenInfoContextLoader: Symbol.for(\"TokenInfoContextLoader\"),\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAiB,CAC5B,oBAAqB,OAAO,IAAI,qBAAqB,EACrD,uBAAwB,OAAO,IAAI,wBAAwB,CAC7D",
6
+ "names": ["tokenInfoTypes_exports", "__export", "tokenInfoTypes", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var I=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var K=(n,e)=>{for(var r in e)m(n,r,{get:e[r],enumerable:!0})},_=(n,e,r,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of M(e))!w.call(n,t)&&t!==r&&m(n,t,{get:()=>e[t],enumerable:!(o=I(e,t))||o.enumerable});return n};var F=n=>_(m({},"__esModule",{value:!0}),n),T=(n,e,r,o)=>{for(var t=o>1?void 0:o?I(e,r):e,d=n.length-1,i;d>=0;d--)(i=n[d])&&(t=(o?i(e,r,t):i(t))||t);return o&&t&&m(e,r,t),t},f=(n,e)=>(r,o)=>e(r,o,n);var U={};K(U,{TokenInfoContextLoader:()=>g});module.exports=F(U);var c=require("inversify"),s=require("purify-ts"),y=require("../../../../config/di/configTypes"),k=require("../../../../modules/multichain/pki/di/pkiTypes"),S=require("../../../../modules/multichain/pki/model/KeyId"),O=require("../../../../modules/multichain/pki/model/KeyUsage"),v=require("../../../../modules/solana/token-info/di/tokenInfoTypes"),l=require("../../../../shared/model/ClearSignContext"),h=require("../../../../shared/utils/certificateResult"),x=require("../../../../shared/utils/deviceModelIdCodec");const b=[l.ClearSignContextType.SOLANA_TOKEN_INFO],D="solana-mainnet",A=s.Codec.interface({deviceModelId:x.deviceModelIdCodec,mints:(0,s.array)(s.string),network:(0,s.optional)(s.string)});let g=class{constructor(e,r,o,t){this.dataSource=e;this.config=r;this.certificateLoader=o;this.logger=t("TokenInfoContextLoader")}logger;canHandle(e,r){return b.every(o=>r.includes(o))?A.decode(e).caseOf({Left:()=>!1,Right:({mints:o})=>o.length>0&&o.every(t=>t.length>0)}):!1}async load(e){const r=e.network||D,o=Array.from(new Set(e.mints));this.logger.debug("[load] Fetching TOKEN_INFO descriptors",{data:{network:r,mintCount:o.length}});const t=(0,h.loadCertificateResult)(this.certificateLoader,{keyId:S.KeyId.TokenMetadataKey,keyUsage:O.KeyUsage.CoinMeta,targetDevice:e.deviceModelId}),d=Promise.all(o.map(async a=>({mint:a,either:await this.dataSource.getTokenInfo({mint:a,network:r})}))),[i,R]=await Promise.all([t,d]);if(!i.ok||!i.value){const a=i.ok?new Error("[ContextModule] TokenInfoContextLoader: certificate is missing"):i.error;return this.logger.warn("[load] TOKEN_INFO certificate unavailable",{data:{error:a.message}}),o.map(()=>({type:l.ClearSignContextType.ERROR,error:a}))}const L=i.value,u=this.config.cal.mode??"prod";return R.map(({mint:a,either:P})=>P.caseOf({Left:p=>(this.logger.warn("[load] TOKEN_INFO fetch failed",{data:{mint:a,error:p.message}}),{type:l.ClearSignContextType.ERROR,error:p}),Right:p=>{const C=p.descriptor.signatures[u];if(!C){const N=new Error(`[ContextModule] TokenInfoContextLoader: missing '${u}' signature for mint ${a}`);return this.logger.warn("[load] TOKEN_INFO missing signature",{data:{mint:a,mode:u}}),{type:l.ClearSignContextType.ERROR,error:N}}const E={mint:a,descriptor:{data:p.descriptor.data,signature:C}};return{type:l.ClearSignContextType.SOLANA_TOKEN_INFO,payload:E,certificate:L}}}))}};g=T([(0,c.injectable)(),f(0,(0,c.inject)(v.tokenInfoTypes.TokenInfoDataSource)),f(1,(0,c.inject)(y.configTypes.Config)),f(2,(0,c.inject)(k.pkiTypes.PkiCertificateLoader)),f(3,(0,c.inject)(y.configTypes.ContextModuleLoggerFactory))],g);0&&(module.exports={TokenInfoContextLoader});
2
+ //# sourceMappingURL=TokenInfoContextLoader.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/domain/TokenInfoContextLoader.ts"],
4
+ "sourcesContent": ["import {\n type DeviceModelId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\nimport { array, Codec, optional, string } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { pkiTypes } from \"@/modules/multichain/pki/di/pkiTypes\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { KeyId } from \"@/modules/multichain/pki/model/KeyId\";\nimport { KeyUsage } from \"@/modules/multichain/pki/model/KeyUsage\";\nimport { type SolanaTokenInfoPayload } from \"@/modules/solana/model/SolanaPayloads\";\nimport {\n type TokenInfoDataSource,\n type TokenInfoResult,\n} from \"@/modules/solana/token-info/data/TokenInfoDataSource\";\nimport { tokenInfoTypes } from \"@/modules/solana/token-info/di/tokenInfoTypes\";\nimport { type ContextLoader } from \"@/shared/domain/ContextLoader\";\nimport {\n type ClearSignContext,\n ClearSignContextType,\n} from \"@/shared/model/ClearSignContext\";\nimport { loadCertificateResult } from \"@/shared/utils/certificateResult\";\nimport { deviceModelIdCodec } from \"@/shared/utils/deviceModelIdCodec\";\n\nconst SUPPORTED_TYPES: ClearSignContextType[] = [\n ClearSignContextType.SOLANA_TOKEN_INFO,\n];\n\nconst NETWORK_DEFAULT = \"solana-mainnet\";\n\n/**\n * Input shape for the new clear-signing token-info lookup. The dedup key\n * is the on-chain **mint pubkey**, not the legacy Ledger CAL internal id\n * used by the original {@link TokenContextLoader}.\n */\nexport type SolanaTokenInfoContextInput = {\n deviceModelId: DeviceModelId;\n mints: string[];\n network?: string;\n};\n\nconst solanaTokenInfoInputCodec = Codec.interface({\n deviceModelId: deviceModelIdCodec,\n mints: array(string),\n network: optional(string),\n});\n\n@injectable()\nexport class TokenInfoContextLoader\n implements ContextLoader<SolanaTokenInfoContextInput>\n{\n private readonly logger: LoggerPublisherService;\n\n constructor(\n @inject(tokenInfoTypes.TokenInfoDataSource)\n private readonly dataSource: TokenInfoDataSource,\n @inject(configTypes.Config)\n private readonly config: ContextModuleServiceConfig,\n @inject(pkiTypes.PkiCertificateLoader)\n private readonly certificateLoader: PkiCertificateLoader,\n @inject(configTypes.ContextModuleLoggerFactory)\n loggerFactory: (tag: string) => LoggerPublisherService,\n ) {\n this.logger = loggerFactory(\"TokenInfoContextLoader\");\n }\n\n public canHandle(\n input: unknown,\n expectedTypes: ClearSignContextType[],\n ): input is SolanaTokenInfoContextInput {\n if (!SUPPORTED_TYPES.every((t) => expectedTypes.includes(t))) return false;\n return solanaTokenInfoInputCodec.decode(input).caseOf({\n Left: () => false,\n Right: ({ mints }) =>\n mints.length > 0 && mints.every((m) => m.length > 0),\n });\n }\n\n public async load(\n input: SolanaTokenInfoContextInput,\n ): Promise<ClearSignContext[]> {\n const network = input.network || NETWORK_DEFAULT;\n const uniqueMints = Array.from(new Set(input.mints));\n\n this.logger.debug(\"[load] Fetching TOKEN_INFO descriptors\", {\n data: { network, mintCount: uniqueMints.length },\n });\n\n // Cert load and per-mint fetches are independent \u2014 kick them off\n // together. The tagged-Result wrapper on the cert lets us still\n // return per-mint ERROR contexts on PKI failure without dropping\n // the data fetches that already started.\n const certPromise = loadCertificateResult(this.certificateLoader, {\n keyId: KeyId.TokenMetadataKey,\n keyUsage: KeyUsage.CoinMeta,\n targetDevice: input.deviceModelId,\n });\n\n const dataPromise = Promise.all(\n uniqueMints.map(async (mint) => ({\n mint,\n either: await this.dataSource.getTokenInfo({ mint, network }),\n })),\n );\n\n const [certResult, results] = await Promise.all([certPromise, dataPromise]);\n\n if (!certResult.ok || !certResult.value) {\n const error = certResult.ok\n ? new Error(\n \"[ContextModule] TokenInfoContextLoader: certificate is missing\",\n )\n : certResult.error;\n this.logger.warn(\"[load] TOKEN_INFO certificate unavailable\", {\n data: { error: error.message },\n });\n return uniqueMints.map(() => ({\n type: ClearSignContextType.ERROR,\n error,\n }));\n }\n const certificate = certResult.value;\n\n const mode = this.config.cal.mode ?? \"prod\";\n\n return results.map(({ mint, either }) =>\n either.caseOf<ClearSignContext>({\n Left: (error) => {\n this.logger.warn(\"[load] TOKEN_INFO fetch failed\", {\n data: { mint, error: error.message },\n });\n return { type: ClearSignContextType.ERROR, error };\n },\n Right: (value: TokenInfoResult) => {\n const signature = value.descriptor.signatures[mode];\n if (!signature) {\n const error = new Error(\n `[ContextModule] TokenInfoContextLoader: missing '${mode}' signature for mint ${mint}`,\n );\n this.logger.warn(\"[load] TOKEN_INFO missing signature\", {\n data: { mint, mode },\n });\n return { type: ClearSignContextType.ERROR, error };\n }\n const payload: SolanaTokenInfoPayload = {\n mint,\n descriptor: {\n data: value.descriptor.data,\n signature,\n },\n };\n return {\n type: ClearSignContextType.SOLANA_TOKEN_INFO,\n payload,\n certificate,\n };\n },\n }),\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["TokenInfoContextLoader_exports", "__export", "TokenInfoContextLoader", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_pkiTypes", "import_KeyId", "import_KeyUsage", "import_tokenInfoTypes", "import_ClearSignContext", "import_certificateResult", "import_deviceModelIdCodec", "SUPPORTED_TYPES", "NETWORK_DEFAULT", "solanaTokenInfoInputCodec", "TokenInfoContextLoader", "dataSource", "config", "certificateLoader", "loggerFactory", "input", "expectedTypes", "t", "mints", "m", "network", "uniqueMints", "certPromise", "dataPromise", "mint", "certResult", "results", "error", "certificate", "mode", "either", "value", "signature", "payload", "__decorateClass", "__decorateParam"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=require("@ledgerhq/device-management-kit"),i=require("purify-ts"),e=require("vitest"),n=require("../../../../shared/model/ClearSignContext"),f=require("./TokenInfoContextLoader");const O=()=>({debug:e.vi.fn(),info:e.vi.fn(),warn:e.vi.fn(),error:e.vi.fn(),subscribers:[]}),p={keyUsageNumber:13,payload:new Uint8Array([16])},c={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}},o="EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",l="So11111111111111111111111111111111111111112";(0,e.describe)("TokenInfoContextLoader",()=>{let d,m;(0,e.beforeEach)(()=>{e.vi.restoreAllMocks(),d={getTokenInfo:e.vi.fn()},m={loadCertificate:e.vi.fn().mockResolvedValue(p)}});const s=(t=c)=>new f.TokenInfoContextLoader(d,t,m,O);(0,e.describe)("canHandle",()=>{(0,e.it)("returns true when SOLANA_TOKEN_INFO is requested and mints are non-empty",()=>{(0,e.expect)(s().canHandle({deviceModelId:r.DeviceModelId.NANO_X,mints:[o]},[n.ClearSignContextType.SOLANA_TOKEN_INFO])).toBe(!0)}),(0,e.it)("returns false when SOLANA_TOKEN_INFO is not requested",()=>{(0,e.expect)(s().canHandle({deviceModelId:r.DeviceModelId.NANO_X,mints:[o]},[n.ClearSignContextType.SOLANA_TOKEN])).toBe(!1)}),(0,e.it)("returns false on missing / empty / malformed mints",()=>{const t=s(),a=[n.ClearSignContextType.SOLANA_TOKEN_INFO];(0,e.expect)(t.canHandle({},a)).toBe(!1),(0,e.expect)(t.canHandle({mints:[]},a)).toBe(!1),(0,e.expect)(t.canHandle({mints:[""]},a)).toBe(!1),(0,e.expect)(t.canHandle(null,a)).toBe(!1)})}),(0,e.describe)("load",()=>{(0,e.it)("emits one SOLANA_TOKEN_INFO per unique mint with certificate",async()=>{e.vi.spyOn(d,"getTokenInfo").mockImplementation(async({mint:a})=>(0,i.Right)({mint:a,descriptor:{data:`data_${a.slice(0,4)}`,signatures:{prod:`psig_${a.slice(0,4)}`,test:"tsig"}}}));const t=await s().load({deviceModelId:r.DeviceModelId.NANO_X,mints:[o,l,o]});(0,e.expect)(t).toHaveLength(2),(0,e.expect)(t[0]).toMatchObject({type:n.ClearSignContextType.SOLANA_TOKEN_INFO,payload:{mint:o,descriptor:{data:"data_EPjF",signature:"psig_EPjF"}},certificate:p}),(0,e.expect)(t[1]).toMatchObject({type:n.ClearSignContextType.SOLANA_TOKEN_INFO,payload:{mint:l,descriptor:{data:"data_So11",signature:"psig_So11"}}})}),(0,e.it)("emits an ERROR context per failing mint and keeps the others",async()=>{e.vi.spyOn(d,"getTokenInfo").mockImplementation(async({mint:a})=>a===o?(0,i.Right)({mint:a,descriptor:{data:"usdc_data",signatures:{prod:"psig",test:"tsig"}}}):(0,i.Left)(new Error("upstream-500")));const t=await s().load({deviceModelId:r.DeviceModelId.NANO_X,mints:[o,l]});(0,e.expect)(t).toHaveLength(2),(0,e.expect)(t[0]?.type).toBe(n.ClearSignContextType.SOLANA_TOKEN_INFO),(0,e.expect)(t[1]?.type).toBe(n.ClearSignContextType.ERROR)}),(0,e.it)("selects signature based on config.cal.mode (test)",async()=>{e.vi.spyOn(d,"getTokenInfo").mockResolvedValue((0,i.Right)({mint:o,descriptor:{data:"data",signatures:{prod:"p",test:"T"}}}));const t=await s({...c,cal:{...c.cal,mode:"test"}}).load({deviceModelId:r.DeviceModelId.NANO_X,mints:[o]});(0,e.expect)(t[0].payload.descriptor.signature).toBe("T")}),(0,e.it)("falls back to default network when input.network is omitted",async()=>{const t=e.vi.spyOn(d,"getTokenInfo").mockResolvedValue((0,i.Right)({mint:o,descriptor:{data:"x",signatures:{prod:"p",test:"t"}}}));await s().load({deviceModelId:r.DeviceModelId.NANO_X,mints:[o]}),(0,e.expect)(t).toHaveBeenCalledWith({mint:o,network:"solana-mainnet"})})})});
2
+ //# sourceMappingURL=TokenInfoContextLoader.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/token-info/domain/TokenInfoContextLoader.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { DeviceModelId } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\nimport { type PkiCertificateLoader } from \"@/modules/multichain/pki/domain/PkiCertificateLoader\";\nimport { type TokenInfoDataSource } from \"@/modules/solana/token-info/data/TokenInfoDataSource\";\nimport { ClearSignContextType } from \"@/shared/model/ClearSignContext\";\n\nimport { TokenInfoContextLoader } from \"./TokenInfoContextLoader\";\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([0x10]),\n};\n\nconst mockConfig = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n} as ContextModuleServiceConfig;\n\nconst USDC = \"EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v\";\nconst SOL = \"So11111111111111111111111111111111111111112\";\n\ndescribe(\"TokenInfoContextLoader\", () => {\n let dataSource: TokenInfoDataSource;\n let certificateLoader: PkiCertificateLoader;\n\n beforeEach(() => {\n vi.restoreAllMocks();\n dataSource = {\n getTokenInfo: vi.fn(),\n };\n certificateLoader = {\n loadCertificate: vi.fn().mockResolvedValue(mockCertificate),\n };\n });\n\n const makeLoader = (config = mockConfig) =>\n new TokenInfoContextLoader(\n dataSource,\n config,\n certificateLoader,\n mockLoggerFactory,\n );\n\n describe(\"canHandle\", () => {\n it(\"returns true when SOLANA_TOKEN_INFO is requested and mints are non-empty\", () => {\n expect(\n makeLoader().canHandle(\n { deviceModelId: DeviceModelId.NANO_X, mints: [USDC] },\n [ClearSignContextType.SOLANA_TOKEN_INFO],\n ),\n ).toBe(true);\n });\n\n it(\"returns false when SOLANA_TOKEN_INFO is not requested\", () => {\n expect(\n makeLoader().canHandle(\n { deviceModelId: DeviceModelId.NANO_X, mints: [USDC] },\n [ClearSignContextType.SOLANA_TOKEN],\n ),\n ).toBe(false);\n });\n\n it(\"returns false on missing / empty / malformed mints\", () => {\n const loader = makeLoader();\n const types = [ClearSignContextType.SOLANA_TOKEN_INFO];\n expect(loader.canHandle({} as any, types)).toBe(false);\n expect(loader.canHandle({ mints: [] } as any, types)).toBe(false);\n expect(loader.canHandle({ mints: [\"\"] } as any, types)).toBe(false);\n expect(loader.canHandle(null, types)).toBe(false);\n });\n });\n\n describe(\"load\", () => {\n it(\"emits one SOLANA_TOKEN_INFO per unique mint with certificate\", async () => {\n vi.spyOn(dataSource, \"getTokenInfo\").mockImplementation(\n async ({ mint }) =>\n Right({\n mint,\n descriptor: {\n data: `data_${mint.slice(0, 4)}`,\n signatures: { prod: `psig_${mint.slice(0, 4)}`, test: \"tsig\" },\n },\n }),\n );\n\n const result = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n mints: [USDC, SOL, USDC], // duplicate USDC must dedup\n });\n\n expect(result).toHaveLength(2);\n expect(result[0]).toMatchObject({\n type: ClearSignContextType.SOLANA_TOKEN_INFO,\n payload: {\n mint: USDC,\n descriptor: { data: \"data_EPjF\", signature: \"psig_EPjF\" },\n },\n certificate: mockCertificate,\n });\n expect(result[1]).toMatchObject({\n type: ClearSignContextType.SOLANA_TOKEN_INFO,\n payload: {\n mint: SOL,\n descriptor: { data: \"data_So11\", signature: \"psig_So11\" },\n },\n });\n });\n\n it(\"emits an ERROR context per failing mint and keeps the others\", async () => {\n vi.spyOn(dataSource, \"getTokenInfo\").mockImplementation(\n async ({ mint }) => {\n if (mint === USDC) {\n return Right({\n mint,\n descriptor: {\n data: \"usdc_data\",\n signatures: { prod: \"psig\", test: \"tsig\" },\n },\n });\n }\n return Left(new Error(\"upstream-500\"));\n },\n );\n\n const result = await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n mints: [USDC, SOL],\n });\n\n expect(result).toHaveLength(2);\n expect(result[0]?.type).toBe(ClearSignContextType.SOLANA_TOKEN_INFO);\n expect(result[1]?.type).toBe(ClearSignContextType.ERROR);\n });\n\n it(\"selects signature based on config.cal.mode (test)\", async () => {\n vi.spyOn(dataSource, \"getTokenInfo\").mockResolvedValue(\n Right({\n mint: USDC,\n descriptor: {\n data: \"data\",\n signatures: { prod: \"p\", test: \"T\" },\n },\n }),\n );\n\n const result = await makeLoader({\n ...mockConfig,\n cal: { ...mockConfig.cal, mode: \"test\" },\n } as any).load({ deviceModelId: DeviceModelId.NANO_X, mints: [USDC] });\n\n expect((result[0] as any).payload.descriptor.signature).toBe(\"T\");\n });\n\n it(\"falls back to default network when input.network is omitted\", async () => {\n const spy = vi.spyOn(dataSource, \"getTokenInfo\").mockResolvedValue(\n Right({\n mint: USDC,\n descriptor: { data: \"x\", signatures: { prod: \"p\", test: \"t\" } },\n }),\n );\n\n await makeLoader().load({\n deviceModelId: DeviceModelId.NANO_X,\n mints: [USDC],\n });\n\n expect(spy).toHaveBeenCalledWith({\n mint: USDC,\n network: \"solana-mainnet\",\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_ClearSignContext", "import_TokenInfoContextLoader", "mockLoggerFactory", "mockCertificate", "mockConfig", "USDC", "SOL", "dataSource", "certificateLoader", "makeLoader", "config", "loader", "types", "mint", "result", "spy"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var g=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var k=Object.prototype.hasOwnProperty;var C=(t,e)=>{for(var o in e)g(t,o,{get:e[o],enumerable:!0})},E=(t,e,o,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of D(e))!k.call(t,r)&&r!==o&&g(t,r,{get:()=>e[r],enumerable:!(s=d(e,r))||s.enumerable});return t};var x=t=>E(g({},"__esModule",{value:!0}),t),f=(t,e,o,s)=>{for(var r=s>1?void 0:s?d(e,o):e,m=t.length-1,i;m>=0;m--)(i=t[m])&&(r=(s?i(e,o,r):i(r))||r);return s&&r&&g(e,o,r),r},l=(t,e)=>(o,s)=>e(o,s,t);var w={};C(w,{HttpSolanaTrustedNameDataSource:()=>p});module.exports=x(w);var c=require("inversify"),a=require("purify-ts"),y=require("../../../../config/di/configTypes"),T=require("../../../../shared/network/di/networkTypes"),h=require("../../../../shared/utils/HexStringUtils"),N=require("../../../../shared/utils/signedDescriptorDto");let p=class{constructor(e,o){this.config=e;this.http=o}async getTrustedName({address:e,network:o,challenge:s,types:r,sources:m}){let i;try{i=await this.http.get(`${this.config.metadataServiceDomain.url}/v2/names/solana/${o}/reverse/${e}`,{params:{types:r.join(","),sources:m.join(","),challenge:s}})}catch(n){const u=n instanceof Error?n.message:String(n);return(0,a.Left)(new Error(`[ContextModule] HttpSolanaTrustedNameDataSource: Failed to fetch trusted name: ${u}`))}return N.signedDescriptorDtoCodec.decode(i).caseOf({Left:n=>(0,a.Left)(new Error(`[ContextModule] HttpSolanaTrustedNameDataSource: malformed response for ${e}: ${n}`)),Right:n=>{let u;try{u=h.HexStringUtils.hexToBytes(n.signedDescriptor)}catch(S){return(0,a.Left)(new Error(`[ContextModule] HttpSolanaTrustedNameDataSource: invalid hex in signedDescriptor for ${e}: ${S.message}`))}return(0,a.Right)({address:e,descriptor:u,keyId:n.keyId,keyUsage:n.keyUsage})}})}};p=f([(0,c.injectable)(),l(0,(0,c.inject)(y.configTypes.Config)),l(1,(0,c.inject)(T.networkTypes.NetworkClient))],p);0&&(module.exports={HttpSolanaTrustedNameDataSource});
2
+ //# sourceMappingURL=HttpTrustedNameDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.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 GetSolanaTrustedNameParams,\n type SolanaTrustedNameDataSource,\n type SolanaTrustedNameResult,\n} from \"./TrustedNameDataSource\";\n\ntype TrustedNameResponseDto = {\n descriptorType?: string;\n descriptorVersion?: string;\n address?: string;\n name?: string;\n source?: string;\n nameType?: string;\n signedDescriptor: string;\n keyId: string;\n keyUsage: string;\n};\n\n@injectable()\nexport class HttpSolanaTrustedNameDataSource\n implements SolanaTrustedNameDataSource\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 getTrustedName({\n address,\n network,\n challenge,\n types,\n sources,\n }: GetSolanaTrustedNameParams): Promise<\n Either<Error, SolanaTrustedNameResult>\n > {\n let dto: TrustedNameResponseDto;\n try {\n dto = (await this.http.get(\n `${this.config.metadataServiceDomain.url}/v2/names/solana/${network}/reverse/${address}`,\n {\n params: {\n types: types.join(\",\"),\n sources: sources.join(\",\"),\n challenge,\n },\n },\n )) as TrustedNameResponseDto;\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n return Left(\n new Error(\n `[ContextModule] HttpSolanaTrustedNameDataSource: Failed to fetch trusted name: ${reason}`,\n ),\n );\n }\n\n return signedDescriptorDtoCodec\n .decode(dto)\n .caseOf<Either<Error, SolanaTrustedNameResult>>({\n Left: (error) =>\n Left(\n new Error(\n `[ContextModule] HttpSolanaTrustedNameDataSource: malformed response for ${address}: ${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] HttpSolanaTrustedNameDataSource: invalid hex in signedDescriptor for ${address}: ${(error as Error).message}`,\n ),\n );\n }\n\n return Right({\n address,\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,eAAe,CAC1B,QAAAC,EACA,QAAAC,EACA,UAAAC,EACA,MAAAC,EACA,QAAAC,CACF,EAEE,CACA,IAAIC,EACJ,GAAI,CACFA,EAAO,MAAM,KAAK,KAAK,IACrB,GAAG,KAAK,OAAO,sBAAsB,GAAG,oBAAoBJ,CAAO,YAAYD,CAAO,GACtF,CACE,OAAQ,CACN,MAAOG,EAAM,KAAK,GAAG,EACrB,QAASC,EAAQ,KAAK,GAAG,EACzB,UAAAF,CACF,CACF,CACF,CACF,OAASI,EAAO,CACd,MAAMC,EAASD,aAAiB,MAAQA,EAAM,QAAU,OAAOA,CAAK,EACpE,SAAO,QACL,IAAI,MACF,kFAAkFC,CAAM,EAC1F,CACF,CACF,CAEA,OAAO,2BACJ,OAAOF,CAAG,EACV,OAA+C,CAC9C,KAAOC,MACL,QACE,IAAI,MACF,2EAA2EN,CAAO,KAAKM,CAAK,EAC9F,CACF,EACF,MAAQE,GAAc,CACpB,IAAIC,EACJ,GAAI,CACFA,EAAa,iBAAe,WAAWD,EAAU,gBAAgB,CACnE,OAASF,EAAO,CACd,SAAO,QACL,IAAI,MACF,wFAAwFN,CAAO,KAAMM,EAAgB,OAAO,EAC9H,CACF,CACF,CAEA,SAAO,SAAM,CACX,QAAAN,EACA,WAAAS,EACA,MAAOD,EAAU,MACjB,SAAUA,EAAU,QACtB,CAAC,CACH,CACF,CAAC,CACL,CACF,EAtEaX,EAANa,EAAA,IADN,cAAW,EAKPC,EAAA,eAAO,cAAY,MAAM,GAEzBA,EAAA,eAAO,eAAa,aAAa,IANzBd",
6
+ "names": ["HttpTrustedNameDataSource_exports", "__export", "HttpSolanaTrustedNameDataSource", "__toCommonJS", "import_inversify", "import_purify_ts", "import_configTypes", "import_networkTypes", "import_HexStringUtils", "import_signedDescriptorDto", "HttpSolanaTrustedNameDataSource", "config", "http", "address", "network", "challenge", "types", "sources", "dto", "error", "reason", "validated", "descriptor", "__decorateClass", "__decorateParam"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=require("purify-ts"),e=require("vitest"),c=require("./HttpTrustedNameDataSource");(0,e.describe)("HttpSolanaTrustedNameDataSource",()=>{let r,t;const a="vitalik.sol",s="deadbeef",i={metadataServiceDomain:{url:"https://nft.api.ledger.com"}};(0,e.beforeEach)(()=>{e.vi.clearAllMocks(),t={get:e.vi.fn()},r=new c.HttpSolanaTrustedNameDataSource(i,t)}),(0,e.it)("calls the names endpoint with network, types, sources and challenge",async()=>{t.get.mockResolvedValue({signedDescriptor:"01020304",keyId:"name_key",keyUsage:"trusted_name"}),await r.getTrustedName({address:a,network:"mainnet",challenge:s,types:["eoa","program"],sources:["sns","cal"]}),(0,e.expect)(t.get).toHaveBeenCalledWith(`https://nft.api.ledger.com/v2/names/solana/mainnet/reverse/${a}`,{params:{types:"eoa,program",sources:"sns,cal",challenge:s}})}),(0,e.it)("decodes signedDescriptor hex into Uint8Array",async()=>{t.get.mockResolvedValue({signedDescriptor:"ff00",keyId:"k",keyUsage:"u"});const o=await r.getTrustedName({address:a,network:"mainnet",challenge:s,types:["eoa"],sources:["sns"]});(0,e.expect)(o).toEqual((0,n.Right)({address:a,descriptor:new Uint8Array([255,0]),keyId:"k",keyUsage:"u"}))}),(0,e.it)("returns Left on malformed response",async()=>{t.get.mockResolvedValue({keyId:"k",keyUsage:"u"});const o=await r.getTrustedName({address:a,network:"mainnet",challenge:s,types:[],sources:[]});(0,e.expect)(o.isLeft()).toBe(!0),(0,e.expect)(o.extract().message).toMatch(new RegExp(String.raw`\[ContextModule\] HttpSolanaTrustedNameDataSource: malformed response for ${a}:`))}),(0,e.it)("returns Left when HTTP client throws",async()=>{t.get.mockRejectedValue(new Error("net"));const o=await r.getTrustedName({address:a,network:"mainnet",challenge:s,types:[],sources:[]});(0,e.expect)(o).toEqual((0,n.Left)(new Error("[ContextModule] HttpSolanaTrustedNameDataSource: Failed to fetch trusted name: net")))})});
2
+ //# sourceMappingURL=HttpTrustedNameDataSource.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/trusted-name/data/HttpTrustedNameDataSource.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type DmkNetworkClient } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { type ContextModuleServiceConfig } from \"@/config/model/ContextModuleConfig\";\n\nimport { HttpSolanaTrustedNameDataSource } from \"./HttpTrustedNameDataSource\";\nimport { type SolanaTrustedNameDataSource } from \"./TrustedNameDataSource\";\n\ndescribe(\"HttpSolanaTrustedNameDataSource\", () => {\n let datasource: SolanaTrustedNameDataSource;\n let httpMock: { get: ReturnType<typeof vi.fn> };\n const address = \"vitalik.sol\";\n const challenge = \"deadbeef\";\n const config: ContextModuleServiceConfig = {\n metadataServiceDomain: { url: \"https://nft.api.ledger.com\" },\n } as ContextModuleServiceConfig;\n\n beforeEach(() => {\n vi.clearAllMocks();\n httpMock = { get: vi.fn() };\n datasource = new HttpSolanaTrustedNameDataSource(\n config,\n httpMock as unknown as DmkNetworkClient,\n );\n });\n\n it(\"calls the names endpoint with network, types, sources and challenge\", async () => {\n httpMock.get.mockResolvedValue({\n signedDescriptor: \"01020304\",\n keyId: \"name_key\",\n keyUsage: \"trusted_name\",\n });\n\n await datasource.getTrustedName({\n address,\n network: \"mainnet\",\n challenge,\n types: [\"eoa\", \"program\"],\n sources: [\"sns\", \"cal\"],\n });\n\n expect(httpMock.get).toHaveBeenCalledWith(\n `https://nft.api.ledger.com/v2/names/solana/mainnet/reverse/${address}`,\n { params: { types: \"eoa,program\", sources: \"sns,cal\", challenge } },\n );\n });\n\n it(\"decodes signedDescriptor hex into Uint8Array\", async () => {\n httpMock.get.mockResolvedValue({\n signedDescriptor: \"ff00\",\n keyId: \"k\",\n keyUsage: \"u\",\n });\n\n const result = await datasource.getTrustedName({\n address,\n network: \"mainnet\",\n challenge,\n types: [\"eoa\"],\n sources: [\"sns\"],\n });\n\n expect(result).toEqual(\n Right({\n address,\n descriptor: new Uint8Array([0xff, 0x00]),\n keyId: \"k\",\n keyUsage: \"u\",\n }),\n );\n });\n\n it(\"returns Left on malformed response\", async () => {\n httpMock.get.mockResolvedValue({ keyId: \"k\", keyUsage: \"u\" } as any);\n\n const result = await datasource.getTrustedName({\n address,\n network: \"mainnet\",\n challenge,\n types: [],\n sources: [],\n });\n\n expect(result.isLeft()).toBe(true);\n expect((result.extract() as Error).message).toMatch(\n new RegExp(\n String.raw`\\[ContextModule\\] HttpSolanaTrustedNameDataSource: malformed response for ${address}:`,\n ),\n );\n });\n\n it(\"returns Left when HTTP client throws\", async () => {\n httpMock.get.mockRejectedValue(new Error(\"net\"));\n\n const result = await datasource.getTrustedName({\n address,\n network: \"mainnet\",\n challenge,\n types: [],\n sources: [],\n });\n\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpSolanaTrustedNameDataSource: Failed to fetch trusted name: net\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "aAEA,IAAAA,EAA4B,qBAC5BC,EAAqD,kBAIrDC,EAAgD,0CAGhD,YAAS,kCAAmC,IAAM,CAChD,IAAIC,EACAC,EACJ,MAAMC,EAAU,cACVC,EAAY,WACZC,EAAqC,CACzC,sBAAuB,CAAE,IAAK,4BAA6B,CAC7D,KAEA,cAAW,IAAM,CACf,KAAG,cAAc,EACjBH,EAAW,CAAE,IAAK,KAAG,GAAG,CAAE,EAC1BD,EAAa,IAAI,kCACfI,EACAH,CACF,CACF,CAAC,KAED,MAAG,sEAAuE,SAAY,CACpFA,EAAS,IAAI,kBAAkB,CAC7B,iBAAkB,WAClB,MAAO,WACP,SAAU,cACZ,CAAC,EAED,MAAMD,EAAW,eAAe,CAC9B,QAAAE,EACA,QAAS,UACT,UAAAC,EACA,MAAO,CAAC,MAAO,SAAS,EACxB,QAAS,CAAC,MAAO,KAAK,CACxB,CAAC,KAED,UAAOF,EAAS,GAAG,EAAE,qBACnB,8DAA8DC,CAAO,GACrE,CAAE,OAAQ,CAAE,MAAO,cAAe,QAAS,UAAW,UAAAC,CAAU,CAAE,CACpE,CACF,CAAC,KAED,MAAG,+CAAgD,SAAY,CAC7DF,EAAS,IAAI,kBAAkB,CAC7B,iBAAkB,OAClB,MAAO,IACP,SAAU,GACZ,CAAC,EAED,MAAMI,EAAS,MAAML,EAAW,eAAe,CAC7C,QAAAE,EACA,QAAS,UACT,UAAAC,EACA,MAAO,CAAC,KAAK,EACb,QAAS,CAAC,KAAK,CACjB,CAAC,KAED,UAAOE,CAAM,EAAE,WACb,SAAM,CACJ,QAAAH,EACA,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,MAAO,IACP,SAAU,GACZ,CAAC,CACH,CACF,CAAC,KAED,MAAG,qCAAsC,SAAY,CACnDD,EAAS,IAAI,kBAAkB,CAAE,MAAO,IAAK,SAAU,GAAI,CAAQ,EAEnE,MAAMI,EAAS,MAAML,EAAW,eAAe,CAC7C,QAAAE,EACA,QAAS,UACT,UAAAC,EACA,MAAO,CAAC,EACR,QAAS,CAAC,CACZ,CAAC,KAED,UAAOE,EAAO,OAAO,CAAC,EAAE,KAAK,EAAI,KACjC,UAAQA,EAAO,QAAQ,EAAY,OAAO,EAAE,QAC1C,IAAI,OACF,OAAO,gFAAgFH,CAAO,GAChG,CACF,CACF,CAAC,KAED,MAAG,uCAAwC,SAAY,CACrDD,EAAS,IAAI,kBAAkB,IAAI,MAAM,KAAK,CAAC,EAE/C,MAAMI,EAAS,MAAML,EAAW,eAAe,CAC7C,QAAAE,EACA,QAAS,UACT,UAAAC,EACA,MAAO,CAAC,EACR,QAAS,CAAC,CACZ,CAAC,KAED,UAAOE,CAAM,EAAE,WACb,QACE,IAAI,MACF,oFACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["import_purify_ts", "import_vitest", "import_HttpTrustedNameDataSource", "datasource", "httpMock", "address", "challenge", "config", "result"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var s=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var m=(r,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of i(e))!d.call(r,t)&&t!==n&&s(r,t,{get:()=>e[t],enumerable:!(a=o(e,t))||a.enumerable});return r};var g=r=>m(s({},"__esModule",{value:!0}),r);var p={};module.exports=g(p);
2
+ //# sourceMappingURL=TrustedNameDataSource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/trusted-name/data/TrustedNameDataSource.ts"],
4
+ "sourcesContent": ["import { type Either } from \"purify-ts\";\n\nexport type GetSolanaTrustedNameParams = {\n address: string;\n network: string;\n challenge: string;\n types: string[];\n sources: string[];\n};\n\nexport type SolanaTrustedNameResult = {\n address: string;\n // Raw signed TLV bytes decoded from the backend response.\n descriptor: Uint8Array;\n keyId: string;\n keyUsage: string;\n};\n\nexport interface SolanaTrustedNameDataSource {\n getTrustedName(\n params: GetSolanaTrustedNameParams,\n ): Promise<Either<Error, SolanaTrustedNameResult>>;\n}\n"],
5
+ "mappings": "+WAAA,IAAAA,EAAA,kBAAAC,EAAAD",
6
+ "names": ["TrustedNameDataSource_exports", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var N=(o,a)=>{for(var t in a)r(o,t,{get:a[t],enumerable:!0})},S=(o,a,t,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let e of p(a))!T.call(o,e)&&e!==t&&r(o,e,{get:()=>a[e],enumerable:!(n=l(a,e))||n.enumerable});return o};var c=o=>S(r({},"__esModule",{value:!0}),o);var i={};N(i,{solanaTrustedNameModuleFactory:()=>f});module.exports=c(i);var s=require("inversify"),u=require("../../../../modules/solana/trusted-name/data/HttpTrustedNameDataSource"),m=require("../../../../modules/solana/trusted-name/di/trustedNameTypes"),d=require("../../../../modules/solana/trusted-name/domain/TrustedNameContextLoader");const f=()=>new s.ContainerModule(({bind:o})=>{o(m.solanaTrustedNameTypes.SolanaTrustedNameDataSource).to(u.HttpSolanaTrustedNameDataSource),o(m.solanaTrustedNameTypes.SolanaTrustedNameContextLoader).to(d.SolanaTrustedNameContextLoader)});0&&(module.exports={solanaTrustedNameModuleFactory});
2
+ //# sourceMappingURL=trustedNameModuleFactory.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/trusted-name/di/trustedNameModuleFactory.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { HttpSolanaTrustedNameDataSource } from \"@/modules/solana/trusted-name/data/HttpTrustedNameDataSource\";\nimport { solanaTrustedNameTypes } from \"@/modules/solana/trusted-name/di/trustedNameTypes\";\nimport { SolanaTrustedNameContextLoader } from \"@/modules/solana/trusted-name/domain/TrustedNameContextLoader\";\n\nexport const solanaTrustedNameModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(solanaTrustedNameTypes.SolanaTrustedNameDataSource).to(\n HttpSolanaTrustedNameDataSource,\n );\n bind(solanaTrustedNameTypes.SolanaTrustedNameContextLoader).to(\n SolanaTrustedNameContextLoader,\n );\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAAgD,wEAChDC,EAAuC,6DACvCC,EAA+C,yEAExC,MAAML,EAAiC,IAC5C,IAAI,kBAAgB,CAAC,CAAE,KAAAM,CAAK,IAAM,CAChCA,EAAK,yBAAuB,2BAA2B,EAAE,GACvD,iCACF,EACAA,EAAK,yBAAuB,8BAA8B,EAAE,GAC1D,gCACF,CACF,CAAC",
6
+ "names": ["trustedNameModuleFactory_exports", "__export", "solanaTrustedNameModuleFactory", "__toCommonJS", "import_inversify", "import_HttpTrustedNameDataSource", "import_trustedNameTypes", "import_TrustedNameContextLoader", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var l=(e,a)=>{for(var t in a)r(e,t,{get:a[t],enumerable:!0})},m=(e,a,t,n)=>{if(a&&typeof a=="object"||typeof a=="function")for(let o of S(a))!d.call(e,o)&&o!==t&&r(e,o,{get:()=>a[o],enumerable:!(n=s(a,o))||n.enumerable});return e};var u=e=>m(r({},"__esModule",{value:!0}),e);var N={};l(N,{solanaTrustedNameTypes:()=>T});module.exports=u(N);const T={SolanaTrustedNameDataSource:Symbol.for("SolanaTrustedNameDataSource"),SolanaTrustedNameContextLoader:Symbol.for("SolanaTrustedNameContextLoader")};0&&(module.exports={solanaTrustedNameTypes});
2
+ //# sourceMappingURL=trustedNameTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../../src/modules/solana/trusted-name/di/trustedNameTypes.ts"],
4
+ "sourcesContent": ["export const solanaTrustedNameTypes = {\n SolanaTrustedNameDataSource: Symbol.for(\"SolanaTrustedNameDataSource\"),\n SolanaTrustedNameContextLoader: Symbol.for(\"SolanaTrustedNameContextLoader\"),\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAyB,CACpC,4BAA6B,OAAO,IAAI,6BAA6B,EACrE,+BAAgC,OAAO,IAAI,gCAAgC,CAC7E",
6
+ "names": ["trustedNameTypes_exports", "__export", "solanaTrustedNameTypes", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var d=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var v=(s,t)=>{for(var o in t)d(s,o,{get:t[o],enumerable:!0})},x=(s,t,o,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of h(t))!N.call(s,r)&&r!==o&&d(s,r,{get:()=>t[r],enumerable:!(e=u(t,r))||e.enumerable});return s};var L=s=>x(d({},"__esModule",{value:!0}),s),m=(s,t,o,e)=>{for(var r=e>1?void 0:e?u(t,o):t,c=s.length-1,p;c>=0;c--)(p=s[c])&&(r=(e?p(t,o,r):p(r))||r);return e&&r&&d(t,o,r),r},l=(s,t)=>(o,e)=>t(o,e,s);var P={};v(P,{SolanaTrustedNameContextLoader:()=>i});module.exports=L(P);var n=require("inversify"),a=require("purify-ts"),y=require("../../../../config/di/configTypes"),f=require("../../../../modules/multichain/pki/di/pkiTypes"),S=require("../../../../modules/solana/trusted-name/di/trustedNameTypes"),g=require("../../../../shared/model/ClearSignContext"),T=require("../../../../shared/utils/challengeBoundLoader"),C=require("../../../../shared/utils/deviceModelIdCodec");const I=[g.ClearSignContextType.SOLANA_TRUSTED_NAME],M="mainnet",D=a.Codec.interface({address:a.string,challenge:a.string,types:(0,a.array)(a.string),sources:(0,a.array)(a.string)}),E=a.Codec.interface({deviceModelId:C.deviceModelIdCodec,network:(0,a.optional)(a.string),requests:(0,a.array)(D)});let i=class{constructor(t,o,e){this.dataSource=t;this.certificateLoader=o;this.logger=e("SolanaTrustedNameContextLoader")}logger;canHandle(t,o){return I.every(e=>o.includes(e))?E.decode(t).caseOf({Left:()=>!1,Right:({requests:e})=>e.length>0&&e.every(r=>r.address.length>0&&r.challenge.length>0)}):!1}async load(t){const o=t.network||M;return(0,T.loadChallengeBoundContexts)({requests:t.requests,deviceModelId:t.deviceModelId,certificateLoader:this.certificateLoader,logger:this.logger,label:"TRUSTED_NAME",fetch:e=>this.dataSource.getTrustedName({address:e.address,challenge:e.challenge,types:e.types,sources:e.sources,network:o}),toContext:(e,r)=>({type:g.ClearSignContextType.SOLANA_TRUSTED_NAME,payload:e.descriptor,certificate:r}),describe:e=>({address:e.address})})}};i=m([(0,n.injectable)(),l(0,(0,n.inject)(S.solanaTrustedNameTypes.SolanaTrustedNameDataSource)),l(1,(0,n.inject)(f.pkiTypes.PkiCertificateLoader)),l(2,(0,n.inject)(y.configTypes.ContextModuleLoggerFactory))],i);0&&(module.exports={SolanaTrustedNameContextLoader});
2
+ //# sourceMappingURL=TrustedNameContextLoader.js.map