@ledgerhq/device-signer-kit-icp 0.0.0-develop-20260721105622

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 (306) hide show
  1. package/LICENSE.MD +202 -0
  2. package/README.md +186 -0
  3. package/lib/cjs/api/SignerIcp.js +2 -0
  4. package/lib/cjs/api/SignerIcp.js.map +7 -0
  5. package/lib/cjs/api/SignerIcpBuilder.js +2 -0
  6. package/lib/cjs/api/SignerIcpBuilder.js.map +7 -0
  7. package/lib/cjs/api/SignerIcpBuilder.test.js +2 -0
  8. package/lib/cjs/api/SignerIcpBuilder.test.js.map +7 -0
  9. package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js +2 -0
  10. package/lib/cjs/api/app-binder/GetAddressDeviceActionTypes.js.map +7 -0
  11. package/lib/cjs/api/app-binder/GetVersionDeviceActionTypes.js +2 -0
  12. package/lib/cjs/api/app-binder/GetVersionDeviceActionTypes.js.map +7 -0
  13. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +2 -0
  14. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +7 -0
  15. package/lib/cjs/api/index.js +2 -0
  16. package/lib/cjs/api/index.js.map +7 -0
  17. package/lib/cjs/api/model/Address.js +2 -0
  18. package/lib/cjs/api/model/Address.js.map +7 -0
  19. package/lib/cjs/api/model/Signature.js +2 -0
  20. package/lib/cjs/api/model/Signature.js.map +7 -0
  21. package/lib/cjs/api/model/Version.js +2 -0
  22. package/lib/cjs/api/model/Version.js.map +7 -0
  23. package/lib/cjs/index.js +2 -0
  24. package/lib/cjs/index.js.map +7 -0
  25. package/lib/cjs/internal/DefaultSignerIcp.js +2 -0
  26. package/lib/cjs/internal/DefaultSignerIcp.js.map +7 -0
  27. package/lib/cjs/internal/DefaultSignerIcp.test.js +2 -0
  28. package/lib/cjs/internal/DefaultSignerIcp.test.js.map +7 -0
  29. package/lib/cjs/internal/app-binder/IcpAppBinder.js +2 -0
  30. package/lib/cjs/internal/app-binder/IcpAppBinder.js.map +7 -0
  31. package/lib/cjs/internal/app-binder/IcpAppBinder.test.js +2 -0
  32. package/lib/cjs/internal/app-binder/IcpAppBinder.test.js.map +7 -0
  33. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js +2 -0
  34. package/lib/cjs/internal/app-binder/command/GetAddressCommand.js.map +7 -0
  35. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js +2 -0
  36. package/lib/cjs/internal/app-binder/command/GetAddressCommand.test.js.map +7 -0
  37. package/lib/cjs/internal/app-binder/command/GetVersionCommand.js +2 -0
  38. package/lib/cjs/internal/app-binder/command/GetVersionCommand.js.map +7 -0
  39. package/lib/cjs/internal/app-binder/command/GetVersionCommand.test.js +2 -0
  40. package/lib/cjs/internal/app-binder/command/GetVersionCommand.test.js.map +7 -0
  41. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js +2 -0
  42. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.js.map +7 -0
  43. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js +2 -0
  44. package/lib/cjs/internal/app-binder/command/SignTransactionCommand.test.js.map +7 -0
  45. package/lib/cjs/internal/app-binder/command/__test-utils__/expectStatusWordError.js +2 -0
  46. package/lib/cjs/internal/app-binder/command/__test-utils__/expectStatusWordError.js.map +7 -0
  47. package/lib/cjs/internal/app-binder/command/__test-utils__/pathToBuffer.js +2 -0
  48. package/lib/cjs/internal/app-binder/command/__test-utils__/pathToBuffer.js.map +7 -0
  49. package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.js +2 -0
  50. package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.js.map +7 -0
  51. package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.test.js +2 -0
  52. package/lib/cjs/internal/app-binder/command/utils/EncodeDerivationPath.test.js.map +7 -0
  53. package/lib/cjs/internal/app-binder/command/utils/IcpApplicationError.test.js +2 -0
  54. package/lib/cjs/internal/app-binder/command/utils/IcpApplicationError.test.js.map +7 -0
  55. package/lib/cjs/internal/app-binder/command/utils/IcpApplicationErrors.js +2 -0
  56. package/lib/cjs/internal/app-binder/command/utils/IcpApplicationErrors.js.map +7 -0
  57. package/lib/cjs/internal/app-binder/constants.js +2 -0
  58. package/lib/cjs/internal/app-binder/constants.js.map +7 -0
  59. package/lib/cjs/internal/app-binder/di/appBinderModule.js +2 -0
  60. package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +7 -0
  61. package/lib/cjs/internal/app-binder/di/appBinderModule.test.js +2 -0
  62. package/lib/cjs/internal/app-binder/di/appBinderModule.test.js.map +7 -0
  63. package/lib/cjs/internal/app-binder/di/appBinderTypes.js +2 -0
  64. package/lib/cjs/internal/app-binder/di/appBinderTypes.js.map +7 -0
  65. package/lib/cjs/internal/app-binder/task/SignTransactionTask.js +2 -0
  66. package/lib/cjs/internal/app-binder/task/SignTransactionTask.js.map +7 -0
  67. package/lib/cjs/internal/app-binder/task/SignTransactionTask.test.js +2 -0
  68. package/lib/cjs/internal/app-binder/task/SignTransactionTask.test.js.map +7 -0
  69. package/lib/cjs/internal/di.js +2 -0
  70. package/lib/cjs/internal/di.js.map +7 -0
  71. package/lib/cjs/internal/externalTypes.js +2 -0
  72. package/lib/cjs/internal/externalTypes.js.map +7 -0
  73. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js +2 -0
  74. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.js.map +7 -0
  75. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js +2 -0
  76. package/lib/cjs/internal/use-cases/address/GetAddressUseCase.test.js.map +7 -0
  77. package/lib/cjs/internal/use-cases/address/di/addressModule.js +2 -0
  78. package/lib/cjs/internal/use-cases/address/di/addressModule.js.map +7 -0
  79. package/lib/cjs/internal/use-cases/address/di/addressModule.test.js +2 -0
  80. package/lib/cjs/internal/use-cases/address/di/addressModule.test.js.map +7 -0
  81. package/lib/cjs/internal/use-cases/address/di/addressTypes.js +2 -0
  82. package/lib/cjs/internal/use-cases/address/di/addressTypes.js.map +7 -0
  83. package/lib/cjs/internal/use-cases/config/GetAppConfigurationUseCase.js +2 -0
  84. package/lib/cjs/internal/use-cases/config/GetAppConfigurationUseCase.js.map +7 -0
  85. package/lib/cjs/internal/use-cases/config/GetAppConfigurationUseCase.test.js +2 -0
  86. package/lib/cjs/internal/use-cases/config/GetAppConfigurationUseCase.test.js.map +7 -0
  87. package/lib/cjs/internal/use-cases/config/di/configModule.js +2 -0
  88. package/lib/cjs/internal/use-cases/config/di/configModule.js.map +7 -0
  89. package/lib/cjs/internal/use-cases/config/di/configModule.test.js +2 -0
  90. package/lib/cjs/internal/use-cases/config/di/configModule.test.js.map +7 -0
  91. package/lib/cjs/internal/use-cases/config/di/configTypes.js +2 -0
  92. package/lib/cjs/internal/use-cases/config/di/configTypes.js.map +7 -0
  93. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js +2 -0
  94. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.js.map +7 -0
  95. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js +2 -0
  96. package/lib/cjs/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +7 -0
  97. package/lib/cjs/internal/use-cases/transaction/di/transactionModule.js +2 -0
  98. package/lib/cjs/internal/use-cases/transaction/di/transactionModule.js.map +7 -0
  99. package/lib/cjs/internal/use-cases/transaction/di/transactionModule.test.js +2 -0
  100. package/lib/cjs/internal/use-cases/transaction/di/transactionModule.test.js.map +7 -0
  101. package/lib/cjs/internal/use-cases/transaction/di/transactionTypes.js +2 -0
  102. package/lib/cjs/internal/use-cases/transaction/di/transactionTypes.js.map +7 -0
  103. package/lib/cjs/package.json +60 -0
  104. package/lib/esm/api/SignerIcp.js +1 -0
  105. package/lib/esm/api/SignerIcp.js.map +7 -0
  106. package/lib/esm/api/SignerIcpBuilder.js +2 -0
  107. package/lib/esm/api/SignerIcpBuilder.js.map +7 -0
  108. package/lib/esm/api/SignerIcpBuilder.test.js +2 -0
  109. package/lib/esm/api/SignerIcpBuilder.test.js.map +7 -0
  110. package/lib/esm/api/app-binder/GetAddressDeviceActionTypes.js +1 -0
  111. package/lib/esm/api/app-binder/GetAddressDeviceActionTypes.js.map +7 -0
  112. package/lib/esm/api/app-binder/GetVersionDeviceActionTypes.js +1 -0
  113. package/lib/esm/api/app-binder/GetVersionDeviceActionTypes.js.map +7 -0
  114. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js +1 -0
  115. package/lib/esm/api/app-binder/SignTransactionDeviceActionTypes.js.map +7 -0
  116. package/lib/esm/api/index.js +2 -0
  117. package/lib/esm/api/index.js.map +7 -0
  118. package/lib/esm/api/model/Address.js +1 -0
  119. package/lib/esm/api/model/Address.js.map +7 -0
  120. package/lib/esm/api/model/Signature.js +1 -0
  121. package/lib/esm/api/model/Signature.js.map +7 -0
  122. package/lib/esm/api/model/Version.js +1 -0
  123. package/lib/esm/api/model/Version.js.map +7 -0
  124. package/lib/esm/index.js +2 -0
  125. package/lib/esm/index.js.map +7 -0
  126. package/lib/esm/internal/DefaultSignerIcp.js +2 -0
  127. package/lib/esm/internal/DefaultSignerIcp.js.map +7 -0
  128. package/lib/esm/internal/DefaultSignerIcp.test.js +2 -0
  129. package/lib/esm/internal/DefaultSignerIcp.test.js.map +7 -0
  130. package/lib/esm/internal/app-binder/IcpAppBinder.js +2 -0
  131. package/lib/esm/internal/app-binder/IcpAppBinder.js.map +7 -0
  132. package/lib/esm/internal/app-binder/IcpAppBinder.test.js +2 -0
  133. package/lib/esm/internal/app-binder/IcpAppBinder.test.js.map +7 -0
  134. package/lib/esm/internal/app-binder/command/GetAddressCommand.js +2 -0
  135. package/lib/esm/internal/app-binder/command/GetAddressCommand.js.map +7 -0
  136. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js +2 -0
  137. package/lib/esm/internal/app-binder/command/GetAddressCommand.test.js.map +7 -0
  138. package/lib/esm/internal/app-binder/command/GetVersionCommand.js +2 -0
  139. package/lib/esm/internal/app-binder/command/GetVersionCommand.js.map +7 -0
  140. package/lib/esm/internal/app-binder/command/GetVersionCommand.test.js +2 -0
  141. package/lib/esm/internal/app-binder/command/GetVersionCommand.test.js.map +7 -0
  142. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js +2 -0
  143. package/lib/esm/internal/app-binder/command/SignTransactionCommand.js.map +7 -0
  144. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js +2 -0
  145. package/lib/esm/internal/app-binder/command/SignTransactionCommand.test.js.map +7 -0
  146. package/lib/esm/internal/app-binder/command/__test-utils__/expectStatusWordError.js +2 -0
  147. package/lib/esm/internal/app-binder/command/__test-utils__/expectStatusWordError.js.map +7 -0
  148. package/lib/esm/internal/app-binder/command/__test-utils__/pathToBuffer.js +2 -0
  149. package/lib/esm/internal/app-binder/command/__test-utils__/pathToBuffer.js.map +7 -0
  150. package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.js +2 -0
  151. package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.js.map +7 -0
  152. package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.test.js +2 -0
  153. package/lib/esm/internal/app-binder/command/utils/EncodeDerivationPath.test.js.map +7 -0
  154. package/lib/esm/internal/app-binder/command/utils/IcpApplicationError.test.js +2 -0
  155. package/lib/esm/internal/app-binder/command/utils/IcpApplicationError.test.js.map +7 -0
  156. package/lib/esm/internal/app-binder/command/utils/IcpApplicationErrors.js +2 -0
  157. package/lib/esm/internal/app-binder/command/utils/IcpApplicationErrors.js.map +7 -0
  158. package/lib/esm/internal/app-binder/constants.js +2 -0
  159. package/lib/esm/internal/app-binder/constants.js.map +7 -0
  160. package/lib/esm/internal/app-binder/di/appBinderModule.js +2 -0
  161. package/lib/esm/internal/app-binder/di/appBinderModule.js.map +7 -0
  162. package/lib/esm/internal/app-binder/di/appBinderModule.test.js +2 -0
  163. package/lib/esm/internal/app-binder/di/appBinderModule.test.js.map +7 -0
  164. package/lib/esm/internal/app-binder/di/appBinderTypes.js +2 -0
  165. package/lib/esm/internal/app-binder/di/appBinderTypes.js.map +7 -0
  166. package/lib/esm/internal/app-binder/task/SignTransactionTask.js +2 -0
  167. package/lib/esm/internal/app-binder/task/SignTransactionTask.js.map +7 -0
  168. package/lib/esm/internal/app-binder/task/SignTransactionTask.test.js +2 -0
  169. package/lib/esm/internal/app-binder/task/SignTransactionTask.test.js.map +7 -0
  170. package/lib/esm/internal/di.js +2 -0
  171. package/lib/esm/internal/di.js.map +7 -0
  172. package/lib/esm/internal/externalTypes.js +2 -0
  173. package/lib/esm/internal/externalTypes.js.map +7 -0
  174. package/lib/esm/internal/use-cases/address/GetAddressUseCase.js +2 -0
  175. package/lib/esm/internal/use-cases/address/GetAddressUseCase.js.map +7 -0
  176. package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js +2 -0
  177. package/lib/esm/internal/use-cases/address/GetAddressUseCase.test.js.map +7 -0
  178. package/lib/esm/internal/use-cases/address/di/addressModule.js +2 -0
  179. package/lib/esm/internal/use-cases/address/di/addressModule.js.map +7 -0
  180. package/lib/esm/internal/use-cases/address/di/addressModule.test.js +2 -0
  181. package/lib/esm/internal/use-cases/address/di/addressModule.test.js.map +7 -0
  182. package/lib/esm/internal/use-cases/address/di/addressTypes.js +2 -0
  183. package/lib/esm/internal/use-cases/address/di/addressTypes.js.map +7 -0
  184. package/lib/esm/internal/use-cases/config/GetAppConfigurationUseCase.js +2 -0
  185. package/lib/esm/internal/use-cases/config/GetAppConfigurationUseCase.js.map +7 -0
  186. package/lib/esm/internal/use-cases/config/GetAppConfigurationUseCase.test.js +2 -0
  187. package/lib/esm/internal/use-cases/config/GetAppConfigurationUseCase.test.js.map +7 -0
  188. package/lib/esm/internal/use-cases/config/di/configModule.js +2 -0
  189. package/lib/esm/internal/use-cases/config/di/configModule.js.map +7 -0
  190. package/lib/esm/internal/use-cases/config/di/configModule.test.js +2 -0
  191. package/lib/esm/internal/use-cases/config/di/configModule.test.js.map +7 -0
  192. package/lib/esm/internal/use-cases/config/di/configTypes.js +2 -0
  193. package/lib/esm/internal/use-cases/config/di/configTypes.js.map +7 -0
  194. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js +2 -0
  195. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.js.map +7 -0
  196. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js +2 -0
  197. package/lib/esm/internal/use-cases/transaction/SignTransactionUseCase.test.js.map +7 -0
  198. package/lib/esm/internal/use-cases/transaction/di/transactionModule.js +2 -0
  199. package/lib/esm/internal/use-cases/transaction/di/transactionModule.js.map +7 -0
  200. package/lib/esm/internal/use-cases/transaction/di/transactionModule.test.js +2 -0
  201. package/lib/esm/internal/use-cases/transaction/di/transactionModule.test.js.map +7 -0
  202. package/lib/esm/internal/use-cases/transaction/di/transactionTypes.js +2 -0
  203. package/lib/esm/internal/use-cases/transaction/di/transactionTypes.js.map +7 -0
  204. package/lib/esm/package.json +60 -0
  205. package/lib/types/api/SignerIcp.d.ts +16 -0
  206. package/lib/types/api/SignerIcp.d.ts.map +1 -0
  207. package/lib/types/api/SignerIcpBuilder.d.ts +22 -0
  208. package/lib/types/api/SignerIcpBuilder.d.ts.map +1 -0
  209. package/lib/types/api/SignerIcpBuilder.test.d.ts +2 -0
  210. package/lib/types/api/SignerIcpBuilder.test.d.ts.map +1 -0
  211. package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts +10 -0
  212. package/lib/types/api/app-binder/GetAddressDeviceActionTypes.d.ts.map +1 -0
  213. package/lib/types/api/app-binder/GetVersionDeviceActionTypes.d.ts +10 -0
  214. package/lib/types/api/app-binder/GetVersionDeviceActionTypes.d.ts.map +1 -0
  215. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +12 -0
  216. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -0
  217. package/lib/types/api/index.d.ts +9 -0
  218. package/lib/types/api/index.d.ts.map +1 -0
  219. package/lib/types/api/model/Address.d.ts +6 -0
  220. package/lib/types/api/model/Address.d.ts.map +1 -0
  221. package/lib/types/api/model/Signature.d.ts +7 -0
  222. package/lib/types/api/model/Signature.d.ts.map +1 -0
  223. package/lib/types/api/model/Version.d.ts +6 -0
  224. package/lib/types/api/model/Version.d.ts.map +1 -0
  225. package/lib/types/index.d.ts +3 -0
  226. package/lib/types/index.d.ts.map +1 -0
  227. package/lib/types/internal/DefaultSignerIcp.d.ts +18 -0
  228. package/lib/types/internal/DefaultSignerIcp.d.ts.map +1 -0
  229. package/lib/types/internal/DefaultSignerIcp.test.d.ts +2 -0
  230. package/lib/types/internal/DefaultSignerIcp.test.d.ts.map +1 -0
  231. package/lib/types/internal/app-binder/IcpAppBinder.d.ts +21 -0
  232. package/lib/types/internal/app-binder/IcpAppBinder.d.ts.map +1 -0
  233. package/lib/types/internal/app-binder/IcpAppBinder.test.d.ts +2 -0
  234. package/lib/types/internal/app-binder/IcpAppBinder.test.d.ts.map +1 -0
  235. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts +26 -0
  236. package/lib/types/internal/app-binder/command/GetAddressCommand.d.ts.map +1 -0
  237. package/lib/types/internal/app-binder/command/GetAddressCommand.test.d.ts +2 -0
  238. package/lib/types/internal/app-binder/command/GetAddressCommand.test.d.ts.map +1 -0
  239. package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts +17 -0
  240. package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts.map +1 -0
  241. package/lib/types/internal/app-binder/command/GetVersionCommand.test.d.ts +2 -0
  242. package/lib/types/internal/app-binder/command/GetVersionCommand.test.d.ts.map +1 -0
  243. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts +39 -0
  244. package/lib/types/internal/app-binder/command/SignTransactionCommand.d.ts.map +1 -0
  245. package/lib/types/internal/app-binder/command/SignTransactionCommand.test.d.ts +2 -0
  246. package/lib/types/internal/app-binder/command/SignTransactionCommand.test.d.ts.map +1 -0
  247. package/lib/types/internal/app-binder/command/__test-utils__/expectStatusWordError.d.ts +4 -0
  248. package/lib/types/internal/app-binder/command/__test-utils__/expectStatusWordError.d.ts.map +1 -0
  249. package/lib/types/internal/app-binder/command/__test-utils__/pathToBuffer.d.ts +2 -0
  250. package/lib/types/internal/app-binder/command/__test-utils__/pathToBuffer.d.ts.map +1 -0
  251. package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.d.ts +2 -0
  252. package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.d.ts.map +1 -0
  253. package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.test.d.ts +2 -0
  254. package/lib/types/internal/app-binder/command/utils/EncodeDerivationPath.test.d.ts.map +1 -0
  255. package/lib/types/internal/app-binder/command/utils/IcpApplicationError.test.d.ts +2 -0
  256. package/lib/types/internal/app-binder/command/utils/IcpApplicationError.test.d.ts.map +1 -0
  257. package/lib/types/internal/app-binder/command/utils/IcpApplicationErrors.d.ts +24 -0
  258. package/lib/types/internal/app-binder/command/utils/IcpApplicationErrors.d.ts.map +1 -0
  259. package/lib/types/internal/app-binder/constants.d.ts +2 -0
  260. package/lib/types/internal/app-binder/constants.d.ts.map +1 -0
  261. package/lib/types/internal/app-binder/di/appBinderModule.d.ts +3 -0
  262. package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -0
  263. package/lib/types/internal/app-binder/di/appBinderModule.test.d.ts +2 -0
  264. package/lib/types/internal/app-binder/di/appBinderModule.test.d.ts.map +1 -0
  265. package/lib/types/internal/app-binder/di/appBinderTypes.d.ts +4 -0
  266. package/lib/types/internal/app-binder/di/appBinderTypes.d.ts.map +1 -0
  267. package/lib/types/internal/app-binder/task/SignTransactionTask.d.ts +16 -0
  268. package/lib/types/internal/app-binder/task/SignTransactionTask.d.ts.map +1 -0
  269. package/lib/types/internal/app-binder/task/SignTransactionTask.test.d.ts +2 -0
  270. package/lib/types/internal/app-binder/task/SignTransactionTask.test.d.ts.map +1 -0
  271. package/lib/types/internal/di.d.ts +9 -0
  272. package/lib/types/internal/di.d.ts.map +1 -0
  273. package/lib/types/internal/externalTypes.d.ts +6 -0
  274. package/lib/types/internal/externalTypes.d.ts.map +1 -0
  275. package/lib/types/internal/use-cases/address/GetAddressUseCase.d.ts +9 -0
  276. package/lib/types/internal/use-cases/address/GetAddressUseCase.d.ts.map +1 -0
  277. package/lib/types/internal/use-cases/address/GetAddressUseCase.test.d.ts +2 -0
  278. package/lib/types/internal/use-cases/address/GetAddressUseCase.test.d.ts.map +1 -0
  279. package/lib/types/internal/use-cases/address/di/addressModule.d.ts +3 -0
  280. package/lib/types/internal/use-cases/address/di/addressModule.d.ts.map +1 -0
  281. package/lib/types/internal/use-cases/address/di/addressModule.test.d.ts +2 -0
  282. package/lib/types/internal/use-cases/address/di/addressModule.test.d.ts.map +1 -0
  283. package/lib/types/internal/use-cases/address/di/addressTypes.d.ts +4 -0
  284. package/lib/types/internal/use-cases/address/di/addressTypes.d.ts.map +1 -0
  285. package/lib/types/internal/use-cases/config/GetAppConfigurationUseCase.d.ts +8 -0
  286. package/lib/types/internal/use-cases/config/GetAppConfigurationUseCase.d.ts.map +1 -0
  287. package/lib/types/internal/use-cases/config/GetAppConfigurationUseCase.test.d.ts +2 -0
  288. package/lib/types/internal/use-cases/config/GetAppConfigurationUseCase.test.d.ts.map +1 -0
  289. package/lib/types/internal/use-cases/config/di/configModule.d.ts +3 -0
  290. package/lib/types/internal/use-cases/config/di/configModule.d.ts.map +1 -0
  291. package/lib/types/internal/use-cases/config/di/configModule.test.d.ts +2 -0
  292. package/lib/types/internal/use-cases/config/di/configModule.test.d.ts.map +1 -0
  293. package/lib/types/internal/use-cases/config/di/configTypes.d.ts +4 -0
  294. package/lib/types/internal/use-cases/config/di/configTypes.d.ts.map +1 -0
  295. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts +9 -0
  296. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.d.ts.map +1 -0
  297. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.test.d.ts +2 -0
  298. package/lib/types/internal/use-cases/transaction/SignTransactionUseCase.test.d.ts.map +1 -0
  299. package/lib/types/internal/use-cases/transaction/di/transactionModule.d.ts +3 -0
  300. package/lib/types/internal/use-cases/transaction/di/transactionModule.d.ts.map +1 -0
  301. package/lib/types/internal/use-cases/transaction/di/transactionModule.test.d.ts +2 -0
  302. package/lib/types/internal/use-cases/transaction/di/transactionModule.test.d.ts.map +1 -0
  303. package/lib/types/internal/use-cases/transaction/di/transactionTypes.d.ts +4 -0
  304. package/lib/types/internal/use-cases/transaction/di/transactionTypes.d.ts.map +1 -0
  305. package/lib/types/tsconfig.prod.tsbuildinfo +1 -0
  306. package/package.json +60 -0
@@ -0,0 +1,2 @@
1
+ "use strict";var i=require("@ledgerhq/device-management-kit"),c=require("vitest"),d=require("../app-binder/command/GetAddressCommand"),u=require("../app-binder/command/GetVersionCommand"),p=require("../app-binder/constants"),l=require("../app-binder/IcpAppBinder");const a="44'/223'/0'/0/0";describe("IcpAppBinder",()=>{const A={debug:c.vi.fn()},m=c.vi.fn().mockReturnValue(A),v="test-session-id",s=e=>{const t={executeDeviceAction:e};return new l.IcpAppBinder(t,v,m)};it("getVersion should run a SendCommandInAppDeviceAction with GetVersionCommand",()=>{const e={observable:{},cancel:c.vi.fn()},t=c.vi.fn().mockReturnValue(e),o=s(t).getVersion({skipOpenApp:!1}),n=t.mock.calls[0][0];expect(n.deviceAction).toBeInstanceOf(i.SendCommandInAppDeviceAction),expect(n.deviceAction.input.command).toBeInstanceOf(u.GetVersionCommand),expect(n.deviceAction.input.appName).toBe(p.APP_NAME),expect(n.deviceAction.input.requiredUserInteraction).toBe(i.UserInteractionRequired.None),expect(o).toBe(e)}),it("getAddress should request VerifyAddress interaction when checkOnDevice is true",()=>{const e={observable:{},cancel:c.vi.fn()},t=c.vi.fn().mockReturnValue(e),o=s(t).getAddress({derivationPath:a,checkOnDevice:!0,skipOpenApp:!1}),n=t.mock.calls[0][0];expect(n.deviceAction).toBeInstanceOf(i.SendCommandInAppDeviceAction),expect(n.deviceAction.input.command).toBeInstanceOf(d.GetAddressCommand),expect(n.deviceAction.input.requiredUserInteraction).toBe(i.UserInteractionRequired.VerifyAddress),expect(o).toBe(e)}),it("getAddress should require no interaction when checkOnDevice is false",()=>{const e=c.vi.fn().mockReturnValue({});s(e).getAddress({derivationPath:a,checkOnDevice:!1,skipOpenApp:!1});const r=e.mock.calls[0][0];expect(r.deviceAction.input.requiredUserInteraction).toBe(i.UserInteractionRequired.None)}),it("signTransaction should run a CallTaskInAppDeviceAction requiring SignTransaction",()=>{const e={observable:{},cancel:c.vi.fn()},t=c.vi.fn().mockReturnValue(e),o=s(t).signTransaction({derivationPath:a,transaction:new Uint8Array([1,2])}),n=t.mock.calls[0][0];expect(n.deviceAction).toBeInstanceOf(i.CallTaskInAppDeviceAction),expect(n.deviceAction.input.appName).toBe(p.APP_NAME),expect(n.deviceAction.input.requiredUserInteraction).toBe(i.UserInteractionRequired.SignTransaction),expect(n.deviceAction.input.skipOpenApp).toBe(!1),expect(o).toBe(e)})});
2
+ //# sourceMappingURL=IcpAppBinder.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/app-binder/IcpAppBinder.test.ts"],
4
+ "sourcesContent": ["import {\n CallTaskInAppDeviceAction,\n type DeviceManagementKit,\n type LoggerPublisherService,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { vi } from \"vitest\";\n\nimport { GetAddressCommand } from \"@internal/app-binder/command/GetAddressCommand\";\nimport { GetVersionCommand } from \"@internal/app-binder/command/GetVersionCommand\";\nimport { APP_NAME } from \"@internal/app-binder/constants\";\nimport { IcpAppBinder } from \"@internal/app-binder/IcpAppBinder\";\n\nconst DERIVATION_PATH = \"44'/223'/0'/0/0\";\n\ndescribe(\"IcpAppBinder\", () => {\n const loggerMock = { debug: vi.fn() } as unknown as LoggerPublisherService;\n const loggerFactoryMock = vi.fn().mockReturnValue(loggerMock);\n const sessionId = \"test-session-id\";\n\n const makeBinder = (executeDeviceActionMock: ReturnType<typeof vi.fn>) => {\n const dmkMock = {\n executeDeviceAction: executeDeviceActionMock,\n } as unknown as DeviceManagementKit;\n return new IcpAppBinder(dmkMock, sessionId, loggerFactoryMock);\n };\n\n it(\"getVersion should run a SendCommandInAppDeviceAction with GetVersionCommand\", () => {\n // ARRANGE\n const expectedResult = { observable: {}, cancel: vi.fn() };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const binder = makeBinder(executeDeviceActionMock);\n\n // ACT\n const result = binder.getVersion({ skipOpenApp: false });\n\n // ASSERT\n const args = executeDeviceActionMock.mock.calls[0]![0];\n expect(args.deviceAction).toBeInstanceOf(SendCommandInAppDeviceAction);\n expect(args.deviceAction.input.command).toBeInstanceOf(GetVersionCommand);\n expect(args.deviceAction.input.appName).toBe(APP_NAME);\n expect(args.deviceAction.input.requiredUserInteraction).toBe(\n UserInteractionRequired.None,\n );\n expect(result).toBe(expectedResult);\n });\n\n it(\"getAddress should request VerifyAddress interaction when checkOnDevice is true\", () => {\n // ARRANGE\n const expectedResult = { observable: {}, cancel: vi.fn() };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const binder = makeBinder(executeDeviceActionMock);\n\n // ACT\n const result = binder.getAddress({\n derivationPath: DERIVATION_PATH,\n checkOnDevice: true,\n skipOpenApp: false,\n });\n\n // ASSERT\n const args = executeDeviceActionMock.mock.calls[0]![0];\n expect(args.deviceAction).toBeInstanceOf(SendCommandInAppDeviceAction);\n expect(args.deviceAction.input.command).toBeInstanceOf(GetAddressCommand);\n expect(args.deviceAction.input.requiredUserInteraction).toBe(\n UserInteractionRequired.VerifyAddress,\n );\n expect(result).toBe(expectedResult);\n });\n\n it(\"getAddress should require no interaction when checkOnDevice is false\", () => {\n // ARRANGE\n const executeDeviceActionMock = vi.fn().mockReturnValue({});\n const binder = makeBinder(executeDeviceActionMock);\n\n // ACT\n binder.getAddress({\n derivationPath: DERIVATION_PATH,\n checkOnDevice: false,\n skipOpenApp: false,\n });\n\n // ASSERT\n const args = executeDeviceActionMock.mock.calls[0]![0];\n expect(args.deviceAction.input.requiredUserInteraction).toBe(\n UserInteractionRequired.None,\n );\n });\n\n it(\"signTransaction should run a CallTaskInAppDeviceAction requiring SignTransaction\", () => {\n // ARRANGE\n const expectedResult = { observable: {}, cancel: vi.fn() };\n const executeDeviceActionMock = vi.fn().mockReturnValue(expectedResult);\n const binder = makeBinder(executeDeviceActionMock);\n\n // ACT\n const result = binder.signTransaction({\n derivationPath: DERIVATION_PATH,\n transaction: new Uint8Array([0x01, 0x02]),\n });\n\n // ASSERT\n const args = executeDeviceActionMock.mock.calls[0]![0];\n expect(args.deviceAction).toBeInstanceOf(CallTaskInAppDeviceAction);\n expect(args.deviceAction.input.appName).toBe(APP_NAME);\n expect(args.deviceAction.input.requiredUserInteraction).toBe(\n UserInteractionRequired.SignTransaction,\n );\n expect(args.deviceAction.input.skipOpenApp).toBe(false);\n expect(result).toBe(expectedResult);\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAMO,2CACPC,EAAmB,kBAEnBC,EAAkC,0DAClCC,EAAkC,0DAClCC,EAAyB,0CACzBC,EAA6B,6CAE7B,MAAMC,EAAkB,kBAExB,SAAS,eAAgB,IAAM,CAC7B,MAAMC,EAAa,CAAE,MAAO,KAAG,GAAG,CAAE,EAC9BC,EAAoB,KAAG,GAAG,EAAE,gBAAgBD,CAAU,EACtDE,EAAY,kBAEZC,EAAcC,GAAsD,CACxE,MAAMC,EAAU,CACd,oBAAqBD,CACvB,EACA,OAAO,IAAI,eAAaC,EAASH,EAAWD,CAAiB,CAC/D,EAEA,GAAG,8EAA+E,IAAM,CAEtF,MAAMK,EAAiB,CAAE,WAAY,CAAC,EAAG,OAAQ,KAAG,GAAG,CAAE,EACnDF,EAA0B,KAAG,GAAG,EAAE,gBAAgBE,CAAc,EAIhEC,EAHSJ,EAAWC,CAAuB,EAG3B,WAAW,CAAE,YAAa,EAAM,CAAC,EAGjDI,EAAOJ,EAAwB,KAAK,MAAM,CAAC,EAAG,CAAC,EACrD,OAAOI,EAAK,YAAY,EAAE,eAAe,8BAA4B,EACrE,OAAOA,EAAK,aAAa,MAAM,OAAO,EAAE,eAAe,mBAAiB,EACxE,OAAOA,EAAK,aAAa,MAAM,OAAO,EAAE,KAAK,UAAQ,EACrD,OAAOA,EAAK,aAAa,MAAM,uBAAuB,EAAE,KACtD,0BAAwB,IAC1B,EACA,OAAOD,CAAM,EAAE,KAAKD,CAAc,CACpC,CAAC,EAED,GAAG,iFAAkF,IAAM,CAEzF,MAAMA,EAAiB,CAAE,WAAY,CAAC,EAAG,OAAQ,KAAG,GAAG,CAAE,EACnDF,EAA0B,KAAG,GAAG,EAAE,gBAAgBE,CAAc,EAIhEC,EAHSJ,EAAWC,CAAuB,EAG3B,WAAW,CAC/B,eAAgBL,EAChB,cAAe,GACf,YAAa,EACf,CAAC,EAGKS,EAAOJ,EAAwB,KAAK,MAAM,CAAC,EAAG,CAAC,EACrD,OAAOI,EAAK,YAAY,EAAE,eAAe,8BAA4B,EACrE,OAAOA,EAAK,aAAa,MAAM,OAAO,EAAE,eAAe,mBAAiB,EACxE,OAAOA,EAAK,aAAa,MAAM,uBAAuB,EAAE,KACtD,0BAAwB,aAC1B,EACA,OAAOD,CAAM,EAAE,KAAKD,CAAc,CACpC,CAAC,EAED,GAAG,uEAAwE,IAAM,CAE/E,MAAMF,EAA0B,KAAG,GAAG,EAAE,gBAAgB,CAAC,CAAC,EAC3CD,EAAWC,CAAuB,EAG1C,WAAW,CAChB,eAAgBL,EAChB,cAAe,GACf,YAAa,EACf,CAAC,EAGD,MAAMS,EAAOJ,EAAwB,KAAK,MAAM,CAAC,EAAG,CAAC,EACrD,OAAOI,EAAK,aAAa,MAAM,uBAAuB,EAAE,KACtD,0BAAwB,IAC1B,CACF,CAAC,EAED,GAAG,mFAAoF,IAAM,CAE3F,MAAMF,EAAiB,CAAE,WAAY,CAAC,EAAG,OAAQ,KAAG,GAAG,CAAE,EACnDF,EAA0B,KAAG,GAAG,EAAE,gBAAgBE,CAAc,EAIhEC,EAHSJ,EAAWC,CAAuB,EAG3B,gBAAgB,CACpC,eAAgBL,EAChB,YAAa,IAAI,WAAW,CAAC,EAAM,CAAI,CAAC,CAC1C,CAAC,EAGKS,EAAOJ,EAAwB,KAAK,MAAM,CAAC,EAAG,CAAC,EACrD,OAAOI,EAAK,YAAY,EAAE,eAAe,2BAAyB,EAClE,OAAOA,EAAK,aAAa,MAAM,OAAO,EAAE,KAAK,UAAQ,EACrD,OAAOA,EAAK,aAAa,MAAM,uBAAuB,EAAE,KACtD,0BAAwB,eAC1B,EACA,OAAOA,EAAK,aAAa,MAAM,WAAW,EAAE,KAAK,EAAK,EACtD,OAAOD,CAAM,EAAE,KAAKD,CAAc,CACpC,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_vitest", "import_GetAddressCommand", "import_GetVersionCommand", "import_constants", "import_IcpAppBinder", "DERIVATION_PATH", "loggerMock", "loggerFactoryMock", "sessionId", "makeBinder", "executeDeviceActionMock", "dmkMock", "expectedResult", "result", "args"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var f=(t,e)=>{for(var r in e)c(t,r,{get:e[r],enumerable:!0})},I=(t,e,r,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of x(e))!E.call(t,o)&&o!==r&&c(t,o,{get:()=>e[o],enumerable:!(d=y(e,o))||d.enumerable});return t};var P=t=>I(c({},"__esModule",{value:!0}),t);var _={};f(_,{GetAddressCommand:()=>R,P1_CHECK_ON_DEVICE:()=>g,P1_NO_CHECK_ON_DEVICE:()=>h,icpGetAddressApduHeader:()=>C});module.exports=P(_);var n=require("@ledgerhq/device-management-kit"),s=require("@ledgerhq/signer-utils"),u=require("purify-ts"),a=require("../../app-binder/command/utils/IcpApplicationErrors"),A=require("./utils/EncodeDerivationPath");const C=t=>({cla:17,ins:1,p1:t,p2:0}),g=1,h=0,l=5,G=65;class R{name="GetAddress";args;errorHelper=new s.CommandErrorHelper(a.ICP_APP_ERRORS,a.IcpAppCommandErrorFactory);constructor(e){this.args=e}getApdu(){const e=new n.ApduBuilder(C(this.args.checkOnDevice?g:h)),r=s.DerivationPathUtils.splitPath(this.args.derivationPath);if(r.length!==l)throw new Error(`GetAddressCommand: expected ${l} path elements, got ${r.length}`);const d=(0,A.encodeDerivationPath)(r);return e.addBufferToData(d),e.build()}parseResponse(e){return u.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const r=new n.ApduParser(e),d=r.extractFieldByLength(G),o=r.extract8BitUInt(),p=o!==void 0?r.extractFieldByLength(o):void 0,m=r.extract8BitUInt(),i=m!==void 0?r.extractFieldByLength(m):void 0;return d===void 0||p===void 0||p.length===0||i===void 0||i.length===0?(0,n.CommandResultFactory)({error:new n.InvalidStatusWordError("Cannot extract address")}):(0,n.CommandResultFactory)({data:{publicKey:r.encodeToHexaString(d),accountId:r.encodeToHexaString(p),principal:r.encodeToString(i)}})})}}0&&(module.exports={GetAddressCommand,P1_CHECK_ON_DEVICE,P1_NO_CHECK_ON_DEVICE,icpGetAddressApduHeader});
2
+ //# sourceMappingURL=GetAddressCommand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/GetAddressCommand.ts"],
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type Address } from \"@api/model/Address\";\nimport {\n ICP_APP_ERRORS,\n IcpAppCommandErrorFactory,\n type IcpErrorCodes,\n} from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\nimport { encodeDerivationPath } from \"./utils/EncodeDerivationPath\";\n\nexport type GetAddressCommandArgs = {\n readonly derivationPath: string;\n readonly checkOnDevice: boolean;\n readonly skipOpenApp: boolean;\n};\n\nexport type GetAddressCommandResponse = Address;\n\nexport const icpGetAddressApduHeader = (p1: number) => ({\n cla: 0x11,\n ins: 0x01,\n p1,\n p2: 0x00,\n});\n\nexport const P1_CHECK_ON_DEVICE = 0x01;\nexport const P1_NO_CHECK_ON_DEVICE = 0x00;\nconst DERIVATION_PATH_LENGTH = 5;\nconst PUBLIC_KEY_LENGTH = 65;\n\nexport class GetAddressCommand\n implements\n Command<GetAddressCommandResponse, GetAddressCommandArgs, IcpErrorCodes>\n{\n readonly name = \"GetAddress\";\n\n private readonly args: GetAddressCommandArgs;\n\n private readonly errorHelper = new CommandErrorHelper<\n GetAddressCommandResponse,\n IcpErrorCodes\n >(ICP_APP_ERRORS, IcpAppCommandErrorFactory);\n\n constructor(args: GetAddressCommandArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const apduBuilder = new ApduBuilder(\n icpGetAddressApduHeader(\n this.args.checkOnDevice ? P1_CHECK_ON_DEVICE : P1_NO_CHECK_ON_DEVICE,\n ),\n );\n\n const derivationPath = DerivationPathUtils.splitPath(\n this.args.derivationPath,\n );\n\n if (derivationPath.length !== DERIVATION_PATH_LENGTH) {\n throw new Error(\n `GetAddressCommand: expected ${DERIVATION_PATH_LENGTH} path elements, got ${derivationPath.length}`,\n );\n }\n\n const encodedDerivationPath = encodeDerivationPath(derivationPath);\n apduBuilder.addBufferToData(encodedDerivationPath);\n\n return apduBuilder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetAddressCommandResponse, IcpErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const apduParser = new ApduParser(apduResponse);\n\n const publicKey = apduParser.extractFieldByLength(PUBLIC_KEY_LENGTH);\n const accountIdLength = apduParser.extract8BitUInt();\n const accountId =\n accountIdLength !== undefined\n ? apduParser.extractFieldByLength(accountIdLength)\n : undefined;\n const principalLength = apduParser.extract8BitUInt();\n const principal =\n principalLength !== undefined\n ? apduParser.extractFieldByLength(principalLength)\n : undefined;\n\n if (\n publicKey === undefined ||\n accountId === undefined ||\n accountId.length === 0 ||\n principal === undefined ||\n principal.length === 0\n ) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Cannot extract address\"),\n });\n }\n\n return CommandResultFactory({\n data: {\n publicKey: apduParser.encodeToHexaString(publicKey),\n accountId: apduParser.encodeToHexaString(accountId),\n principal: apduParser.encodeToString(principal),\n },\n });\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,uBAAAC,EAAA,0BAAAC,EAAA,4BAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EASO,2CACPC,EAGO,kCACPC,EAAsB,qBAGtBC,EAIO,mEAEPC,EAAqC,wCAU9B,MAAMN,EAA2BO,IAAgB,CACtD,IAAK,GACL,IAAK,EACL,GAAAA,EACA,GAAI,CACN,GAEaT,EAAqB,EACrBC,EAAwB,EAC/BS,EAAyB,EACzBC,EAAoB,GAEnB,MAAMZ,CAGb,CACW,KAAO,aAEC,KAEA,YAAc,IAAI,qBAGjC,iBAAgB,2BAAyB,EAE3C,YAAYa,EAA6B,CACvC,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAc,IAAI,cACtBX,EACE,KAAK,KAAK,cAAgBF,EAAqBC,CACjD,CACF,EAEMa,EAAiB,sBAAoB,UACzC,KAAK,KAAK,cACZ,EAEA,GAAIA,EAAe,SAAWJ,EAC5B,MAAM,IAAI,MACR,+BAA+BA,CAAsB,uBAAuBI,EAAe,MAAM,EACnG,EAGF,MAAMC,KAAwB,wBAAqBD,CAAc,EACjE,OAAAD,EAAY,gBAAgBE,CAAqB,EAE1CF,EAAY,MAAM,CAC3B,CAEA,cACEG,EACyD,CACzD,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAa,IAAI,aAAWD,CAAY,EAExCE,EAAYD,EAAW,qBAAqBN,CAAiB,EAC7DQ,EAAkBF,EAAW,gBAAgB,EAC7CG,EACJD,IAAoB,OAChBF,EAAW,qBAAqBE,CAAe,EAC/C,OACAE,EAAkBJ,EAAW,gBAAgB,EAC7CK,EACJD,IAAoB,OAChBJ,EAAW,qBAAqBI,CAAe,EAC/C,OAEN,OACEH,IAAc,QACdE,IAAc,QACdA,EAAU,SAAW,GACrBE,IAAc,QACdA,EAAU,SAAW,KAEd,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,wBAAwB,CAC5D,CAAC,KAGI,wBAAqB,CAC1B,KAAM,CACJ,UAAWL,EAAW,mBAAmBC,CAAS,EAClD,UAAWD,EAAW,mBAAmBG,CAAS,EAClD,UAAWH,EAAW,eAAeK,CAAS,CAChD,CACF,CAAC,CACH,CAAC,CACH,CACF",
6
+ "names": ["GetAddressCommand_exports", "__export", "GetAddressCommand", "P1_CHECK_ON_DEVICE", "P1_NO_CHECK_ON_DEVICE", "icpGetAddressApduHeader", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_IcpApplicationErrors", "import_EncodeDerivationPath", "p1", "DERIVATION_PATH_LENGTH", "PUBLIC_KEY_LENGTH", "args", "apduBuilder", "derivationPath", "encodedDerivationPath", "apduResponse", "apduParser", "publicKey", "accountIdLength", "accountId", "principalLength", "principal"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=require("@ledgerhq/device-management-kit"),p=require("../../app-binder/command/__test-utils__/expectStatusWordError"),c=require("../../app-binder/command/__test-utils__/pathToBuffer"),r=require("../../app-binder/command/GetAddressCommand"),l=require("../../app-binder/command/utils/IcpApplicationErrors");const o="44'/223'/0'/0/0",d=(t,e,n)=>{const s=new Uint8Array(t.length+1+e.length+1+n.length);let i=0;return s.set(t,i),i+=t.length,s[i++]=e.length,s.set(e,i),i+=e.length,s[i++]=n.length,s.set(n,i),s};describe("GetAddressCommand",()=>{describe("getApdu",()=>{it("should build APDU with CLA=0x11, INS=0x01, P1=no-check when checkOnDevice is false",()=>{const t=new r.GetAddressCommand({derivationPath:o,checkOnDevice:!1,skipOpenApp:!1}),e=new a.ApduBuilder((0,r.icpGetAddressApduHeader)(r.P1_NO_CHECK_ON_DEVICE)).addBufferToData((0,c.pathToBuffer)(o)).build(),n=t.getApdu();expect(n.getRawApdu()).toStrictEqual(e.getRawApdu())}),it("should set P1 to check-on-device when checkOnDevice is true",()=>{const t=new r.GetAddressCommand({derivationPath:o,checkOnDevice:!0,skipOpenApp:!1}),e=new a.ApduBuilder((0,r.icpGetAddressApduHeader)(r.P1_CHECK_ON_DEVICE)).addBufferToData((0,c.pathToBuffer)(o)).build(),n=t.getApdu();expect(n.getRawApdu()).toStrictEqual(e.getRawApdu())}),it("should throw when path does not have 5 elements",()=>{const t=new r.GetAddressCommand({derivationPath:"44'/223'/0'",checkOnDevice:!1,skipOpenApp:!1});expect(()=>t.getApdu()).toThrow("GetAddressCommand: expected 5 path elements, got 3")})}),describe("parseResponse",()=>{const t=(e,n=new Uint8Array([144,0]))=>new r.GetAddressCommand({derivationPath:o,checkOnDevice:!1,skipOpenApp:!1}).parseResponse(new a.ApduResponse({statusCode:n,data:e}));it("should extract publicKey, accountId and principal on success",()=>{const e=t(d(new Uint8Array(65).fill(2),new Uint8Array(32).fill(10),new TextEncoder().encode("2vxsx-fae")));expect((0,a.isSuccessCommandResult)(e)).toBe(!0),(0,a.isSuccessCommandResult)(e)&&(expect(e.data.publicKey).toBe("02".repeat(65)),expect(e.data.accountId).toBe("0a".repeat(32)),expect(e.data.principal).toBe("2vxsx-fae"))}),it.each([{field:"account identifier",accountId:new Uint8Array(0),principal:new TextEncoder().encode("2vxsx-fae")},{field:"principal",accountId:new Uint8Array(32).fill(10),principal:new Uint8Array(0)}])("should reject a response with a zero-length $field",({accountId:e,principal:n})=>{const s=t(d(new Uint8Array(65).fill(2),e,n));expect((0,a.isSuccessCommandResult)(s)).toBe(!1)}),it("should return an error when the principal length is missing",()=>{const e=new Uint8Array(98);e.set(new Uint8Array(65).fill(2),0),e[65]=32,e.set(new Uint8Array(32).fill(10),66);const n=t(e);expect((0,a.isSuccessCommandResult)(n)).toBe(!1)}),it("should return IcpAppCommandError when status word signals an error",()=>{const e=t(new Uint8Array(0),new Uint8Array([105,130]));(0,p.expectStatusWordError)(e,l.IcpErrorCodes.EMPTY_BUFFER)})})});
2
+ //# sourceMappingURL=GetAddressCommand.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/GetAddressCommand.test.ts"],
4
+ "sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { expectStatusWordError } from \"@internal/app-binder/command/__test-utils__/expectStatusWordError\";\nimport { pathToBuffer } from \"@internal/app-binder/command/__test-utils__/pathToBuffer\";\nimport {\n GetAddressCommand,\n icpGetAddressApduHeader,\n P1_CHECK_ON_DEVICE,\n P1_NO_CHECK_ON_DEVICE,\n} from \"@internal/app-binder/command/GetAddressCommand\";\nimport { IcpErrorCodes } from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\nconst DERIVATION_PATH = \"44'/223'/0'/0/0\";\n\nconst buildAddressResponseData = (\n publicKey: Uint8Array,\n accountId: Uint8Array,\n principal: Uint8Array,\n): Uint8Array => {\n const data = new Uint8Array(\n publicKey.length + 1 + accountId.length + 1 + principal.length,\n );\n let offset = 0;\n data.set(publicKey, offset);\n offset += publicKey.length;\n data[offset++] = accountId.length;\n data.set(accountId, offset);\n offset += accountId.length;\n data[offset++] = principal.length;\n data.set(principal, offset);\n return data;\n};\n\ndescribe(\"GetAddressCommand\", () => {\n describe(\"getApdu\", () => {\n it(\"should build APDU with CLA=0x11, INS=0x01, P1=no-check when checkOnDevice is false\", () => {\n // ARRANGE\n const command = new GetAddressCommand({\n derivationPath: DERIVATION_PATH,\n checkOnDevice: false,\n skipOpenApp: false,\n });\n const expected = new ApduBuilder(\n icpGetAddressApduHeader(P1_NO_CHECK_ON_DEVICE),\n )\n .addBufferToData(pathToBuffer(DERIVATION_PATH))\n .build();\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.getRawApdu());\n });\n\n it(\"should set P1 to check-on-device when checkOnDevice is true\", () => {\n // ARRANGE\n const command = new GetAddressCommand({\n derivationPath: DERIVATION_PATH,\n checkOnDevice: true,\n skipOpenApp: false,\n });\n const expected = new ApduBuilder(\n icpGetAddressApduHeader(P1_CHECK_ON_DEVICE),\n )\n .addBufferToData(pathToBuffer(DERIVATION_PATH))\n .build();\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.getRawApdu());\n });\n\n it(\"should throw when path does not have 5 elements\", () => {\n // ARRANGE\n const command = new GetAddressCommand({\n derivationPath: \"44'/223'/0'\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"GetAddressCommand: expected 5 path elements, got 3\",\n );\n });\n });\n\n describe(\"parseResponse\", () => {\n const parse = (\n data: Uint8Array,\n statusCode = new Uint8Array([0x90, 0x00]),\n ) =>\n new GetAddressCommand({\n derivationPath: DERIVATION_PATH,\n checkOnDevice: false,\n skipOpenApp: false,\n }).parseResponse(new ApduResponse({ statusCode, data }));\n\n it(\"should extract publicKey, accountId and principal on success\", () => {\n // ACT\n const result = parse(\n buildAddressResponseData(\n new Uint8Array(65).fill(0x02),\n new Uint8Array(32).fill(0x0a),\n new TextEncoder().encode(\"2vxsx-fae\"),\n ),\n );\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data.publicKey).toBe(\"02\".repeat(65));\n expect(result.data.accountId).toBe(\"0a\".repeat(32));\n expect(result.data.principal).toBe(\"2vxsx-fae\");\n }\n });\n\n it.each([\n {\n field: \"account identifier\",\n accountId: new Uint8Array(0),\n principal: new TextEncoder().encode(\"2vxsx-fae\"),\n },\n {\n field: \"principal\",\n accountId: new Uint8Array(32).fill(0x0a),\n principal: new Uint8Array(0),\n },\n ])(\n \"should reject a response with a zero-length $field\",\n ({ accountId, principal }) => {\n // ACT\n const result = parse(\n buildAddressResponseData(\n new Uint8Array(65).fill(0x02),\n accountId,\n principal,\n ),\n );\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n },\n );\n\n it(\"should return an error when the principal length is missing\", () => {\n // ARRANGE \u2014 public key + account id present, principal length byte absent\n const truncated = new Uint8Array(65 + 1 + 32);\n truncated.set(new Uint8Array(65).fill(0x02), 0);\n truncated[65] = 32;\n truncated.set(new Uint8Array(32).fill(0x0a), 66);\n // ACT\n const result = parse(truncated);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return IcpAppCommandError when status word signals an error\", () => {\n // ACT\n const result = parse(new Uint8Array(0), new Uint8Array([0x69, 0x82]));\n // ASSERT\n expectStatusWordError(result, IcpErrorCodes.EMPTY_BUFFER);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_expectStatusWordError", "import_pathToBuffer", "import_GetAddressCommand", "import_IcpApplicationErrors", "DERIVATION_PATH", "buildAddressResponseData", "publicKey", "accountId", "principal", "data", "offset", "command", "expected", "apdu", "parse", "statusCode", "result", "truncated"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var p=Object.defineProperty;var C=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var x=Object.prototype.hasOwnProperty;var y=(t,e)=>{for(var r in e)p(t,r,{get:e[r],enumerable:!0})},I=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of f(e))!x.call(t,n)&&n!==r&&p(t,n,{get:()=>e[n],enumerable:!(s=C(e,n))||s.enumerable});return t};var R=t=>I(p({},"__esModule",{value:!0}),t);var V={};y(V,{GetVersionCommand:()=>E,icpGetVersionApduHeader:()=>l});module.exports=R(V);var o=require("@ledgerhq/device-management-kit"),c=require("@ledgerhq/signer-utils"),u=require("purify-ts"),d=require("../../app-binder/command/utils/IcpApplicationErrors");const A=255,l={cla:17,ins:0,p1:0,p2:0};class E{name="GetVersion";errorHelper=new c.CommandErrorHelper(d.ICP_APP_ERRORS,d.IcpAppCommandErrorFactory);getApdu(){return new o.ApduBuilder(l).build()}parseResponse(e){return u.Maybe.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const r=new o.ApduParser(e),s=r.extract8BitUInt(),n=r.extract8BitUInt(),a=r.extract8BitUInt(),m=r.extract8BitUInt(),i=r.extract8BitUInt();return s===void 0||n===void 0||a===void 0||m===void 0||i===void 0?(0,o.CommandResultFactory)({error:new o.InvalidStatusWordError("Cannot extract version")}):(0,o.CommandResultFactory)({data:{version:`${n}.${a}.${m}`,testMode:s===A,locked:i!==0}})})}}0&&(module.exports={GetVersionCommand,icpGetVersionApduHeader});
2
+ //# sourceMappingURL=GetVersionCommand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/GetVersionCommand.ts"],
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type Version } from \"@api/model/Version\";\nimport {\n ICP_APP_ERRORS,\n IcpAppCommandErrorFactory,\n type IcpErrorCodes,\n} from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\nexport type GetVersionCommandResponse = Version;\n\nconst TEST_MODE_FLAG = 0xff;\n\nexport const icpGetVersionApduHeader = {\n cla: 0x11,\n ins: 0x00,\n p1: 0x00,\n p2: 0x00,\n};\n\nexport class GetVersionCommand\n implements Command<GetVersionCommandResponse, void, IcpErrorCodes>\n{\n readonly name = \"GetVersion\";\n\n private readonly errorHelper = new CommandErrorHelper<\n GetVersionCommandResponse,\n IcpErrorCodes\n >(ICP_APP_ERRORS, IcpAppCommandErrorFactory);\n\n getApdu(): Apdu {\n return new ApduBuilder(icpGetVersionApduHeader).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetVersionCommandResponse, IcpErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const apduParser = new ApduParser(apduResponse);\n const test = apduParser.extract8BitUInt();\n const major = apduParser.extract8BitUInt();\n const minor = apduParser.extract8BitUInt();\n const patch = apduParser.extract8BitUInt();\n const locked = apduParser.extract8BitUInt();\n\n if (\n test === undefined ||\n major === undefined ||\n minor === undefined ||\n patch === undefined ||\n locked === undefined\n ) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Cannot extract version\"),\n });\n }\n\n return CommandResultFactory({\n data: {\n version: `${major}.${minor}.${patch}`,\n testMode: test === TEST_MODE_FLAG,\n locked: locked !== 0,\n },\n });\n });\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,uBAAAE,EAAA,4BAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAGtBC,EAIO,mEAIP,MAAMC,EAAiB,IAEVN,EAA0B,CACrC,IAAK,GACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,EAEO,MAAMD,CAEb,CACW,KAAO,aAEC,YAAc,IAAI,qBAGjC,iBAAgB,2BAAyB,EAE3C,SAAgB,CACd,OAAO,IAAI,cAAYC,CAAuB,EAAE,MAAM,CACxD,CAEA,cACEO,EACyD,CACzD,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAa,IAAI,aAAWD,CAAY,EACxCE,EAAOD,EAAW,gBAAgB,EAClCE,EAAQF,EAAW,gBAAgB,EACnCG,EAAQH,EAAW,gBAAgB,EACnCI,EAAQJ,EAAW,gBAAgB,EACnCK,EAASL,EAAW,gBAAgB,EAE1C,OACEC,IAAS,QACTC,IAAU,QACVC,IAAU,QACVC,IAAU,QACVC,IAAW,UAEJ,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,wBAAwB,CAC5D,CAAC,KAGI,wBAAqB,CAC1B,KAAM,CACJ,QAAS,GAAGH,CAAK,IAAIC,CAAK,IAAIC,CAAK,GACnC,SAAUH,IAASH,EACnB,OAAQO,IAAW,CACrB,CACF,CAAC,CACH,CAAC,CACH,CACF",
6
+ "names": ["GetVersionCommand_exports", "__export", "GetVersionCommand", "icpGetVersionApduHeader", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_IcpApplicationErrors", "TEST_MODE_FLAG", "apduResponse", "apduParser", "test", "major", "minor", "patch", "locked"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),a=require("../../app-binder/command/__test-utils__/expectStatusWordError"),o=require("../../app-binder/command/GetVersionCommand"),d=require("../../app-binder/command/utils/IcpApplicationErrors");describe("GetVersionCommand",()=>{let s;beforeEach(()=>{s=new o.GetVersionCommand}),describe("name",()=>{it("should be 'GetVersion'",()=>{expect(s.name).toBe("GetVersion")})}),describe("getApdu",()=>{it("should return APDU with CLA=0x11, INS=0x00, P1=0x00, P2=0x00 and no data",()=>{const r=new e.ApduBuilder(o.icpGetVersionApduHeader).build(),t=s.getApdu();expect(t.getRawApdu()).toStrictEqual(r.getRawApdu())})}),describe("parseResponse",()=>{it("should return version, testMode and locked on success",()=>{const r=new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([0,1,2,3,0])}),t=s.parseResponse(r);expect(t).toStrictEqual((0,e.CommandResultFactory)({data:{version:"1.2.3",testMode:!1,locked:!1}})),expect((0,e.isSuccessCommandResult)(t)).toBe(!0)}),it("should report testMode true when TEST byte is 0xFF",()=>{const r=new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([255,1,2,3,0])}),t=s.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!0),(0,e.isSuccessCommandResult)(t)&&expect(t.data.testMode).toBe(!0)}),it("should report locked true when LOCKED byte is non-zero",()=>{const r=new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([0,1,2,3,1])}),t=s.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!0),(0,e.isSuccessCommandResult)(t)&&expect(t.data.locked).toBe(!0)}),it("should return IcpAppCommandError with error code 0x6984 when status is 0x6984",()=>{const r=new e.ApduResponse({statusCode:new Uint8Array([105,132]),data:new Uint8Array([0,1,2,3,0])}),t=s.parseResponse(r);(0,a.expectStatusWordError)(t,d.IcpErrorCodes.DATA_INVALID)}),it("should return InvalidStatusWordError when version bytes are missing",()=>{const r=new e.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([0,1])}),t=s.parseResponse(r);if(expect((0,e.isSuccessCommandResult)(t)).toBe(!1),!(0,e.isSuccessCommandResult)(t)){const n=t.error;expect(n).toBeInstanceOf(e.InvalidStatusWordError),expect(n.originalError.message).toBe("Cannot extract version")}})})});
2
+ //# sourceMappingURL=GetVersionCommand.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/GetVersionCommand.test.ts"],
4
+ "sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { expectStatusWordError } from \"@internal/app-binder/command/__test-utils__/expectStatusWordError\";\nimport {\n GetVersionCommand,\n icpGetVersionApduHeader,\n} from \"@internal/app-binder/command/GetVersionCommand\";\nimport { IcpErrorCodes } from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\ndescribe(\"GetVersionCommand\", () => {\n let command: GetVersionCommand;\n\n beforeEach(() => {\n command = new GetVersionCommand();\n });\n\n describe(\"name\", () => {\n it(\"should be 'GetVersion'\", () => {\n // ASSERT\n expect(command.name).toBe(\"GetVersion\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return APDU with CLA=0x11, INS=0x00, P1=0x00, P2=0x00 and no data\", () => {\n // ARRANGE\n const expected = new ApduBuilder(icpGetVersionApduHeader).build();\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.getRawApdu());\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return version, testMode and locked on success\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([0x00, 0x01, 0x02, 0x03, 0x00]), // TEST, major=1, minor=2, patch=3, LOCKED=0\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: { version: \"1.2.3\", testMode: false, locked: false },\n }),\n );\n expect(isSuccessCommandResult(result)).toBe(true);\n });\n\n it(\"should report testMode true when TEST byte is 0xFF\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([0xff, 0x01, 0x02, 0x03, 0x00]),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data.testMode).toBe(true);\n }\n });\n\n it(\"should report locked true when LOCKED byte is non-zero\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([0x00, 0x01, 0x02, 0x03, 0x01]),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data.locked).toBe(true);\n }\n });\n\n it(\"should return IcpAppCommandError with error code 0x6984 when status is 0x6984\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x69, 0x84]),\n data: new Uint8Array([0x00, 0x01, 0x02, 0x03, 0x00]),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expectStatusWordError(result, IcpErrorCodes.DATA_INVALID);\n });\n\n it(\"should return InvalidStatusWordError when version bytes are missing\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([0x00, 0x01]), // only TEST + major\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as InvalidStatusWordError;\n expect(err).toBeInstanceOf(InvalidStatusWordError);\n expect((err.originalError as { message: string }).message).toBe(\n \"Cannot extract version\",\n );\n }\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAMO,2CAEPC,EAAsC,6EACtCC,EAGO,0DACPC,EAA8B,mEAE9B,SAAS,oBAAqB,IAAM,CAClC,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,mBAChB,CAAC,EAED,SAAS,OAAQ,IAAM,CACrB,GAAG,yBAA0B,IAAM,CAEjC,OAAOA,EAAQ,IAAI,EAAE,KAAK,YAAY,CACxC,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,2EAA4E,IAAM,CAEnF,MAAMC,EAAW,IAAI,cAAY,yBAAuB,EAAE,MAAM,EAE1DC,EAAOF,EAAQ,QAAQ,EAE7B,OAAOE,EAAK,WAAW,CAAC,EAAE,cAAcD,EAAS,WAAW,CAAC,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,wDAAyD,IAAM,CAEhE,MAAME,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CACrD,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,EAE7C,OAAOC,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,CAAE,QAAS,QAAS,SAAU,GAAO,OAAQ,EAAM,CAC3D,CAAC,CACH,EACA,UAAO,0BAAuBA,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,EAED,GAAG,qDAAsD,IAAM,CAE7D,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,IAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CACrD,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,EAE7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,GAC/B,OAAOA,EAAO,KAAK,QAAQ,EAAE,KAAK,EAAI,CAE1C,CAAC,EAED,GAAG,yDAA0D,IAAM,CAEjE,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CACrD,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,EAE7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,GAC/B,OAAOA,EAAO,KAAK,MAAM,EAAE,KAAK,EAAI,CAExC,CAAC,EAED,GAAG,gFAAiF,IAAM,CAExF,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,GAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CACrD,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,KAE7C,yBAAsBC,EAAQ,gBAAc,YAAY,CAC1D,CAAC,EAED,GAAG,sEAAuE,IAAM,CAE9E,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,EACvC,KAAM,IAAI,WAAW,CAAC,EAAM,CAAI,CAAC,CACnC,CAAC,EAEKC,EAASJ,EAAQ,cAAcG,CAAQ,EAG7C,GADA,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,IAAC,0BAAuBA,CAAM,EAAG,CACnC,MAAMC,EAAMD,EAAO,MACnB,OAAOC,CAAG,EAAE,eAAe,wBAAsB,EACjD,OAAQA,EAAI,cAAsC,OAAO,EAAE,KACzD,wBACF,CACF,CACF,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_expectStatusWordError", "import_GetVersionCommand", "import_IcpApplicationErrors", "command", "expected", "apdu", "response", "result", "err"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var E=(e,n)=>{for(var r in n)c(e,r,{get:n[r],enumerable:!0})},I=(e,n,r,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let i of x(n))!y.call(e,i)&&i!==r&&c(e,i,{get:()=>n[i],enumerable:!(a=f(n,i))||a.enumerable});return e};var R=e=>I(c({},"__esModule",{value:!0}),e);var B={};E(B,{P1_ADD:()=>l,P1_INIT:()=>g,P1_LAST:()=>T,P2_NO_STAKE:()=>C,SignPhase:()=>S,SignTransactionCommand:()=>_,icpSignTransactionApduHeader:()=>A});module.exports=R(B);var t=require("@ledgerhq/device-management-kit"),s=require("@ledgerhq/signer-utils"),o=require("purify-ts"),h=require("../../app-binder/command/utils/EncodeDerivationPath"),d=require("../../app-binder/command/utils/IcpApplicationErrors");const g=0,l=1,T=2,C=0,m=5,P=32,v=32,N=1;var S=(a=>(a.INIT="init",a.ADD="add",a.LAST="last",a))(S||{});const A=e=>({cla:17,ins:2,p1:e,p2:C});class _{name="SignTransaction";args;apduBuilder;errorHelper=new s.CommandErrorHelper(d.ICP_APP_ERRORS,d.IcpAppCommandErrorFactory);constructor(n){this.args=n,this.apduBuilder=new t.ApduBuilder(A(this.p1()))}getApdu(){return this.isFirstChunk()?this.firstChunk():this.nextChunk()}parseResponse(n){return o.Maybe.fromNullable(this.errorHelper.getError(n)).orDefaultLazy(()=>{const r=new t.ApduParser(n);if(r.getUnparsedRemainingLength()===0)return(0,t.CommandResultFactory)({data:o.Nothing});const a=r.extractFieldByLength(P),i=r.extractFieldByLength(v),p=r.extractFieldByLength(N),u=r.extractFieldByLength(r.getUnparsedRemainingLength());return a===void 0||i===void 0||p===void 0||p[0]===void 0||u===void 0||u.length===0?(0,t.CommandResultFactory)({error:new t.InvalidStatusWordError("Signature is malformed")}):(0,t.CommandResultFactory)({data:(0,o.Just)({r:r.encodeToHexaString(a),s:r.encodeToHexaString(i),v:p[0],der:r.encodeToHexaString(u)})})})}p1(){switch(this.args.phase){case"init":return g;case"add":return l;case"last":return T}}isFirstChunk(){return this.args.phase==="init"}firstChunk(){const{derivationPath:n}=this.args;if(!n)throw new Error("SignTransactionCommand: derivation path is required for 'init' phase.");const r=s.DerivationPathUtils.splitPath(n);if(r.length!==m)throw new Error(`SignTransactionCommand: expected ${m} path elements, got ${r.length}`);return this.apduBuilder.addBufferToData((0,h.encodeDerivationPath)(r)),this.apduBuilder.build()}nextChunk(){if(!this.args.transactionChunk)throw new Error("SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.");return this.apduBuilder.addBufferToData(this.args.transactionChunk),this.apduBuilder.build()}}0&&(module.exports={P1_ADD,P1_INIT,P1_LAST,P2_NO_STAKE,SignPhase,SignTransactionCommand,icpSignTransactionApduHeader});
2
+ //# sourceMappingURL=SignTransactionCommand.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.ts"],
4
+ "sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n CommandErrorHelper,\n DerivationPathUtils,\n} from \"@ledgerhq/signer-utils\";\nimport { Just, Maybe, Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport { encodeDerivationPath } from \"@internal/app-binder/command/utils/EncodeDerivationPath\";\nimport {\n ICP_APP_ERRORS,\n IcpAppCommandErrorFactory,\n type IcpErrorCodes,\n} from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\nexport const P1_INIT = 0x00;\nexport const P1_ADD = 0x01;\nexport const P1_LAST = 0x02;\n// P2 carries the neuron-stake flag; plain transfers always use 0.\nexport const P2_NO_STAKE = 0x00;\n\nconst DERIVATION_PATH_LENGTH = 5;\nconst SIGNATURE_R_LENGTH = 32;\nconst SIGNATURE_S_LENGTH = 32;\nconst SIGNATURE_V_LENGTH = 1;\n\nexport enum SignPhase {\n INIT = \"init\",\n ADD = \"add\",\n LAST = \"last\",\n}\n\nexport const icpSignTransactionApduHeader = (p1: number) => ({\n cla: 0x11,\n ins: 0x02,\n p1,\n p2: P2_NO_STAKE,\n});\n\nexport type SignTransactionCommandArgs = {\n phase: SignPhase;\n derivationPath?: string;\n transactionChunk?: Uint8Array;\n};\n\nexport type SignTransactionCommandResponse = Maybe<Signature>;\n\nexport class SignTransactionCommand\n implements\n Command<\n SignTransactionCommandResponse,\n SignTransactionCommandArgs,\n IcpErrorCodes\n >\n{\n readonly name = \"SignTransaction\";\n\n private readonly args: SignTransactionCommandArgs;\n\n private readonly apduBuilder: ApduBuilder;\n\n private readonly errorHelper = new CommandErrorHelper<\n SignTransactionCommandResponse,\n IcpErrorCodes\n >(ICP_APP_ERRORS, IcpAppCommandErrorFactory);\n\n constructor(args: SignTransactionCommandArgs) {\n this.args = args;\n this.apduBuilder = new ApduBuilder(icpSignTransactionApduHeader(this.p1()));\n }\n\n public getApdu(): Apdu {\n return this.isFirstChunk() ? this.firstChunk() : this.nextChunk();\n }\n\n public parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<SignTransactionCommandResponse, IcpErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const apduParser = new ApduParser(apduResponse);\n\n // Only the last chunk carries the signature; INIT/ADD reply 0x9000 empty.\n // Empty \u21D2 not-yet (Nothing); non-empty-but-incomplete \u21D2 malformed.\n if (apduParser.getUnparsedRemainingLength() === 0) {\n return CommandResultFactory({ data: Nothing });\n }\n\n const r = apduParser.extractFieldByLength(SIGNATURE_R_LENGTH);\n const s = apduParser.extractFieldByLength(SIGNATURE_S_LENGTH);\n const v = apduParser.extractFieldByLength(SIGNATURE_V_LENGTH);\n const der = apduParser.extractFieldByLength(\n apduParser.getUnparsedRemainingLength(),\n );\n\n if (\n r === undefined ||\n s === undefined ||\n v === undefined ||\n v[0] === undefined ||\n der === undefined ||\n der.length === 0\n ) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature is malformed\"),\n });\n }\n\n return CommandResultFactory({\n data: Just({\n r: apduParser.encodeToHexaString(r),\n s: apduParser.encodeToHexaString(s),\n v: v[0],\n der: apduParser.encodeToHexaString(der),\n }),\n });\n });\n }\n\n private p1(): number {\n switch (this.args.phase) {\n case SignPhase.INIT:\n return P1_INIT;\n case SignPhase.ADD:\n return P1_ADD;\n case SignPhase.LAST:\n return P1_LAST;\n }\n }\n\n private isFirstChunk(): boolean {\n return this.args.phase === SignPhase.INIT;\n }\n\n private firstChunk(): Apdu {\n const { derivationPath } = this.args;\n\n if (!derivationPath) {\n throw new Error(\n \"SignTransactionCommand: derivation path is required for 'init' phase.\",\n );\n }\n\n const paths = DerivationPathUtils.splitPath(derivationPath);\n\n if (paths.length !== DERIVATION_PATH_LENGTH) {\n throw new Error(\n `SignTransactionCommand: expected ${DERIVATION_PATH_LENGTH} path elements, got ${paths.length}`,\n );\n }\n\n this.apduBuilder.addBufferToData(encodeDerivationPath(paths));\n return this.apduBuilder.build();\n }\n\n private nextChunk(): Apdu {\n if (!this.args.transactionChunk) {\n throw new Error(\n \"SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.\",\n );\n }\n\n this.apduBuilder.addBufferToData(this.args.transactionChunk);\n return this.apduBuilder.build();\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,EAAA,YAAAC,EAAA,YAAAC,EAAA,gBAAAC,EAAA,cAAAC,EAAA,2BAAAC,EAAA,iCAAAC,IAAA,eAAAC,EAAAT,GAAA,IAAAU,EASO,2CACPC,EAGO,kCACPC,EAAqC,qBAGrCC,EAAqC,mEACrCC,EAIO,mEAEA,MAAMX,EAAU,EACVD,EAAS,EACTE,EAAU,EAEVC,EAAc,EAErBU,EAAyB,EACzBC,EAAqB,GACrBC,EAAqB,GACrBC,EAAqB,EAEpB,IAAKZ,OACVA,EAAA,KAAO,OACPA,EAAA,IAAM,MACNA,EAAA,KAAO,OAHGA,OAAA,IAML,MAAME,EAAgCW,IAAgB,CAC3D,IAAK,GACL,IAAK,EACL,GAAAA,EACA,GAAId,CACN,GAUO,MAAME,CAOb,CACW,KAAO,kBAEC,KAEA,YAEA,YAAc,IAAI,qBAGjC,iBAAgB,2BAAyB,EAE3C,YAAYa,EAAkC,CAC5C,KAAK,KAAOA,EACZ,KAAK,YAAc,IAAI,cAAYZ,EAA6B,KAAK,GAAG,CAAC,CAAC,CAC5E,CAEO,SAAgB,CACrB,OAAO,KAAK,aAAa,EAAI,KAAK,WAAW,EAAI,KAAK,UAAU,CAClE,CAEO,cACLa,EAC8D,CAC9D,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAa,IAAI,aAAWD,CAAY,EAI9C,GAAIC,EAAW,2BAA2B,IAAM,EAC9C,SAAO,wBAAqB,CAAE,KAAM,SAAQ,CAAC,EAG/C,MAAMC,EAAID,EAAW,qBAAqBN,CAAkB,EACtDQ,EAAIF,EAAW,qBAAqBL,CAAkB,EACtDQ,EAAIH,EAAW,qBAAqBJ,CAAkB,EACtDQ,EAAMJ,EAAW,qBACrBA,EAAW,2BAA2B,CACxC,EAEA,OACEC,IAAM,QACNC,IAAM,QACNC,IAAM,QACNA,EAAE,CAAC,IAAM,QACTC,IAAQ,QACRA,EAAI,SAAW,KAER,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,wBAAwB,CAC5D,CAAC,KAGI,wBAAqB,CAC1B,QAAM,QAAK,CACT,EAAGJ,EAAW,mBAAmBC,CAAC,EAClC,EAAGD,EAAW,mBAAmBE,CAAC,EAClC,EAAGC,EAAE,CAAC,EACN,IAAKH,EAAW,mBAAmBI,CAAG,CACxC,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAEQ,IAAa,CACnB,OAAQ,KAAK,KAAK,MAAO,CACvB,IAAK,OACH,OAAOvB,EACT,IAAK,MACH,OAAOD,EACT,IAAK,OACH,OAAOE,CACX,CACF,CAEQ,cAAwB,CAC9B,OAAO,KAAK,KAAK,QAAU,MAC7B,CAEQ,YAAmB,CACzB,KAAM,CAAE,eAAAuB,CAAe,EAAI,KAAK,KAEhC,GAAI,CAACA,EACH,MAAM,IAAI,MACR,uEACF,EAGF,MAAMC,EAAQ,sBAAoB,UAAUD,CAAc,EAE1D,GAAIC,EAAM,SAAWb,EACnB,MAAM,IAAI,MACR,oCAAoCA,CAAsB,uBAAuBa,EAAM,MAAM,EAC/F,EAGF,YAAK,YAAY,mBAAgB,wBAAqBA,CAAK,CAAC,EACrD,KAAK,YAAY,MAAM,CAChC,CAEQ,WAAkB,CACxB,GAAI,CAAC,KAAK,KAAK,iBACb,MAAM,IAAI,MACR,oFACF,EAGF,YAAK,YAAY,gBAAgB,KAAK,KAAK,gBAAgB,EACpD,KAAK,YAAY,MAAM,CAChC,CACF",
6
+ "names": ["SignTransactionCommand_exports", "__export", "P1_ADD", "P1_INIT", "P1_LAST", "P2_NO_STAKE", "SignPhase", "SignTransactionCommand", "icpSignTransactionApduHeader", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_EncodeDerivationPath", "import_IcpApplicationErrors", "DERIVATION_PATH_LENGTH", "SIGNATURE_R_LENGTH", "SIGNATURE_S_LENGTH", "SIGNATURE_V_LENGTH", "p1", "args", "apduResponse", "apduParser", "r", "s", "v", "der", "derivationPath", "paths"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=require("@ledgerhq/device-management-kit"),p=require("../../app-binder/command/__test-utils__/expectStatusWordError"),u=require("../../app-binder/command/__test-utils__/pathToBuffer"),n=require("../../app-binder/command/SignTransactionCommand"),h=require("../../app-binder/command/utils/IcpApplicationErrors");const d="44'/223'/0'/0/0";describe("SignTransactionCommand",()=>{describe("name",()=>{it("should be 'SignTransaction'",()=>{const e=new n.SignTransactionCommand({phase:n.SignPhase.INIT,derivationPath:d});expect(e.name).toBe("SignTransaction")})}),describe("getApdu",()=>{it("should return the derivation-path packet (P1=INIT, P2=0) when phase is INIT",()=>{const e=new n.SignTransactionCommand({phase:n.SignPhase.INIT,derivationPath:d}),s=new a.ApduBuilder((0,n.icpSignTransactionApduHeader)(n.P1_INIT)).addBufferToData((0,u.pathToBuffer)(d)).build(),t=e.getApdu();expect(t.getRawApdu()).toStrictEqual(s.getRawApdu())}),it("should return an add packet (P1=ADD) carrying the chunk when phase is ADD",()=>{const e=new Uint8Array([222,173,190,239]),s=new n.SignTransactionCommand({phase:n.SignPhase.ADD,transactionChunk:e}),t=new a.ApduBuilder((0,n.icpSignTransactionApduHeader)(n.P1_ADD)).addBufferToData(e).build(),r=s.getApdu();expect(r.getRawApdu()).toStrictEqual(t.getRawApdu())}),it("should return a last packet (P1=LAST) carrying the chunk when phase is LAST",()=>{const e=new Uint8Array([1,2,3]),s=new n.SignTransactionCommand({phase:n.SignPhase.LAST,transactionChunk:e}),t=new a.ApduBuilder((0,n.icpSignTransactionApduHeader)(n.P1_LAST)).addBufferToData(e).build(),r=s.getApdu();expect(r.getRawApdu()).toStrictEqual(t.getRawApdu())}),it("should throw when phase is INIT and derivationPath is missing",()=>{const e=new n.SignTransactionCommand({phase:n.SignPhase.INIT});expect(()=>e.getApdu()).toThrow("SignTransactionCommand: derivation path is required for 'init' phase.")}),it("should throw when phase is INIT and path does not have 5 elements",()=>{const e=new n.SignTransactionCommand({phase:n.SignPhase.INIT,derivationPath:"44'/223'/0'"});expect(()=>e.getApdu()).toThrow("SignTransactionCommand: expected 5 path elements, got 3")}),it("should throw when phase is ADD and transactionChunk is missing",()=>{const e=new n.SignTransactionCommand({phase:n.SignPhase.ADD});expect(()=>e.getApdu()).toThrow("SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.")}),it("should throw when phase is LAST and transactionChunk is missing",()=>{const e=new n.SignTransactionCommand({phase:n.SignPhase.LAST});expect(()=>e.getApdu()).toThrow("SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.")})}),describe("parseResponse",()=>{it("should split the last-chunk response into r, s, v and DER signature",()=>{const e=new Uint8Array(32).fill(170),s=new Uint8Array(32).fill(187),t=new Uint8Array([1]),r=new Uint8Array([48,6,2,1,1,2,1,1]),o=new Uint8Array([...e,...s,...t,...r]),i=new a.ApduResponse({statusCode:new Uint8Array([144,0]),data:o}),c=new n.SignTransactionCommand({phase:n.SignPhase.LAST,transactionChunk:new Uint8Array(1)}).parseResponse(i);if(expect((0,a.isSuccessCommandResult)(c)).toBe(!0),(0,a.isSuccessCommandResult)(c)){const m=c.data.extract();expect(m).toEqual({r:"aa".repeat(32),s:"bb".repeat(32),v:1,der:"3006020101020101"})}}),it("should return Nothing for an empty intermediate-chunk response",()=>{const e=new a.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array(0)}),t=new n.SignTransactionCommand({phase:n.SignPhase.ADD,transactionChunk:new Uint8Array(1)}).parseResponse(e);expect((0,a.isSuccessCommandResult)(t)).toBe(!0),(0,a.isSuccessCommandResult)(t)&&expect(t.data.isNothing()).toBe(!0)}),it("should reject a response that carries r, s and v but no DER signature",()=>{const e=new Uint8Array(32).fill(170),s=new Uint8Array(32).fill(187),t=new Uint8Array([1]),r=new a.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([...e,...s,...t])}),i=new n.SignTransactionCommand({phase:n.SignPhase.LAST,transactionChunk:new Uint8Array(1)}).parseResponse(r);expect((0,a.isSuccessCommandResult)(i)).toBe(!1)}),it("should reject a non-empty response too short to hold r (truncated, not empty)",()=>{const e=new a.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array(20).fill(170)}),t=new n.SignTransactionCommand({phase:n.SignPhase.LAST,transactionChunk:new Uint8Array(1)}).parseResponse(e);expect((0,a.isSuccessCommandResult)(t)).toBe(!1)}),it("should reject a response that has r but truncates before v/DER",()=>{const e=new Uint8Array(32).fill(170),s=new Uint8Array(32).fill(187),t=new a.ApduResponse({statusCode:new Uint8Array([144,0]),data:new Uint8Array([...e,...s])}),o=new n.SignTransactionCommand({phase:n.SignPhase.LAST,transactionChunk:new Uint8Array(1)}).parseResponse(t);expect((0,a.isSuccessCommandResult)(o)).toBe(!1)}),it("should return IcpAppCommandError when status word signals an error",()=>{const e=new a.ApduResponse({statusCode:new Uint8Array([105,132]),data:new Uint8Array(0)}),t=new n.SignTransactionCommand({phase:n.SignPhase.LAST,transactionChunk:new Uint8Array(1)}).parseResponse(e);(0,p.expectStatusWordError)(t,h.IcpErrorCodes.DATA_INVALID)})})});
2
+ //# sourceMappingURL=SignTransactionCommand.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/command/SignTransactionCommand.test.ts"],
4
+ "sourcesContent": ["import {\n ApduBuilder,\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { expectStatusWordError } from \"@internal/app-binder/command/__test-utils__/expectStatusWordError\";\nimport { pathToBuffer } from \"@internal/app-binder/command/__test-utils__/pathToBuffer\";\nimport {\n icpSignTransactionApduHeader,\n P1_ADD,\n P1_INIT,\n P1_LAST,\n SignPhase,\n SignTransactionCommand,\n} from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { IcpErrorCodes } from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\nconst DERIVATION_PATH = \"44'/223'/0'/0/0\";\n\ndescribe(\"SignTransactionCommand\", () => {\n describe(\"name\", () => {\n it(\"should be 'SignTransaction'\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath: DERIVATION_PATH,\n });\n // ASSERT\n expect(command.name).toBe(\"SignTransaction\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the derivation-path packet (P1=INIT, P2=0) when phase is INIT\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath: DERIVATION_PATH,\n });\n const expected = new ApduBuilder(icpSignTransactionApduHeader(P1_INIT))\n .addBufferToData(pathToBuffer(DERIVATION_PATH))\n .build();\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.getRawApdu());\n });\n\n it(\"should return an add packet (P1=ADD) carrying the chunk when phase is ADD\", () => {\n // ARRANGE\n const chunk = new Uint8Array([0xde, 0xad, 0xbe, 0xef]);\n const command = new SignTransactionCommand({\n phase: SignPhase.ADD,\n transactionChunk: chunk,\n });\n const expected = new ApduBuilder(icpSignTransactionApduHeader(P1_ADD))\n .addBufferToData(chunk)\n .build();\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.getRawApdu());\n });\n\n it(\"should return a last packet (P1=LAST) carrying the chunk when phase is LAST\", () => {\n // ARRANGE\n const chunk = new Uint8Array([0x01, 0x02, 0x03]);\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: chunk,\n });\n const expected = new ApduBuilder(icpSignTransactionApduHeader(P1_LAST))\n .addBufferToData(chunk)\n .build();\n // ACT\n const apdu = command.getApdu();\n // ASSERT\n expect(apdu.getRawApdu()).toStrictEqual(expected.getRawApdu());\n });\n\n it(\"should throw when phase is INIT and derivationPath is missing\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({ phase: SignPhase.INIT });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: derivation path is required for 'init' phase.\",\n );\n });\n\n it(\"should throw when phase is INIT and path does not have 5 elements\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath: \"44'/223'/0'\",\n });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: expected 5 path elements, got 3\",\n );\n });\n\n it(\"should throw when phase is ADD and transactionChunk is missing\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({ phase: SignPhase.ADD });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.\",\n );\n });\n\n it(\"should throw when phase is LAST and transactionChunk is missing\", () => {\n // ARRANGE\n const command = new SignTransactionCommand({ phase: SignPhase.LAST });\n // ACT & ASSERT\n expect(() => command.getApdu()).toThrow(\n \"SignTransactionCommand: transaction chunk is required for 'add' and 'last' phases.\",\n );\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should split the last-chunk response into r, s, v and DER signature\", () => {\n // ARRANGE\n const r = new Uint8Array(32).fill(0xaa);\n const s = new Uint8Array(32).fill(0xbb);\n const v = new Uint8Array([0x01]);\n const der = new Uint8Array([\n 0x30, 0x06, 0x02, 0x01, 0x01, 0x02, 0x01, 0x01,\n ]);\n const data = new Uint8Array([...r, ...s, ...v, ...der]);\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data,\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n const signature = result.data.extract();\n expect(signature).toEqual({\n r: \"aa\".repeat(32),\n s: \"bb\".repeat(32),\n v: 1,\n der: \"3006020101020101\",\n });\n }\n });\n\n it(\"should return Nothing for an empty intermediate-chunk response\", () => {\n // ARRANGE \u2014 INIT and ADD chunks reply 0x9000 with no data\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array(0),\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.ADD,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT \u2014 success, but carries no signature yet (must not abort signing)\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data.isNothing()).toBe(true);\n }\n });\n\n it(\"should reject a response that carries r, s and v but no DER signature\", () => {\n // ARRANGE\n const r = new Uint8Array(32).fill(0xaa);\n const s = new Uint8Array(32).fill(0xbb);\n const v = new Uint8Array([0x01]);\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([...r, ...s, ...v]), // 65 bytes, DER missing\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should reject a non-empty response too short to hold r (truncated, not empty)\", () => {\n // ARRANGE \u2014 20 bytes: non-empty but fewer than the 32-byte r; must be\n // treated as malformed, not as an empty intermediate reply.\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array(20).fill(0xaa),\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should reject a response that has r but truncates before v/DER\", () => {\n // ARRANGE \u2014 64 bytes: r and s present, v and DER missing\n const r = new Uint8Array(32).fill(0xaa);\n const s = new Uint8Array(32).fill(0xbb);\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: new Uint8Array([...r, ...s]),\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return IcpAppCommandError when status word signals an error\", () => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x69, 0x84]),\n data: new Uint8Array(0),\n });\n const command = new SignTransactionCommand({\n phase: SignPhase.LAST,\n transactionChunk: new Uint8Array(1),\n });\n // ACT\n const result = command.parseResponse(response);\n // ASSERT\n expectStatusWordError(result, IcpErrorCodes.DATA_INVALID);\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_expectStatusWordError", "import_pathToBuffer", "import_SignTransactionCommand", "import_IcpApplicationErrors", "DERIVATION_PATH", "command", "expected", "apdu", "chunk", "r", "v", "der", "data", "response", "result", "signature"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var t=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var n=Object.prototype.hasOwnProperty;var C=(r,o)=>{for(var e in o)t(r,e,{get:o[e],enumerable:!0})},E=(r,o,e,m)=>{if(o&&typeof o=="object"||typeof o=="function")for(let p of a(o))!n.call(r,p)&&p!==e&&t(r,p,{get:()=>o[p],enumerable:!(m=d(o,p))||m.enumerable});return r};var I=r=>E(t({},"__esModule",{value:!0}),r);var i={};C(i,{expectStatusWordError:()=>f});module.exports=I(i);var c=require("@ledgerhq/device-management-kit"),s=require("../../../app-binder/command/utils/IcpApplicationErrors");const f=(r,o)=>{if(expect((0,c.isSuccessCommandResult)(r)).toBe(!1),!(0,c.isSuccessCommandResult)(r)){const e=r.error;expect(e).toBeInstanceOf(s.IcpAppCommandError),expect(e.errorCode).toBe(o)}};0&&(module.exports={expectStatusWordError});
2
+ //# sourceMappingURL=expectStatusWordError.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/command/__test-utils__/expectStatusWordError.ts"],
4
+ "sourcesContent": ["import {\n type CommandResult,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport {\n IcpAppCommandError,\n type IcpErrorCodes,\n} from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\n// Asserts a parseResponse result failed with the given ICP status-word error.\n// Shared by the command tests so the unwrap boilerplate lives in one place.\nexport const expectStatusWordError = <T>(\n result: CommandResult<T, IcpErrorCodes>,\n expected: IcpErrorCodes,\n): void => {\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as IcpAppCommandError;\n expect(err).toBeInstanceOf(IcpAppCommandError);\n expect(err.errorCode).toBe(expected);\n }\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,2BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAGO,2CAEPC,EAGO,mEAIA,MAAMH,EAAwB,CACnCI,EACAC,IACS,CAET,GADA,UAAO,0BAAuBD,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,IAAC,0BAAuBA,CAAM,EAAG,CACnC,MAAME,EAAMF,EAAO,MACnB,OAAOE,CAAG,EAAE,eAAe,oBAAkB,EAC7C,OAAOA,EAAI,SAAS,EAAE,KAAKD,CAAQ,CACrC,CACF",
6
+ "names": ["expectStatusWordError_exports", "__export", "expectStatusWordError", "__toCommonJS", "import_device_management_kit", "import_IcpApplicationErrors", "result", "expected", "err"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var w=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var h=(r,t)=>{for(var f in t)a(r,f,{get:t[f],enumerable:!0})},p=(r,t,f,e)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of w(t))!c.call(r,n)&&n!==f&&a(r,n,{get:()=>t[n],enumerable:!(e=s(t,n))||e.enumerable});return r};var u=r=>p(a({},"__esModule",{value:!0}),r);var U={};h(U,{pathToBuffer:()=>l});module.exports=u(U);var i=require("@ledgerhq/signer-utils");const l=r=>{const t=i.DerivationPathUtils.splitPath(r),f=new DataView(new ArrayBuffer(20));for(let e=0;e<t.length;e++){const n=t[e]&2147483647,o=e<3?(2147483648|n)>>>0:n>>>0;f.setUint32(e*4,o,!0)}return new Uint8Array(f.buffer)};0&&(module.exports={pathToBuffer});
2
+ //# sourceMappingURL=pathToBuffer.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/command/__test-utils__/pathToBuffer.ts"],
4
+ "sourcesContent": ["import { DerivationPathUtils } from \"@ledgerhq/signer-utils\";\n\n// Independent oracle kept separate from the production encoder, so command\n// tests assert the APDU path against a hand-rolled reference, not the code under test.\nexport const pathToBuffer = (derivationPath: string): Uint8Array => {\n const parts = DerivationPathUtils.splitPath(derivationPath);\n const view = new DataView(new ArrayBuffer(20));\n for (let i = 0; i < parts.length; i++) {\n const raw = parts[i]! & 0x7fffffff;\n const hardened = i < 3 ? (0x80000000 | raw) >>> 0 : raw >>> 0;\n view.setUint32(i * 4, hardened, true);\n }\n return new Uint8Array(view.buffer);\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAoC,kCAI7B,MAAMF,EAAgBG,GAAuC,CAClE,MAAMC,EAAQ,sBAAoB,UAAUD,CAAc,EACpDE,EAAO,IAAI,SAAS,IAAI,YAAY,EAAE,CAAC,EAC7C,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAAK,CACrC,MAAMC,EAAMH,EAAME,CAAC,EAAK,WAClBE,EAAWF,EAAI,GAAK,WAAaC,KAAS,EAAIA,IAAQ,EAC5DF,EAAK,UAAUC,EAAI,EAAGE,EAAU,EAAI,CACtC,CACA,OAAO,IAAI,WAAWH,EAAK,MAAM,CACnC",
6
+ "names": ["pathToBuffer_exports", "__export", "pathToBuffer", "__toCommonJS", "import_signer_utils", "derivationPath", "parts", "view", "i", "raw", "hardened"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var o=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var T=Object.prototype.hasOwnProperty;var f=(e,t)=>{for(var n in t)o(e,n,{get:t[n],enumerable:!0})},H=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let E of D(t))!T.call(e,E)&&E!==n&&o(e,E,{get:()=>t[E],enumerable:!(r=A(t,E))||r.enumerable});return e};var N=e=>H(o({},"__esModule",{value:!0}),e);var a={};f(a,{encodeDerivationPath:()=>_});module.exports=N(a);const _=e=>{if(e.length!==5)throw new Error(`encodeDerivationPath: expected 5 path elements, got ${e.length}`);const t=new DataView(new ArrayBuffer(5*4));for(let n=0;n<e.length;n++){const r=e[n]&2147483647,E=n<3?(2147483648|r)>>>0:r>>>0;t.setUint32(n*4,E,!0)}return new Uint8Array(t.buffer)};0&&(module.exports={encodeDerivationPath});
2
+ //# sourceMappingURL=EncodeDerivationPath.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/command/utils/EncodeDerivationPath.ts"],
4
+ "sourcesContent": ["// ICP paths are fixed at 5 levels (m/44'/223'/account'/change/index); the\n// first three are hardened. Values are little-endian uint32.\nconst DERIVATION_PATH_LENGTH = 5;\nconst HARDENED_LEVELS = 3;\nconst HARDENED_OFFSET = 0x80000000;\n\nexport const encodeDerivationPath = (paths: number[]): Uint8Array => {\n if (paths.length !== DERIVATION_PATH_LENGTH) {\n throw new Error(\n `encodeDerivationPath: expected ${DERIVATION_PATH_LENGTH} path elements, got ${paths.length}`,\n );\n }\n const dataView = new DataView(new ArrayBuffer(DERIVATION_PATH_LENGTH * 4));\n for (let i = 0; i < paths.length; i++) {\n const raw = paths[i]! & 0x7fffffff;\n const hardened =\n i < HARDENED_LEVELS ? (HARDENED_OFFSET | raw) >>> 0 : raw >>> 0;\n dataView.setUint32(i * 4, hardened, true);\n }\n return new Uint8Array(dataView.buffer);\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,0BAAAE,IAAA,eAAAC,EAAAH,GAMO,MAAMI,EAAwBC,GAAgC,CACnE,GAAIA,EAAM,SAAW,EACnB,MAAM,IAAI,MACR,uDAA+EA,EAAM,MAAM,EAC7F,EAEF,MAAMC,EAAW,IAAI,SAAS,IAAI,YAAY,EAAyB,CAAC,CAAC,EACzE,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAAK,CACrC,MAAMC,EAAMH,EAAME,CAAC,EAAK,WAClBE,EACJF,EAAI,GAAmB,WAAkBC,KAAS,EAAIA,IAAQ,EAChEF,EAAS,UAAUC,EAAI,EAAGE,EAAU,EAAI,CAC1C,CACA,OAAO,IAAI,WAAWH,EAAS,MAAM,CACvC",
6
+ "names": ["EncodeDerivationPath_exports", "__export", "encodeDerivationPath", "__toCommonJS", "encodeDerivationPath", "paths", "dataView", "i", "raw", "hardened"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("vitest"),n=require("./EncodeDerivationPath");(0,e.describe)("encodeDerivationPath",()=>{(0,e.describe)("Given a 5-level derivation path",()=>{(0,e.describe)("When encoding a standard Internet Computer path (44'/223'/0'/0/0)",()=>{(0,e.it)("Then it should return a 20-byte buffer",()=>{const t=(0,n.encodeDerivationPath)([44,223,0,0,0]);(0,e.expect)(t).toBeInstanceOf(Uint8Array),(0,e.expect)(t.length).toBe(20)}),(0,e.it)("Then it should set hardened bit for the first three levels",()=>{const t=(0,n.encodeDerivationPath)([44,223,0,0,0]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(0,!0)).toBe(2147483692),(0,e.expect)(f.getUint32(4,!0)).toBe(2147483871),(0,e.expect)(f.getUint32(8,!0)).toBe(2147483648)}),(0,e.it)("Then it should not set hardened bit for the last two levels",()=>{const t=(0,n.encodeDerivationPath)([44,223,0,0,0]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(12,!0)).toBe(0),(0,e.expect)(f.getUint32(16,!0)).toBe(0)}),(0,e.it)("Then it should encode each level as little-endian uint32",()=>{const t=(0,n.encodeDerivationPath)([44,223,0,0,0]),f=new Uint8Array(20),o=new DataView(f.buffer);o.setUint32(0,-2147483604,!0),o.setUint32(4,-2147483425,!0),o.setUint32(8,-2147483648,!0),o.setUint32(12,0,!0),o.setUint32(16,0,!0),(0,e.expect)(t).toStrictEqual(f)})}),(0,e.describe)("When encoding a path with non-zero account and index",()=>{(0,e.it)("Then it should encode account and index without hardened bit",()=>{const t=(0,n.encodeDerivationPath)([44,223,0,1,2]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(12,!0)).toBe(1),(0,e.expect)(f.getUint32(16,!0)).toBe(2)})}),(0,e.describe)("When the path does not have exactly 5 levels",()=>{(0,e.it)("Then it should throw for a shorter path instead of zero-padding",()=>{(0,e.expect)(()=>(0,n.encodeDerivationPath)([44,223,0])).toThrow("encodeDerivationPath: expected 5 path elements, got 3")}),(0,e.it)("Then it should throw for a longer path",()=>{(0,e.expect)(()=>(0,n.encodeDerivationPath)([44,223,0,0,0,0])).toThrow("encodeDerivationPath: expected 5 path elements, got 6")})}),(0,e.describe)("When encoding path values with high bits set",()=>{(0,e.it)("Then it should mask each level to 31 bits before applying hardened bit",()=>{const t=(0,n.encodeDerivationPath)([4294967295,4294967295,4294967295,4294967295,4294967295]),f=new DataView(t.buffer,t.byteOffset,t.byteLength);(0,e.expect)(f.getUint32(0,!0)).toBe(-1>>>0),(0,e.expect)(f.getUint32(4,!0)).toBe(-1>>>0),(0,e.expect)(f.getUint32(8,!0)).toBe(-1>>>0),(0,e.expect)(f.getUint32(12,!0)).toBe(2147483647),(0,e.expect)(f.getUint32(16,!0)).toBe(2147483647)})})})});
2
+ //# sourceMappingURL=EncodeDerivationPath.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/command/utils/EncodeDerivationPath.test.ts"],
4
+ "sourcesContent": ["import { describe, expect, it } from \"vitest\";\n\nimport { encodeDerivationPath } from \"./EncodeDerivationPath\";\n\ndescribe(\"encodeDerivationPath\", () => {\n describe(\"Given a 5-level derivation path\", () => {\n describe(\"When encoding a standard Internet Computer path (44'/223'/0'/0/0)\", () => {\n it(\"Then it should return a 20-byte buffer\", () => {\n const result = encodeDerivationPath([44, 223, 0, 0, 0]);\n expect(result).toBeInstanceOf(Uint8Array);\n expect(result.length).toBe(20);\n });\n\n it(\"Then it should set hardened bit for the first three levels\", () => {\n const result = encodeDerivationPath([44, 223, 0, 0, 0]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n expect(dataView.getUint32(0, true)).toBe((0x80000000 | 44) >>> 0);\n expect(dataView.getUint32(4, true)).toBe((0x80000000 | 223) >>> 0);\n expect(dataView.getUint32(8, true)).toBe((0x80000000 | 0) >>> 0);\n });\n\n it(\"Then it should not set hardened bit for the last two levels\", () => {\n const result = encodeDerivationPath([44, 223, 0, 0, 0]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n expect(dataView.getUint32(12, true)).toBe(0);\n expect(dataView.getUint32(16, true)).toBe(0);\n });\n\n it(\"Then it should encode each level as little-endian uint32\", () => {\n const result = encodeDerivationPath([44, 223, 0, 0, 0]);\n const expected = new Uint8Array(20);\n const expectedView = new DataView(expected.buffer);\n expectedView.setUint32(0, 0x80000000 | 44, true);\n expectedView.setUint32(4, 0x80000000 | 223, true);\n expectedView.setUint32(8, 0x80000000 | 0, true);\n expectedView.setUint32(12, 0, true);\n expectedView.setUint32(16, 0, true);\n expect(result).toStrictEqual(expected);\n });\n });\n\n describe(\"When encoding a path with non-zero account and index\", () => {\n it(\"Then it should encode account and index without hardened bit\", () => {\n const result = encodeDerivationPath([44, 223, 0, 1, 2]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n expect(dataView.getUint32(12, true)).toBe(1);\n expect(dataView.getUint32(16, true)).toBe(2);\n });\n });\n\n describe(\"When the path does not have exactly 5 levels\", () => {\n it(\"Then it should throw for a shorter path instead of zero-padding\", () => {\n expect(() => encodeDerivationPath([44, 223, 0])).toThrow(\n \"encodeDerivationPath: expected 5 path elements, got 3\",\n );\n });\n\n it(\"Then it should throw for a longer path\", () => {\n expect(() => encodeDerivationPath([44, 223, 0, 0, 0, 0])).toThrow(\n \"encodeDerivationPath: expected 5 path elements, got 6\",\n );\n });\n });\n\n describe(\"When encoding path values with high bits set\", () => {\n it(\"Then it should mask each level to 31 bits before applying hardened bit\", () => {\n const result = encodeDerivationPath([\n 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff,\n ]);\n const dataView = new DataView(\n result.buffer,\n result.byteOffset,\n result.byteLength,\n );\n expect(dataView.getUint32(0, true)).toBe(\n (0x80000000 | 0x7fffffff) >>> 0,\n );\n expect(dataView.getUint32(4, true)).toBe(\n (0x80000000 | 0x7fffffff) >>> 0,\n );\n expect(dataView.getUint32(8, true)).toBe(\n (0x80000000 | 0x7fffffff) >>> 0,\n );\n expect(dataView.getUint32(12, true)).toBe(0x7fffffff >>> 0);\n expect(dataView.getUint32(16, true)).toBe(0x7fffffff >>> 0);\n });\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_vitest", "import_EncodeDerivationPath", "result", "dataView", "expected", "expectedView"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("./IcpApplicationErrors");describe("IcpAppCommandError",()=>{it('Should have a tag "IcpAppCommandError"',()=>{const r=new e.IcpAppCommandError({message:"Test error message",errorCode:e.IcpErrorCodes.EXECUTION_ERROR});expect(r._tag).toBe("IcpAppCommandError")}),it.each([{errorCode:e.IcpErrorCodes.EXECUTION_ERROR,message:"Execution Error"},{errorCode:e.IcpErrorCodes.WRONG_BUFFER_LENGTH,message:"Wrong buffer length"},{errorCode:e.IcpErrorCodes.EMPTY_BUFFER,message:"Empty buffer"},{errorCode:e.IcpErrorCodes.OUTPUT_BUFFER_TOO_SMALL,message:"Output buffer too small"},{errorCode:e.IcpErrorCodes.DATA_INVALID,message:"Data is invalid"},{errorCode:e.IcpErrorCodes.CONDITIONS_NOT_SATISFIED,message:"Conditions not satisfied"},{errorCode:e.IcpErrorCodes.COMMAND_NOT_ALLOWED,message:"Command not allowed"},{errorCode:e.IcpErrorCodes.TX_NOT_INITIALIZED,message:"Tx not initialized"},{errorCode:e.IcpErrorCodes.BAD_KEY_HANDLE,message:"Bad key handle"},{errorCode:e.IcpErrorCodes.P1_P2_INVALID,message:"P1 or P2 invalid"},{errorCode:e.IcpErrorCodes.INS_NOT_SUPPORTED,message:"INS not supported"},{errorCode:e.IcpErrorCodes.CLA_NOT_SUPPORTED,message:"CLA not supported"},{errorCode:e.IcpErrorCodes.UNKNOWN_ERROR,message:"Unknown error"},{errorCode:e.IcpErrorCodes.SIGN_VERIFY_ERROR,message:"Sign/verify error"},{errorCode:e.IcpErrorCodes.BUSY,message:"Busy"}])("Should have correct error code and message for %s",({errorCode:r,message:o})=>{const s=new e.IcpAppCommandError({errorCode:r,message:o});expect(s.errorCode).toBe(r),expect(s.message).toBe(o)})});
2
+ //# sourceMappingURL=IcpApplicationError.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/command/utils/IcpApplicationError.test.ts"],
4
+ "sourcesContent": ["import { IcpAppCommandError, IcpErrorCodes } from \"./IcpApplicationErrors\";\n\ndescribe(\"IcpAppCommandError\", () => {\n it('Should have a tag \"IcpAppCommandError\"', () => {\n const error = new IcpAppCommandError({\n message: \"Test error message\",\n errorCode: IcpErrorCodes.EXECUTION_ERROR,\n });\n expect(error._tag).toBe(\"IcpAppCommandError\");\n });\n\n it.each([\n { errorCode: IcpErrorCodes.EXECUTION_ERROR, message: \"Execution Error\" },\n {\n errorCode: IcpErrorCodes.WRONG_BUFFER_LENGTH,\n message: \"Wrong buffer length\",\n },\n { errorCode: IcpErrorCodes.EMPTY_BUFFER, message: \"Empty buffer\" },\n {\n errorCode: IcpErrorCodes.OUTPUT_BUFFER_TOO_SMALL,\n message: \"Output buffer too small\",\n },\n { errorCode: IcpErrorCodes.DATA_INVALID, message: \"Data is invalid\" },\n {\n errorCode: IcpErrorCodes.CONDITIONS_NOT_SATISFIED,\n message: \"Conditions not satisfied\",\n },\n {\n errorCode: IcpErrorCodes.COMMAND_NOT_ALLOWED,\n message: \"Command not allowed\",\n },\n {\n errorCode: IcpErrorCodes.TX_NOT_INITIALIZED,\n message: \"Tx not initialized\",\n },\n { errorCode: IcpErrorCodes.BAD_KEY_HANDLE, message: \"Bad key handle\" },\n { errorCode: IcpErrorCodes.P1_P2_INVALID, message: \"P1 or P2 invalid\" },\n {\n errorCode: IcpErrorCodes.INS_NOT_SUPPORTED,\n message: \"INS not supported\",\n },\n {\n errorCode: IcpErrorCodes.CLA_NOT_SUPPORTED,\n message: \"CLA not supported\",\n },\n { errorCode: IcpErrorCodes.UNKNOWN_ERROR, message: \"Unknown error\" },\n {\n errorCode: IcpErrorCodes.SIGN_VERIFY_ERROR,\n message: \"Sign/verify error\",\n },\n { errorCode: IcpErrorCodes.BUSY, message: \"Busy\" },\n ])(\n \"Should have correct error code and message for %s\",\n ({ errorCode, message }) => {\n const error = new IcpAppCommandError({\n errorCode: errorCode,\n message: message,\n });\n expect(error.errorCode).toBe(errorCode);\n expect(error.message).toBe(message);\n },\n );\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAAkD,kCAElD,SAAS,qBAAsB,IAAM,CACnC,GAAG,yCAA0C,IAAM,CACjD,MAAMC,EAAQ,IAAI,qBAAmB,CACnC,QAAS,qBACT,UAAW,gBAAc,eAC3B,CAAC,EACD,OAAOA,EAAM,IAAI,EAAE,KAAK,oBAAoB,CAC9C,CAAC,EAED,GAAG,KAAK,CACN,CAAE,UAAW,gBAAc,gBAAiB,QAAS,iBAAkB,EACvE,CACE,UAAW,gBAAc,oBACzB,QAAS,qBACX,EACA,CAAE,UAAW,gBAAc,aAAc,QAAS,cAAe,EACjE,CACE,UAAW,gBAAc,wBACzB,QAAS,yBACX,EACA,CAAE,UAAW,gBAAc,aAAc,QAAS,iBAAkB,EACpE,CACE,UAAW,gBAAc,yBACzB,QAAS,0BACX,EACA,CACE,UAAW,gBAAc,oBACzB,QAAS,qBACX,EACA,CACE,UAAW,gBAAc,mBACzB,QAAS,oBACX,EACA,CAAE,UAAW,gBAAc,eAAgB,QAAS,gBAAiB,EACrE,CAAE,UAAW,gBAAc,cAAe,QAAS,kBAAmB,EACtE,CACE,UAAW,gBAAc,kBACzB,QAAS,mBACX,EACA,CACE,UAAW,gBAAc,kBACzB,QAAS,mBACX,EACA,CAAE,UAAW,gBAAc,cAAe,QAAS,eAAgB,EACnE,CACE,UAAW,gBAAc,kBACzB,QAAS,mBACX,EACA,CAAE,UAAW,gBAAc,KAAM,QAAS,MAAO,CACnD,CAAC,EACC,oDACA,CAAC,CAAE,UAAAC,EAAW,QAAAC,CAAQ,IAAM,CAC1B,MAAMF,EAAQ,IAAI,qBAAmB,CACnC,UAAWC,EACX,QAASC,CACX,CAAC,EACD,OAAOF,EAAM,SAAS,EAAE,KAAKC,CAAS,EACtC,OAAOD,EAAM,OAAO,EAAE,KAAKE,CAAO,CACpC,CACF,CACF,CAAC",
6
+ "names": ["import_IcpApplicationErrors", "error", "errorCode", "message"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var t=Object.defineProperty;var O=Object.getOwnPropertyDescriptor;var E=Object.getOwnPropertyNames;var N=Object.prototype.hasOwnProperty;var A=(s,a)=>{for(var n in a)t(s,n,{get:a[n],enumerable:!0})},R=(s,a,n,_)=>{if(a&&typeof a=="object"||typeof a=="function")for(let m of E(a))!N.call(s,m)&&m!==n&&t(s,m,{get:()=>a[m],enumerable:!(_=O(a,m))||_.enumerable});return s};var T=s=>R(t({},"__esModule",{value:!0}),s);var f={};A(f,{ICP_APP_ERRORS:()=>i,IcpAppCommandError:()=>g,IcpAppCommandErrorFactory:()=>D,IcpErrorCodes:()=>r});module.exports=T(f);var o=require("@ledgerhq/device-management-kit"),r=(e=>(e.EXECUTION_ERROR="6400",e.WRONG_BUFFER_LENGTH="6700",e.EMPTY_BUFFER="6982",e.OUTPUT_BUFFER_TOO_SMALL="6983",e.DATA_INVALID="6984",e.CONDITIONS_NOT_SATISFIED="6985",e.COMMAND_NOT_ALLOWED="6986",e.TX_NOT_INITIALIZED="6987",e.BAD_KEY_HANDLE="6a80",e.P1_P2_INVALID="6b00",e.INS_NOT_SUPPORTED="6d00",e.CLA_NOT_SUPPORTED="6e00",e.UNKNOWN_ERROR="6f00",e.SIGN_VERIFY_ERROR="6f01",e.BUSY="9001",e))(r||{});const i={6400:{message:"Execution Error"},6700:{message:"Wrong buffer length"},6982:{message:"Empty buffer"},6983:{message:"Output buffer too small"},6984:{message:"Data is invalid"},6985:{message:"Conditions not satisfied"},6986:{message:"Command not allowed"},6987:{message:"Tx not initialized"},"6a80":{message:"Bad key handle"},"6b00":{message:"P1 or P2 invalid"},"6d00":{message:"INS not supported"},"6e00":{message:"CLA not supported"},"6f00":{message:"Unknown error"},"6f01":{message:"Sign/verify error"},9001:{message:"Busy"}};class g extends o.DeviceExchangeError{constructor(a){super({tag:"IcpAppCommandError",...a})}}const D=s=>new g(s);0&&(module.exports={ICP_APP_ERRORS,IcpAppCommandError,IcpAppCommandErrorFactory,IcpErrorCodes});
2
+ //# sourceMappingURL=IcpApplicationErrors.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../../src/internal/app-binder/command/utils/IcpApplicationErrors.ts"],
4
+ "sourcesContent": ["import {\n type CommandErrorArgs,\n type CommandErrors,\n DeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\n\n// Status words are matched against the value produced by\n// ApduParser.encodeToHexaString(statusCode): lower-case hex, no \"0x\" prefix.\nexport enum IcpErrorCodes {\n EXECUTION_ERROR = \"6400\",\n WRONG_BUFFER_LENGTH = \"6700\",\n EMPTY_BUFFER = \"6982\",\n OUTPUT_BUFFER_TOO_SMALL = \"6983\",\n DATA_INVALID = \"6984\",\n CONDITIONS_NOT_SATISFIED = \"6985\",\n COMMAND_NOT_ALLOWED = \"6986\",\n TX_NOT_INITIALIZED = \"6987\",\n BAD_KEY_HANDLE = \"6a80\",\n P1_P2_INVALID = \"6b00\",\n INS_NOT_SUPPORTED = \"6d00\",\n CLA_NOT_SUPPORTED = \"6e00\",\n UNKNOWN_ERROR = \"6f00\",\n SIGN_VERIFY_ERROR = \"6f01\",\n BUSY = \"9001\",\n}\n\nexport const ICP_APP_ERRORS: CommandErrors<IcpErrorCodes> = {\n \"6400\": { message: \"Execution Error\" },\n \"6700\": { message: \"Wrong buffer length\" },\n \"6982\": { message: \"Empty buffer\" },\n \"6983\": { message: \"Output buffer too small\" },\n \"6984\": { message: \"Data is invalid\" },\n \"6985\": { message: \"Conditions not satisfied\" },\n \"6986\": { message: \"Command not allowed\" },\n \"6987\": { message: \"Tx not initialized\" },\n \"6a80\": { message: \"Bad key handle\" },\n \"6b00\": { message: \"P1 or P2 invalid\" },\n \"6d00\": { message: \"INS not supported\" },\n \"6e00\": { message: \"CLA not supported\" },\n \"6f00\": { message: \"Unknown error\" },\n \"6f01\": { message: \"Sign/verify error\" },\n \"9001\": { message: \"Busy\" },\n};\n\nexport class IcpAppCommandError extends DeviceExchangeError<IcpErrorCodes> {\n constructor(args: CommandErrorArgs<IcpErrorCodes>) {\n super({ tag: \"IcpAppCommandError\", ...args });\n }\n}\n\nexport const IcpAppCommandErrorFactory = (\n args: CommandErrorArgs<IcpErrorCodes>,\n) => new IcpAppCommandError(args);\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,EAAA,uBAAAC,EAAA,8BAAAC,EAAA,kBAAAC,IAAA,eAAAC,EAAAN,GAAA,IAAAO,EAIO,2CAIKF,OACVA,EAAA,gBAAkB,OAClBA,EAAA,oBAAsB,OACtBA,EAAA,aAAe,OACfA,EAAA,wBAA0B,OAC1BA,EAAA,aAAe,OACfA,EAAA,yBAA2B,OAC3BA,EAAA,oBAAsB,OACtBA,EAAA,mBAAqB,OACrBA,EAAA,eAAiB,OACjBA,EAAA,cAAgB,OAChBA,EAAA,kBAAoB,OACpBA,EAAA,kBAAoB,OACpBA,EAAA,cAAgB,OAChBA,EAAA,kBAAoB,OACpBA,EAAA,KAAO,OAfGA,OAAA,IAkBL,MAAMH,EAA+C,CAC1D,KAAQ,CAAE,QAAS,iBAAkB,EACrC,KAAQ,CAAE,QAAS,qBAAsB,EACzC,KAAQ,CAAE,QAAS,cAAe,EAClC,KAAQ,CAAE,QAAS,yBAA0B,EAC7C,KAAQ,CAAE,QAAS,iBAAkB,EACrC,KAAQ,CAAE,QAAS,0BAA2B,EAC9C,KAAQ,CAAE,QAAS,qBAAsB,EACzC,KAAQ,CAAE,QAAS,oBAAqB,EACxC,OAAQ,CAAE,QAAS,gBAAiB,EACpC,OAAQ,CAAE,QAAS,kBAAmB,EACtC,OAAQ,CAAE,QAAS,mBAAoB,EACvC,OAAQ,CAAE,QAAS,mBAAoB,EACvC,OAAQ,CAAE,QAAS,eAAgB,EACnC,OAAQ,CAAE,QAAS,mBAAoB,EACvC,KAAQ,CAAE,QAAS,MAAO,CAC5B,EAEO,MAAMC,UAA2B,qBAAmC,CACzE,YAAYK,EAAuC,CACjD,MAAM,CAAE,IAAK,qBAAsB,GAAGA,CAAK,CAAC,CAC9C,CACF,CAEO,MAAMJ,EACXI,GACG,IAAIL,EAAmBK,CAAI",
6
+ "names": ["IcpApplicationErrors_exports", "__export", "ICP_APP_ERRORS", "IcpAppCommandError", "IcpAppCommandErrorFactory", "IcpErrorCodes", "__toCommonJS", "import_device_management_kit", "args"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var r=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var m=(e,t)=>{for(var o in t)r(e,o,{get:t[o],enumerable:!0})},s=(e,t,o,p)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of P(t))!c.call(e,n)&&n!==o&&r(e,n,{get:()=>t[n],enumerable:!(p=A(t,n))||p.enumerable});return e};var u=e=>s(r({},"__esModule",{value:!0}),e);var C={};m(C,{APP_NAME:()=>x});module.exports=u(C);const x="InternetComputer";0&&(module.exports={APP_NAME});
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/internal/app-binder/constants.ts"],
4
+ "sourcesContent": ["export const APP_NAME = \"InternetComputer\";\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,cAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAW",
6
+ "names": ["constants_exports", "__export", "APP_NAME", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var n=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var f=(p,o)=>{for(var i in o)n(p,i,{get:o[i],enumerable:!0})},g=(p,o,i,e)=>{if(o&&typeof o=="object"||typeof o=="function")for(let r of B(o))!c.call(p,r)&&r!==i&&n(p,r,{get:()=>o[r],enumerable:!(e=a(o,r))||e.enumerable});return p};var l=p=>g(n({},"__esModule",{value:!0}),p);var u={};f(u,{appBindingModuleFactory:()=>s});module.exports=l(u);var t=require("inversify"),d=require("../../app-binder/di/appBinderTypes"),m=require("../../app-binder/IcpAppBinder");const s=()=>new t.ContainerModule(({bind:p})=>{p(d.appBinderTypes.AppBinding).to(m.IcpAppBinder)});0&&(module.exports={appBindingModuleFactory});
2
+ //# sourceMappingURL=appBinderModule.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/di/appBinderModule.ts"],
4
+ "sourcesContent": ["import { ContainerModule } from \"inversify\";\n\nimport { appBinderTypes } from \"@internal/app-binder/di/appBinderTypes\";\nimport { IcpAppBinder } from \"@internal/app-binder/IcpAppBinder\";\n\nexport const appBindingModuleFactory = () =>\n new ContainerModule(({ bind }) => {\n bind(appBinderTypes.AppBinding).to(IcpAppBinder);\n });\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,6BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,qBAEhCC,EAA+B,kDAC/BC,EAA6B,6CAEtB,MAAMJ,EAA0B,IACrC,IAAI,kBAAgB,CAAC,CAAE,KAAAK,CAAK,IAAM,CAChCA,EAAK,iBAAe,UAAU,EAAE,GAAG,cAAY,CACjD,CAAC",
6
+ "names": ["appBinderModule_exports", "__export", "appBindingModuleFactory", "__toCommonJS", "import_inversify", "import_appBinderTypes", "import_IcpAppBinder", "bind"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("inversify"),n=require("./appBinderModule");describe("appBindingModuleFactory",()=>{it("should return the app-binder module",()=>{const o=(0,n.appBindingModuleFactory)();new e.Container().loadSync(o),expect(o).toBeDefined()})});
2
+ //# sourceMappingURL=appBinderModule.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/di/appBinderModule.test.ts"],
4
+ "sourcesContent": ["import { Container } from \"inversify\";\n\nimport { appBindingModuleFactory } from \"./appBinderModule\";\n\ndescribe(\"appBindingModuleFactory\", () => {\n it(\"should return the app-binder module\", () => {\n // ARRANGE\n const mod = appBindingModuleFactory();\n const container = new Container();\n // ACT\n container.loadSync(mod);\n // ASSERT\n expect(mod).toBeDefined();\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAA0B,qBAE1BC,EAAwC,6BAExC,SAAS,0BAA2B,IAAM,CACxC,GAAG,sCAAuC,IAAM,CAE9C,MAAMC,KAAM,2BAAwB,EAClB,IAAI,YAAU,EAEtB,SAASA,CAAG,EAEtB,OAAOA,CAAG,EAAE,YAAY,CAC1B,CAAC,CACH,CAAC",
6
+ "names": ["import_inversify", "import_appBinderModule", "mod"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var s=Object.defineProperty;var e=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var t=Object.prototype.hasOwnProperty;var B=(n,p)=>{for(var o in p)s(n,o,{get:p[o],enumerable:!0})},a=(n,p,o,d)=>{if(p&&typeof p=="object"||typeof p=="function")for(let i of r(p))!t.call(n,i)&&i!==o&&s(n,i,{get:()=>p[i],enumerable:!(d=e(p,i))||d.enumerable});return n};var c=n=>a(s({},"__esModule",{value:!0}),n);var y={};B(y,{appBinderTypes:()=>g});module.exports=c(y);const g={AppBinding:Symbol.for("AppBinding")};0&&(module.exports={appBinderTypes});
2
+ //# sourceMappingURL=appBinderTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/di/appBinderTypes.ts"],
4
+ "sourcesContent": ["export const appBinderTypes = {\n AppBinding: Symbol.for(\"AppBinding\"),\n} as const;\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,oBAAAE,IAAA,eAAAC,EAAAH,GAAO,MAAME,EAAiB,CAC5B,WAAY,OAAO,IAAI,YAAY,CACrC",
6
+ "names": ["appBinderTypes_exports", "__export", "appBinderTypes", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var u=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var S=(e,t)=>{for(var n in t)u(e,n,{get:t[n],enumerable:!0})},f=(e,t,n,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of m(t))!h.call(e,a)&&a!==n&&u(e,a,{get:()=>t[a],enumerable:!(s=p(t,a))||s.enumerable});return e};var y=e=>f(u({},"__esModule",{value:!0}),e);var T={};S(T,{SignTransactionTask:()=>C});module.exports=y(T);var r=require("@ledgerhq/device-management-kit"),c=require("purify-ts"),o=require("../../app-binder/command/SignTransactionCommand");class C{constructor(t,n,s){this.api=t;this.args=n;this.logger=s}async run(){const{derivationPath:t,transaction:n}=this.args;if(this.logger.debug("[run] Starting SignTransactionTask",{data:{derivationPath:t,transactionLength:n.length}}),n.length===0)return(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("Transaction is empty")});const s=await this.api.sendCommand(new o.SignTransactionCommand({phase:o.SignPhase.INIT,derivationPath:t}));if(!(0,r.isSuccessCommandResult)(s))return this.logger.debug("[run] Failed to initialize signing",{data:{error:s.error}}),s;let a=c.Nothing;for(let i=0;i<n.length;i+=r.APDU_MAX_PAYLOAD){const l=i+r.APDU_MAX_PAYLOAD>=n.length?o.SignPhase.LAST:o.SignPhase.ADD,d=n.slice(i,i+r.APDU_MAX_PAYLOAD),g=await this.api.sendCommand(new o.SignTransactionCommand({phase:l,transactionChunk:d}));if(!(0,r.isSuccessCommandResult)(g))return this.logger.debug("[run] Failed to sign transaction chunk",{data:{chunkOffset:i,error:g.error}}),g;a=g.data}return a.mapOrDefault(i=>(this.logger.debug("[run] Transaction signed successfully"),(0,r.CommandResultFactory)({data:i})),(0,r.CommandResultFactory)({error:new r.InvalidStatusWordError("No signature returned")}))}}0&&(module.exports={SignTransactionTask});
2
+ //# sourceMappingURL=SignTransactionTask.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/SignTransactionTask.ts"],
4
+ "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n type CommandResult,\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Maybe, Nothing } from \"purify-ts\";\n\nimport { type Signature } from \"@api/model/Signature\";\nimport {\n SignPhase,\n SignTransactionCommand,\n} from \"@internal/app-binder/command/SignTransactionCommand\";\nimport { type IcpErrorCodes } from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\n\ntype SignTransactionTaskArgs = {\n derivationPath: string;\n transaction: Uint8Array;\n};\n\nexport class SignTransactionTask {\n constructor(\n private api: InternalApi,\n private args: SignTransactionTaskArgs,\n private logger: LoggerPublisherService,\n ) {}\n\n async run(): Promise<CommandResult<Signature, IcpErrorCodes>> {\n const { derivationPath, transaction } = this.args;\n\n this.logger.debug(\"[run] Starting SignTransactionTask\", {\n data: {\n derivationPath,\n transactionLength: transaction.length,\n },\n });\n\n if (transaction.length === 0) {\n // An empty tx would send INIT with no chunk, leaving the app mid-signing.\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Transaction is empty\"),\n });\n }\n\n const initResult = await this.api.sendCommand(\n new SignTransactionCommand({\n phase: SignPhase.INIT,\n derivationPath,\n }),\n );\n\n if (!isSuccessCommandResult(initResult)) {\n this.logger.debug(\"[run] Failed to initialize signing\", {\n data: { error: initResult.error },\n });\n return initResult;\n }\n\n let signature: Maybe<Signature> = Nothing;\n for (\n let offset = 0;\n offset < transaction.length;\n offset += APDU_MAX_PAYLOAD\n ) {\n const isLastChunk = offset + APDU_MAX_PAYLOAD >= transaction.length;\n const phase = isLastChunk ? SignPhase.LAST : SignPhase.ADD;\n const transactionChunk = transaction.slice(\n offset,\n offset + APDU_MAX_PAYLOAD,\n );\n\n const result = await this.api.sendCommand(\n new SignTransactionCommand({ phase, transactionChunk }),\n );\n\n if (!isSuccessCommandResult(result)) {\n this.logger.debug(\"[run] Failed to sign transaction chunk\", {\n data: { chunkOffset: offset, error: result.error },\n });\n return result;\n }\n\n signature = result.data;\n }\n\n return signature.mapOrDefault(\n (data) => {\n this.logger.debug(\"[run] Transaction signed successfully\");\n return CommandResultFactory<Signature, IcpErrorCodes>({ data });\n },\n CommandResultFactory({\n error: new InvalidStatusWordError(\"No signature returned\"),\n }),\n );\n }\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAQO,2CACPC,EAAoC,qBAGpCC,EAGO,+DAQA,MAAMJ,CAAoB,CAC/B,YACUK,EACAC,EACAC,EACR,CAHQ,SAAAF,EACA,UAAAC,EACA,YAAAC,CACP,CAEH,MAAM,KAAwD,CAC5D,KAAM,CAAE,eAAAC,EAAgB,YAAAC,CAAY,EAAI,KAAK,KAS7C,GAPA,KAAK,OAAO,MAAM,qCAAsC,CACtD,KAAM,CACJ,eAAAD,EACA,kBAAmBC,EAAY,MACjC,CACF,CAAC,EAEGA,EAAY,SAAW,EAEzB,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,sBAAsB,CAC1D,CAAC,EAGH,MAAMC,EAAa,MAAM,KAAK,IAAI,YAChC,IAAI,yBAAuB,CACzB,MAAO,YAAU,KACjB,eAAAF,CACF,CAAC,CACH,EAEA,GAAI,IAAC,0BAAuBE,CAAU,EACpC,YAAK,OAAO,MAAM,qCAAsC,CACtD,KAAM,CAAE,MAAOA,EAAW,KAAM,CAClC,CAAC,EACMA,EAGT,IAAIC,EAA8B,UAClC,QACMC,EAAS,EACbA,EAASH,EAAY,OACrBG,GAAU,mBACV,CAEA,MAAMC,EADcD,EAAS,oBAAoBH,EAAY,OACjC,YAAU,KAAO,YAAU,IACjDK,EAAmBL,EAAY,MACnCG,EACAA,EAAS,kBACX,EAEMG,EAAS,MAAM,KAAK,IAAI,YAC5B,IAAI,yBAAuB,CAAE,MAAAF,EAAO,iBAAAC,CAAiB,CAAC,CACxD,EAEA,GAAI,IAAC,0BAAuBC,CAAM,EAChC,YAAK,OAAO,MAAM,yCAA0C,CAC1D,KAAM,CAAE,YAAaH,EAAQ,MAAOG,EAAO,KAAM,CACnD,CAAC,EACMA,EAGTJ,EAAYI,EAAO,IACrB,CAEA,OAAOJ,EAAU,aACdK,IACC,KAAK,OAAO,MAAM,uCAAuC,KAClD,wBAA+C,CAAE,KAAAA,CAAK,CAAC,MAEhE,wBAAqB,CACnB,MAAO,IAAI,yBAAuB,uBAAuB,CAC3D,CAAC,CACH,CACF,CACF",
6
+ "names": ["SignTransactionTask_exports", "__export", "SignTransactionTask", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_SignTransactionCommand", "api", "args", "logger", "derivationPath", "transaction", "initResult", "signature", "offset", "phase", "transactionChunk", "result", "data"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),h=require("purify-ts"),g=require("vitest"),s=require("../../app-binder/command/SignTransactionCommand"),c=require("../../app-binder/command/utils/IcpApplicationErrors"),l=require("../../app-binder/task/SignTransactionTask");const m="44'/223'/0'/0/0",w=20,v=5,A={r:"aa",s:"bb",v:1,der:"3006"},f=a=>{const n=a.getApdu().getRawApdu();return{cla:n[0],ins:n[1],p1:n[2],p2:n[3],payload:n.slice(v)}};describe("SignTransactionTask",()=>{let a,n,i;beforeEach(()=>{a=g.vi.fn(),n={sendCommand:a},i={debug:g.vi.fn()}}),describe("run",()=>{it("should send INIT(path) then ADD/LAST chunks, all with P2=no-stake, and return the signature",async()=>{const o=new Uint8Array(300).map((p,x)=>x&255);a.mockResolvedValueOnce({status:e.CommandResultStatus.Success}).mockResolvedValueOnce((0,e.CommandResultFactory)({data:h.Nothing})).mockResolvedValueOnce((0,e.CommandResultFactory)({data:(0,h.Just)(A)}));const t=await new l.SignTransactionTask(n,{derivationPath:m,transaction:o},i).run();expect((0,e.isSuccessCommandResult)(t)).toBe(!0),(0,e.isSuccessCommandResult)(t)&&expect(t.data).toStrictEqual(A),expect(a).toHaveBeenCalledTimes(3);const[d,u,k]=a.mock.calls.map(p=>f(p[0]));for(const p of[d,u,k])expect(p.cla).toBe(17),expect(p.ins).toBe(2),expect(p.p2).toBe(s.P2_NO_STAKE);expect(d.p1).toBe(s.P1_INIT),expect(u.p1).toBe(s.P1_ADD),expect(k.p1).toBe(s.P1_LAST),expect(d.payload.length).toBe(w),expect(u.payload.length).toBe(e.APDU_MAX_PAYLOAD),expect(k.payload.length).toBe(o.length-e.APDU_MAX_PAYLOAD),expect(new Uint8Array([...u.payload,...k.payload])).toStrictEqual(o)}),it("should send the whole transaction in a single LAST chunk when it fits one packet",async()=>{const o=new Uint8Array(50).fill(7);a.mockResolvedValueOnce({status:e.CommandResultStatus.Success}).mockResolvedValueOnce((0,e.CommandResultFactory)({data:(0,h.Just)(A)}));const t=await new l.SignTransactionTask(n,{derivationPath:m,transaction:o},i).run();expect(a).toHaveBeenCalledTimes(2);const[,d]=a.mock.calls.map(u=>f(u[0]));expect(d.p1).toBe(s.P1_LAST),expect(d.payload).toStrictEqual(o),expect((0,e.isSuccessCommandResult)(t)).toBe(!0)}),it("should refuse an empty transaction without touching the device",async()=>{const r=await new l.SignTransactionTask(n,{derivationPath:m,transaction:new Uint8Array(0)},i).run();if(expect(a).not.toHaveBeenCalled(),expect((0,e.isSuccessCommandResult)(r)).toBe(!1),!(0,e.isSuccessCommandResult)(r)){const t=r.error;expect(t).toBeInstanceOf(e.InvalidStatusWordError),expect(t.originalError?.message).toBe("Transaction is empty")}}),it("should return the init error when the INIT command fails",async()=>{const o=(0,e.CommandResultFactory)({error:new c.IcpAppCommandError({message:"Conditions not satisfied",errorCode:c.IcpErrorCodes.CONDITIONS_NOT_SATISFIED})});a.mockResolvedValueOnce(o);const t=await new l.SignTransactionTask(n,{derivationPath:m,transaction:new Uint8Array(10)},i).run();expect((0,e.isSuccessCommandResult)(t)).toBe(!1),(0,e.isSuccessCommandResult)(t)||expect(t.error).toBeInstanceOf(c.IcpAppCommandError),expect(a).toHaveBeenCalledTimes(1)}),it("should return the chunk error when a chunk command fails",async()=>{const o=(0,e.CommandResultFactory)({error:new c.IcpAppCommandError({message:"Data Invalid",errorCode:c.IcpErrorCodes.DATA_INVALID})});a.mockResolvedValueOnce({status:e.CommandResultStatus.Success}).mockResolvedValueOnce(o);const t=await new l.SignTransactionTask(n,{derivationPath:m,transaction:new Uint8Array(50)},i).run();expect((0,e.isSuccessCommandResult)(t)).toBe(!1),(0,e.isSuccessCommandResult)(t)||expect(t.error.errorCode).toBe(c.IcpErrorCodes.DATA_INVALID)}),it("should error when the last chunk succeeds but returns no signature",async()=>{a.mockResolvedValueOnce({status:e.CommandResultStatus.Success}).mockResolvedValueOnce((0,e.CommandResultFactory)({data:h.Nothing}));const r=await new l.SignTransactionTask(n,{derivationPath:m,transaction:new Uint8Array(50)},i).run();if(expect((0,e.isSuccessCommandResult)(r)).toBe(!1),!(0,e.isSuccessCommandResult)(r)){const t=r.error;expect(t).toBeInstanceOf(e.InvalidStatusWordError),expect(t.originalError?.message).toBe("No signature returned")}})})});
2
+ //# sourceMappingURL=SignTransactionTask.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/internal/app-binder/task/SignTransactionTask.test.ts"],
4
+ "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n CommandResultFactory,\n CommandResultStatus,\n type InternalApi,\n InvalidStatusWordError,\n isSuccessCommandResult,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { vi } from \"vitest\";\n\nimport {\n P1_ADD,\n P1_INIT,\n P1_LAST,\n P2_NO_STAKE,\n type SignTransactionCommand,\n} from \"@internal/app-binder/command/SignTransactionCommand\";\nimport {\n IcpAppCommandError,\n IcpErrorCodes,\n} from \"@internal/app-binder/command/utils/IcpApplicationErrors\";\nimport { SignTransactionTask } from \"@internal/app-binder/task/SignTransactionTask\";\n\nconst DERIVATION_PATH = \"44'/223'/0'/0/0\";\nconst PATH_PAYLOAD_LENGTH = 20;\nconst APDU_HEADER_LENGTH = 5; // cla, ins, p1, p2, lc\nconst signature = { r: \"aa\", s: \"bb\", v: 1, der: \"3006\" };\n\n// Reads the [cla, ins, p1, p2] header + payload of the command handed to sendCommand.\nconst inspect = (command: SignTransactionCommand) => {\n const raw = command.getApdu().getRawApdu();\n return {\n cla: raw[0],\n ins: raw[1],\n p1: raw[2],\n p2: raw[3],\n payload: raw.slice(APDU_HEADER_LENGTH),\n };\n};\n\ndescribe(\"SignTransactionTask\", () => {\n let sendCommandMock: ReturnType<typeof vi.fn>;\n let apiMock: InternalApi;\n let loggerMock: LoggerPublisherService;\n\n beforeEach(() => {\n sendCommandMock = vi.fn();\n apiMock = { sendCommand: sendCommandMock } as unknown as InternalApi;\n loggerMock = { debug: vi.fn() } as unknown as LoggerPublisherService;\n });\n\n describe(\"run\", () => {\n it(\"should send INIT(path) then ADD/LAST chunks, all with P2=no-stake, and return the signature\", async () => {\n // ARRANGE\n // 300 bytes \u2192 one full 255-byte ADD chunk + one 45-byte LAST chunk.\n const transaction = new Uint8Array(300).map((_, i) => i & 0xff);\n sendCommandMock\n .mockResolvedValueOnce({ status: CommandResultStatus.Success }) // INIT\n .mockResolvedValueOnce(CommandResultFactory({ data: Nothing })) // ADD\n .mockResolvedValueOnce(CommandResultFactory({ data: Just(signature) })); // LAST\n\n const task = new SignTransactionTask(\n apiMock,\n { derivationPath: DERIVATION_PATH, transaction },\n loggerMock,\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toStrictEqual(signature);\n }\n\n expect(sendCommandMock).toHaveBeenCalledTimes(3);\n const [init, add, last] = sendCommandMock.mock.calls.map((c) =>\n inspect(c[0] as SignTransactionCommand),\n );\n\n // every packet targets the ICP sign instruction with the stake flag pinned off\n for (const packet of [init, add, last]) {\n expect(packet!.cla).toBe(0x11);\n expect(packet!.ins).toBe(0x02);\n expect(packet!.p2).toBe(P2_NO_STAKE);\n }\n\n // phase sequence is INIT \u2192 ADD \u2192 LAST\n expect(init!.p1).toBe(P1_INIT);\n expect(add!.p1).toBe(P1_ADD);\n expect(last!.p1).toBe(P1_LAST);\n\n // INIT carries only the 20-byte path; chunks split the tx at APDU_MAX_PAYLOAD\n expect(init!.payload.length).toBe(PATH_PAYLOAD_LENGTH);\n expect(add!.payload.length).toBe(APDU_MAX_PAYLOAD);\n expect(last!.payload.length).toBe(transaction.length - APDU_MAX_PAYLOAD);\n expect(new Uint8Array([...add!.payload, ...last!.payload])).toStrictEqual(\n transaction,\n );\n });\n\n it(\"should send the whole transaction in a single LAST chunk when it fits one packet\", async () => {\n // ARRANGE\n const transaction = new Uint8Array(50).fill(0x07);\n sendCommandMock\n .mockResolvedValueOnce({ status: CommandResultStatus.Success }) // INIT\n .mockResolvedValueOnce(CommandResultFactory({ data: Just(signature) })); // LAST\n\n const task = new SignTransactionTask(\n apiMock,\n { derivationPath: DERIVATION_PATH, transaction },\n loggerMock,\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(sendCommandMock).toHaveBeenCalledTimes(2);\n const [, last] = sendCommandMock.mock.calls.map((c) =>\n inspect(c[0] as SignTransactionCommand),\n );\n expect(last!.p1).toBe(P1_LAST);\n expect(last!.payload).toStrictEqual(transaction);\n expect(isSuccessCommandResult(result)).toBe(true);\n });\n\n it(\"should refuse an empty transaction without touching the device\", async () => {\n // ARRANGE\n const task = new SignTransactionTask(\n apiMock,\n { derivationPath: DERIVATION_PATH, transaction: new Uint8Array(0) },\n loggerMock,\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(sendCommandMock).not.toHaveBeenCalled();\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as InvalidStatusWordError;\n expect(err).toBeInstanceOf(InvalidStatusWordError);\n expect(err.originalError?.message).toBe(\"Transaction is empty\");\n }\n });\n\n it(\"should return the init error when the INIT command fails\", async () => {\n // ARRANGE\n const commandError = CommandResultFactory({\n error: new IcpAppCommandError({\n message: \"Conditions not satisfied\",\n errorCode: IcpErrorCodes.CONDITIONS_NOT_SATISFIED,\n }),\n });\n sendCommandMock.mockResolvedValueOnce(commandError);\n\n const task = new SignTransactionTask(\n apiMock,\n { derivationPath: DERIVATION_PATH, transaction: new Uint8Array(10) },\n loggerMock,\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toBeInstanceOf(IcpAppCommandError);\n }\n // INIT is attempted, no chunk is sent after the failure\n expect(sendCommandMock).toHaveBeenCalledTimes(1);\n });\n\n it(\"should return the chunk error when a chunk command fails\", async () => {\n // ARRANGE\n const commandError = CommandResultFactory({\n error: new IcpAppCommandError({\n message: \"Data Invalid\",\n errorCode: IcpErrorCodes.DATA_INVALID,\n }),\n });\n sendCommandMock\n .mockResolvedValueOnce({ status: CommandResultStatus.Success }) // INIT\n .mockResolvedValueOnce(commandError); // LAST\n\n const task = new SignTransactionTask(\n apiMock,\n { derivationPath: DERIVATION_PATH, transaction: new Uint8Array(50) },\n loggerMock,\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as IcpAppCommandError).errorCode).toBe(\n IcpErrorCodes.DATA_INVALID,\n );\n }\n });\n\n it(\"should error when the last chunk succeeds but returns no signature\", async () => {\n // ARRANGE \u2014 every chunk replies success but never a signature\n sendCommandMock\n .mockResolvedValueOnce({ status: CommandResultStatus.Success }) // INIT\n .mockResolvedValueOnce(CommandResultFactory({ data: Nothing })); // LAST\n\n const task = new SignTransactionTask(\n apiMock,\n { derivationPath: DERIVATION_PATH, transaction: new Uint8Array(50) },\n loggerMock,\n );\n\n // ACT\n const result = await task.run();\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n const err = result.error as InvalidStatusWordError;\n expect(err).toBeInstanceOf(InvalidStatusWordError);\n expect(err.originalError?.message).toBe(\"No signature returned\");\n }\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAQO,2CACPC,EAA8B,qBAC9BC,EAAmB,kBAEnBC,EAMO,+DACPC,EAGO,mEACPC,EAAoC,yDAEpC,MAAMC,EAAkB,kBAClBC,EAAsB,GACtBC,EAAqB,EACrBC,EAAY,CAAE,EAAG,KAAM,EAAG,KAAM,EAAG,EAAG,IAAK,MAAO,EAGlDC,EAAWC,GAAoC,CACnD,MAAMC,EAAMD,EAAQ,QAAQ,EAAE,WAAW,EACzC,MAAO,CACL,IAAKC,EAAI,CAAC,EACV,IAAKA,EAAI,CAAC,EACV,GAAIA,EAAI,CAAC,EACT,GAAIA,EAAI,CAAC,EACT,QAASA,EAAI,MAAMJ,CAAkB,CACvC,CACF,EAEA,SAAS,sBAAuB,IAAM,CACpC,IAAIK,EACAC,EACAC,EAEJ,WAAW,IAAM,CACfF,EAAkB,KAAG,GAAG,EACxBC,EAAU,CAAE,YAAaD,CAAgB,EACzCE,EAAa,CAAE,MAAO,KAAG,GAAG,CAAE,CAChC,CAAC,EAED,SAAS,MAAO,IAAM,CACpB,GAAG,8FAA+F,SAAY,CAG5G,MAAMC,EAAc,IAAI,WAAW,GAAG,EAAE,IAAI,CAACC,EAAGC,IAAMA,EAAI,GAAI,EAC9DL,EACG,sBAAsB,CAAE,OAAQ,sBAAoB,OAAQ,CAAC,EAC7D,yBAAsB,wBAAqB,CAAE,KAAM,SAAQ,CAAC,CAAC,EAC7D,yBAAsB,wBAAqB,CAAE,QAAM,QAAKJ,CAAS,CAAE,CAAC,CAAC,EASxE,MAAMU,EAAS,MAPF,IAAI,sBACfL,EACA,CAAE,eAAgBR,EAAiB,YAAAU,CAAY,EAC/CD,CACF,EAG0B,IAAI,EAG9B,UAAO,0BAAuBI,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,GAC/B,OAAOA,EAAO,IAAI,EAAE,cAAcV,CAAS,EAG7C,OAAOI,CAAe,EAAE,sBAAsB,CAAC,EAC/C,KAAM,CAACO,EAAMC,EAAKC,CAAI,EAAIT,EAAgB,KAAK,MAAM,IAAKU,GACxDb,EAAQa,EAAE,CAAC,CAA2B,CACxC,EAGA,UAAWC,IAAU,CAACJ,EAAMC,EAAKC,CAAI,EACnC,OAAOE,EAAQ,GAAG,EAAE,KAAK,EAAI,EAC7B,OAAOA,EAAQ,GAAG,EAAE,KAAK,CAAI,EAC7B,OAAOA,EAAQ,EAAE,EAAE,KAAK,aAAW,EAIrC,OAAOJ,EAAM,EAAE,EAAE,KAAK,SAAO,EAC7B,OAAOC,EAAK,EAAE,EAAE,KAAK,QAAM,EAC3B,OAAOC,EAAM,EAAE,EAAE,KAAK,SAAO,EAG7B,OAAOF,EAAM,QAAQ,MAAM,EAAE,KAAKb,CAAmB,EACrD,OAAOc,EAAK,QAAQ,MAAM,EAAE,KAAK,kBAAgB,EACjD,OAAOC,EAAM,QAAQ,MAAM,EAAE,KAAKN,EAAY,OAAS,kBAAgB,EACvE,OAAO,IAAI,WAAW,CAAC,GAAGK,EAAK,QAAS,GAAGC,EAAM,OAAO,CAAC,CAAC,EAAE,cAC1DN,CACF,CACF,CAAC,EAED,GAAG,mFAAoF,SAAY,CAEjG,MAAMA,EAAc,IAAI,WAAW,EAAE,EAAE,KAAK,CAAI,EAChDH,EACG,sBAAsB,CAAE,OAAQ,sBAAoB,OAAQ,CAAC,EAC7D,yBAAsB,wBAAqB,CAAE,QAAM,QAAKJ,CAAS,CAAE,CAAC,CAAC,EASxE,MAAMU,EAAS,MAPF,IAAI,sBACfL,EACA,CAAE,eAAgBR,EAAiB,YAAAU,CAAY,EAC/CD,CACF,EAG0B,IAAI,EAG9B,OAAOF,CAAe,EAAE,sBAAsB,CAAC,EAC/C,KAAM,CAAC,CAAES,CAAI,EAAIT,EAAgB,KAAK,MAAM,IAAKU,GAC/Cb,EAAQa,EAAE,CAAC,CAA2B,CACxC,EACA,OAAOD,EAAM,EAAE,EAAE,KAAK,SAAO,EAC7B,OAAOA,EAAM,OAAO,EAAE,cAAcN,CAAW,EAC/C,UAAO,0BAAuBG,CAAM,CAAC,EAAE,KAAK,EAAI,CAClD,CAAC,EAED,GAAG,iEAAkE,SAAY,CAS/E,MAAMA,EAAS,MAPF,IAAI,sBACfL,EACA,CAAE,eAAgBR,EAAiB,YAAa,IAAI,WAAW,CAAC,CAAE,EAClES,CACF,EAG0B,IAAI,EAK9B,GAFA,OAAOF,CAAe,EAAE,IAAI,iBAAiB,EAC7C,UAAO,0BAAuBM,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,IAAC,0BAAuBA,CAAM,EAAG,CACnC,MAAMM,EAAMN,EAAO,MACnB,OAAOM,CAAG,EAAE,eAAe,wBAAsB,EACjD,OAAOA,EAAI,eAAe,OAAO,EAAE,KAAK,sBAAsB,CAChE,CACF,CAAC,EAED,GAAG,2DAA4D,SAAY,CAEzE,MAAMC,KAAe,wBAAqB,CACxC,MAAO,IAAI,qBAAmB,CAC5B,QAAS,2BACT,UAAW,gBAAc,wBAC3B,CAAC,CACH,CAAC,EACDb,EAAgB,sBAAsBa,CAAY,EASlD,MAAMP,EAAS,MAPF,IAAI,sBACfL,EACA,CAAE,eAAgBR,EAAiB,YAAa,IAAI,WAAW,EAAE,CAAE,EACnES,CACF,EAG0B,IAAI,EAG9B,UAAO,0BAAuBI,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,GAChC,OAAOA,EAAO,KAAK,EAAE,eAAe,oBAAkB,EAGxD,OAAON,CAAe,EAAE,sBAAsB,CAAC,CACjD,CAAC,EAED,GAAG,2DAA4D,SAAY,CAEzE,MAAMa,KAAe,wBAAqB,CACxC,MAAO,IAAI,qBAAmB,CAC5B,QAAS,eACT,UAAW,gBAAc,YAC3B,CAAC,CACH,CAAC,EACDb,EACG,sBAAsB,CAAE,OAAQ,sBAAoB,OAAQ,CAAC,EAC7D,sBAAsBa,CAAY,EASrC,MAAMP,EAAS,MAPF,IAAI,sBACfL,EACA,CAAE,eAAgBR,EAAiB,YAAa,IAAI,WAAW,EAAE,CAAE,EACnES,CACF,EAG0B,IAAI,EAG9B,UAAO,0BAAuBI,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,GAChC,OAAQA,EAAO,MAA6B,SAAS,EAAE,KACrD,gBAAc,YAChB,CAEJ,CAAC,EAED,GAAG,qEAAsE,SAAY,CAEnFN,EACG,sBAAsB,CAAE,OAAQ,sBAAoB,OAAQ,CAAC,EAC7D,yBAAsB,wBAAqB,CAAE,KAAM,SAAQ,CAAC,CAAC,EAShE,MAAMM,EAAS,MAPF,IAAI,sBACfL,EACA,CAAE,eAAgBR,EAAiB,YAAa,IAAI,WAAW,EAAE,CAAE,EACnES,CACF,EAG0B,IAAI,EAI9B,GADA,UAAO,0BAAuBI,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,IAAC,0BAAuBA,CAAM,EAAG,CACnC,MAAMM,EAAMN,EAAO,MACnB,OAAOM,CAAG,EAAE,eAAe,wBAAsB,EACjD,OAAOA,EAAI,eAAe,OAAO,EAAE,KAAK,uBAAuB,CACjE,CACF,CAAC,CACH,CAAC,CACH,CAAC",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_vitest", "import_SignTransactionCommand", "import_IcpApplicationErrors", "import_SignTransactionTask", "DERIVATION_PATH", "PATH_PAYLOAD_LENGTH", "APDU_HEADER_LENGTH", "signature", "inspect", "command", "raw", "sendCommandMock", "apiMock", "loggerMock", "transaction", "_", "i", "result", "init", "add", "last", "c", "packet", "err", "commandError"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var u=(o,e)=>{for(var t in e)a(o,t,{get:e[t],enumerable:!0})},M=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of y(e))!l.call(o,n)&&n!==t&&a(o,n,{get:()=>e[n],enumerable:!(r=d(e,n))||r.enumerable});return o};var f=o=>M(a({},"__esModule",{value:!0}),o);var D={};u(D,{makeContainer:()=>v});module.exports=f(D);var s=require("inversify"),c=require("./app-binder/di/appBinderModule"),i=require("./externalTypes"),m=require("./use-cases/address/di/addressModule"),g=require("./use-cases/config/di/configModule"),p=require("./use-cases/transaction/di/transactionModule");const v=({dmk:o,sessionId:e})=>{const t=new s.Container;return t.bind(i.externalTypes.Dmk).toConstantValue(o),t.bind(i.externalTypes.SessionId).toConstantValue(e),t.bind(i.externalTypes.DmkLoggerFactory).toConstantValue(r=>o.getLoggerFactory()(["SignerIcp",r])),t.loadSync((0,c.appBindingModuleFactory)(),(0,g.configModuleFactory)(),(0,m.addressModuleFactory)(),(0,p.transactionModuleFactory)()),t};0&&(module.exports={makeContainer});
2
+ //# sourceMappingURL=di.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/di.ts"],
4
+ "sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n type LoggerPublisherService,\n} from \"@ledgerhq/device-management-kit\";\nimport { Container } from \"inversify\";\n\nimport { appBindingModuleFactory } from \"@internal/app-binder/di/appBinderModule\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { addressModuleFactory } from \"@internal/use-cases/address/di/addressModule\";\nimport { configModuleFactory } from \"@internal/use-cases/config/di/configModule\";\nimport { transactionModuleFactory } from \"@internal/use-cases/transaction/di/transactionModule\";\n\ntype MakeContainerProps = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n};\n\nexport const makeContainer = ({ dmk, sessionId }: 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\n container\n .bind<\n (tag: string) => LoggerPublisherService\n >(externalTypes.DmkLoggerFactory)\n .toConstantValue((tag: string) =>\n dmk.getLoggerFactory()([\"SignerIcp\", tag]),\n );\n\n container.loadSync(\n appBindingModuleFactory(),\n configModuleFactory(),\n addressModuleFactory(),\n transactionModuleFactory(),\n );\n\n return container;\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mBAAAE,IAAA,eAAAC,EAAAH,GAKA,IAAAI,EAA0B,qBAE1BC,EAAwC,mDACxCC,EAA8B,mCAC9BC,EAAqC,wDACrCC,EAAoC,sDACpCC,EAAyC,gEAOlC,MAAMP,EAAgB,CAAC,CAAE,IAAAQ,EAAK,UAAAC,CAAU,IAA0B,CACvE,MAAMC,EAAY,IAAI,YAEtB,OAAAA,EAAU,KAA0B,gBAAc,GAAG,EAAE,gBAAgBF,CAAG,EAC1EE,EACG,KAAsB,gBAAc,SAAS,EAC7C,gBAAgBD,CAAS,EAE5BC,EACG,KAEC,gBAAc,gBAAgB,EAC/B,gBAAiBC,GAChBH,EAAI,iBAAiB,EAAE,CAAC,YAAaG,CAAG,CAAC,CAC3C,EAEFD,EAAU,YACR,2BAAwB,KACxB,uBAAoB,KACpB,wBAAqB,KACrB,4BAAyB,CAC3B,EAEOA,CACT",
6
+ "names": ["di_exports", "__export", "makeContainer", "__toCommonJS", "import_inversify", "import_appBinderModule", "import_externalTypes", "import_addressModule", "import_configModule", "import_transactionModule", "dmk", "sessionId", "container", "tag"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var m=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var a=(r,o)=>{for(var s in o)m(r,s,{get:o[s],enumerable:!0})},c=(r,o,s,t)=>{if(o&&typeof o=="object"||typeof o=="function")for(let e of n(o))!S.call(r,e)&&e!==s&&m(r,e,{get:()=>o[e],enumerable:!(t=y(o,e))||t.enumerable});return r};var g=r=>c(m({},"__esModule",{value:!0}),r);var l={};a(l,{externalTypes:()=>k});module.exports=g(l);const k={Dmk:Symbol.for("Dmk"),SessionId:Symbol.for("SessionId"),DmkLoggerFactory:Symbol.for("DmkLoggerFactory")};0&&(module.exports={externalTypes});
2
+ //# sourceMappingURL=externalTypes.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/externalTypes.ts"],
4
+ "sourcesContent": ["export const externalTypes = {\n Dmk: Symbol.for(\"Dmk\"),\n SessionId: Symbol.for(\"SessionId\"),\n DmkLoggerFactory: Symbol.for(\"DmkLoggerFactory\"),\n} as const;\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,iBAAkB,OAAO,IAAI,kBAAkB,CACjD",
6
+ "names": ["externalTypes_exports", "__export", "externalTypes", "__toCommonJS"]
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var c=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var O=(e,p)=>{for(var r in p)c(e,r,{get:p[r],enumerable:!0})},l=(e,p,r,n)=>{if(p&&typeof p=="object"||typeof p=="function")for(let i of f(p))!y.call(e,i)&&i!==r&&c(e,i,{get:()=>p[i],enumerable:!(n=s(p,i))||n.enumerable});return e};var u=e=>l(c({},"__esModule",{value:!0}),e),A=(e,p,r,n)=>{for(var i=n>1?void 0:n?s(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&&c(p,r,i),i},B=(e,p)=>(r,n)=>p(r,n,e);var h={};O(h,{GetAddressUseCase:()=>t});module.exports=u(h);var o=require("inversify"),a=require("../../app-binder/di/appBinderTypes");let t=class{_appBinder;constructor(p){this._appBinder=p}execute(p,r){return this._appBinder.getAddress({derivationPath:p,checkOnDevice:r?.checkOnDevice??!1,skipOpenApp:r?.skipOpenApp??!1})}};t=A([(0,o.injectable)(),B(0,(0,o.inject)(a.appBinderTypes.AppBinding))],t);0&&(module.exports={GetAddressUseCase});
2
+ //# sourceMappingURL=GetAddressUseCase.js.map