@ledgerhq/device-signer-kit-solana 1.1.0 → 1.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 (359) hide show
  1. package/README.md +5 -1
  2. package/lib/cjs/api/SignerSolana.js +1 -1
  3. package/lib/cjs/api/SignerSolana.js.map +1 -1
  4. package/lib/cjs/api/SignerSolanaBuilder.js +1 -1
  5. package/lib/cjs/api/SignerSolanaBuilder.js.map +3 -3
  6. package/lib/cjs/api/SolanaTools.js +2 -0
  7. package/lib/cjs/api/SolanaTools.js.map +7 -0
  8. package/lib/cjs/api/SolanaToolsBuilder.js +2 -0
  9. package/lib/cjs/api/SolanaToolsBuilder.js.map +7 -0
  10. package/lib/cjs/api/app-binder/GenerateTransactionDeviceActionTypes.js +2 -0
  11. package/lib/cjs/api/app-binder/GenerateTransactionDeviceActionTypes.js.map +7 -0
  12. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js +1 -1
  13. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
  14. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  15. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  16. package/lib/cjs/api/index.js +1 -1
  17. package/lib/cjs/api/index.js.map +3 -3
  18. package/lib/cjs/api/model/AddressOption.js +1 -1
  19. package/lib/cjs/api/model/AddressOption.js.map +1 -1
  20. package/lib/cjs/api/model/MessageOptions.js +2 -0
  21. package/lib/cjs/api/model/MessageOptions.js.map +7 -0
  22. package/lib/cjs/api/model/TransactionOptions.js +1 -1
  23. package/lib/cjs/api/model/TransactionOptions.js.map +1 -1
  24. package/lib/cjs/index.js.map +1 -1
  25. package/lib/cjs/internal/DefaultSignerSolana.js +1 -1
  26. package/lib/cjs/internal/DefaultSignerSolana.js.map +3 -3
  27. package/lib/cjs/internal/DefaultSignerSolana.test.js +1 -1
  28. package/lib/cjs/internal/DefaultSignerSolana.test.js.map +3 -3
  29. package/lib/cjs/internal/DefaultSolanaTools.js +2 -0
  30. package/lib/cjs/internal/DefaultSolanaTools.js.map +7 -0
  31. package/lib/cjs/internal/DefaultSolanaTools.test.js +2 -0
  32. package/lib/cjs/internal/DefaultSolanaTools.test.js.map +7 -0
  33. package/lib/cjs/internal/app-binder/SolanaAppBinder.js +1 -1
  34. package/lib/cjs/internal/app-binder/SolanaAppBinder.js.map +3 -3
  35. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js +1 -1
  36. package/lib/cjs/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
  37. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  38. package/lib/cjs/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  39. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js +2 -0
  40. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.js.map +7 -0
  41. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js +2 -0
  42. package/lib/cjs/internal/app-binder/command/GetChallengeCommand.test.js.map +7 -0
  43. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.js.map +2 -2
  44. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
  45. package/lib/cjs/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
  46. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js +2 -0
  47. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +7 -0
  48. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +2 -0
  49. package/lib/cjs/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +7 -0
  50. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js +2 -0
  51. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +7 -0
  52. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +2 -0
  53. package/lib/cjs/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +7 -0
  54. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.js.map +2 -2
  55. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  56. package/lib/cjs/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +2 -2
  57. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  58. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +2 -2
  59. package/lib/cjs/internal/app-binder/command/utils/SolanaAppErrors.test.js +1 -1
  60. package/lib/cjs/internal/app-binder/command/utils/SolanaAppErrors.test.js.map +2 -2
  61. package/lib/cjs/internal/app-binder/device-action/GenerateTransactionDeviceAction.js +2 -0
  62. package/lib/cjs/internal/app-binder/device-action/GenerateTransactionDeviceAction.js.map +7 -0
  63. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  64. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
  65. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  66. package/lib/cjs/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
  67. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  68. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  69. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  70. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  71. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  72. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  73. package/lib/cjs/internal/app-binder/di/appBinderModule.js +1 -1
  74. package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +3 -3
  75. package/lib/cjs/internal/app-binder/di/appBinderModule.test.js +1 -1
  76. package/lib/cjs/internal/app-binder/di/appBinderModule.test.js.map +2 -2
  77. package/lib/cjs/internal/app-binder/services/ApplicationChecker.js +2 -0
  78. package/lib/cjs/internal/app-binder/services/ApplicationChecker.js.map +7 -0
  79. package/lib/cjs/internal/app-binder/services/ApplicationChecker.test.js +2 -0
  80. package/lib/cjs/internal/app-binder/services/ApplicationChecker.test.js.map +7 -0
  81. package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.js +2 -0
  82. package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.js.map +7 -0
  83. package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.test.js +2 -0
  84. package/lib/cjs/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +7 -0
  85. package/lib/cjs/internal/app-binder/services/TransactionInspector.js +4 -0
  86. package/lib/cjs/internal/app-binder/services/TransactionInspector.js.map +7 -0
  87. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js +2 -0
  88. package/lib/cjs/internal/app-binder/services/TransactionInspector.test.js.map +7 -0
  89. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js +2 -0
  90. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.js.map +7 -0
  91. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js +2 -0
  92. package/lib/cjs/internal/app-binder/task/BuildTransactionContextTask.test.js.map +7 -0
  93. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js +2 -0
  94. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.js.map +7 -0
  95. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js +2 -0
  96. package/lib/cjs/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +7 -0
  97. package/lib/cjs/internal/app-binder/task/SendSignDataTask.test.js +1 -1
  98. package/lib/cjs/internal/app-binder/task/SendSignDataTask.test.js.map +2 -2
  99. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js +1 -1
  100. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
  101. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js +1 -1
  102. package/lib/cjs/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
  103. package/lib/cjs/internal/di.js +1 -1
  104. package/lib/cjs/internal/di.js.map +3 -3
  105. package/lib/cjs/internal/externalTypes.js +1 -1
  106. package/lib/cjs/internal/externalTypes.js.map +2 -2
  107. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js +1 -1
  108. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js.map +2 -2
  109. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js +1 -1
  110. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js.map +2 -2
  111. package/lib/cjs/internal/use-cases/app-configuration/GetAppConfiguration.test.js +1 -1
  112. package/lib/cjs/internal/use-cases/app-configuration/GetAppConfiguration.test.js.map +2 -2
  113. package/lib/cjs/internal/use-cases/di/useCasesModule.js +1 -1
  114. package/lib/cjs/internal/use-cases/di/useCasesModule.js.map +3 -3
  115. package/lib/cjs/internal/use-cases/di/useCasesModule.test.js +1 -1
  116. package/lib/cjs/internal/use-cases/di/useCasesModule.test.js.map +2 -2
  117. package/lib/cjs/internal/use-cases/di/useCasesTypes.js +1 -1
  118. package/lib/cjs/internal/use-cases/di/useCasesTypes.js.map +2 -2
  119. package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js +2 -0
  120. package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js.map +7 -0
  121. package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js +2 -0
  122. package/lib/cjs/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js.map +7 -0
  123. package/lib/cjs/internal/use-cases/message/SignMessageUseCase.js +1 -1
  124. package/lib/cjs/internal/use-cases/message/SignMessageUseCase.js.map +3 -3
  125. package/lib/cjs/internal/use-cases/message/SignMessageUseCase.test.js +1 -1
  126. package/lib/cjs/internal/use-cases/message/SignMessageUseCase.test.js.map +2 -2
  127. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
  128. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +2 -2
  129. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
  130. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +3 -3
  131. package/lib/cjs/package.json +21 -16
  132. package/lib/esm/api/SignerSolanaBuilder.js +1 -1
  133. package/lib/esm/api/SignerSolanaBuilder.js.map +3 -3
  134. package/lib/esm/api/SolanaTools.js +1 -0
  135. package/lib/esm/api/SolanaTools.js.map +7 -0
  136. package/lib/esm/api/SolanaToolsBuilder.js +2 -0
  137. package/lib/esm/api/SolanaToolsBuilder.js.map +7 -0
  138. package/lib/esm/api/app-binder/GenerateTransactionDeviceActionTypes.js +1 -0
  139. package/lib/esm/api/app-binder/GenerateTransactionDeviceActionTypes.js.map +7 -0
  140. package/lib/esm/api/index.js +1 -1
  141. package/lib/esm/api/index.js.map +3 -3
  142. package/lib/esm/api/model/MessageOptions.js +1 -0
  143. package/lib/esm/api/model/MessageOptions.js.map +7 -0
  144. package/lib/esm/internal/DefaultSignerSolana.js +1 -1
  145. package/lib/esm/internal/DefaultSignerSolana.js.map +3 -3
  146. package/lib/esm/internal/DefaultSignerSolana.test.js +1 -1
  147. package/lib/esm/internal/DefaultSignerSolana.test.js.map +3 -3
  148. package/lib/esm/internal/DefaultSolanaTools.js +2 -0
  149. package/lib/esm/internal/DefaultSolanaTools.js.map +7 -0
  150. package/lib/esm/internal/DefaultSolanaTools.test.js +2 -0
  151. package/lib/esm/internal/DefaultSolanaTools.test.js.map +7 -0
  152. package/lib/esm/internal/app-binder/SolanaAppBinder.js +1 -1
  153. package/lib/esm/internal/app-binder/SolanaAppBinder.js.map +3 -3
  154. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js +1 -1
  155. package/lib/esm/internal/app-binder/SolanaAppBinder.test.js.map +3 -3
  156. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js +1 -1
  157. package/lib/esm/internal/app-binder/command/GetAppConfigurationCommand.test.js.map +2 -2
  158. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js +2 -0
  159. package/lib/esm/internal/app-binder/command/GetChallengeCommand.js.map +7 -0
  160. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js +2 -0
  161. package/lib/esm/internal/app-binder/command/GetChallengeCommand.test.js.map +7 -0
  162. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.js.map +2 -2
  163. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js +1 -1
  164. package/lib/esm/internal/app-binder/command/GetPubKeyCommand.test.js.map +2 -2
  165. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js +2 -0
  166. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.js.map +7 -0
  167. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js +2 -0
  168. package/lib/esm/internal/app-binder/command/ProvideTLVDescriptorCommand.test.js.map +7 -0
  169. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js +2 -0
  170. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.js.map +7 -0
  171. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js +2 -0
  172. package/lib/esm/internal/app-binder/command/ProvideTrustedNamePKICommand.test.js.map +7 -0
  173. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.js.map +2 -2
  174. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js +1 -1
  175. package/lib/esm/internal/app-binder/command/SignOffChainMessageCommand.test.js.map +2 -2
  176. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +1 -1
  177. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +2 -2
  178. package/lib/esm/internal/app-binder/command/utils/SolanaAppErrors.test.js +1 -1
  179. package/lib/esm/internal/app-binder/command/utils/SolanaAppErrors.test.js.map +2 -2
  180. package/lib/esm/internal/app-binder/device-action/GenerateTransactionDeviceAction.js +2 -0
  181. package/lib/esm/internal/app-binder/device-action/GenerateTransactionDeviceAction.js.map +7 -0
  182. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js +1 -1
  183. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.js.map +3 -3
  184. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js +1 -1
  185. package/lib/esm/internal/app-binder/device-action/SignTransactionDeviceAction.test.js.map +3 -3
  186. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  187. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  188. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  189. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  190. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  191. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  192. package/lib/esm/internal/app-binder/di/appBinderModule.js +1 -1
  193. package/lib/esm/internal/app-binder/di/appBinderModule.js.map +3 -3
  194. package/lib/esm/internal/app-binder/di/appBinderModule.test.js +1 -1
  195. package/lib/esm/internal/app-binder/di/appBinderModule.test.js.map +2 -2
  196. package/lib/esm/internal/app-binder/services/ApplicationChecker.js +2 -0
  197. package/lib/esm/internal/app-binder/services/ApplicationChecker.js.map +7 -0
  198. package/lib/esm/internal/app-binder/services/ApplicationChecker.test.js +2 -0
  199. package/lib/esm/internal/app-binder/services/ApplicationChecker.test.js.map +7 -0
  200. package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.js +2 -0
  201. package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.js.map +7 -0
  202. package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.test.js +2 -0
  203. package/lib/esm/internal/app-binder/services/GenerateSolanaTransaction.test.js.map +7 -0
  204. package/lib/esm/internal/app-binder/services/TransactionInspector.js +4 -0
  205. package/lib/esm/internal/app-binder/services/TransactionInspector.js.map +7 -0
  206. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js +2 -0
  207. package/lib/esm/internal/app-binder/services/TransactionInspector.test.js.map +7 -0
  208. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js +2 -0
  209. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.js.map +7 -0
  210. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js +2 -0
  211. package/lib/esm/internal/app-binder/task/BuildTransactionContextTask.test.js.map +7 -0
  212. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js +2 -0
  213. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.js.map +7 -0
  214. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js +2 -0
  215. package/lib/esm/internal/app-binder/task/ProvideTransactionContextTask.test.js.map +7 -0
  216. package/lib/esm/internal/app-binder/task/SendSignDataTask.test.js +1 -1
  217. package/lib/esm/internal/app-binder/task/SendSignDataTask.test.js.map +2 -2
  218. package/lib/esm/internal/app-binder/task/SendSignMessageTask.js +1 -1
  219. package/lib/esm/internal/app-binder/task/SendSignMessageTask.js.map +3 -3
  220. package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js +1 -1
  221. package/lib/esm/internal/app-binder/task/SendSignMessageTask.test.js.map +3 -3
  222. package/lib/esm/internal/di.js +1 -1
  223. package/lib/esm/internal/di.js.map +3 -3
  224. package/lib/esm/internal/externalTypes.js +1 -1
  225. package/lib/esm/internal/externalTypes.js.map +2 -2
  226. package/lib/esm/internal/use-cases/address/GetAddressUseCase.js +1 -1
  227. package/lib/esm/internal/use-cases/address/GetAddressUseCase.js.map +2 -2
  228. package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js +1 -1
  229. package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js.map +2 -2
  230. package/lib/esm/internal/use-cases/app-configuration/GetAppConfiguration.test.js +1 -1
  231. package/lib/esm/internal/use-cases/app-configuration/GetAppConfiguration.test.js.map +2 -2
  232. package/lib/esm/internal/use-cases/di/useCasesModule.js +1 -1
  233. package/lib/esm/internal/use-cases/di/useCasesModule.js.map +3 -3
  234. package/lib/esm/internal/use-cases/di/useCasesModule.test.js +1 -1
  235. package/lib/esm/internal/use-cases/di/useCasesModule.test.js.map +2 -2
  236. package/lib/esm/internal/use-cases/di/useCasesTypes.js +1 -1
  237. package/lib/esm/internal/use-cases/di/useCasesTypes.js.map +2 -2
  238. package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js +2 -0
  239. package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.js.map +7 -0
  240. package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js +2 -0
  241. package/lib/esm/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.js.map +7 -0
  242. package/lib/esm/internal/use-cases/message/SignMessageUseCase.js +1 -1
  243. package/lib/esm/internal/use-cases/message/SignMessageUseCase.js.map +3 -3
  244. package/lib/esm/internal/use-cases/message/SignMessageUseCase.test.js +1 -1
  245. package/lib/esm/internal/use-cases/message/SignMessageUseCase.test.js.map +2 -2
  246. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +1 -1
  247. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +2 -2
  248. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +1 -1
  249. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +3 -3
  250. package/lib/esm/package.json +21 -16
  251. package/lib/types/api/SignerSolana.d.ts +2 -1
  252. package/lib/types/api/SignerSolana.d.ts.map +1 -1
  253. package/lib/types/api/SignerSolanaBuilder.d.ts +12 -1
  254. package/lib/types/api/SignerSolanaBuilder.d.ts.map +1 -1
  255. package/lib/types/api/SolanaTools.d.ts +11 -0
  256. package/lib/types/api/SolanaTools.d.ts.map +1 -0
  257. package/lib/types/api/SolanaToolsBuilder.d.ts +39 -0
  258. package/lib/types/api/SolanaToolsBuilder.d.ts.map +1 -0
  259. package/lib/types/api/app-binder/GenerateTransactionDeviceActionTypes.d.ts +24 -0
  260. package/lib/types/api/app-binder/GenerateTransactionDeviceActionTypes.d.ts.map +1 -0
  261. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +1 -10
  262. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
  263. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +10 -3
  264. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  265. package/lib/types/api/index.d.ts +3 -0
  266. package/lib/types/api/index.d.ts.map +1 -1
  267. package/lib/types/api/model/AddressOption.d.ts +1 -0
  268. package/lib/types/api/model/AddressOption.d.ts.map +1 -1
  269. package/lib/types/api/model/MessageOptions.d.ts +4 -0
  270. package/lib/types/api/model/MessageOptions.d.ts.map +1 -0
  271. package/lib/types/api/model/TransactionOptions.d.ts +7 -1
  272. package/lib/types/api/model/TransactionOptions.d.ts.map +1 -1
  273. package/lib/types/internal/DefaultSignerSolana.d.ts +6 -4
  274. package/lib/types/internal/DefaultSignerSolana.d.ts.map +1 -1
  275. package/lib/types/internal/DefaultSolanaTools.d.ts +20 -0
  276. package/lib/types/internal/DefaultSolanaTools.d.ts.map +1 -0
  277. package/lib/types/internal/DefaultSolanaTools.test.d.ts +2 -0
  278. package/lib/types/internal/DefaultSolanaTools.test.d.ts.map +1 -0
  279. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts +11 -3
  280. package/lib/types/internal/app-binder/SolanaAppBinder.d.ts.map +1 -1
  281. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts +11 -0
  282. package/lib/types/internal/app-binder/command/GetChallengeCommand.d.ts.map +1 -0
  283. package/lib/types/internal/app-binder/command/GetChallengeCommand.test.d.ts +2 -0
  284. package/lib/types/internal/app-binder/command/GetChallengeCommand.test.d.ts.map +1 -0
  285. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts +2 -3
  286. package/lib/types/internal/app-binder/command/GetPubKeyCommand.d.ts.map +1 -1
  287. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts +13 -0
  288. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.d.ts.map +1 -0
  289. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.test.d.ts +2 -0
  290. package/lib/types/internal/app-binder/command/ProvideTLVDescriptorCommand.test.d.ts.map +1 -0
  291. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts +13 -0
  292. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.d.ts.map +1 -0
  293. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts +2 -0
  294. package/lib/types/internal/app-binder/command/ProvideTrustedNamePKICommand.test.d.ts.map +1 -0
  295. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts +0 -1
  296. package/lib/types/internal/app-binder/command/SignOffChainMessageCommand.d.ts.map +1 -1
  297. package/lib/types/internal/app-binder/command/utils/SolanaApplicationErrors.d.ts.map +1 -1
  298. package/lib/types/internal/app-binder/device-action/GenerateTransactionDeviceAction.d.ts +23 -0
  299. package/lib/types/internal/app-binder/device-action/GenerateTransactionDeviceAction.d.ts.map +1 -0
  300. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts +15 -1
  301. package/lib/types/internal/app-binder/device-action/SignTransactionDeviceAction.d.ts.map +1 -1
  302. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +2 -1
  303. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  304. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
  305. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +5 -2
  306. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
  307. package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -1
  308. package/lib/types/internal/app-binder/services/ApplicationChecker.d.ts +13 -0
  309. package/lib/types/internal/app-binder/services/ApplicationChecker.d.ts.map +1 -0
  310. package/lib/types/internal/app-binder/services/ApplicationChecker.test.d.ts +2 -0
  311. package/lib/types/internal/app-binder/services/ApplicationChecker.test.d.ts.map +1 -0
  312. package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.d.ts +14 -0
  313. package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.d.ts.map +1 -0
  314. package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.test.d.ts +2 -0
  315. package/lib/types/internal/app-binder/services/GenerateSolanaTransaction.test.d.ts.map +1 -0
  316. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts +21 -0
  317. package/lib/types/internal/app-binder/services/TransactionInspector.d.ts.map +1 -0
  318. package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts +2 -0
  319. package/lib/types/internal/app-binder/services/TransactionInspector.test.d.ts.map +1 -0
  320. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts +24 -0
  321. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.d.ts.map +1 -0
  322. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts +2 -0
  323. package/lib/types/internal/app-binder/task/BuildTransactionContextTask.test.d.ts.map +1 -0
  324. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts +15 -0
  325. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.d.ts.map +1 -0
  326. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts +2 -0
  327. package/lib/types/internal/app-binder/task/ProvideTransactionContextTask.test.d.ts.map +1 -0
  328. package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts +7 -0
  329. package/lib/types/internal/app-binder/task/SendSignMessageTask.d.ts.map +1 -1
  330. package/lib/types/internal/di.d.ts +3 -1
  331. package/lib/types/internal/di.d.ts.map +1 -1
  332. package/lib/types/internal/externalTypes.d.ts +1 -0
  333. package/lib/types/internal/externalTypes.d.ts.map +1 -1
  334. package/lib/types/internal/use-cases/address/GetAddressUseCase.d.ts.map +1 -1
  335. package/lib/types/internal/use-cases/di/useCasesModule.d.ts.map +1 -1
  336. package/lib/types/internal/use-cases/di/useCasesTypes.d.ts +1 -0
  337. package/lib/types/internal/use-cases/di/useCasesTypes.d.ts.map +1 -1
  338. package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.d.ts +10 -0
  339. package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.d.ts.map +1 -0
  340. package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.d.ts +2 -0
  341. package/lib/types/internal/use-cases/generateTransaction/GenerateTransactionUseCase.test.d.ts.map +1 -0
  342. package/lib/types/internal/use-cases/message/SignMessageUseCase.d.ts +2 -1
  343. package/lib/types/internal/use-cases/message/SignMessageUseCase.d.ts.map +1 -1
  344. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +3 -2
  345. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -1
  346. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  347. package/package.json +23 -18
  348. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +0 -2
  349. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +0 -7
  350. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +0 -2
  351. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +0 -7
  352. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +0 -2
  353. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +0 -7
  354. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +0 -2
  355. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +0 -7
  356. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts +0 -16
  357. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts.map +0 -1
  358. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts +0 -2
  359. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts.map +0 -1
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/services/GenerateSolanaTransaction.test.ts"],
4
+ "sourcesContent": ["import {\n ASSOCIATED_TOKEN_PROGRAM_ID,\n getAssociatedTokenAddressSync,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport {\n Keypair,\n Message,\n type PublicKey,\n SystemProgram,\n} from \"@solana/web3.js\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n COIN_DATA,\n GenerateSolanaTransaction,\n} from \"./GenerateSolanaTransaction\";\n\ndescribe(\"GenerateSolanaTransaction\", () => {\n const feePayer = Keypair.generate();\n const recipient = Keypair.generate();\n const feePayerKey = feePayer.publicKey.toBase58();\n const recipientKey = recipient.publicKey.toBase58();\n\n it(\"generateUsdcTransaction should equal generateSplTokenTransaction with USDC constants\", () => {\n // given\n const gen = new GenerateSolanaTransaction();\n const txA = gen.generateUsdcTransaction(feePayerKey, recipientKey, 2.5, 3);\n\n // when\n const txB = gen.generateSplTokenTransaction(\n feePayerKey,\n recipientKey,\n COIN_DATA.USDC.mint.toBase58(),\n 2.5,\n COIN_DATA.USDC.decimals,\n 3,\n );\n\n // then\n expect(txA).toBe(txB);\n });\n\n it(\"generateSplTokenTransaction emits correct SPL-Token TransferChecked instructions\", () => {\n // given\n const gen = new GenerateSolanaTransaction();\n const mint = COIN_DATA.USDC.mint;\n const decimals = COIN_DATA.USDC.decimals;\n const amount = 1.25;\n const transfers = 2;\n\n // when\n const b64 = gen.generateSplTokenTransaction(\n feePayerKey,\n recipientKey,\n mint.toBase58(),\n amount,\n decimals,\n transfers,\n );\n\n const uint8Array = Uint8Array.from(Buffer.from(b64, \"base64\"));\n const msg = Message.from(uint8Array);\n\n // then\n expect(msg.instructions).toHaveLength(transfers);\n\n const sourceAta = getAssociatedTokenAddressSync(\n mint,\n feePayer.publicKey,\n false,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n const destAta = getAssociatedTokenAddressSync(\n mint,\n recipient.publicKey,\n false,\n TOKEN_PROGRAM_ID,\n ASSOCIATED_TOKEN_PROGRAM_ID,\n );\n\n for (const ix of msg.instructions) {\n // program must be the SPL-Token program\n const pid = msg.accountKeys[ix.programIdIndex]!;\n expect(pid.equals(TOKEN_PROGRAM_ID)).toBe(true);\n\n // first account is source ATA, second is mint, third is dest ATA\n expect(\n (msg.accountKeys[ix.accounts[0]!] as PublicKey).equals(sourceAta),\n ).toBe(true);\n expect((msg.accountKeys[ix.accounts[1]!] as PublicKey).equals(mint)).toBe(\n true,\n );\n expect(\n (msg.accountKeys[ix.accounts[2]!] as PublicKey).equals(destAta),\n ).toBe(true);\n\n // feePayer must sign\n expect(\n (msg.accountKeys[ix.accounts[3]!] as PublicKey).equals(\n feePayer.publicKey,\n ),\n ).toBe(true);\n }\n });\n\n it(\"generatePlainSolanaTransaction emits correct SystemProgram.transfer instructions\", () => {\n // given\n const gen = new GenerateSolanaTransaction();\n const lamports = 1_000;\n const ops = 3;\n\n // when\n const b64 = gen.generatePlainSolanaTransaction(\n feePayerKey,\n recipientKey,\n lamports,\n ops,\n );\n const uint8Array = Uint8Array.from(Buffer.from(b64, \"base64\"));\n const msg = Message.from(uint8Array);\n\n // then\n expect(msg.instructions).toHaveLength(ops);\n\n for (const ix of msg.instructions) {\n // program must be SystemProgram\n const pid = msg.accountKeys[ix.programIdIndex]!;\n expect(pid.equals(SystemProgram.programId)).toBe(true);\n\n // accounts: [fromPubkey, toPubkey]\n expect((msg.accountKeys[ix.accounts[0]!] as PublicKey).toBase58()).toBe(\n feePayerKey,\n );\n expect((msg.accountKeys[ix.accounts[1]!] as PublicKey).toBase58()).toBe(\n recipientKey,\n );\n }\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,6BACPC,EAKO,2BACPC,EAAqC,kBAErCC,EAGO,0CAEP,YAAS,4BAA6B,IAAM,CAC1C,MAAMC,EAAW,UAAQ,SAAS,EAC5BC,EAAY,UAAQ,SAAS,EAC7BC,EAAcF,EAAS,UAAU,SAAS,EAC1CG,EAAeF,EAAU,UAAU,SAAS,KAElD,MAAG,uFAAwF,IAAM,CAE/F,MAAMG,EAAM,IAAI,4BACVC,EAAMD,EAAI,wBAAwBF,EAAaC,EAAc,IAAK,CAAC,EAGnEG,EAAMF,EAAI,4BACdF,EACAC,EACA,YAAU,KAAK,KAAK,SAAS,EAC7B,IACA,YAAU,KAAK,SACf,CACF,KAGA,UAAOE,CAAG,EAAE,KAAKC,CAAG,CACtB,CAAC,KAED,MAAG,mFAAoF,IAAM,CAE3F,MAAMF,EAAM,IAAI,4BACVG,EAAO,YAAU,KAAK,KACtBC,EAAW,YAAU,KAAK,SAC1BC,EAAS,KACTC,EAAY,EAGZC,EAAMP,EAAI,4BACdF,EACAC,EACAI,EAAK,SAAS,EACdE,EACAD,EACAE,CACF,EAEME,EAAa,WAAW,KAAK,OAAO,KAAKD,EAAK,QAAQ,CAAC,EACvDE,EAAM,UAAQ,KAAKD,CAAU,KAGnC,UAAOC,EAAI,YAAY,EAAE,aAAaH,CAAS,EAE/C,MAAMI,KAAY,iCAChBP,EACAP,EAAS,UACT,GACA,mBACA,6BACF,EACMe,KAAU,iCACdR,EACAN,EAAU,UACV,GACA,mBACA,6BACF,EAEA,UAAWe,KAAMH,EAAI,aAAc,CAEjC,MAAMI,EAAMJ,EAAI,YAAYG,EAAG,cAAc,KAC7C,UAAOC,EAAI,OAAO,kBAAgB,CAAC,EAAE,KAAK,EAAI,KAG9C,UACGJ,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAAOF,CAAS,CAClE,EAAE,KAAK,EAAI,KACX,UAAQD,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAAOT,CAAI,CAAC,EAAE,KACnE,EACF,KACA,UACGM,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAAOD,CAAO,CAChE,EAAE,KAAK,EAAI,KAGX,UACGF,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,OAC9ChB,EAAS,SACX,CACF,EAAE,KAAK,EAAI,CACb,CACF,CAAC,KAED,MAAG,mFAAoF,IAAM,CAE3F,MAAMI,EAAM,IAAI,4BACVc,EAAW,IACXC,EAAM,EAGNR,EAAMP,EAAI,+BACdF,EACAC,EACAe,EACAC,CACF,EACMP,EAAa,WAAW,KAAK,OAAO,KAAKD,EAAK,QAAQ,CAAC,EACvDE,EAAM,UAAQ,KAAKD,CAAU,KAGnC,UAAOC,EAAI,YAAY,EAAE,aAAaM,CAAG,EAEzC,UAAWH,KAAMH,EAAI,aAAc,CAEjC,MAAMI,EAAMJ,EAAI,YAAYG,EAAG,cAAc,KAC7C,UAAOC,EAAI,OAAO,gBAAc,SAAS,CAAC,EAAE,KAAK,EAAI,KAGrD,UAAQJ,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,SAAS,CAAC,EAAE,KACjEd,CACF,KACA,UAAQW,EAAI,YAAYG,EAAG,SAAS,CAAC,CAAE,EAAgB,SAAS,CAAC,EAAE,KACjEb,CACF,CACF,CACF,CAAC,CACH,CAAC",
6
+ "names": ["import_spl_token", "import_web3", "import_vitest", "import_GenerateSolanaTransaction", "feePayer", "recipient", "feePayerKey", "recipientKey", "gen", "txA", "txB", "mint", "decimals", "amount", "transfers", "b64", "uint8Array", "msg", "sourceAta", "destAta", "ix", "pid", "lamports", "ops"]
7
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";var d=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var T=Object.getOwnPropertyNames;var A=Object.prototype.hasOwnProperty;var I=(c,e)=>{for(var s in e)d(c,s,{get:e[s],enumerable:!0})},f=(c,e,s,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of T(e))!A.call(c,a)&&a!==s&&d(c,a,{get:()=>e[a],enumerable:!(n=m(e,a))||n.enumerable});return c};var g=c=>f(d({},"__esModule",{value:!0}),c);var b={};I(b,{SolanaTransactionTypes:()=>y,TransactionInspector:()=>k});module.exports=g(b);var r=require("@solana/spl-token"),i=require("@solana/web3.js"),p=require("buffer"),y=(s=>(s.STANDARD="Standard",s.SPL="SPL",s))(y||{});class k{constructor(e){this.rawTransactionBytes=e}inspectTransactionType(){try{const e=this.extractMessage(this.rawTransactionBytes);for(const s of e.compiledInstructions){const n=e.staticAccountKeys[s.programIdIndex];if(!n.equals(r.TOKEN_PROGRAM_ID))continue;const a=new i.TransactionInstruction({programId:n,keys:s.accountKeyIndexes.map(t=>({pubkey:e.staticAccountKeys[t],isSigner:e.isAccountSigner(t),isWritable:e.isAccountWritable(t)})),data:p.Buffer.from(s.data)});switch(a.data[0]){case r.TokenInstruction.Transfer:{const{keys:{destination:t}}=(0,r.decodeTransferInstruction)(a);return{transactionType:"SPL",data:{tokenAddress:t.pubkey.toBase58()}}}case r.TokenInstruction.TransferChecked:{const{keys:{destination:t}}=(0,r.decodeTransferCheckedInstruction)(a);return{transactionType:"SPL",data:{tokenAddress:t.pubkey.toBase58()}}}case r.TokenInstruction.InitializeAccount:{const{keys:{account:t,mint:o}}=(0,r.decodeInitializeAccountInstruction)(a);return{transactionType:"SPL",data:{createATA:{address:t.pubkey.toBase58(),mintAddress:o.pubkey.toBase58()}}}}default:continue}}return{transactionType:"Standard",data:{}}}catch{return{transactionType:"Standard",data:{}}}}extractMessage(e){const s=[];try{return i.VersionedTransaction.deserialize(e).message}catch(n){s.push(n.message)}try{return i.VersionedMessage.deserialize(e)}catch(n){s.push(n.message)}try{const n=i.Transaction.from(e),a=[n.feePayer,...n.instructions.flatMap(t=>t.keys.map(o=>o.pubkey))],u=Array.from(new Map(a.filter(Boolean).map(t=>[t.toBase58(),t])).values());return{compiledInstructions:n.instructions.map(t=>({programIdIndex:u.findIndex(o=>o.equals(t.programId)),accountKeyIndexes:t.keys.map(o=>u.findIndex(l=>l.equals(o.pubkey))),data:t.data})),staticAccountKeys:u,isAccountSigner:t=>n.signatures.some(o=>o.publicKey.equals(u[t])),isAccountWritable:()=>!0}}catch(n){s.push(n.message)}throw new Error(`Invalid transaction payload \u2013 all deserializers failed:
2
+ `+s.map((n,a)=>`${a+1}) ${n}`).join(`
3
+ `))}}0&&(module.exports={SolanaTransactionTypes,TransactionInspector});
4
+ //# sourceMappingURL=TransactionInspector.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/services/TransactionInspector.ts"],
4
+ "sourcesContent": ["import {\n decodeInitializeAccountInstruction,\n decodeTransferCheckedInstruction,\n decodeTransferInstruction,\n TOKEN_PROGRAM_ID,\n TokenInstruction,\n} from \"@solana/spl-token\";\nimport {\n type PublicKey,\n Transaction,\n TransactionInstruction,\n VersionedMessage,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport { Buffer } from \"buffer\";\n\nexport enum SolanaTransactionTypes {\n STANDARD = \"Standard\",\n SPL = \"SPL\",\n}\nexport interface TxInspectorResult {\n transactionType: SolanaTransactionTypes;\n data: {\n tokenAddress?: string;\n createATA?: {\n address: string;\n mintAddress: string;\n };\n };\n}\n\nexport class TransactionInspector {\n constructor(private readonly rawTransactionBytes: Uint8Array) {}\n\n public inspectTransactionType(): TxInspectorResult {\n try {\n const message = this.extractMessage(this.rawTransactionBytes);\n\n for (const ixMeta of message.compiledInstructions) {\n const programId = message.staticAccountKeys[ixMeta.programIdIndex]!;\n if (!programId.equals(TOKEN_PROGRAM_ID)) continue;\n\n const instruction = new TransactionInstruction({\n programId,\n keys: ixMeta.accountKeyIndexes.map((i) => ({\n pubkey: message.staticAccountKeys[i]!,\n isSigner: message.isAccountSigner(i),\n isWritable: message.isAccountWritable(i),\n })),\n data: Buffer.from(ixMeta.data),\n });\n\n const instructionType = instruction.data[0];\n switch (instructionType) {\n case TokenInstruction.Transfer: {\n const {\n keys: { destination },\n } = decodeTransferInstruction(instruction);\n return {\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: destination.pubkey.toBase58() },\n };\n }\n case TokenInstruction.TransferChecked: {\n const {\n keys: { destination },\n } = decodeTransferCheckedInstruction(instruction);\n return {\n transactionType: SolanaTransactionTypes.SPL,\n data: { tokenAddress: destination.pubkey.toBase58() },\n };\n }\n case TokenInstruction.InitializeAccount: {\n const {\n keys: { account, mint },\n } = decodeInitializeAccountInstruction(instruction);\n return {\n transactionType: SolanaTransactionTypes.SPL,\n data: {\n createATA: {\n address: account.pubkey.toBase58(),\n mintAddress: mint.pubkey.toBase58(),\n },\n },\n };\n }\n default:\n continue;\n }\n }\n\n return {\n transactionType: SolanaTransactionTypes.STANDARD,\n data: {},\n };\n } catch {\n return {\n transactionType: SolanaTransactionTypes.STANDARD,\n data: {},\n };\n }\n }\n\n private extractMessage(rawBytes: Uint8Array): VersionedMessage {\n const errors: string[] = [];\n try {\n return VersionedTransaction.deserialize(rawBytes).message;\n } catch (e) {\n errors.push((e as Error).message);\n }\n\n try {\n return VersionedMessage.deserialize(rawBytes);\n } catch (e) {\n errors.push((e as Error).message);\n }\n\n try {\n const tx = Transaction.from(rawBytes);\n const allKeys = [\n tx.feePayer,\n ...tx.instructions.flatMap((ix) => ix.keys.map((k) => k.pubkey)),\n ];\n\n const staticAccountKeys = Array.from(\n new Map(\n (allKeys.filter(Boolean) as PublicKey[]).map((pk) => [\n pk.toBase58(),\n pk,\n ]),\n ).values(),\n );\n\n interface CustomCompiledInstruction {\n programIdIndex: number;\n accountKeyIndexes: number[];\n data: Uint8Array;\n }\n\n return {\n compiledInstructions: tx.instructions.map(\n (ix): CustomCompiledInstruction => ({\n programIdIndex: staticAccountKeys.findIndex((k) =>\n k.equals(ix.programId),\n ),\n accountKeyIndexes: ix.keys.map((k) =>\n staticAccountKeys.findIndex((s) => s.equals(k.pubkey)),\n ),\n data: ix.data,\n }),\n ),\n staticAccountKeys,\n isAccountSigner: (i: number) =>\n tx.signatures.some((sig) =>\n sig.publicKey.equals(staticAccountKeys[i]!),\n ),\n isAccountWritable: () => true,\n } as unknown as VersionedMessage;\n } catch (e) {\n errors.push((e as Error).message);\n }\n\n throw new Error(\n \"Invalid transaction payload \u2013 all deserializers failed:\\n\" +\n errors.map((m, i) => `${i + 1}) ${m}`).join(\"\\n\"),\n );\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["TransactionInspector_exports", "__export", "SolanaTransactionTypes", "TransactionInspector", "__toCommonJS", "import_spl_token", "import_web3", "import_buffer", "rawTransactionBytes", "message", "ixMeta", "programId", "instruction", "i", "destination", "account", "mint", "rawBytes", "errors", "e", "tx", "allKeys", "ix", "k", "staticAccountKeys", "pk", "s", "sig", "m"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var T=Object.create;var d=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,g=Object.prototype.hasOwnProperty;var m=(e,t,r,c)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of A(t))!g.call(e,n)&&n!==r&&d(e,n,{get:()=>t[n],enumerable:!(c=b(t,n))||c.enumerable});return e};var K=(e,t,r)=>(r=e!=null?T(f(e)):{},m(t||!e||!e.__esModule?d(r,"default",{value:e,enumerable:!0}):r,e));var p=require("@solana/spl-token"),a=require("@solana/web3.js"),u=K(require("bs58")),s=require("vitest"),o=require("./TransactionInspector");const l=u.default.encode(new Uint8Array(32).fill(1));(0,s.describe)("TransactionInspector",()=>{(0,s.it)("falls back to STANDARD for a plain SystemProgram transfer",()=>{const e=a.Keypair.generate(),t=a.Keypair.generate().publicKey,r=new a.Transaction().add(a.SystemProgram.transfer({fromPubkey:e.publicKey,toPubkey:t,lamports:1e3}));r.recentBlockhash=l,r.feePayer=e.publicKey,r.sign(e);const c=r.serialize(),n=new o.TransactionInspector(c).inspectTransactionType();(0,s.expect)(n.transactionType).toBe(o.SolanaTransactionTypes.STANDARD),(0,s.expect)(n.data).toEqual({})}),(0,s.it)("detects an SPL Transfer and returns the destination address",()=>{const e=a.Keypair.generate(),t=a.Keypair.generate().publicKey,r=a.Keypair.generate().publicKey,c=e.publicKey,n=new a.Transaction().add((0,p.createTransferInstruction)(t,r,c,42n,[],p.TOKEN_PROGRAM_ID));n.recentBlockhash=l,n.feePayer=e.publicKey,n.sign(e);const i=new o.TransactionInspector(n.serialize()).inspectTransactionType();(0,s.expect)(i.transactionType).toBe(o.SolanaTransactionTypes.SPL),(0,s.expect)(i.data.tokenAddress).toBe(r.toBase58())}),(0,s.it)("detects an SPL TransferChecked and returns the destination address",()=>{const e=a.Keypair.generate(),t=a.Keypair.generate().publicKey,r=a.Keypair.generate().publicKey,c=a.Keypair.generate().publicKey,n=e.publicKey,i=new a.Transaction().add((0,p.createTransferCheckedInstruction)(r,t,c,n,123n,0,[],p.TOKEN_PROGRAM_ID));i.recentBlockhash=l,i.feePayer=e.publicKey,i.sign(e);const y=new o.TransactionInspector(i.serialize()).inspectTransactionType();(0,s.expect)(y.transactionType).toBe(o.SolanaTransactionTypes.SPL),(0,s.expect)(y.data.tokenAddress).toBe(c.toBase58())}),(0,s.it)("detects an SPL InitializeAccount and returns the new ATA and mint",()=>{const e=a.Keypair.generate(),t=a.Keypair.generate().publicKey,r=a.Keypair.generate().publicKey,c=e.publicKey,n=new a.Transaction().add((0,p.createInitializeAccountInstruction)(r,t,c,p.TOKEN_PROGRAM_ID));n.recentBlockhash=l,n.feePayer=e.publicKey,n.sign(e);const i=new o.TransactionInspector(n.serialize()).inspectTransactionType();(0,s.expect)(i.transactionType).toBe(o.SolanaTransactionTypes.SPL),(0,s.expect)(i.data.createATA).toEqual({address:r.toBase58(),mintAddress:t.toBase58()})}),(0,s.it)("falls back to STANDARD if the payload is unparseable",()=>{const e=new Uint8Array([0,1,2,3,4,5]),t=new o.TransactionInspector(e).inspectTransactionType();(0,s.expect)(t.transactionType).toBe(o.SolanaTransactionTypes.STANDARD),(0,s.expect)(t.data).toEqual({})})});
2
+ //# sourceMappingURL=TransactionInspector.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/services/TransactionInspector.test.ts"],
4
+ "sourcesContent": ["import {\n createInitializeAccountInstruction,\n createTransferCheckedInstruction,\n createTransferInstruction,\n TOKEN_PROGRAM_ID,\n} from \"@solana/spl-token\";\nimport { Keypair, SystemProgram, Transaction } from \"@solana/web3.js\";\nimport bs58 from \"bs58\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SolanaTransactionTypes,\n TransactionInspector,\n} from \"./TransactionInspector\";\n\nconst DUMMY_BLOCKHASH = bs58.encode(new Uint8Array(32).fill(1));\n\ndescribe(\"TransactionInspector\", () => {\n it(\"falls back to STANDARD for a plain SystemProgram transfer\", () => {\n const payer = Keypair.generate();\n const dest = Keypair.generate().publicKey;\n\n const tx = new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: payer.publicKey,\n toPubkey: dest,\n lamports: 1_000,\n }),\n );\n tx.recentBlockhash = DUMMY_BLOCKHASH;\n tx.feePayer = payer.publicKey;\n tx.sign(payer);\n\n const raw = tx.serialize();\n const result = new TransactionInspector(raw).inspectTransactionType();\n\n expect(result.transactionType).toBe(SolanaTransactionTypes.STANDARD);\n expect(result.data).toEqual({});\n });\n\n it(\"detects an SPL Transfer and returns the destination address\", () => {\n const payer = Keypair.generate();\n const source = Keypair.generate().publicKey;\n const destination = Keypair.generate().publicKey;\n const owner = payer.publicKey;\n\n const tx = new Transaction().add(\n createTransferInstruction(\n source,\n destination,\n owner,\n 42n,\n [],\n TOKEN_PROGRAM_ID,\n ),\n );\n tx.recentBlockhash = DUMMY_BLOCKHASH;\n tx.feePayer = payer.publicKey;\n tx.sign(payer);\n\n const result = new TransactionInspector(\n tx.serialize(),\n ).inspectTransactionType();\n\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(destination.toBase58());\n });\n\n it(\"detects an SPL TransferChecked and returns the destination address\", () => {\n const payer = Keypair.generate();\n const mint = Keypair.generate().publicKey;\n const source = Keypair.generate().publicKey;\n const destination = Keypair.generate().publicKey;\n const owner = payer.publicKey;\n\n const tx = new Transaction().add(\n createTransferCheckedInstruction(\n source,\n mint,\n destination,\n owner,\n 123n,\n 0,\n [],\n TOKEN_PROGRAM_ID,\n ),\n );\n tx.recentBlockhash = DUMMY_BLOCKHASH;\n tx.feePayer = payer.publicKey;\n tx.sign(payer);\n\n const result = new TransactionInspector(\n tx.serialize(),\n ).inspectTransactionType();\n\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.tokenAddress).toBe(destination.toBase58());\n });\n\n it(\"detects an SPL InitializeAccount and returns the new ATA and mint\", () => {\n const payer = Keypair.generate();\n const mint = Keypair.generate().publicKey;\n const newAccount = Keypair.generate().publicKey;\n const owner = payer.publicKey;\n\n const tx = new Transaction().add(\n createInitializeAccountInstruction(\n newAccount,\n mint,\n owner,\n TOKEN_PROGRAM_ID,\n ),\n );\n tx.recentBlockhash = DUMMY_BLOCKHASH;\n tx.feePayer = payer.publicKey;\n tx.sign(payer);\n\n const result = new TransactionInspector(\n tx.serialize(),\n ).inspectTransactionType();\n\n expect(result.transactionType).toBe(SolanaTransactionTypes.SPL);\n expect(result.data.createATA).toEqual({\n address: newAccount.toBase58(),\n mintAddress: mint.toBase58(),\n });\n });\n\n it(\"falls back to STANDARD if the payload is unparseable\", () => {\n const garbage = new Uint8Array([0, 1, 2, 3, 4, 5]);\n const result = new TransactionInspector(garbage).inspectTransactionType();\n\n expect(result.transactionType).toBe(SolanaTransactionTypes.STANDARD);\n expect(result.data).toEqual({});\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_spl_token", "import_web3", "import_bs58", "import_vitest", "import_TransactionInspector", "DUMMY_BLOCKHASH", "bs58", "payer", "dest", "tx", "raw", "result", "source", "destination", "owner", "mint", "newAccount", "garbage"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var g=(n,t)=>{for(var o in t)i(n,o,{get:t[o],enumerable:!0})},C=(n,t,o,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of p(t))!u.call(n,e)&&e!==o&&i(n,e,{get:()=>t[e],enumerable:!(a=d(t,e))||a.enumerable});return n};var m=n=>C(i({},"__esModule",{value:!0}),n);var A={};g(A,{BuildTransactionContextTask:()=>f});module.exports=m(A);var c=require("@ledgerhq/device-management-kit"),l=require("../../app-binder/command/GetChallengeCommand");class f{constructor(t,o){this.api=t;this.args=o}async run(){const{contextModule:t,options:o}=this.args,a=this.api.getDeviceSessionState();let e;const s=await this.api.sendCommand(new l.GetChallengeCommand);return(0,c.isSuccessCommandResult)(s)&&(e=s.data.challenge),(await t.getSolanaContext({deviceModelId:a.deviceModelId,tokenAddress:o.tokenAddress,challenge:e,createATA:o.createATA})).caseOf({Left:r=>{throw r},Right:r=>({challenge:e,descriptor:r.descriptor,addressResult:{tokenAccount:r.tokenAccount,owner:r.owner,contract:r.contract},calCertificate:r.certificate})})}}0&&(module.exports={BuildTransactionContextTask});
2
+ //# sourceMappingURL=BuildTransactionContextTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.ts"],
4
+ "sourcesContent": ["import {\n type ContextModule,\n type PkiCertificate,\n} from \"@ledgerhq/context-module\";\nimport {\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type TransactionOptions } from \"@api/model/TransactionOptions\";\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nexport type SolanaBuildContextResult = {\n challenge: string | undefined;\n addressResult: {\n tokenAccount: string;\n owner: string;\n contract: string;\n };\n calCertificate: PkiCertificate;\n descriptor: Uint8Array;\n};\n\nexport type BuildTransactionContextTaskArgs = {\n readonly contextModule: ContextModule;\n readonly options: TransactionOptions;\n};\n\nexport class BuildTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly args: BuildTransactionContextTaskArgs,\n ) {}\n\n async run(): Promise<SolanaBuildContextResult> {\n const { contextModule, options } = this.args;\n const deviceState = this.api.getDeviceSessionState();\n\n // get challenge\n let challenge: string | undefined;\n const challengeRes = await this.api.sendCommand(new GetChallengeCommand());\n if (isSuccessCommandResult(challengeRes)) {\n challenge = challengeRes.data.challenge;\n }\n\n // get Solana context\n const contextResult = await contextModule.getSolanaContext({\n deviceModelId: deviceState.deviceModelId,\n tokenAddress: options.tokenAddress,\n challenge,\n createATA: options.createATA,\n });\n\n return contextResult.caseOf({\n Left: (err) => {\n throw err;\n },\n Right: (ctx) => {\n return {\n challenge,\n descriptor: ctx.descriptor,\n addressResult: {\n tokenAccount: ctx.tokenAccount,\n owner: ctx.owner,\n contract: ctx.contract,\n },\n calCertificate: ctx.certificate,\n };\n },\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iCAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAGO,2CAGPC,EAAoC,4DAkB7B,MAAMH,CAA4B,CACvC,YACmBI,EACAC,EACjB,CAFiB,SAAAD,EACA,UAAAC,CAChB,CAEH,MAAM,KAAyC,CAC7C,KAAM,CAAE,cAAAC,EAAe,QAAAC,CAAQ,EAAI,KAAK,KAClCC,EAAc,KAAK,IAAI,sBAAsB,EAGnD,IAAIC,EACJ,MAAMC,EAAe,MAAM,KAAK,IAAI,YAAY,IAAI,qBAAqB,EACzE,SAAI,0BAAuBA,CAAY,IACrCD,EAAYC,EAAa,KAAK,YAIV,MAAMJ,EAAc,iBAAiB,CACzD,cAAeE,EAAY,cAC3B,aAAcD,EAAQ,aACtB,UAAAE,EACA,UAAWF,EAAQ,SACrB,CAAC,GAEoB,OAAO,CAC1B,KAAOI,GAAQ,CACb,MAAMA,CACR,EACA,MAAQC,IACC,CACL,UAAAH,EACA,WAAYG,EAAI,WAChB,cAAe,CACb,aAAcA,EAAI,aAClB,MAAOA,EAAI,MACX,SAAUA,EAAI,QAChB,EACA,eAAgBA,EAAI,WACtB,EAEJ,CAAC,CACH,CACF",
6
+ "names": ["BuildTransactionContextTask_exports", "__export", "BuildTransactionContextTask", "__toCommonJS", "import_device_management_kit", "import_GetChallengeCommand", "api", "args", "contextModule", "options", "deviceState", "challenge", "challengeRes", "err", "ctx"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),e=require("vitest"),i=require("../../app-binder/command/GetChallengeCommand"),l=require("./BuildTransactionContextTask");const a={getSolanaContext:e.vi.fn(),getContext:e.vi.fn(),getContexts:e.vi.fn(),getTypedDataFilters:e.vi.fn(),getWeb3Checks:e.vi.fn()},d={contextModule:a,options:{tokenAddress:"someAddress",createATA:void 0}},t={descriptor:new Uint8Array([1,2,3]),tokenAccount:"someTokenAccount",owner:"someOwner",contract:"someContract",certificate:{payload:new Uint8Array([170,187]),keyUsageNumber:1}};let o;(0,e.describe)("BuildTransactionContextTask",()=>{(0,e.beforeEach)(()=>{e.vi.resetAllMocks(),o={getDeviceSessionState:e.vi.fn().mockReturnValue({deviceModelId:n.DeviceModelId.NANO_X}),sendCommand:e.vi.fn().mockResolvedValue({status:n.CommandResultStatus.Success,data:{challenge:"someChallenge"}})}}),(0,e.it)("returns context successfully when challenge command succeeds",async()=>{a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(o.sendCommand).toHaveBeenCalledWith(e.expect.any(i.GetChallengeCommand)),(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:"someChallenge",createATA:void 0}),(0,e.expect)(s).toEqual({challenge:"someChallenge",descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("returns context when challenge command fails",async()=>{o.sendCommand.mockResolvedValue({status:n.CommandResultStatus.Error,data:{}}),a.getSolanaContext.mockResolvedValue((0,c.Right)(t));const s=await new l.BuildTransactionContextTask(o,d).run();(0,e.expect)(a.getSolanaContext).toHaveBeenCalledWith({deviceModelId:n.DeviceModelId.NANO_X,tokenAddress:"someAddress",challenge:void 0,createATA:void 0}),(0,e.expect)(s).toEqual({challenge:void 0,descriptor:t.descriptor,calCertificate:t.certificate,addressResult:{tokenAccount:t.tokenAccount,owner:t.owner,contract:t.contract}})}),(0,e.it)("throws if getSolanaContext returns Left",async()=>{const r=new Error("Solana context failure");a.getSolanaContext.mockResolvedValue((0,c.Left)(r));const s=new l.BuildTransactionContextTask(o,d);await(0,e.expect)(s.run()).rejects.toThrow("Solana context failure")})});
2
+ //# sourceMappingURL=BuildTransactionContextTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/BuildTransactionContextTask.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n CommandResultStatus,\n DeviceModelId,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { GetChallengeCommand } from \"@internal/app-binder/command/GetChallengeCommand\";\n\nimport {\n BuildTransactionContextTask,\n type SolanaBuildContextResult,\n} from \"./BuildTransactionContextTask\";\n\nconst contextModuleMock: ContextModule = {\n getSolanaContext: vi.fn(),\n getContext: vi.fn(),\n getContexts: vi.fn(),\n getTypedDataFilters: vi.fn(),\n getWeb3Checks: vi.fn(),\n};\n\nconst defaultArgs = {\n contextModule: contextModuleMock,\n options: {\n tokenAddress: \"someAddress\",\n createATA: undefined,\n },\n};\n\nconst domainSolanaPayload = {\n descriptor: new Uint8Array([1, 2, 3]),\n tokenAccount: \"someTokenAccount\",\n owner: \"someOwner\",\n contract: \"someContract\",\n certificate: { payload: new Uint8Array([0xaa, 0xbb]), keyUsageNumber: 1 },\n} as const;\n\nlet apiMock: InternalApi;\n\ndescribe(\"BuildTransactionContextTask\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock = {\n getDeviceSessionState: vi\n .fn()\n .mockReturnValue({ deviceModelId: DeviceModelId.NANO_X }),\n sendCommand: vi.fn().mockResolvedValue({\n status: CommandResultStatus.Success,\n data: { challenge: \"someChallenge\" },\n }),\n } as unknown as InternalApi;\n });\n\n it(\"returns context successfully when challenge command succeeds\", async () => {\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(apiMock.sendCommand).toHaveBeenCalledWith(\n expect.any(GetChallengeCommand),\n );\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: \"someChallenge\",\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: \"someChallenge\",\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"returns context when challenge command fails\", async () => {\n (apiMock.sendCommand as any).mockResolvedValue({\n status: CommandResultStatus.Error,\n data: {},\n });\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(\n Right(domainSolanaPayload),\n );\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n const result = await task.run();\n\n expect(contextModuleMock.getSolanaContext).toHaveBeenCalledWith({\n deviceModelId: DeviceModelId.NANO_X,\n tokenAddress: \"someAddress\",\n challenge: undefined,\n createATA: undefined,\n });\n\n expect(result).toEqual<SolanaBuildContextResult>({\n challenge: undefined,\n descriptor: domainSolanaPayload.descriptor,\n calCertificate: domainSolanaPayload.certificate,\n addressResult: {\n tokenAccount: domainSolanaPayload.tokenAccount,\n owner: domainSolanaPayload.owner,\n contract: domainSolanaPayload.contract,\n },\n });\n });\n\n it(\"throws if getSolanaContext returns Left\", async () => {\n const error = new Error(\"Solana context failure\");\n (contextModuleMock.getSolanaContext as any).mockResolvedValue(Left(error));\n\n const task = new BuildTransactionContextTask(apiMock, defaultArgs);\n\n await expect(task.run()).rejects.toThrow(\"Solana context failure\");\n });\n});\n"],
5
+ "mappings": "aAIA,IAAAA,EAIO,2CACPC,EAA4B,qBAC5BC,EAAqD,kBAErDC,EAAoC,4DAEpCC,EAGO,yCAEP,MAAMC,EAAmC,CACvC,iBAAkB,KAAG,GAAG,EACxB,WAAY,KAAG,GAAG,EAClB,YAAa,KAAG,GAAG,EACnB,oBAAqB,KAAG,GAAG,EAC3B,cAAe,KAAG,GAAG,CACvB,EAEMC,EAAc,CAClB,cAAeD,EACf,QAAS,CACP,aAAc,cACd,UAAW,MACb,CACF,EAEME,EAAsB,CAC1B,WAAY,IAAI,WAAW,CAAC,EAAG,EAAG,CAAC,CAAC,EACpC,aAAc,mBACd,MAAO,YACP,SAAU,eACV,YAAa,CAAE,QAAS,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EAAG,eAAgB,CAAE,CAC1E,EAEA,IAAIC,KAEJ,YAAS,8BAA+B,IAAM,IAC5C,cAAW,IAAM,CACf,KAAG,cAAc,EAEjBA,EAAU,CACR,sBAAuB,KACpB,GAAG,EACH,gBAAgB,CAAE,cAAe,gBAAc,MAAO,CAAC,EAC1D,YAAa,KAAG,GAAG,EAAE,kBAAkB,CACrC,OAAQ,sBAAoB,QAC5B,KAAM,CAAE,UAAW,eAAgB,CACrC,CAAC,CACH,CACF,CAAC,KAED,MAAG,+DAAgE,SAAY,CAC5EH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOE,EAAQ,WAAW,EAAE,qBAC1B,SAAO,IAAI,qBAAmB,CAChC,KAEA,UAAOH,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,gBACX,UAAW,MACb,CAAC,KAED,UAAOI,CAAM,EAAE,QAAkC,CAC/C,UAAW,gBACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,KAED,MAAG,+CAAgD,SAAY,CAC5DC,EAAQ,YAAoB,kBAAkB,CAC7C,OAAQ,sBAAoB,MAC5B,KAAM,CAAC,CACT,CAAC,EACAH,EAAkB,iBAAyB,qBAC1C,SAAME,CAAmB,CAC3B,EAGA,MAAME,EAAS,MADF,IAAI,8BAA4BD,EAASF,CAAW,EACvC,IAAI,KAE9B,UAAOD,EAAkB,gBAAgB,EAAE,qBAAqB,CAC9D,cAAe,gBAAc,OAC7B,aAAc,cACd,UAAW,OACX,UAAW,MACb,CAAC,KAED,UAAOI,CAAM,EAAE,QAAkC,CAC/C,UAAW,OACX,WAAYF,EAAoB,WAChC,eAAgBA,EAAoB,YACpC,cAAe,CACb,aAAcA,EAAoB,aAClC,MAAOA,EAAoB,MAC3B,SAAUA,EAAoB,QAChC,CACF,CAAC,CACH,CAAC,KAED,MAAG,0CAA2C,SAAY,CACxD,MAAMG,EAAQ,IAAI,MAAM,wBAAwB,EAC/CL,EAAkB,iBAAyB,qBAAkB,QAAKK,CAAK,CAAC,EAEzE,MAAMC,EAAO,IAAI,8BAA4BH,EAASF,CAAW,EAEjE,QAAM,UAAOK,EAAK,IAAI,CAAC,EAAE,QAAQ,QAAQ,wBAAwB,CACnE,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_GetChallengeCommand", "import_BuildTransactionContextTask", "contextModuleMock", "defaultArgs", "domainSolanaPayload", "apiMock", "result", "error", "task"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var C=(o,t)=>{for(var e in t)i(o,e,{get:t[e],enumerable:!0})},f=(o,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of l(t))!y.call(o,r)&&r!==e&&i(o,r,{get:()=>t[r],enumerable:!(a=d(t,r))||a.enumerable});return o};var u=o=>f(i({},"__esModule",{value:!0}),o);var P={};C(P,{ProvideSolanaTransactionContextTask:()=>v});module.exports=u(P);var n=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),m=require("../../app-binder/command/ProvideTLVDescriptorCommand"),c=require("../../app-binder/command/ProvideTrustedNamePKICommand");class v{constructor(t,e){this.api=t;this.context=e}async run(){const{descriptor:t,certificate:e}=this.context,{payload:a}=e,r=await this.api.sendCommand(new c.ProvideTrustedNamePKICommand({pkiBlob:a}));if(!(0,n.isSuccessCommandResult)(r))throw r;const p=await this.api.sendCommand(new m.ProvideTLVDescriptorCommand({payload:t}));if(!(0,n.isSuccessCommandResult)(p))throw p;return s.Nothing}}0&&(module.exports={ProvideSolanaTransactionContextTask});
2
+ //# sourceMappingURL=ProvideTransactionContextTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.ts"],
4
+ "sourcesContent": ["import { type PkiCertificate } from \"@ledgerhq/context-module\";\nimport {\n type CommandErrorResult,\n type InternalApi,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Maybe, Nothing } from \"purify-ts\";\n\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { ProvideTrustedNamePKICommand } from \"@internal/app-binder/command/ProvideTrustedNamePKICommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nexport type SolanaContextForDevice = {\n descriptor: Uint8Array;\n certificate: PkiCertificate;\n};\n\nexport class ProvideSolanaTransactionContextTask {\n constructor(\n private readonly api: InternalApi,\n private readonly context: SolanaContextForDevice,\n ) {}\n\n async run(): Promise<Maybe<CommandErrorResult<SolanaAppErrorCodes>>> {\n const { descriptor, certificate } = this.context;\n const { payload: certificatePayload } = certificate;\n\n // send CAL certificate + signature\n const pkiResult = await this.api.sendCommand(\n new ProvideTrustedNamePKICommand({\n pkiBlob: certificatePayload,\n }),\n );\n if (!isSuccessCommandResult(pkiResult)) {\n throw pkiResult;\n }\n\n // send signed TLV descriptor\n const tlvResult = await this.api.sendCommand(\n new ProvideTLVDescriptorCommand({ payload: descriptor }),\n );\n if (!isSuccessCommandResult(tlvResult)) {\n throw tlvResult;\n }\n\n return Nothing;\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yCAAAE,IAAA,eAAAC,EAAAH,GACA,IAAAI,EAIO,2CACPC,EAAoC,qBAEpCC,EAA4C,oEAC5CC,EAA6C,qEAQtC,MAAML,CAAoC,CAC/C,YACmBM,EACAC,EACjB,CAFiB,SAAAD,EACA,aAAAC,CAChB,CAEH,MAAM,KAA+D,CACnE,KAAM,CAAE,WAAAC,EAAY,YAAAC,CAAY,EAAI,KAAK,QACnC,CAAE,QAASC,CAAmB,EAAID,EAGlCE,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAI,+BAA6B,CAC/B,QAASD,CACX,CAAC,CACH,EACA,GAAI,IAAC,0BAAuBC,CAAS,EACnC,MAAMA,EAIR,MAAMC,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAI,8BAA4B,CAAE,QAASJ,CAAW,CAAC,CACzD,EACA,GAAI,IAAC,0BAAuBI,CAAS,EACnC,MAAMA,EAGR,OAAO,SACT,CACF",
6
+ "names": ["ProvideTransactionContextTask_exports", "__export", "ProvideSolanaTransactionContextTask", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_ProvideTLVDescriptorCommand", "import_ProvideTrustedNamePKICommand", "api", "context", "descriptor", "certificate", "certificatePayload", "pkiResult", "tlvResult"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var t=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),e=require("vitest"),k=require("../../app-binder/command/ProvideTLVDescriptorCommand"),p=require("../../app-binder/command/ProvideTrustedNamePKICommand"),m=require("./ProvideTransactionContextTask");(0,e.describe)("ProvideSolanaTransactionContextTask",()=>{let o,s;const d=Uint8Array.from([170,170,170]),l={payload:Uint8Array.from([222,173,190,239,222,173,190,239])},i={_tag:"SomeError",errorCode:0,message:"SomeError"};(0,e.beforeEach)(()=>{e.vi.resetAllMocks(),o={sendCommand:e.vi.fn()},s={descriptor:d,certificate:l}}),(0,e.it)("returns Nothing when both commands succeed",async()=>{const a=(0,t.CommandResultFactory)({data:r.Maybe.of(null)});o.sendCommand.mockResolvedValue(a);const c=await new m.ProvideSolanaTransactionContextTask(o,s).run();(0,e.expect)(o.sendCommand).toHaveBeenCalledTimes(2);const u=o.sendCommand.mock.calls[0];(0,e.expect)(u).toBeDefined();const C=u[0];(0,e.expect)(C).toBeInstanceOf(p.ProvideTrustedNamePKICommand),(0,e.expect)(C.args.pkiBlob).toStrictEqual(l.payload);const f=o.sendCommand.mock.calls[1][0];(0,e.expect)(f).toBeInstanceOf(k.ProvideTLVDescriptorCommand),(0,e.expect)(f.args.payload).toStrictEqual(d),(0,e.expect)(c).toStrictEqual(r.Nothing)}),(0,e.it)("throws error if PKI command fails",async()=>{const a=(0,t.CommandResultFactory)({error:i});o.sendCommand.mockResolvedValueOnce(a);const n=new m.ProvideSolanaTransactionContextTask(o,s);await(0,e.expect)(n.run()).rejects.toBe(a),(0,e.expect)(o.sendCommand).toHaveBeenCalledTimes(1)}),(0,e.it)("throws error if TLV command fails",async()=>{const a=(0,t.CommandResultFactory)({data:r.Maybe.of(null)}),n=(0,t.CommandResultFactory)({error:i});o.sendCommand.mockResolvedValueOnce(a).mockResolvedValueOnce(n);const c=new m.ProvideSolanaTransactionContextTask(o,s);await(0,e.expect)(c.run()).rejects.toBe(n),(0,e.expect)(o.sendCommand).toHaveBeenCalledTimes(2)})});
2
+ //# sourceMappingURL=ProvideTransactionContextTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/ProvideTransactionContextTask.test.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { CommandResultFactory } from \"@ledgerhq/device-management-kit\";\nimport { Maybe, Nothing } from \"purify-ts\";\nimport { beforeEach, describe, expect, it, type Mock, vi } from \"vitest\";\n\nimport { ProvideTLVDescriptorCommand } from \"@internal/app-binder/command/ProvideTLVDescriptorCommand\";\nimport { ProvideTrustedNamePKICommand } from \"@internal/app-binder/command/ProvideTrustedNamePKICommand\";\n\nimport {\n ProvideSolanaTransactionContextTask,\n type SolanaContextForDevice,\n} from \"./ProvideTransactionContextTask\";\n\ndescribe(\"ProvideSolanaTransactionContextTask\", () => {\n let fakeApi: { sendCommand: Mock };\n let context: SolanaContextForDevice;\n\n const dummyDescriptor = Uint8Array.from([0xaa, 0xaa, 0xaa]);\n const dummyCertificate: any = {\n payload: Uint8Array.from([0xde, 0xad, 0xbe, 0xef, 0xde, 0xad, 0xbe, 0xef]),\n };\n\n const mockError = { _tag: \"SomeError\", errorCode: 0, message: \"SomeError\" };\n\n beforeEach(() => {\n vi.resetAllMocks();\n fakeApi = {\n sendCommand: vi.fn(),\n };\n context = {\n descriptor: dummyDescriptor,\n certificate: dummyCertificate,\n };\n });\n\n it(\"returns Nothing when both commands succeed\", async () => {\n // given\n const successResult = CommandResultFactory({ data: Maybe.of(null) });\n fakeApi.sendCommand.mockResolvedValue(successResult);\n\n const task = new ProvideSolanaTransactionContextTask(\n fakeApi as unknown as any,\n context,\n );\n\n // when\n const result = await task.run();\n\n // then\n expect(fakeApi.sendCommand).toHaveBeenCalledTimes(2);\n\n const firstCallCall = fakeApi.sendCommand.mock.calls[0];\n expect(firstCallCall).toBeDefined();\n const firstCallArg = firstCallCall![0];\n expect(firstCallArg).toBeInstanceOf(ProvideTrustedNamePKICommand);\n expect(\n (firstCallArg as ProvideTrustedNamePKICommand).args.pkiBlob,\n ).toStrictEqual(dummyCertificate.payload);\n\n const secondCallArg = fakeApi.sendCommand.mock.calls[1]![0]!;\n expect(secondCallArg).toBeInstanceOf(ProvideTLVDescriptorCommand);\n expect(\n (secondCallArg as ProvideTLVDescriptorCommand).args.payload,\n ).toStrictEqual(dummyDescriptor);\n\n expect(result).toStrictEqual(Nothing);\n });\n\n it(\"throws error if PKI command fails\", async () => {\n const errorResult = CommandResultFactory({ error: mockError });\n fakeApi.sendCommand.mockResolvedValueOnce(errorResult);\n\n const task = new ProvideSolanaTransactionContextTask(\n fakeApi as unknown as any,\n context,\n );\n\n await expect(task.run()).rejects.toBe(errorResult);\n expect(fakeApi.sendCommand).toHaveBeenCalledTimes(1);\n });\n\n it(\"throws error if TLV command fails\", async () => {\n const successResult = CommandResultFactory({ data: Maybe.of(null) });\n const tlvErrorResult = CommandResultFactory({ error: mockError });\n\n fakeApi.sendCommand\n .mockResolvedValueOnce(successResult)\n .mockResolvedValueOnce(tlvErrorResult);\n\n const task = new ProvideSolanaTransactionContextTask(\n fakeApi as unknown as any,\n context,\n );\n\n await expect(task.run()).rejects.toBe(tlvErrorResult);\n expect(fakeApi.sendCommand).toHaveBeenCalledTimes(2);\n });\n});\n"],
5
+ "mappings": "aAGA,IAAAA,EAAqC,2CACrCC,EAA+B,qBAC/BC,EAAgE,kBAEhEC,EAA4C,oEAC5CC,EAA6C,qEAE7CC,EAGO,8CAEP,YAAS,sCAAuC,IAAM,CACpD,IAAIC,EACAC,EAEJ,MAAMC,EAAkB,WAAW,KAAK,CAAC,IAAM,IAAM,GAAI,CAAC,EACpDC,EAAwB,CAC5B,QAAS,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAI,CAAC,CAC3E,EAEMC,EAAY,CAAE,KAAM,YAAa,UAAW,EAAG,QAAS,WAAY,KAE1E,cAAW,IAAM,CACf,KAAG,cAAc,EACjBJ,EAAU,CACR,YAAa,KAAG,GAAG,CACrB,EACAC,EAAU,CACR,WAAYC,EACZ,YAAaC,CACf,CACF,CAAC,KAED,MAAG,6CAA8C,SAAY,CAE3D,MAAME,KAAgB,wBAAqB,CAAE,KAAM,QAAM,GAAG,IAAI,CAAE,CAAC,EACnEL,EAAQ,YAAY,kBAAkBK,CAAa,EAQnD,MAAMC,EAAS,MANF,IAAI,sCACfN,EACAC,CACF,EAG0B,IAAI,KAG9B,UAAOD,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EAEnD,MAAMO,EAAgBP,EAAQ,YAAY,KAAK,MAAM,CAAC,KACtD,UAAOO,CAAa,EAAE,YAAY,EAClC,MAAMC,EAAeD,EAAe,CAAC,KACrC,UAAOC,CAAY,EAAE,eAAe,8BAA4B,KAChE,UACGA,EAA8C,KAAK,OACtD,EAAE,cAAcL,EAAiB,OAAO,EAExC,MAAMM,EAAgBT,EAAQ,YAAY,KAAK,MAAM,CAAC,EAAG,CAAC,KAC1D,UAAOS,CAAa,EAAE,eAAe,6BAA2B,KAChE,UACGA,EAA8C,KAAK,OACtD,EAAE,cAAcP,CAAe,KAE/B,UAAOI,CAAM,EAAE,cAAc,SAAO,CACtC,CAAC,KAED,MAAG,oCAAqC,SAAY,CAClD,MAAMI,KAAc,wBAAqB,CAAE,MAAON,CAAU,CAAC,EAC7DJ,EAAQ,YAAY,sBAAsBU,CAAW,EAErD,MAAMC,EAAO,IAAI,sCACfX,EACAC,CACF,EAEA,QAAM,UAAOU,EAAK,IAAI,CAAC,EAAE,QAAQ,KAAKD,CAAW,KACjD,UAAOV,EAAQ,WAAW,EAAE,sBAAsB,CAAC,CACrD,CAAC,KAED,MAAG,oCAAqC,SAAY,CAClD,MAAMK,KAAgB,wBAAqB,CAAE,KAAM,QAAM,GAAG,IAAI,CAAE,CAAC,EAC7DO,KAAiB,wBAAqB,CAAE,MAAOR,CAAU,CAAC,EAEhEJ,EAAQ,YACL,sBAAsBK,CAAa,EACnC,sBAAsBO,CAAc,EAEvC,MAAMD,EAAO,IAAI,sCACfX,EACAC,CACF,EAEA,QAAM,UAAOU,EAAK,IAAI,CAAC,EAAE,QAAQ,KAAKC,CAAc,KACpD,UAAOZ,EAAQ,WAAW,EAAE,sBAAsB,CAAC,CACrD,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_ProvideTLVDescriptorCommand", "import_ProvideTrustedNamePKICommand", "import_ProvideTransactionContextTask", "fakeApi", "context", "dummyDescriptor", "dummyCertificate", "mockError", "successResult", "result", "firstCallCall", "firstCallArg", "secondCallArg", "errorResult", "task", "tlvErrorResult"]
7
+ }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),T=require("@ledgerhq/signer-utils"),m=require("purify-ts"),h=require("../../app-binder/command/SignTransactionCommand"),B=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),C=require("../../app-binder/task/SendSignDataTask");const d="44'/501'/0'/0'",x=4;describe("SignDataTask",()=>{const n=(0,B.makeDeviceActionInternalApiMock)(),f=new Uint8Array([18,52,86,120,144,171,205,239]),D=(0,e.CommandResultFactory)({data:(0,m.Just)(f)}),g=(0,e.CommandResultFactory)({data:m.Nothing});beforeEach(()=>{jest.resetAllMocks()}),describe("run with SignTransactionCommand",()=>{const c=new Uint8Array([1,2,3,4]),l=new Uint8Array(new Array(500).fill(1));it("should send the transaction in a single command",async()=>{const o=T.DerivationPathUtils.splitPath(d),a=new e.ByteArrayBuilder(c.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(i=>a.add32BitUIntToData(i)),a.addBufferToData(c);const r=a.build(),s={derivationPath:d,sendingData:c,commandFactory:i=>new h.SignTransactionCommand({serializedTransaction:i.chunkedData,more:i.more,extend:i.extend})};n.sendCommand.mockResolvedValueOnce(D);const t=await new C.SignDataTask(n,s).run();expect(n.sendCommand).toHaveBeenCalledTimes(1),expect(Array.from(n.sendCommand.mock.calls[0]?.[0]?.args?.serializedTransaction||[])).toEqual(Array.from(r)),(0,e.isSuccessCommandResult)(t)?expect(t.data).toEqual((0,m.Just)(f)):fail(`Expected a successful result, but got an error: ${t.error}`)}),it("should send the transaction in chunks",async()=>{const o=T.DerivationPathUtils.splitPath(d),a=new e.ByteArrayBuilder(l.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(u=>a.add32BitUIntToData(u)),a.addBufferToData(l);const r=a.build(),s=r.slice(0,e.APDU_MAX_PAYLOAD),t=r.slice(e.APDU_MAX_PAYLOAD,e.APDU_MAX_PAYLOAD*2),i=r.slice(e.APDU_MAX_PAYLOAD*2,e.APDU_MAX_PAYLOAD*3),I={derivationPath:d,sendingData:l,commandFactory:u=>new h.SignTransactionCommand({serializedTransaction:u.chunkedData,more:u.more,extend:u.extend})};n.sendCommand.mockResolvedValueOnce(g).mockResolvedValueOnce(g).mockResolvedValueOnce(D);const p=await new C.SignDataTask(n,I).run();expect(n.sendCommand).toHaveBeenCalledTimes(3),expect(n.sendCommand).toHaveBeenNthCalledWith(1,expect.objectContaining({args:{serializedTransaction:s,extend:!1,more:!0}})),expect(n.sendCommand).toHaveBeenNthCalledWith(2,expect.objectContaining({args:{serializedTransaction:t,extend:!0,more:!0}})),expect(n.sendCommand).toHaveBeenNthCalledWith(3,expect.objectContaining({args:{serializedTransaction:i,extend:!0,more:!1}})),(0,e.isSuccessCommandResult)(p)?expect(p.data).toEqual((0,m.Just)(f)):fail(`Expected a successful result, but got an error: ${p.error}`)}),it("should return an error if the command fails",async()=>{const o=T.DerivationPathUtils.splitPath(d),a=new e.ByteArrayBuilder(c.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(t=>a.add32BitUIntToData(t)),a.addBufferToData(c);const r={derivationPath:d,sendingData:c,commandFactory:t=>new h.SignTransactionCommand({serializedTransaction:t.chunkedData,more:t.more,extend:t.extend})};n.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("no signature returned")}));const s=await new C.SignDataTask(n,r).run();expect(n.sendCommand).toHaveBeenCalledTimes(1),expect(s).toMatchObject({error:new e.InvalidStatusWordError("no signature returned")})}),it("should return an error if a chunk command fails",async()=>{const o=T.DerivationPathUtils.splitPath(d),a=new e.ByteArrayBuilder(l.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(t=>a.add32BitUIntToData(t)),a.addBufferToData(l);const r={derivationPath:d,sendingData:l,commandFactory:t=>new h.SignTransactionCommand({serializedTransaction:t.chunkedData,more:t.more,extend:t.extend})};n.sendCommand.mockResolvedValueOnce(g).mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("An error occurred")}));const s=await new C.SignDataTask(n,r).run();expect(n.sendCommand).toHaveBeenCalledTimes(2),expect(s).toMatchObject({error:new e.InvalidStatusWordError("An error occurred")})})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),T=require("@ledgerhq/signer-utils"),m=require("purify-ts"),h=require("../../app-binder/command/SignTransactionCommand"),B=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),C=require("../../app-binder/task/SendSignDataTask");const s="44'/501'/0'/0'",x=4;describe("SignDataTask",()=>{const n=(0,B.makeDeviceActionInternalApiMock)(),f=new Uint8Array([18,52,86,120,144,171,205,239]),D=(0,e.CommandResultFactory)({data:(0,m.Just)(f)}),g=(0,e.CommandResultFactory)({data:m.Nothing});beforeEach(()=>{vi.resetAllMocks()}),describe("run with SignTransactionCommand",()=>{const c=new Uint8Array([1,2,3,4]),l=new Uint8Array(new Array(500).fill(1));it("should send the transaction in a single command",async()=>{const o=T.DerivationPathUtils.splitPath(s),a=new e.ByteArrayBuilder(c.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(i=>a.add32BitUIntToData(i)),a.addBufferToData(c);const r=a.build(),d={derivationPath:s,sendingData:c,commandFactory:i=>new h.SignTransactionCommand({serializedTransaction:i.chunkedData,more:i.more,extend:i.extend})};n.sendCommand.mockResolvedValueOnce(D);const t=await new C.SignDataTask(n,d).run();expect(n.sendCommand).toHaveBeenCalledTimes(1),expect(Array.from(n.sendCommand.mock.calls[0]?.[0]?.args?.serializedTransaction||[])).toEqual(Array.from(r)),(0,e.isSuccessCommandResult)(t)?expect(t.data).toEqual((0,m.Just)(f)):assert.fail(`Expected a successful result, but got an error: ${t.error}`)}),it("should send the transaction in chunks",async()=>{const o=T.DerivationPathUtils.splitPath(s),a=new e.ByteArrayBuilder(l.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(u=>a.add32BitUIntToData(u)),a.addBufferToData(l);const r=a.build(),d=r.slice(0,e.APDU_MAX_PAYLOAD),t=r.slice(e.APDU_MAX_PAYLOAD,e.APDU_MAX_PAYLOAD*2),i=r.slice(e.APDU_MAX_PAYLOAD*2,e.APDU_MAX_PAYLOAD*3),I={derivationPath:s,sendingData:l,commandFactory:u=>new h.SignTransactionCommand({serializedTransaction:u.chunkedData,more:u.more,extend:u.extend})};n.sendCommand.mockResolvedValueOnce(g).mockResolvedValueOnce(g).mockResolvedValueOnce(D);const p=await new C.SignDataTask(n,I).run();expect(n.sendCommand).toHaveBeenCalledTimes(3),expect(n.sendCommand).toHaveBeenNthCalledWith(1,expect.objectContaining({args:{serializedTransaction:d,extend:!1,more:!0}})),expect(n.sendCommand).toHaveBeenNthCalledWith(2,expect.objectContaining({args:{serializedTransaction:t,extend:!0,more:!0}})),expect(n.sendCommand).toHaveBeenNthCalledWith(3,expect.objectContaining({args:{serializedTransaction:i,extend:!0,more:!1}})),(0,e.isSuccessCommandResult)(p)?expect(p.data).toEqual((0,m.Just)(f)):assert.fail(`Expected a successful result, but got an error: ${p.error}`)}),it("should return an error if the command fails",async()=>{const o=T.DerivationPathUtils.splitPath(s),a=new e.ByteArrayBuilder(c.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(t=>a.add32BitUIntToData(t)),a.addBufferToData(c);const r={derivationPath:s,sendingData:c,commandFactory:t=>new h.SignTransactionCommand({serializedTransaction:t.chunkedData,more:t.more,extend:t.extend})};n.sendCommand.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("no signature returned")}));const d=await new C.SignDataTask(n,r).run();expect(n.sendCommand).toHaveBeenCalledTimes(1),expect(d).toMatchObject({error:new e.InvalidStatusWordError("no signature returned")})}),it("should return an error if a chunk command fails",async()=>{const o=T.DerivationPathUtils.splitPath(s),a=new e.ByteArrayBuilder(l.length+2+o.length*x);a.add8BitUIntToData(1),a.add8BitUIntToData(o.length),o.forEach(t=>a.add32BitUIntToData(t)),a.addBufferToData(l);const r={derivationPath:s,sendingData:l,commandFactory:t=>new h.SignTransactionCommand({serializedTransaction:t.chunkedData,more:t.more,extend:t.extend})};n.sendCommand.mockResolvedValueOnce(g).mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("An error occurred")}));const d=await new C.SignDataTask(n,r).run();expect(n.sendCommand).toHaveBeenCalledTimes(2),expect(d).toMatchObject({error:new e.InvalidStatusWordError("An error occurred")})})})});
2
2
  //# sourceMappingURL=SendSignDataTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/SendSignDataTask.test.ts"],
4
- "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nimport { type ChunkableCommandArgs } from \"./SendCommandInChunksTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\nconst PATH_SIZE = 4;\n\ndescribe(\"SignDataTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const signature = new Uint8Array([\n 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef,\n ]);\n const resultOk = CommandResultFactory({ data: Just(signature) });\n const resultNothing = CommandResultFactory({ data: Nothing });\n\n beforeEach(() => {\n jest.resetAllMocks();\n });\n\n describe(\"run with SignTransactionCommand\", () => {\n const SIMPLE_TRANSACTION = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const BIG_TRANSACTION = new Uint8Array(new Array(500).fill(0x01));\n\n it(\"should send the transaction in a single command\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n SIMPLE_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(SIMPLE_TRANSACTION);\n const EXPECTED_SIMPLE_TRANSACTION = builder.build();\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: SIMPLE_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect(\n Array.from(\n (apiMock.sendCommand.mock.calls[0]?.[0] as SignTransactionCommand)\n ?.args?.serializedTransaction || [],\n ),\n ).toEqual(Array.from(EXPECTED_SIMPLE_TRANSACTION));\n\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(Just(signature));\n } else {\n fail(`Expected a successful result, but got an error: ${result.error}`);\n }\n });\n\n it(\"should send the transaction in chunks\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n BIG_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(BIG_TRANSACTION);\n const dataBuffer = builder.build();\n\n const EXPECTED_BIG_TRANSACTION_CHUNK_1 = dataBuffer.slice(\n 0,\n APDU_MAX_PAYLOAD,\n );\n const EXPECTED_BIG_TRANSACTION_CHUNK_2 = dataBuffer.slice(\n APDU_MAX_PAYLOAD,\n APDU_MAX_PAYLOAD * 2,\n );\n const EXPECTED_BIG_TRANSACTION_CHUNK_3 = dataBuffer.slice(\n APDU_MAX_PAYLOAD * 2,\n APDU_MAX_PAYLOAD * 3,\n );\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: BIG_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(resultNothing)\n .mockResolvedValueOnce(resultNothing)\n .mockResolvedValueOnce(resultOk);\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(3);\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n args: {\n serializedTransaction: EXPECTED_BIG_TRANSACTION_CHUNK_1,\n extend: false,\n more: true,\n },\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n args: {\n serializedTransaction: EXPECTED_BIG_TRANSACTION_CHUNK_2,\n extend: true,\n more: true,\n },\n }),\n );\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 3,\n expect.objectContaining({\n args: {\n serializedTransaction: EXPECTED_BIG_TRANSACTION_CHUNK_3,\n extend: true,\n more: false,\n },\n }),\n );\n\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(Just(signature));\n } else {\n fail(`Expected a successful result, but got an error: ${result.error}`);\n }\n });\n\n it(\"should return an error if the command fails\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n SIMPLE_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(SIMPLE_TRANSACTION);\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: SIMPLE_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect(result).toMatchObject({\n error: new InvalidStatusWordError(\"no signature returned\"),\n });\n });\n\n it(\"should return an error if a chunk command fails\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n BIG_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(BIG_TRANSACTION);\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: BIG_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(resultNothing)\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"An error occurred\"),\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect(result).toMatchObject({\n error: new InvalidStatusWordError(\"An error occurred\"),\n });\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport { SignTransactionCommand } from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { SignDataTask } from \"@internal/app-binder/task/SendSignDataTask\";\n\nimport { type ChunkableCommandArgs } from \"./SendCommandInChunksTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\nconst PATH_SIZE = 4;\n\ndescribe(\"SignDataTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const signature = new Uint8Array([\n 0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef,\n ]);\n const resultOk = CommandResultFactory({ data: Just(signature) });\n const resultNothing = CommandResultFactory({ data: Nothing });\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run with SignTransactionCommand\", () => {\n const SIMPLE_TRANSACTION = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const BIG_TRANSACTION = new Uint8Array(new Array(500).fill(0x01));\n\n it(\"should send the transaction in a single command\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n SIMPLE_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(SIMPLE_TRANSACTION);\n const EXPECTED_SIMPLE_TRANSACTION = builder.build();\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: SIMPLE_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand.mockResolvedValueOnce(resultOk);\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect(\n Array.from(\n (apiMock.sendCommand.mock.calls[0]?.[0] as SignTransactionCommand)\n ?.args?.serializedTransaction || [],\n ),\n ).toEqual(Array.from(EXPECTED_SIMPLE_TRANSACTION));\n\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(Just(signature));\n } else {\n assert.fail(\n `Expected a successful result, but got an error: ${result.error}`,\n );\n }\n });\n\n it(\"should send the transaction in chunks\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n BIG_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(BIG_TRANSACTION);\n const dataBuffer = builder.build();\n\n const EXPECTED_BIG_TRANSACTION_CHUNK_1 = dataBuffer.slice(\n 0,\n APDU_MAX_PAYLOAD,\n );\n const EXPECTED_BIG_TRANSACTION_CHUNK_2 = dataBuffer.slice(\n APDU_MAX_PAYLOAD,\n APDU_MAX_PAYLOAD * 2,\n );\n const EXPECTED_BIG_TRANSACTION_CHUNK_3 = dataBuffer.slice(\n APDU_MAX_PAYLOAD * 2,\n APDU_MAX_PAYLOAD * 3,\n );\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: BIG_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(resultNothing)\n .mockResolvedValueOnce(resultNothing)\n .mockResolvedValueOnce(resultOk);\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(3);\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n args: {\n serializedTransaction: EXPECTED_BIG_TRANSACTION_CHUNK_1,\n extend: false,\n more: true,\n },\n }),\n );\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n args: {\n serializedTransaction: EXPECTED_BIG_TRANSACTION_CHUNK_2,\n extend: true,\n more: true,\n },\n }),\n );\n\n expect(apiMock.sendCommand).toHaveBeenNthCalledWith(\n 3,\n expect.objectContaining({\n args: {\n serializedTransaction: EXPECTED_BIG_TRANSACTION_CHUNK_3,\n extend: true,\n more: false,\n },\n }),\n );\n\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(Just(signature));\n } else {\n assert.fail(\n `Expected a successful result, but got an error: ${result.error}`,\n );\n }\n });\n\n it(\"should return an error if the command fails\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n SIMPLE_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(SIMPLE_TRANSACTION);\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: SIMPLE_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect(result).toMatchObject({\n error: new InvalidStatusWordError(\"no signature returned\"),\n });\n });\n\n it(\"should return an error if a chunk command fails\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const paths = DerivationPathUtils.splitPath(DERIVATION_PATH);\n const builder = new ByteArrayBuilder(\n BIG_TRANSACTION.length + 2 + paths.length * PATH_SIZE,\n );\n builder.add8BitUIntToData(1);\n builder.add8BitUIntToData(paths.length);\n paths.forEach((path) => builder.add32BitUIntToData(path));\n builder.addBufferToData(BIG_TRANSACTION);\n\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: BIG_TRANSACTION,\n commandFactory: (chunkArgs: ChunkableCommandArgs) =>\n new SignTransactionCommand({\n serializedTransaction: chunkArgs.chunkedData,\n more: chunkArgs.more,\n extend: chunkArgs.extend,\n }),\n };\n apiMock.sendCommand\n .mockResolvedValueOnce(resultNothing)\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"An error occurred\"),\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SignDataTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect(result).toMatchObject({\n error: new InvalidStatusWordError(\"An error occurred\"),\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_SignTransactionCommand", "import_makeInternalApi", "import_SendSignDataTask", "DERIVATION_PATH", "PATH_SIZE", "apiMock", "signature", "resultOk", "resultNothing", "SIMPLE_TRANSACTION", "BIG_TRANSACTION", "paths", "builder", "path", "EXPECTED_SIMPLE_TRANSACTION", "args", "chunkArgs", "result", "dataBuffer", "EXPECTED_BIG_TRANSACTION_CHUNK_1", "EXPECTED_BIG_TRANSACTION_CHUNK_2", "EXPECTED_BIG_TRANSACTION_CHUNK_3"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var d=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var y=(r,e)=>{for(var n in e)d(r,n,{get:e[n],enumerable:!0})},A=(r,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of S(e))!h.call(r,t)&&t!==n&&d(r,t,{get:()=>e[t],enumerable:!(a=c(e,t))||a.enumerable});return r};var C=r=>A(d({},"__esModule",{value:!0}),r);var v={};y(v,{SendSignMessageTask:()=>b});module.exports=C(v);var l=require("@ledgerhq/device-management-kit"),m=require("@ledgerhq/signer-utils"),p=require("../../app-binder/command/SignOffChainMessageCommand");class b{constructor(e,n){this.api=e;this.args=n}async run(){const{sendingData:e,derivationPath:n}=this.args,a=this._buildApduCommand(this._buildFullMessage(e),m.DerivationPathUtils.splitPath(n));return await this.api.sendCommand(new p.SignOffChainMessageCommand({message:a,derivationPath:n}))}_buildFullMessage(e){const n=new TextEncoder().encode("solana offchain"),a=4,t=new Uint8Array(a);t[2]=e.length;const s=new Uint8Array(1+n.length+t.length+e.length);let i=0;return s[i++]=255,s.set(n,i),i+=n.length,s.set(t,i),i+=t.length,s.set(e,i),s}_buildApduCommand(e,n){const u=n.length,o=new l.ByteArrayBuilder(e.length+1+1+u*4);return o.add8BitUIntToData(1),o.add8BitUIntToData(u),n.forEach(f=>{const g=new Uint8Array(4);new DataView(g.buffer).setUint32(0,f,!1),o.addBufferToData(g)}),o.addBufferToData(e),o.build()}}0&&(module.exports={SendSignMessageTask});
1
+ "use strict";var A=Object.create;var d=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var S=Object.getPrototypeOf,T=Object.prototype.hasOwnProperty;var D=(a,e)=>{for(var t in e)d(a,t,{get:e[t],enumerable:!0})},f=(a,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of b(e))!T.call(a,r)&&r!==t&&d(a,r,{get:()=>e[r],enumerable:!(o=h(e,r))||o.enumerable});return a};var U=(a,e,t)=>(t=a!=null?A(S(a)):{},f(e||!a||!a.__esModule?d(t,"default",{value:a,enumerable:!0}):t,a)),B=a=>f(d({},"__esModule",{value:!0}),a);var C={};D(C,{MAX_MESSAGE_LENGTH:()=>y,SendSignMessageTask:()=>w});module.exports=B(C);var n=require("@ledgerhq/device-management-kit"),g=require("@ledgerhq/signer-utils"),l=U(require("bs58")),p=require("../../app-binder/command/GetPubKeyCommand"),c=require("../../app-binder/command/SignOffChainMessageCommand");const y=65535;class w{constructor(e,t){this.api=e;this.args=t}async run(){const{sendingData:e,derivationPath:t}=this.args;if(e.length===0)return(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Message cannot be empty")});if(e.length>y)return(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError(`Message too long: ${e.length} bytes (max is 65535)`)});const o=g.DerivationPathUtils.splitPath(t),r=await this.api.sendCommand(new p.GetPubKeyCommand({derivationPath:t,checkOnDevice:!1}));if(!("data"in r))return(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Error getting public key from device")});const u=l.default.decode(r.data),i=this._buildFullMessage(e,u),s=this._buildApduCommand(i,o);return s.length>n.APDU_MAX_PAYLOAD?(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("The APDU command exceeds the maximum allowable size (255 bytes)")}):this.api.sendCommand(new c.SignOffChainMessageCommand({message:s}))}_buildFullMessage(e,t){return new n.ByteArrayBuilder().add8BitUIntToData(255).addAsciiStringToData("solana offchain").add8BitUIntToData(0).addBufferToData(new Uint8Array(32)).add8BitUIntToData(0).add8BitUIntToData(1).addBufferToData(t).add8BitUIntToData(e.length&255).add8BitUIntToData(e.length>>8&255).addBufferToData(e).build()}_buildApduCommand(e,t){const u=t.length*4,i=new n.ByteArrayBuilder(e.length+1+1+u);return i.add8BitUIntToData(1),i.add8BitUIntToData(t.length),t.forEach(s=>{const m=new Uint8Array(4);new DataView(m.buffer).setUint32(0,s,!1),i.addBufferToData(m)}),i.addBufferToData(e),i.build()}}0&&(module.exports={MAX_MESSAGE_LENGTH,SendSignMessageTask});
2
2
  //# sourceMappingURL=SendSignMessageTask.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/SendSignMessageTask.ts"],
4
- "sourcesContent": ["import {\n ByteArrayBuilder,\n type CommandResult,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\nimport { type Signature } from \"@api/index\";\nimport { SignOffChainMessageCommand } from \"@internal/app-binder/command/SignOffChainMessageCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nexport type SendSignMessageTaskArgs = {\n sendingData: Uint8Array;\n derivationPath: string;\n};\n\nexport type SendSignMessageTaskRunFunctionReturn = Promise<\n CommandResult<Signature, SolanaAppErrorCodes>\n>;\n\nexport class SendSignMessageTask {\n constructor(\n private api: InternalApi,\n private args: SendSignMessageTaskArgs,\n ) {}\n\n async run(): SendSignMessageTaskRunFunctionReturn {\n const { sendingData, derivationPath } = this.args;\n\n const commandBuffer = this._buildApduCommand(\n this._buildFullMessage(sendingData),\n DerivationPathUtils.splitPath(derivationPath),\n );\n\n return await this.api.sendCommand(\n new SignOffChainMessageCommand({\n message: commandBuffer,\n derivationPath,\n }),\n );\n }\n\n private _buildFullMessage(sendingData: Uint8Array): Uint8Array {\n const prefix = new TextEncoder().encode(\"solana offchain\");\n const msgLengthFieldSize = 4;\n\n const lengthBytes = new Uint8Array(msgLengthFieldSize);\n lengthBytes[2] = sendingData.length;\n\n const fullMessage = new Uint8Array(\n 1 + prefix.length + lengthBytes.length + sendingData.length,\n );\n\n let offset = 0;\n fullMessage[offset++] = 0xff;\n fullMessage.set(prefix, offset);\n offset += prefix.length;\n fullMessage.set(lengthBytes, offset);\n offset += lengthBytes.length;\n fullMessage.set(sendingData, offset);\n\n return fullMessage;\n }\n\n private _buildApduCommand(\n fullMessage: Uint8Array,\n paths: number[],\n ): Uint8Array {\n const numberOfSigners = 1;\n const pathSize = 4;\n const signersCountSize = 1;\n const derivationsCountSize = 1;\n const numberOfDerivations = paths.length;\n const builder = new ByteArrayBuilder(\n fullMessage.length +\n signersCountSize +\n derivationsCountSize +\n numberOfDerivations * pathSize,\n );\n\n builder.add8BitUIntToData(numberOfSigners);\n builder.add8BitUIntToData(numberOfDerivations);\n\n paths.forEach((path) => {\n const buffer = new Uint8Array(4);\n const view = new DataView(buffer.buffer);\n view.setUint32(0, path, false);\n builder.addBufferToData(buffer);\n });\n\n builder.addBufferToData(fullMessage);\n return builder.build();\n }\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAIO,2CACPC,EAAoC,kCAGpCC,EAA2C,mEAYpC,MAAMJ,CAAoB,CAC/B,YACUK,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAA4C,CAChD,KAAM,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAI,KAAK,KAEvCC,EAAgB,KAAK,kBACzB,KAAK,kBAAkBF,CAAW,EAClC,sBAAoB,UAAUC,CAAc,CAC9C,EAEA,OAAO,MAAM,KAAK,IAAI,YACpB,IAAI,6BAA2B,CAC7B,QAASC,EACT,eAAAD,CACF,CAAC,CACH,CACF,CAEQ,kBAAkBD,EAAqC,CAC7D,MAAMG,EAAS,IAAI,YAAY,EAAE,OAAO,iBAAiB,EACnDC,EAAqB,EAErBC,EAAc,IAAI,WAAWD,CAAkB,EACrDC,EAAY,CAAC,EAAIL,EAAY,OAE7B,MAAMM,EAAc,IAAI,WACtB,EAAIH,EAAO,OAASE,EAAY,OAASL,EAAY,MACvD,EAEA,IAAIO,EAAS,EACb,OAAAD,EAAYC,GAAQ,EAAI,IACxBD,EAAY,IAAIH,EAAQI,CAAM,EAC9BA,GAAUJ,EAAO,OACjBG,EAAY,IAAID,EAAaE,CAAM,EACnCA,GAAUF,EAAY,OACtBC,EAAY,IAAIN,EAAaO,CAAM,EAE5BD,CACT,CAEQ,kBACNA,EACAE,EACY,CAKZ,MAAMC,EAAsBD,EAAM,OAC5BE,EAAU,IAAI,mBAClBJ,EAAY,OACV,EACA,EACAG,EAAsB,CAC1B,EAEA,OAAAC,EAAQ,kBAAkB,CAAe,EACzCA,EAAQ,kBAAkBD,CAAmB,EAE7CD,EAAM,QAASG,GAAS,CACtB,MAAMC,EAAS,IAAI,WAAW,CAAC,EAClB,IAAI,SAASA,EAAO,MAAM,EAClC,UAAU,EAAGD,EAAM,EAAK,EAC7BD,EAAQ,gBAAgBE,CAAM,CAChC,CAAC,EAEDF,EAAQ,gBAAgBJ,CAAW,EAC5BI,EAAQ,MAAM,CACvB,CACF",
6
- "names": ["SendSignMessageTask_exports", "__export", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_SignOffChainMessageCommand", "api", "args", "sendingData", "derivationPath", "commandBuffer", "prefix", "msgLengthFieldSize", "lengthBytes", "fullMessage", "offset", "paths", "numberOfDerivations", "builder", "path", "buffer"]
4
+ "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n ByteArrayBuilder,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\nimport bs58 from \"bs58\";\n\nimport { type Signature } from \"@api/index\";\nimport { GetPubKeyCommand } from \"@internal/app-binder/command/GetPubKeyCommand\";\nimport { SignOffChainMessageCommand } from \"@internal/app-binder/command/SignOffChainMessageCommand\";\nimport { type SolanaAppErrorCodes } from \"@internal/app-binder/command/utils/SolanaApplicationErrors\";\n\nexport type SendSignMessageTaskArgs = {\n sendingData: Uint8Array;\n derivationPath: string;\n};\n\nexport type SendSignMessageTaskRunFunctionReturn = Promise<\n CommandResult<Signature, SolanaAppErrorCodes>\n>;\n\nexport const MAX_MESSAGE_LENGTH = 0xffff;\n\nexport class SendSignMessageTask {\n constructor(\n private api: InternalApi,\n private args: SendSignMessageTaskArgs,\n ) {}\n\n async run(): SendSignMessageTaskRunFunctionReturn {\n const { sendingData, derivationPath } = this.args;\n\n if (sendingData.length === 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Message cannot be empty\"),\n });\n }\n\n if (sendingData.length > MAX_MESSAGE_LENGTH) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n `Message too long: ${sendingData.length} bytes (max is 65535)`,\n ),\n });\n }\n\n const pathIndexes = DerivationPathUtils.splitPath(derivationPath);\n\n const pubkeyResult = await this.api.sendCommand(\n new GetPubKeyCommand({ derivationPath, checkOnDevice: false }),\n );\n\n if (!(\"data\" in pubkeyResult)) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Error getting public key from device\",\n ),\n });\n }\n\n const signerPubkey = bs58.decode(pubkeyResult.data);\n const fullMessage = this._buildFullMessage(sendingData, signerPubkey);\n const commandBuffer = this._buildApduCommand(fullMessage, pathIndexes);\n\n if (commandBuffer.length > APDU_MAX_PAYLOAD) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"The APDU command exceeds the maximum allowable size (255 bytes)\",\n ),\n });\n }\n\n return this.api.sendCommand(\n new SignOffChainMessageCommand({ message: commandBuffer }),\n );\n }\n\n /**\n * builds the serialised off-chain message header and body\n */\n private _buildFullMessage(\n sendingData: Uint8Array,\n signerPubkey: Uint8Array,\n ): Uint8Array {\n return (\n new ByteArrayBuilder()\n // 0xFF + prefix\n .add8BitUIntToData(0xff)\n .addAsciiStringToData(\"solana offchain\")\n // version = 0\n .add8BitUIntToData(0)\n // domain = 32 zeros\n .addBufferToData(new Uint8Array(32))\n // format = 0\n .add8BitUIntToData(0)\n // signer count = 1\n .add8BitUIntToData(1)\n // signer pubkey (32 bytes)\n .addBufferToData(signerPubkey)\n // message length (2 bytes, little endian)\n .add8BitUIntToData(sendingData.length & 0xff)\n .add8BitUIntToData((sendingData.length >> 8) & 0xff)\n // message body\n .addBufferToData(sendingData)\n .build()\n );\n }\n\n /**\n * builds the APDU command to send to the device\n */\n private _buildApduCommand(\n fullMessage: Uint8Array,\n paths: number[],\n ): Uint8Array {\n const numberOfSigners = 1;\n const derivationCount = 1;\n const pathBytes = paths.length * 4;\n const builder = new ByteArrayBuilder(\n fullMessage.length + numberOfSigners + derivationCount + pathBytes,\n );\n\n // number of signers\n builder.add8BitUIntToData(numberOfSigners);\n // number of BIP32 derivations\n builder.add8BitUIntToData(paths.length);\n // each derivation index\n paths.forEach((idx) => {\n const buf = new Uint8Array(4);\n new DataView(buf.buffer).setUint32(0, idx, false);\n builder.addBufferToData(buf);\n });\n // serialised off-chain message\n builder.addBufferToData(fullMessage);\n\n return builder.build();\n }\n}\n"],
5
+ "mappings": "0jBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,EAAA,wBAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EAOO,2CACPC,EAAoC,kCACpCC,EAAiB,mBAGjBC,EAAiC,yDACjCC,EAA2C,mEAYpC,MAAMP,EAAqB,MAE3B,MAAMC,CAAoB,CAC/B,YACUO,EACAC,EACR,CAFQ,SAAAD,EACA,UAAAC,CACP,CAEH,MAAM,KAA4C,CAChD,KAAM,CAAE,YAAAC,EAAa,eAAAC,CAAe,EAAI,KAAK,KAE7C,GAAID,EAAY,SAAW,EACzB,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,yBAAyB,CAC7D,CAAC,EAGH,GAAIA,EAAY,OAASV,EACvB,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBACT,qBAAqBU,EAAY,MAAM,uBACzC,CACF,CAAC,EAGH,MAAME,EAAc,sBAAoB,UAAUD,CAAc,EAE1DE,EAAe,MAAM,KAAK,IAAI,YAClC,IAAI,mBAAiB,CAAE,eAAAF,EAAgB,cAAe,EAAM,CAAC,CAC/D,EAEA,GAAI,EAAE,SAAUE,GACd,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBACT,sCACF,CACF,CAAC,EAGH,MAAMC,EAAe,EAAAC,QAAK,OAAOF,EAAa,IAAI,EAC5CG,EAAc,KAAK,kBAAkBN,EAAaI,CAAY,EAC9DG,EAAgB,KAAK,kBAAkBD,EAAaJ,CAAW,EAErE,OAAIK,EAAc,OAAS,sBAClB,wBAAqB,CAC1B,MAAO,IAAI,yBACT,iEACF,CACF,CAAC,EAGI,KAAK,IAAI,YACd,IAAI,6BAA2B,CAAE,QAASA,CAAc,CAAC,CAC3D,CACF,CAKQ,kBACNP,EACAI,EACY,CACZ,OACE,IAAI,mBAAiB,EAElB,kBAAkB,GAAI,EACtB,qBAAqB,iBAAiB,EAEtC,kBAAkB,CAAC,EAEnB,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAElC,kBAAkB,CAAC,EAEnB,kBAAkB,CAAC,EAEnB,gBAAgBA,CAAY,EAE5B,kBAAkBJ,EAAY,OAAS,GAAI,EAC3C,kBAAmBA,EAAY,QAAU,EAAK,GAAI,EAElD,gBAAgBA,CAAW,EAC3B,MAAM,CAEb,CAKQ,kBACNM,EACAE,EACY,CAGZ,MAAMC,EAAYD,EAAM,OAAS,EAC3BE,EAAU,IAAI,mBAClBJ,EAAY,OAAS,EAAkB,EAAkBG,CAC3D,EAGA,OAAAC,EAAQ,kBAAkB,CAAe,EAEzCA,EAAQ,kBAAkBF,EAAM,MAAM,EAEtCA,EAAM,QAASG,GAAQ,CACrB,MAAMC,EAAM,IAAI,WAAW,CAAC,EAC5B,IAAI,SAASA,EAAI,MAAM,EAAE,UAAU,EAAGD,EAAK,EAAK,EAChDD,EAAQ,gBAAgBE,CAAG,CAC7B,CAAC,EAEDF,EAAQ,gBAAgBJ,CAAW,EAE5BI,EAAQ,MAAM,CACvB,CACF",
6
+ "names": ["SendSignMessageTask_exports", "__export", "MAX_MESSAGE_LENGTH", "SendSignMessageTask", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_bs58", "import_GetPubKeyCommand", "import_SignOffChainMessageCommand", "api", "args", "sendingData", "derivationPath", "pathIndexes", "pubkeyResult", "signerPubkey", "bs58", "fullMessage", "commandBuffer", "paths", "pathBytes", "builder", "idx", "buf"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var s=require("@ledgerhq/device-management-kit"),c=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),o=require("../../app-binder/task/SendSignMessageTask");const d="44'/501'/0'/0'";describe("SendSignMessageTask",()=>{const e=(0,c.makeDeviceActionInternalApiMock)();beforeEach(()=>{jest.resetAllMocks()});const r=new Uint8Array([1,2,3,4]);describe("run with SignOffChainMessageCommand",()=>{it("should return an error if the command fails",async()=>{const n={derivationPath:d,sendingData:r};e.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({error:new s.InvalidStatusWordError("no signature returned")}));const a=await new o.SendSignMessageTask(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(a).toMatchObject({error:new s.InvalidStatusWordError("no signature returned")})}),it("should return success when the command executes successfully",async()=>{const n={derivationPath:d,sendingData:r},a=new Uint8Array([170,187,204,221]);e.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:a}));const t=await new o.SendSignMessageTask(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(t).toMatchObject({data:a})}),it("should handle invalid derivation paths",async()=>{const a={derivationPath:"invalid/path",sendingData:r},t=new o.SendSignMessageTask(e,a);await expect(t.run()).rejects.toThrowError()}),it("should handle empty message data",async()=>{const n=new Uint8Array([]),a={derivationPath:d,sendingData:n};e.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:new Uint8Array([])}));const t=await new o.SendSignMessageTask(e,a).run();if(expect(e.sendCommand).toHaveBeenCalledTimes(1),"data"in t)expect(t.data).toEqual(new Uint8Array([]));else throw new Error("Expected result to have data property")}),it("should correctly build the APDU command",async()=>{const n={derivationPath:d,sendingData:r},a=new o.SendSignMessageTask(e,n),t=a._buildFullMessage(r),i=[-2147483604,-2147483147,-2147483648,0],l=a._buildApduCommand(t,i),m=2+i.length*4+t.length;expect(l.length).toEqual(m)}),it("should handle messages with maximum allowed length",async()=>{const n=new Uint8Array(255).fill(1),a={derivationPath:d,sendingData:n};e.sendCommand.mockResolvedValueOnce((0,s.CommandResultFactory)({data:new Uint8Array([153,136,119])}));const t=await new o.SendSignMessageTask(e,a).run();if(expect(e.sendCommand).toHaveBeenCalledTimes(1),"data"in t)expect(t.data).toEqual(new Uint8Array([153,136,119]));else throw new Error("Expected result to have data property")})})});
1
+ "use strict";var w=Object.create;var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var v=Object.getPrototypeOf,f=Object.prototype.hasOwnProperty;var A=(e,a,n,o)=>{if(a&&typeof a=="object"||typeof a=="function")for(let r of p(a))!f.call(e,r)&&r!==n&&m(e,r,{get:()=>a[r],enumerable:!(o=y(a,r))||o.enumerable});return e};var C=(e,a,n)=>(n=e!=null?w(v(e)):{},A(a||!e||!e.__esModule?m(n,"default",{value:e,enumerable:!0}):n,e));var t=require("@ledgerhq/device-management-kit"),u=C(require("bs58")),g=require("../../app-binder/device-action/__test-utils__/makeInternalApi"),s=require("../../app-binder/task/SendSignMessageTask");const c="44'/501'/0'/0'",x=new Uint8Array(32).fill(0),l=u.default.encode(x),i=new Uint8Array([240,202,204,26]);describe("SendSignMessageTask",()=>{const e=(0,g.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks()}),describe("run()",()=>{it("should error on empty message before any device call",async()=>{const a={derivationPath:c,sendingData:new Uint8Array([])},n=await new s.SendSignMessageTask(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(n.error).toEqual(new t.InvalidStatusWordError("Message cannot be empty"))}),it("should return error if GET_PUBKEY fails",async()=>{e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("pubkey error")}));const a={derivationPath:c,sendingData:i},n=await new s.SendSignMessageTask(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(1),expect(n.error).toEqual(new t.InvalidStatusWordError("Error getting public key from device"))}),it("should return error if SignOffChainMessageCommand fails",async()=>{e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({data:l})).mockResolvedValueOnce((0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("no signature returned")}));const a={derivationPath:c,sendingData:i},n=await new s.SendSignMessageTask(e,a).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(n.error).toEqual(new t.InvalidStatusWordError("no signature returned"))}),it("should return success when signing succeeds",async()=>{const a=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({data:l})).mockResolvedValueOnce((0,t.CommandResultFactory)({data:a}));const n={derivationPath:c,sendingData:i},o=await new s.SendSignMessageTask(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(o.data).toEqual(a)}),it("should reject invalid derivation path",async()=>{const a={derivationPath:"not/a/path",sendingData:i};await expect(new s.SendSignMessageTask(e,a).run()).rejects.toThrow()}),it("should correctly build APDU command lengths",()=>{const a=new s.SendSignMessageTask(e,{derivationPath:c,sendingData:i}),n=a._buildFullMessage(i,x),o=[-2147483604,-2147483147,-2147483648,0],r=a._buildApduCommand(n,o),d=2+o.length*4+n.length;expect(r.length).toBe(d)}),it("should handle maximum allowed message length",async()=>{const r=new Uint8Array(152).fill(1),d=new Uint8Array([240,202,204,26]);e.sendCommand.mockResolvedValueOnce((0,t.CommandResultFactory)({data:l})).mockResolvedValueOnce((0,t.CommandResultFactory)({data:d}));const h=await new s.SendSignMessageTask(e,{derivationPath:c,sendingData:r}).run();expect(e.sendCommand).toHaveBeenCalledTimes(2),expect(h.data).toEqual(d)}),it("should error on message exceeding 16-bit length (65535)",async()=>{const a=new Uint8Array(s.MAX_MESSAGE_LENGTH+1).fill(170),n={derivationPath:c,sendingData:a},o=await new s.SendSignMessageTask(e,n).run();expect(e.sendCommand).toHaveBeenCalledTimes(0),expect(o.error).toEqual(new t.InvalidStatusWordError(`Message too long: ${a.length} bytes (max is 65535)`))})})});
2
2
  //# sourceMappingURL=SendSignMessageTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/SendSignMessageTask.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { SendSignMessageTask } from \"@internal/app-binder/task/SendSignMessageTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\n\ndescribe(\"SendSignMessageTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n jest.resetAllMocks();\n });\n\n const SIMPLE_MESSAGE = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n\n describe(\"run with SignOffChainMessageCommand\", () => {\n it(\"should return an error if the command fails\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: SIMPLE_MESSAGE,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect(result).toMatchObject({\n error: new InvalidStatusWordError(\"no signature returned\"),\n });\n });\n\n it(\"should return success when the command executes successfully\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: SIMPLE_MESSAGE,\n };\n const expectedSignature = new Uint8Array([0xaa, 0xbb, 0xcc, 0xdd]);\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: expectedSignature,\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect(result).toMatchObject({\n data: expectedSignature,\n });\n });\n\n it(\"should handle invalid derivation paths\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const invalidDerivationPath = \"invalid/path\";\n const args = {\n derivationPath: invalidDerivationPath,\n sendingData: SIMPLE_MESSAGE,\n };\n\n // WHEN--------------------------------\n //-------------------------------------\n const task = new SendSignMessageTask(apiMock, args);\n\n // THEN--------------------------------\n //-------------------------------------\n await expect(task.run()).rejects.toThrowError();\n });\n\n it(\"should handle empty message data\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const emptyMessage = new Uint8Array([]);\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: emptyMessage,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: new Uint8Array([]),\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n if (\"data\" in result) {\n expect(result.data).toEqual(new Uint8Array([]));\n } else {\n throw new Error(\"Expected result to have data property\");\n }\n });\n\n it(\"should correctly build the APDU command\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: SIMPLE_MESSAGE,\n };\n const task = new SendSignMessageTask(apiMock, args);\n const fullMessage = task[\"_buildFullMessage\"](SIMPLE_MESSAGE);\n const paths = [44 | 0x80000000, 501 | 0x80000000, 0 | 0x80000000, 0];\n const commandBuffer = task[\"_buildApduCommand\"](fullMessage, paths);\n\n // WHEN--------------------------------\n //-------------------------------------\n const expectedCommandLength =\n 1 + // numberOfSigners\n 1 + // numberOfDerivations\n paths.length * 4 + // paths\n fullMessage.length; // message\n\n // THEN--------------------------------\n //-------------------------------------\n expect(commandBuffer.length).toEqual(expectedCommandLength);\n });\n\n it(\"should handle messages with maximum allowed length\", async () => {\n // GIVEN-------------------------------\n //-------------------------------------\n const maxLengthMessage = new Uint8Array(255).fill(0x01);\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: maxLengthMessage,\n };\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n data: new Uint8Array([0x99, 0x88, 0x77]),\n }),\n );\n\n // WHEN--------------------------------\n //-------------------------------------\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // THEN--------------------------------\n //-------------------------------------\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n if (\"data\" in result) {\n expect(result.data).toEqual(new Uint8Array([0x99, 0x88, 0x77]));\n } else {\n throw new Error(\"Expected result to have data property\");\n }\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_makeInternalApi", "import_SendSignMessageTask", "DERIVATION_PATH", "apiMock", "SIMPLE_MESSAGE", "args", "result", "expectedSignature", "task", "emptyMessage", "fullMessage", "paths", "commandBuffer", "expectedCommandLength", "maxLengthMessage"]
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport bs58 from \"bs58\";\n\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport {\n MAX_MESSAGE_LENGTH,\n SendSignMessageTask,\n} from \"@internal/app-binder/task/SendSignMessageTask\";\n\nconst DERIVATION_PATH = \"44'/501'/0'/0'\";\nconst PUBKEY = new Uint8Array(32).fill(0x00);\nconst PUBKEY_BASE58 = bs58.encode(PUBKEY);\nconst MESSAGE = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SendSignMessageTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"run()\", () => {\n it(\"should error on empty message before any device call\", async () => {\n // given\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: new Uint8Array([]),\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Message cannot be empty\"),\n );\n });\n\n it(\"should return error if GET_PUBKEY fails\", async () => {\n // given\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"pubkey error\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(1);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"Error getting public key from device\"),\n );\n });\n\n it(\"should return error if SignOffChainMessageCommand fails\", async () => {\n // given\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"no signature returned\"),\n }),\n );\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\"no signature returned\"),\n );\n });\n\n it(\"should return success when signing succeeds\", async () => {\n // given\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should reject invalid derivation path\", async () => {\n const args = {\n derivationPath: \"not/a/path\",\n sendingData: MESSAGE,\n };\n await expect(\n new SendSignMessageTask(apiMock, args).run(),\n ).rejects.toThrow();\n });\n\n it(\"should correctly build APDU command lengths\", () => {\n // given\n const task: any = new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: MESSAGE,\n });\n\n // when\n const fullMsg = task._buildFullMessage(MESSAGE, PUBKEY);\n const paths = [44 | 0x80000000, 501 | 0x80000000, 0 | 0x80000000, 0];\n const apdu = task._buildApduCommand(fullMsg, paths);\n const expectedLen = 1 + 1 + paths.length * 4 + fullMsg.length;\n\n // then\n expect(apdu.length).toBe(expectedLen);\n });\n\n it(\"should handle maximum allowed message length\", async () => {\n // given\n const headerAPDU = 1 + 1 + 4 * 4;\n const fullMsgHeader = 1 + 15 + 1 + 32 + 1 + 1 + 32 + 2;\n const maxBody = 255 - headerAPDU - fullMsgHeader;\n const bigMsg = new Uint8Array(maxBody).fill(0x01);\n const mockSig = new Uint8Array([0xf0, 0xca, 0xcc, 0x1a]);\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: PUBKEY_BASE58 }))\n .mockResolvedValueOnce(CommandResultFactory({ data: mockSig }));\n\n // when\n const result = await new SendSignMessageTask(apiMock, {\n derivationPath: DERIVATION_PATH,\n sendingData: bigMsg,\n }).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(2);\n expect((result as any).data).toEqual(mockSig);\n });\n\n it(\"should error on message exceeding 16-bit length (65535)\", async () => {\n // given\n const tooBig = new Uint8Array(MAX_MESSAGE_LENGTH + 1).fill(0xaa);\n const args = {\n derivationPath: DERIVATION_PATH,\n sendingData: tooBig,\n };\n\n // when\n const result = await new SendSignMessageTask(apiMock, args).run();\n\n // then\n expect(apiMock.sendCommand).toHaveBeenCalledTimes(0);\n expect((result as any).error).toEqual(\n new InvalidStatusWordError(\n `Message too long: ${tooBig.length} bytes (max is 65535)`,\n ),\n );\n });\n });\n});\n"],
5
+ "mappings": "wdAIA,IAAAA,EAGO,2CACPC,EAAiB,mBAEjBC,EAAgD,6EAChDC,EAGO,yDAEP,MAAMC,EAAkB,iBAClBC,EAAS,IAAI,WAAW,EAAE,EAAE,KAAK,CAAI,EACrCC,EAAgB,EAAAC,QAAK,OAAOF,CAAM,EAClCG,EAAU,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EAEvD,SAAS,sBAAuB,IAAM,CACpC,MAAMC,KAAU,mCAAgC,EAEhD,WAAW,IAAM,CACf,GAAG,cAAc,CACnB,CAAC,EAED,SAAS,QAAS,IAAM,CACtB,GAAG,uDAAwD,SAAY,CAErE,MAAMC,EAAO,CACX,eAAgBN,EAChB,YAAa,IAAI,WAAW,CAAC,CAAC,CAChC,EAGMO,EAAS,MAAM,IAAI,sBAAoBF,EAASC,CAAI,EAAE,IAAI,EAGhE,OAAOD,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EACnD,OAAQE,EAAe,KAAK,EAAE,QAC5B,IAAI,yBAAuB,yBAAyB,CACtD,CACF,CAAC,EAED,GAAG,0CAA2C,SAAY,CAExDF,EAAQ,YAAY,yBAClB,wBAAqB,CACnB,MAAO,IAAI,yBAAuB,cAAc,CAClD,CAAC,CACH,EACA,MAAMC,EAAO,CACX,eAAgBN,EAChB,YAAaI,CACf,EAGMG,EAAS,MAAM,IAAI,sBAAoBF,EAASC,CAAI,EAAE,IAAI,EAGhE,OAAOD,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EACnD,OAAQE,EAAe,KAAK,EAAE,QAC5B,IAAI,yBAAuB,sCAAsC,CACnE,CACF,CAAC,EAED,GAAG,0DAA2D,SAAY,CAExEF,EAAQ,YACL,yBAAsB,wBAAqB,CAAE,KAAMH,CAAc,CAAC,CAAC,EACnE,yBACC,wBAAqB,CACnB,MAAO,IAAI,yBAAuB,uBAAuB,CAC3D,CAAC,CACH,EACF,MAAMI,EAAO,CACX,eAAgBN,EAChB,YAAaI,CACf,EAGMG,EAAS,MAAM,IAAI,sBAAoBF,EAASC,CAAI,EAAE,IAAI,EAGhE,OAAOD,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EACnD,OAAQE,EAAe,KAAK,EAAE,QAC5B,IAAI,yBAAuB,uBAAuB,CACpD,CACF,CAAC,EAED,GAAG,8CAA+C,SAAY,CAE5D,MAAMC,EAAU,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EACvDH,EAAQ,YACL,yBAAsB,wBAAqB,CAAE,KAAMH,CAAc,CAAC,CAAC,EACnE,yBAAsB,wBAAqB,CAAE,KAAMM,CAAQ,CAAC,CAAC,EAChE,MAAMF,EAAO,CACX,eAAgBN,EAChB,YAAaI,CACf,EAGMG,EAAS,MAAM,IAAI,sBAAoBF,EAASC,CAAI,EAAE,IAAI,EAGhE,OAAOD,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EACnD,OAAQE,EAAe,IAAI,EAAE,QAAQC,CAAO,CAC9C,CAAC,EAED,GAAG,wCAAyC,SAAY,CACtD,MAAMF,EAAO,CACX,eAAgB,aAChB,YAAaF,CACf,EACA,MAAM,OACJ,IAAI,sBAAoBC,EAASC,CAAI,EAAE,IAAI,CAC7C,EAAE,QAAQ,QAAQ,CACpB,CAAC,EAED,GAAG,8CAA+C,IAAM,CAEtD,MAAMG,EAAY,IAAI,sBAAoBJ,EAAS,CACjD,eAAgBL,EAChB,YAAaI,CACf,CAAC,EAGKM,EAAUD,EAAK,kBAAkBL,EAASH,CAAM,EAChDU,EAAQ,CAAC,YAAiB,YAAkB,YAAgB,CAAC,EAC7DC,EAAOH,EAAK,kBAAkBC,EAASC,CAAK,EAC5CE,EAAc,EAAQF,EAAM,OAAS,EAAID,EAAQ,OAGvD,OAAOE,EAAK,MAAM,EAAE,KAAKC,CAAW,CACtC,CAAC,EAED,GAAG,+CAAgD,SAAY,CAK7D,MAAMC,EAAS,IAAI,WAAW,GAAO,EAAE,KAAK,CAAI,EAC1CN,EAAU,IAAI,WAAW,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EACvDH,EAAQ,YACL,yBAAsB,wBAAqB,CAAE,KAAMH,CAAc,CAAC,CAAC,EACnE,yBAAsB,wBAAqB,CAAE,KAAMM,CAAQ,CAAC,CAAC,EAGhE,MAAMD,EAAS,MAAM,IAAI,sBAAoBF,EAAS,CACpD,eAAgBL,EAChB,YAAac,CACf,CAAC,EAAE,IAAI,EAGP,OAAOT,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EACnD,OAAQE,EAAe,IAAI,EAAE,QAAQC,CAAO,CAC9C,CAAC,EAED,GAAG,0DAA2D,SAAY,CAExE,MAAMO,EAAS,IAAI,WAAW,qBAAqB,CAAC,EAAE,KAAK,GAAI,EACzDT,EAAO,CACX,eAAgBN,EAChB,YAAae,CACf,EAGMR,EAAS,MAAM,IAAI,sBAAoBF,EAASC,CAAI,EAAE,IAAI,EAGhE,OAAOD,EAAQ,WAAW,EAAE,sBAAsB,CAAC,EACnD,OAAQE,EAAe,KAAK,EAAE,QAC5B,IAAI,yBACF,qBAAqBQ,EAAO,MAAM,uBACpC,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_bs58", "import_makeInternalApi", "import_SendSignMessageTask", "DERIVATION_PATH", "PUBKEY", "PUBKEY_BASE58", "bs58", "MESSAGE", "apiMock", "args", "result", "mockSig", "task", "fullMsg", "paths", "apdu", "expectedLen", "bigMsg", "tooBig"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var i=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var C=Object.prototype.hasOwnProperty;var D=(o,e)=>{for(var n in e)i(o,n,{get:e[n],enumerable:!0})},M=(o,e,n,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of c(e))!C.call(o,t)&&t!==n&&i(o,t,{get:()=>e[t],enumerable:!(a=d(e,t))||a.enumerable});return o};var l=o=>M(i({},"__esModule",{value:!0}),o);var v={};D(v,{makeContainer:()=>u});module.exports=l(v);var s=require("inversify"),m=require("./app-binder/di/appBinderModule"),p=require("./use-cases/di/useCasesModule"),r=require("./externalTypes");const u=({dmk:o,sessionId:e})=>{const n=new s.Container;return n.bind(r.externalTypes.Dmk).toConstantValue(o),n.bind(r.externalTypes.SessionId).toConstantValue(e),n.load((0,m.appBinderModuleFactory)(),(0,p.useCasesModuleFactory)()),n};0&&(module.exports={makeContainer});
1
+ "use strict";var a=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(o,e)=>{for(var n in e)a(o,n,{get:e[n],enumerable:!0})},C=(o,e,n,t)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of c(e))!l.call(o,i)&&i!==n&&a(o,i,{get:()=>e[i],enumerable:!(t=p(e,i))||t.enumerable});return o};var M=o=>C(a({},"__esModule",{value:!0}),o);var y={};u(y,{makeContainer:()=>x});module.exports=M(y);var s=require("inversify"),d=require("./app-binder/di/appBinderModule"),m=require("./use-cases/di/useCasesModule"),r=require("./externalTypes");const x=({dmk:o,sessionId:e,contextModule:n})=>{const t=new s.Container;return t.bind(r.externalTypes.Dmk).toConstantValue(o),t.bind(r.externalTypes.SessionId).toConstantValue(e),t.bind(r.externalTypes.ContextModule).toConstantValue(n),t.loadSync((0,d.appBinderModuleFactory)(),(0,m.useCasesModuleFactory)()),t};0&&(module.exports={makeContainer});
2
2
  //# sourceMappingURL=di.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/di.ts"],
4
- "sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\n// import { makeLoggerMiddleware } from \"inversify-logger-middleware\";\nimport { appBinderModuleFactory } from \"./app-binder/di/appBinderModule\";\nimport { useCasesModuleFactory } from \"./use-cases/di/useCasesModule\";\nimport { externalTypes } from \"./externalTypes\";\n\n// Uncomment this line to enable the logger middleware\n// const logger = makeLoggerMiddleware();\n\nexport type MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n};\nexport const makeContainer = ({ dmk, sessionId }: MakeContainerProps) => {\n const container = new Container();\n\n // Uncomment this line to enable the logger middleware\n // container.applyMiddleware(logger);\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n\n container.load(appBinderModuleFactory(), useCasesModuleFactory());\n\n return container;\n};\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAIA,IAAAI,EAA0B,qBAG1BC,EAAuC,2CACvCC,EAAsC,yCACtCC,EAA8B,2BASvB,MAAML,EAAgB,CAAC,CAAE,IAAAM,EAAK,UAAAC,CAAU,IAA0B,CACvE,MAAMC,EAAY,IAAI,YAKtB,OAAAA,EAAU,KAA0B,gBAAc,GAAG,EAAE,gBAAgBF,CAAG,EAC1EE,EACG,KAAsB,gBAAc,SAAS,EAC7C,gBAAgBD,CAAS,EAE5BC,EAAU,QAAK,0BAAuB,KAAG,yBAAsB,CAAC,EAEzDA,CACT",
6
- "names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_appBinderModule", "import_useCasesModule", "import_externalTypes", "dmk", "sessionId", "container"]
4
+ "sourcesContent": ["import { type ContextModule } from \"@ledgerhq/context-module\";\nimport {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { appBinderModuleFactory } from \"./app-binder/di/appBinderModule\";\nimport { useCasesModuleFactory } from \"./use-cases/di/useCasesModule\";\nimport { externalTypes } from \"./externalTypes\";\n\nexport type MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n contextModule: ContextModule;\n};\nexport const makeContainer = ({\n dmk,\n sessionId,\n contextModule,\n}: MakeContainerProps) => {\n const container = new Container();\n\n container.bind<DeviceManagementKit>(externalTypes.Dmk).toConstantValue(dmk);\n container\n .bind<DeviceSessionId>(externalTypes.SessionId)\n .toConstantValue(sessionId);\n container\n .bind<ContextModule>(externalTypes.ContextModule)\n .toConstantValue(contextModule);\n\n container.loadSync(appBinderModuleFactory(), useCasesModuleFactory());\n\n return container;\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAA0B,qBAE1BC,EAAuC,2CACvCC,EAAsC,yCACtCC,EAA8B,2BAOvB,MAAML,EAAgB,CAAC,CAC5B,IAAAM,EACA,UAAAC,EACA,cAAAC,CACF,IAA0B,CACxB,MAAMC,EAAY,IAAI,YAEtB,OAAAA,EAAU,KAA0B,gBAAc,GAAG,EAAE,gBAAgBH,CAAG,EAC1EG,EACG,KAAsB,gBAAc,SAAS,EAC7C,gBAAgBF,CAAS,EAC5BE,EACG,KAAoB,gBAAc,aAAa,EAC/C,gBAAgBD,CAAa,EAEhCC,EAAU,YAAS,0BAAuB,KAAG,yBAAsB,CAAC,EAE7DA,CACT",
6
+ "names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_appBinderModule", "import_useCasesModule", "import_externalTypes", "dmk", "sessionId", "contextModule", "container"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var n=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var t=Object.prototype.hasOwnProperty;var y=(e,o)=>{for(var m in o)n(e,m,{get:o[m],enumerable:!0})},b=(e,o,m,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let s of l(o))!t.call(e,s)&&s!==m&&n(e,s,{get:()=>o[s],enumerable:!(r=S(o,s))||r.enumerable});return e};var d=e=>b(n({},"__esModule",{value:!0}),e);var i={};y(i,{externalTypes:()=>f});module.exports=d(i);const f={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId")};0&&(module.exports={externalTypes});
1
+ "use strict";var n=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var d=(e,o)=>{for(var l in o)n(e,l,{get:o[l],enumerable:!0})},x=(e,o,l,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of r(o))!S.call(e,t)&&t!==l&&n(e,t,{get:()=>o[t],enumerable:!(s=m(o,t))||s.enumerable});return e};var y=e=>x(n({},"__esModule",{value:!0}),e);var f={};d(f,{externalTypes:()=>b});module.exports=y(f);const b={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId"),ContextModule:Symbol.for("ContextModule")};0&&(module.exports={externalTypes});
2
2
  //# sourceMappingURL=externalTypes.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/externalTypes.ts"],
4
- "sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n};\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,CACnC",
4
+ "sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n ContextModule: Symbol.for(\"ContextModule\"),\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAgB,CAC3B,IAAK,OAAO,IAAI,KAAK,EACrB,UAAW,OAAO,IAAI,WAAW,EACjC,cAAe,OAAO,IAAI,eAAe,CAC3C",
6
6
  "names": ["externalTypes_exports", "__export", "externalTypes", "__toCommonJS"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var o=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(p,r)=>{for(var t in r)o(p,t,{get:r[t],enumerable:!0})},y=(p,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let e of B(r))!l.call(p,e)&&e!==t&&o(p,e,{get:()=>r[e],enumerable:!(i=a(r,e))||i.enumerable});return p};var D=p=>y(o({},"__esModule",{value:!0}),p),s=(p,r,t,i)=>{for(var e=i>1?void 0:i?a(r,t):r,d=p.length-1,m;d>=0;d--)(m=p[d])&&(e=(i?m(r,t,e):m(e))||e);return i&&e&&o(r,t,e),e},A=(p,r)=>(t,i)=>r(t,i,p);var O={};u(O,{GetAddressUseCase:()=>n});module.exports=D(O);var c=require("inversify"),f=require("../../app-binder/di/appBinderTypes");let n=class{constructor(r){this.appBinder=r}execute(r,t){return this.appBinder.getAddress({derivationPath:r,checkOnDevice:t?.checkOnDevice??!1})}};n=s([(0,c.injectable)(),A(0,(0,c.inject)(f.appBinderTypes.AppBinder))],n);0&&(module.exports={GetAddressUseCase});
1
+ "use strict";var o=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var B=Object.prototype.hasOwnProperty;var O=(e,p)=>{for(var r in p)o(e,r,{get:p[r],enumerable:!0})},u=(e,p,r,n)=>{if(p&&typeof p=="object"||typeof p=="function")for(let i of l(p))!B.call(e,i)&&i!==r&&o(e,i,{get:()=>p[i],enumerable:!(n=a(p,i))||n.enumerable});return e};var y=e=>u(o({},"__esModule",{value:!0}),e),s=(e,p,r,n)=>{for(var i=n>1?void 0:n?a(p,r):p,d=e.length-1,m;d>=0;d--)(m=e[d])&&(i=(n?m(p,r,i):m(i))||i);return n&&i&&o(p,r,i),i},A=(e,p)=>(r,n)=>p(r,n,e);var k={};O(k,{GetAddressUseCase:()=>t});module.exports=y(k);var c=require("inversify"),f=require("../../app-binder/di/appBinderTypes");let t=class{constructor(p){this.appBinder=p}execute(p,r){return this.appBinder.getAddress({derivationPath:p,checkOnDevice:r?.checkOnDevice??!1,skipOpenApp:r?.skipOpenApp??!1})}};t=s([(0,c.injectable)(),A(0,(0,c.inject)(f.appBinderTypes.AppBinder))],t);0&&(module.exports={GetAddressUseCase});
2
2
  //# sourceMappingURL=GetAddressUseCase.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/use-cases/address/GetAddressUseCase.ts"],
4
- "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class GetAddressUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this.appBinder.getAddress({\n derivationPath,\n checkOnDevice: options?.checkOnDevice ?? false,\n });\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,qBAInCC,EAA+B,kDAIxB,IAAMC,EAAN,KAAwB,CAC7B,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACwB,CACxB,OAAO,KAAK,UAAU,WAAW,CAC/B,eAAAD,EACA,cAAeC,GAAS,eAAiB,EAC3C,CAAC,CACH,CACF,EAdaH,EAANI,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,iBAAe,SAAS,IAFvBL",
4
+ "sourcesContent": ["import { inject, injectable } from \"inversify\";\n\nimport { type GetAddressDAReturnType } from \"@api/app-binder/GetAddressDeviceActionTypes\";\nimport { type AddressOptions } from \"@api/model/AddressOption\";\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { SolanaAppBinder } from \"@internal/app-binder/SolanaAppBinder\";\n\n@injectable()\nexport class GetAddressUseCase {\n constructor(\n @inject(appBinderTypes.AppBinder) private appBinder: SolanaAppBinder,\n ) {}\n\n execute(\n derivationPath: string,\n options?: AddressOptions,\n ): GetAddressDAReturnType {\n return this.appBinder.getAddress({\n derivationPath,\n checkOnDevice: options?.checkOnDevice ?? false,\n skipOpenApp: options?.skipOpenApp ?? false,\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAmC,qBAInCC,EAA+B,kDAIxB,IAAMC,EAAN,KAAwB,CAC7B,YAC4CC,EAC1C,CAD0C,eAAAA,CACzC,CAEH,QACEC,EACAC,EACwB,CACxB,OAAO,KAAK,UAAU,WAAW,CAC/B,eAAAD,EACA,cAAeC,GAAS,eAAiB,GACzC,YAAaA,GAAS,aAAe,EACvC,CAAC,CACH,CACF,EAfaH,EAANI,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,iBAAe,SAAS,IAFvBL",
6
6
  "names": ["GetAddressUseCase_exports", "__export", "GetAddressUseCase", "__toCommonJS", "import_inversify", "import_appBinderTypes", "GetAddressUseCase", "appBinder", "derivationPath", "options", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var o=require("./GetAddressUseCase");describe("GetAddressUseCase",()=>{const e="44'/501'",s="some-address",t=jest.fn().mockReturnValue(s),c={getAddress:t};let d;beforeEach(()=>{jest.clearAllMocks(),d=new o.GetAddressUseCase(c)}),it("should return the address from the appBinder's getAddress method",()=>{const a=d.execute(e,{checkOnDevice:!0});expect(a).toEqual(s),expect(t).toHaveBeenCalledWith({derivationPath:e,checkOnDevice:!0})}),it("should return the address from the appBinder's getAddress method with default options",()=>{const r=d.execute(e);expect(r).toEqual(s),expect(t).toHaveBeenCalledWith({derivationPath:e,checkOnDevice:!1})})});
1
+ "use strict";var r=require("./GetAddressUseCase");describe("GetAddressUseCase",()=>{const e="44'/501'",s="some-address",t=vi.fn().mockReturnValue(s),o={getAddress:t};let d;beforeEach(()=>{vi.clearAllMocks(),d=new r.GetAddressUseCase(o)}),it("should return the address from the appBinder's getAddress method",()=>{const p=d.execute(e,{checkOnDevice:!0,skipOpenApp:!0});expect(p).toEqual(s),expect(t).toHaveBeenCalledWith({derivationPath:e,checkOnDevice:!0,skipOpenApp:!0})}),it("should return the address from the appBinder's getAddress method with default options",()=>{const n=d.execute(e);expect(n).toEqual(s),expect(t).toHaveBeenCalledWith({derivationPath:e,checkOnDevice:!1,skipOpenApp:!1})})});
2
2
  //# sourceMappingURL=GetAddressUseCase.test.js.map