@ledgerhq/device-signer-kit-bitcoin 0.0.0-signer-eth-20250122093657 → 0.0.0-transaction-unfunded-20250917151052

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 (361) hide show
  1. package/README.md +100 -32
  2. package/lib/cjs/api/SignerBtc.js +1 -1
  3. package/lib/cjs/api/SignerBtc.js.map +1 -1
  4. package/lib/cjs/api/{SignerBtcBuiilder.test.js → SignerBtcBuilder.test.js} +1 -1
  5. package/lib/cjs/api/{SignerBtcBuiilder.test.js.map → SignerBtcBuilder.test.js.map} +1 -1
  6. package/lib/cjs/api/app-binder/GetExtendedPublicKeyDeviceActionTypes.js +1 -1
  7. package/lib/cjs/api/app-binder/GetExtendedPublicKeyDeviceActionTypes.js.map +1 -1
  8. package/lib/cjs/api/app-binder/GetWalletAddressDeviceActionTypes.js.map +1 -1
  9. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js +1 -1
  10. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
  11. package/lib/cjs/api/app-binder/SignPsbtDeviceActionTypes.js +1 -1
  12. package/lib/cjs/api/app-binder/SignPsbtDeviceActionTypes.js.map +1 -1
  13. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js +1 -1
  14. package/lib/cjs/api/app-binder/SignTransactionDeviceActionTypes.js.map +1 -1
  15. package/lib/cjs/api/model/AddressOptions.js +1 -1
  16. package/lib/cjs/api/model/AddressOptions.js.map +1 -1
  17. package/lib/cjs/api/model/MessageOptions.js +2 -0
  18. package/lib/cjs/api/model/MessageOptions.js.map +7 -0
  19. package/lib/cjs/api/model/PsbtOptions.js +2 -0
  20. package/lib/cjs/api/model/PsbtOptions.js.map +7 -0
  21. package/lib/cjs/api/model/WalletAddressOptions.js +1 -1
  22. package/lib/cjs/api/model/WalletAddressOptions.js.map +1 -1
  23. package/lib/cjs/index.js.map +1 -1
  24. package/lib/cjs/internal/DefaultSignerBtc.js +1 -1
  25. package/lib/cjs/internal/DefaultSignerBtc.js.map +3 -3
  26. package/lib/cjs/internal/DefaultSignerBtc.test.js +1 -1
  27. package/lib/cjs/internal/DefaultSignerBtc.test.js.map +2 -2
  28. package/lib/cjs/internal/app-binder/BtcAppBinder.js +1 -1
  29. package/lib/cjs/internal/app-binder/BtcAppBinder.js.map +3 -3
  30. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js +1 -1
  31. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  32. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  33. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
  34. package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
  35. package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
  36. package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
  37. package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
  38. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
  39. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
  40. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
  41. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
  42. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
  43. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
  44. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
  45. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
  46. package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
  47. package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
  48. package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
  49. package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
  50. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js +1 -1
  51. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js.map +2 -2
  52. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  53. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  54. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js +1 -1
  55. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js.map +2 -2
  56. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  57. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  58. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  59. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  60. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  61. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  62. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  63. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  64. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
  65. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
  66. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  67. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  68. package/lib/cjs/internal/app-binder/di/appBinderModule.js +1 -1
  69. package/lib/cjs/internal/app-binder/di/appBinderModule.js.map +3 -3
  70. package/lib/cjs/internal/app-binder/di/appBinderModule.test.js +1 -1
  71. package/lib/cjs/internal/app-binder/di/appBinderModule.test.js.map +2 -2
  72. package/lib/cjs/internal/app-binder/di/appBinderTypes.js +1 -1
  73. package/lib/cjs/internal/app-binder/di/appBinderTypes.js.map +2 -2
  74. package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
  75. package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
  76. package/lib/cjs/internal/app-binder/task/ContinueTask.test.js +1 -1
  77. package/lib/cjs/internal/app-binder/task/ContinueTask.test.js.map +2 -2
  78. package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
  79. package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
  80. package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
  81. package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
  82. package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js +1 -1
  83. package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
  84. package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js +1 -1
  85. package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
  86. package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
  87. package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
  88. package/lib/cjs/internal/data-store/di/dataStoreModule.js +1 -1
  89. package/lib/cjs/internal/data-store/di/dataStoreModule.js.map +3 -3
  90. package/lib/cjs/internal/data-store/di/dataStoreModule.test.js +1 -1
  91. package/lib/cjs/internal/data-store/di/dataStoreModule.test.js.map +2 -2
  92. package/lib/cjs/internal/data-store/model/DataStore.test.js +1 -1
  93. package/lib/cjs/internal/data-store/model/DataStore.test.js.map +2 -2
  94. package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
  95. package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
  96. package/lib/cjs/internal/di.js +1 -1
  97. package/lib/cjs/internal/di.js.map +2 -2
  98. package/lib/cjs/internal/merkle-tree/di/merkleTreeModule.js +1 -1
  99. package/lib/cjs/internal/merkle-tree/di/merkleTreeModule.js.map +3 -3
  100. package/lib/cjs/internal/merkle-tree/di/merkleTreeModule.test.js +1 -1
  101. package/lib/cjs/internal/merkle-tree/di/merkleTreeModule.test.js.map +2 -2
  102. package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
  103. package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
  104. package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
  105. package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
  106. package/lib/cjs/internal/psbt/di/psbtModule.js +1 -1
  107. package/lib/cjs/internal/psbt/di/psbtModule.js.map +3 -3
  108. package/lib/cjs/internal/psbt/di/psbtModule.test.js +1 -1
  109. package/lib/cjs/internal/psbt/di/psbtModule.test.js.map +2 -2
  110. package/lib/cjs/internal/psbt/model/Key.js +1 -1
  111. package/lib/cjs/internal/psbt/model/Key.js.map +2 -2
  112. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
  113. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
  114. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtSerializer.js +1 -1
  115. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtSerializer.js.map +2 -2
  116. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtV2Normalizer.js +1 -1
  117. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtV2Normalizer.js.map +2 -2
  118. package/lib/cjs/internal/use-cases/di/useCasesModule.js +1 -1
  119. package/lib/cjs/internal/use-cases/di/useCasesModule.js.map +3 -3
  120. package/lib/cjs/internal/use-cases/di/useCasesModule.test.js +1 -1
  121. package/lib/cjs/internal/use-cases/di/useCasesModule.test.js.map +2 -2
  122. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.js +1 -1
  123. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.js.map +2 -2
  124. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
  125. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
  126. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.js +1 -1
  127. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.js.map +3 -3
  128. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
  129. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +3 -3
  130. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.js +1 -1
  131. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.js.map +3 -3
  132. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
  133. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
  134. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.js +1 -1
  135. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.js.map +3 -3
  136. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
  137. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +3 -3
  138. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.js +1 -1
  139. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.js.map +3 -3
  140. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
  141. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +3 -3
  142. package/lib/cjs/internal/wallet/di/walletModule.js +1 -1
  143. package/lib/cjs/internal/wallet/di/walletModule.js.map +3 -3
  144. package/lib/cjs/internal/wallet/di/walletModule.test.js +1 -1
  145. package/lib/cjs/internal/wallet/di/walletModule.test.js.map +2 -2
  146. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.js +1 -1
  147. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.js.map +2 -2
  148. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
  149. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
  150. package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
  151. package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
  152. package/lib/cjs/package.json +17 -17
  153. package/lib/esm/api/{SignerBtcBuiilder.test.js → SignerBtcBuilder.test.js} +1 -1
  154. package/lib/esm/api/{SignerBtcBuiilder.test.js.map → SignerBtcBuilder.test.js.map} +1 -1
  155. package/lib/esm/api/model/MessageOptions.js +1 -0
  156. package/lib/esm/api/model/MessageOptions.js.map +7 -0
  157. package/lib/esm/api/model/PsbtOptions.js +1 -0
  158. package/lib/esm/api/model/PsbtOptions.js.map +7 -0
  159. package/lib/esm/internal/DefaultSignerBtc.js +1 -1
  160. package/lib/esm/internal/DefaultSignerBtc.js.map +3 -3
  161. package/lib/esm/internal/DefaultSignerBtc.test.js +1 -1
  162. package/lib/esm/internal/DefaultSignerBtc.test.js.map +2 -2
  163. package/lib/esm/internal/app-binder/BtcAppBinder.js +1 -1
  164. package/lib/esm/internal/app-binder/BtcAppBinder.js.map +3 -3
  165. package/lib/esm/internal/app-binder/BtcAppBinder.test.js +1 -1
  166. package/lib/esm/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  167. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  168. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
  169. package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
  170. package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
  171. package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
  172. package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
  173. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
  174. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
  175. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
  176. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
  177. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
  178. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
  179. package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
  180. package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
  181. package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
  182. package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
  183. package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
  184. package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
  185. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js +1 -1
  186. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.js.map +2 -2
  187. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  188. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  189. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js +1 -1
  190. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.js.map +2 -2
  191. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  192. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  193. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  194. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  195. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  196. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  197. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  198. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  199. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
  200. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
  201. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  202. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  203. package/lib/esm/internal/app-binder/di/appBinderModule.js +1 -1
  204. package/lib/esm/internal/app-binder/di/appBinderModule.js.map +3 -3
  205. package/lib/esm/internal/app-binder/di/appBinderModule.test.js +1 -1
  206. package/lib/esm/internal/app-binder/di/appBinderModule.test.js.map +2 -2
  207. package/lib/esm/internal/app-binder/di/appBinderTypes.js +1 -1
  208. package/lib/esm/internal/app-binder/di/appBinderTypes.js.map +2 -2
  209. package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
  210. package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
  211. package/lib/esm/internal/app-binder/task/ContinueTask.test.js +1 -1
  212. package/lib/esm/internal/app-binder/task/ContinueTask.test.js.map +2 -2
  213. package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
  214. package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
  215. package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
  216. package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
  217. package/lib/esm/internal/app-binder/task/SignMessageTask.test.js +1 -1
  218. package/lib/esm/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
  219. package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js +1 -1
  220. package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
  221. package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
  222. package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
  223. package/lib/esm/internal/data-store/di/dataStoreModule.js +1 -1
  224. package/lib/esm/internal/data-store/di/dataStoreModule.js.map +3 -3
  225. package/lib/esm/internal/data-store/di/dataStoreModule.test.js +1 -1
  226. package/lib/esm/internal/data-store/di/dataStoreModule.test.js.map +2 -2
  227. package/lib/esm/internal/data-store/model/DataStore.test.js +1 -1
  228. package/lib/esm/internal/data-store/model/DataStore.test.js.map +2 -2
  229. package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
  230. package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
  231. package/lib/esm/internal/di.js +1 -1
  232. package/lib/esm/internal/di.js.map +2 -2
  233. package/lib/esm/internal/merkle-tree/di/merkleTreeModule.js +1 -1
  234. package/lib/esm/internal/merkle-tree/di/merkleTreeModule.js.map +3 -3
  235. package/lib/esm/internal/merkle-tree/di/merkleTreeModule.test.js +1 -1
  236. package/lib/esm/internal/merkle-tree/di/merkleTreeModule.test.js.map +2 -2
  237. package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
  238. package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
  239. package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
  240. package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
  241. package/lib/esm/internal/psbt/di/psbtModule.js +1 -1
  242. package/lib/esm/internal/psbt/di/psbtModule.js.map +3 -3
  243. package/lib/esm/internal/psbt/di/psbtModule.test.js +1 -1
  244. package/lib/esm/internal/psbt/di/psbtModule.test.js.map +2 -2
  245. package/lib/esm/internal/psbt/model/Key.js +1 -1
  246. package/lib/esm/internal/psbt/model/Key.js.map +2 -2
  247. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
  248. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
  249. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtSerializer.js +1 -1
  250. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtSerializer.js.map +2 -2
  251. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtV2Normalizer.js +1 -1
  252. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtV2Normalizer.js.map +2 -2
  253. package/lib/esm/internal/use-cases/di/useCasesModule.js +1 -1
  254. package/lib/esm/internal/use-cases/di/useCasesModule.js.map +3 -3
  255. package/lib/esm/internal/use-cases/di/useCasesModule.test.js +1 -1
  256. package/lib/esm/internal/use-cases/di/useCasesModule.test.js.map +2 -2
  257. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.js +1 -1
  258. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.js.map +2 -2
  259. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
  260. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
  261. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.js +1 -1
  262. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.js.map +3 -3
  263. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
  264. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +3 -3
  265. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.js +1 -1
  266. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.js.map +3 -3
  267. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
  268. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
  269. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.js +1 -1
  270. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.js.map +3 -3
  271. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
  272. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +3 -3
  273. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.js +1 -1
  274. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.js.map +3 -3
  275. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
  276. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +3 -3
  277. package/lib/esm/internal/wallet/di/walletModule.js +1 -1
  278. package/lib/esm/internal/wallet/di/walletModule.js.map +3 -3
  279. package/lib/esm/internal/wallet/di/walletModule.test.js +1 -1
  280. package/lib/esm/internal/wallet/di/walletModule.test.js.map +2 -2
  281. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.js +1 -1
  282. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.js.map +2 -2
  283. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
  284. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
  285. package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
  286. package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
  287. package/lib/esm/package.json +17 -17
  288. package/lib/types/api/SignerBtc.d.ts +7 -5
  289. package/lib/types/api/SignerBtc.d.ts.map +1 -1
  290. package/lib/types/api/SignerBtcBuilder.test.d.ts +2 -0
  291. package/lib/types/api/SignerBtcBuilder.test.d.ts.map +1 -0
  292. package/lib/types/api/app-binder/GetExtendedPublicKeyDeviceActionTypes.d.ts +3 -1
  293. package/lib/types/api/app-binder/GetExtendedPublicKeyDeviceActionTypes.d.ts.map +1 -1
  294. package/lib/types/api/app-binder/GetWalletAddressDeviceActionTypes.d.ts +1 -0
  295. package/lib/types/api/app-binder/GetWalletAddressDeviceActionTypes.d.ts.map +1 -1
  296. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +1 -12
  297. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
  298. package/lib/types/api/app-binder/SignPsbtDeviceActionTypes.d.ts +1 -0
  299. package/lib/types/api/app-binder/SignPsbtDeviceActionTypes.d.ts.map +1 -1
  300. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts +1 -0
  301. package/lib/types/api/app-binder/SignTransactionDeviceActionTypes.d.ts.map +1 -1
  302. package/lib/types/api/model/AddressOptions.d.ts +1 -0
  303. package/lib/types/api/model/AddressOptions.d.ts.map +1 -1
  304. package/lib/types/api/model/MessageOptions.d.ts +4 -0
  305. package/lib/types/api/model/MessageOptions.d.ts.map +1 -0
  306. package/lib/types/api/model/PsbtOptions.d.ts +4 -0
  307. package/lib/types/api/model/PsbtOptions.d.ts.map +1 -0
  308. package/lib/types/api/model/Signature.d.ts.map +1 -1
  309. package/lib/types/api/model/WalletAddressOptions.d.ts +1 -0
  310. package/lib/types/api/model/WalletAddressOptions.d.ts.map +1 -1
  311. package/lib/types/internal/DefaultSignerBtc.d.ts +7 -5
  312. package/lib/types/internal/DefaultSignerBtc.d.ts.map +1 -1
  313. package/lib/types/internal/app-binder/BtcAppBinder.d.ts +4 -0
  314. package/lib/types/internal/app-binder/BtcAppBinder.d.ts.map +1 -1
  315. package/lib/types/internal/app-binder/command/utils/bitcoinAppErrors.d.ts.map +1 -1
  316. package/lib/types/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.d.ts.map +1 -1
  317. package/lib/types/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.d.ts.map +1 -1
  318. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +2 -1
  319. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  320. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
  321. package/lib/types/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.d.ts.map +1 -1
  322. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +5 -2
  323. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
  324. package/lib/types/internal/app-binder/di/appBinderModule.d.ts.map +1 -1
  325. package/lib/types/internal/app-binder/di/appBinderTypes.d.ts +0 -1
  326. package/lib/types/internal/app-binder/di/appBinderTypes.d.ts.map +1 -1
  327. package/lib/types/internal/app-binder/task/GetWalletAddressTask.d.ts.map +1 -1
  328. package/lib/types/internal/app-binder/task/SignMessageTask.d.ts.map +1 -1
  329. package/lib/types/internal/app-binder/task/SignPsbtTask.d.ts.map +1 -1
  330. package/lib/types/internal/data-store/di/dataStoreModule.d.ts.map +1 -1
  331. package/lib/types/internal/di.d.ts.map +1 -1
  332. package/lib/types/internal/merkle-tree/di/merkleTreeModule.d.ts.map +1 -1
  333. package/lib/types/internal/psbt/di/psbtModule.d.ts.map +1 -1
  334. package/lib/types/internal/use-cases/di/useCasesModule.d.ts.map +1 -1
  335. package/lib/types/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.d.ts +1 -0
  336. package/lib/types/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.d.ts.map +1 -1
  337. package/lib/types/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.d.ts +1 -1
  338. package/lib/types/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.d.ts.map +1 -1
  339. package/lib/types/internal/use-cases/sign-message/SignMessageUseCase.d.ts +1 -1
  340. package/lib/types/internal/use-cases/sign-message/SignMessageUseCase.d.ts.map +1 -1
  341. package/lib/types/internal/use-cases/sign-psbt/SignPsbtUseCase.d.ts +1 -1
  342. package/lib/types/internal/use-cases/sign-psbt/SignPsbtUseCase.d.ts.map +1 -1
  343. package/lib/types/internal/use-cases/sign-transaction/SignTransactionUseCase.d.ts +1 -1
  344. package/lib/types/internal/use-cases/sign-transaction/SignTransactionUseCase.d.ts.map +1 -1
  345. package/lib/types/internal/wallet/di/walletModule.d.ts.map +1 -1
  346. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  347. package/package.json +19 -19
  348. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +0 -2
  349. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +0 -7
  350. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +0 -2
  351. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +0 -7
  352. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +0 -2
  353. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +0 -7
  354. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +0 -2
  355. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +0 -7
  356. package/lib/types/api/SignerBtcBuiilder.test.d.ts +0 -2
  357. package/lib/types/api/SignerBtcBuiilder.test.d.ts.map +0 -1
  358. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts +0 -19
  359. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts.map +0 -1
  360. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts +0 -2
  361. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/BtcAppBinder.ts"],
4
- "sourcesContent": ["import {\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport {\n GetExtendedPublicKeyDAInput,\n GetExtendedPublicKeyDAReturnType,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignPsbtDAReturnType } from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { GetWalletAddressDAReturnType } from \"@api/index\";\nimport { Psbt } from \"@api/model/Psbt\";\nimport { Wallet } from \"@api/model/Wallet\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\nimport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { dataStoreTypes } from \"@internal/data-store/di/dataStoreTypes\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport type { PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { walletTypes } from \"@internal/wallet/di/walletTypes\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport type { WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { GetWalletAddressDeviceAction } from \"./device-action/GetWalletAddress/GetWalletAddressDeviceAction\";\nimport { SignMessageDeviceAction } from \"./device-action/SignMessage/SignMessageDeviceAction\";\n\n@injectable()\nexport class BtcAppBinder {\n constructor(\n @inject(externalTypes.Dmk)\n private readonly _dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId)\n private readonly _sessionId: DeviceSessionId,\n @inject(walletTypes.WalletBuilder)\n private readonly _walletBuilder: WalletBuilder,\n @inject(walletTypes.WalletSerializer)\n private readonly _walletSerializer: WalletSerializer,\n @inject(dataStoreTypes.DataStoreService)\n private readonly _dataStoreService: DataStoreService,\n @inject(psbtTypes.PsbtMapper)\n private readonly _psbtMapper: PsbtMapper,\n @inject(psbtTypes.ValueParser)\n private readonly _valueParser: ValueParser,\n ) {}\n\n getExtendedPublicKey(\n args: GetExtendedPublicKeyDAInput,\n ): GetExtendedPublicKeyDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(args),\n appName: \"Bitcoin\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n }): SignMessageDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignMessageDeviceAction({\n input: {\n derivationPath: args.derivationPath,\n message: args.message,\n dataStoreService: this._dataStoreService,\n },\n }),\n });\n }\n\n signPsbt(args: { psbt: Psbt; wallet: Wallet }): SignPsbtDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignPsbtDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n },\n }),\n });\n }\n\n getWalletAddress(args: {\n checkOnDevice: boolean;\n wallet: Wallet;\n change: boolean;\n addressIndex: number;\n }): GetWalletAddressDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new GetWalletAddressDeviceAction({\n input: {\n wallet: args.wallet,\n checkOnDevice: args.checkOnDevice,\n change: args.change,\n addressIndex: args.addressIndex,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n },\n }),\n });\n }\n\n signTransaction(args: {\n psbt: Psbt;\n wallet: Wallet;\n }): SignTransactionDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n },\n }),\n });\n }\n}\n"],
5
- "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAKO,2CACPC,EAAmC,qBAYnCC,EAA4C,oEAC5CC,EAAqC,4EACrCC,EAA4C,0FAC5CC,EAA+B,kDAE/BC,EAA8B,mCAC9BC,EAA0B,uCAG1BC,EAA4B,2CAI5BC,EAA6C,yEAC7CC,EAAwC,+DAGjC,IAAMC,EAAN,KAAmB,CACxB,YAEmBC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EACjB,CAbiB,UAAAN,EAEA,gBAAAC,EAEA,oBAAAC,EAEA,uBAAAC,EAEA,uBAAAC,EAEA,iBAAAC,EAEA,kBAAAC,CAChB,CAEH,qBACEC,EACkC,CAClC,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,8BAA4BA,CAAI,EAC7C,QAAS,UACT,wBAAyBA,EAAK,cAC1B,0BAAwB,cACxB,0BAAwB,IAC9B,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAGgB,CAC1B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,0BAAwB,CACxC,MAAO,CACL,eAAgBA,EAAK,eACrB,QAASA,EAAK,QACd,iBAAkB,KAAK,iBACzB,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAASA,EAA4D,CACnE,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,uBAAqB,CACrC,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,YACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,iBAAiBA,EAKgB,CAC/B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,OAAQA,EAAK,OACb,cAAeA,EAAK,cACpB,OAAQA,EAAK,OACb,aAAcA,EAAK,aACnB,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,iBACzB,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAGgB,CAC9B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,8BAA4B,CAC5C,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,YACpB,CACF,CAAC,CACH,CAAC,CACH,CACF,EA7GaR,EAANS,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,gBAAc,GAAG,GAExBA,EAAA,eAAO,gBAAc,SAAS,GAE9BA,EAAA,eAAO,cAAY,aAAa,GAEhCA,EAAA,eAAO,cAAY,gBAAgB,GAEnCA,EAAA,eAAO,iBAAe,gBAAgB,GAEtCA,EAAA,eAAO,YAAU,UAAU,GAE3BA,EAAA,eAAO,YAAU,WAAW,IAdpBV",
6
- "names": ["BtcAppBinder_exports", "__export", "BtcAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_GetExtendedPublicKeyCommand", "import_SignPsbtDeviceAction", "import_SignTransactionDeviceAction", "import_dataStoreTypes", "import_externalTypes", "import_psbtTypes", "import_walletTypes", "import_GetWalletAddressDeviceAction", "import_SignMessageDeviceAction", "BtcAppBinder", "_dmk", "_sessionId", "_walletBuilder", "_walletSerializer", "_dataStoreService", "_psbtMapper", "_valueParser", "args", "__decorateClass", "__decorateParam"]
4
+ "sourcesContent": ["import {\n CallTaskInAppDeviceAction,\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport {\n GetExtendedPublicKeyDAInput,\n GetExtendedPublicKeyDAReturnType,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport { SignMessageDAReturnType } from \"@api/app-binder/SignMessageDeviceActionTypes\";\nimport { SignPsbtDAReturnType } from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { SignTransactionDAReturnType } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { GetWalletAddressDAReturnType } from \"@api/index\";\nimport { Psbt } from \"@api/model/Psbt\";\nimport { Wallet } from \"@api/model/Wallet\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\nimport { SignTransactionDeviceAction } from \"@internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction\";\nimport { SendSignMessageTask } from \"@internal/app-binder/task/SignMessageTask\";\nimport { dataStoreTypes } from \"@internal/data-store/di/dataStoreTypes\";\nimport type { DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { psbtTypes } from \"@internal/psbt/di/psbtTypes\";\nimport type { PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport type { ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { walletTypes } from \"@internal/wallet/di/walletTypes\";\nimport type { WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport type { WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { GetWalletAddressDeviceAction } from \"./device-action/GetWalletAddress/GetWalletAddressDeviceAction\";\n\n@injectable()\nexport class BtcAppBinder {\n constructor(\n @inject(externalTypes.Dmk)\n private readonly _dmk: DeviceManagementKit,\n @inject(externalTypes.SessionId)\n private readonly _sessionId: DeviceSessionId,\n @inject(walletTypes.WalletBuilder)\n private readonly _walletBuilder: WalletBuilder,\n @inject(walletTypes.WalletSerializer)\n private readonly _walletSerializer: WalletSerializer,\n @inject(dataStoreTypes.DataStoreService)\n private readonly _dataStoreService: DataStoreService,\n @inject(psbtTypes.PsbtMapper)\n private readonly _psbtMapper: PsbtMapper,\n @inject(psbtTypes.ValueParser)\n private readonly _valueParser: ValueParser,\n ) {}\n\n getExtendedPublicKey(\n args: GetExtendedPublicKeyDAInput,\n ): GetExtendedPublicKeyDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(args),\n appName: \"Bitcoin\",\n requiredUserInteraction: args.checkOnDevice\n ? UserInteractionRequired.VerifyAddress\n : UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n signMessage(args: {\n derivationPath: string;\n message: string;\n skipOpenApp: boolean;\n }): SignMessageDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new CallTaskInAppDeviceAction({\n input: {\n task: async (internalApi) =>\n new SendSignMessageTask(\n internalApi,\n args,\n this._dataStoreService,\n ).run(),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.SignPersonalMessage,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n signPsbt(args: {\n psbt: Psbt;\n wallet: Wallet;\n skipOpenApp: boolean;\n }): SignPsbtDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignPsbtDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n getWalletAddress(args: {\n checkOnDevice: boolean;\n wallet: Wallet;\n change: boolean;\n addressIndex: number;\n skipOpenApp: boolean;\n }): GetWalletAddressDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new GetWalletAddressDeviceAction({\n input: {\n wallet: args.wallet,\n skipOpenApp: args.skipOpenApp,\n checkOnDevice: args.checkOnDevice,\n change: args.change,\n addressIndex: args.addressIndex,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n },\n }),\n });\n }\n\n signTransaction(args: {\n psbt: Psbt;\n wallet: Wallet;\n skipOpenApp: boolean;\n }): SignTransactionDAReturnType {\n return this._dmk.executeDeviceAction({\n sessionId: this._sessionId,\n deviceAction: new SignTransactionDeviceAction({\n input: {\n psbt: args.psbt,\n wallet: args.wallet,\n walletBuilder: this._walletBuilder,\n walletSerializer: this._walletSerializer,\n dataStoreService: this._dataStoreService,\n psbtMapper: this._psbtMapper,\n valueParser: this._valueParser,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n}\n"],
5
+ "mappings": "okBAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,kBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAMO,2CACPC,EAAmC,qBAYnCC,EAA4C,oEAC5CC,EAAqC,4EACrCC,EAA4C,0FAC5CC,EAAoC,qDACpCC,EAA+B,kDAE/BC,EAA8B,mCAC9BC,EAA0B,uCAG1BC,EAA4B,2CAI5BC,EAA6C,yEAGtC,IAAMC,EAAN,KAAmB,CACxB,YAEmBC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EAEAC,EACjB,CAbiB,UAAAN,EAEA,gBAAAC,EAEA,oBAAAC,EAEA,uBAAAC,EAEA,uBAAAC,EAEA,iBAAAC,EAEA,kBAAAC,CAChB,CAEH,qBACEC,EACkC,CAClC,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,QAAS,IAAI,8BAA4BA,CAAI,EAC7C,QAAS,UACT,wBAAyBA,EAAK,cAC1B,0BAAwB,cACxB,0BAAwB,KAC5B,YAAaA,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAYA,EAIgB,CAC1B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,4BAA0B,CAC1C,MAAO,CACL,KAAM,MAAOC,GACX,IAAI,sBACFA,EACAD,EACA,KAAK,iBACP,EAAE,IAAI,EACR,QAAS,UACT,wBAAyB,0BAAwB,oBACjD,YAAaA,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,SAASA,EAIgB,CACvB,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,uBAAqB,CACrC,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,aAClB,YAAaA,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,iBAAiBA,EAMgB,CAC/B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,+BAA6B,CAC7C,MAAO,CACL,OAAQA,EAAK,OACb,YAAaA,EAAK,YAClB,cAAeA,EAAK,cACpB,OAAQA,EAAK,OACb,aAAcA,EAAK,aACnB,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,iBACzB,CACF,CAAC,CACH,CAAC,CACH,CAEA,gBAAgBA,EAIgB,CAC9B,OAAO,KAAK,KAAK,oBAAoB,CACnC,UAAW,KAAK,WAChB,aAAc,IAAI,8BAA4B,CAC5C,MAAO,CACL,KAAMA,EAAK,KACX,OAAQA,EAAK,OACb,cAAe,KAAK,eACpB,iBAAkB,KAAK,kBACvB,iBAAkB,KAAK,kBACvB,WAAY,KAAK,YACjB,YAAa,KAAK,aAClB,YAAaA,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CACF,EA9HaR,EAANU,EAAA,IADN,cAAW,EAGPC,EAAA,eAAO,gBAAc,GAAG,GAExBA,EAAA,eAAO,gBAAc,SAAS,GAE9BA,EAAA,eAAO,cAAY,aAAa,GAEhCA,EAAA,eAAO,cAAY,gBAAgB,GAEnCA,EAAA,eAAO,iBAAe,gBAAgB,GAEtCA,EAAA,eAAO,YAAU,UAAU,GAE3BA,EAAA,eAAO,YAAU,WAAW,IAdpBX",
6
+ "names": ["BtcAppBinder_exports", "__export", "BtcAppBinder", "__toCommonJS", "import_device_management_kit", "import_inversify", "import_GetExtendedPublicKeyCommand", "import_SignPsbtDeviceAction", "import_SignTransactionDeviceAction", "import_SignMessageTask", "import_dataStoreTypes", "import_externalTypes", "import_psbtTypes", "import_walletTypes", "import_GetWalletAddressDeviceAction", "BtcAppBinder", "_dmk", "_sessionId", "_walletBuilder", "_walletSerializer", "_dataStoreService", "_psbtMapper", "_valueParser", "args", "internalApi", "__decorateClass", "__decorateParam"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var t=require("@ledgerhq/device-management-kit"),d=require("rxjs"),c=require("../app-binder/BtcAppBinder"),l=require("../app-binder/command/GetExtendedPublicKeyCommand");describe("BtcAppBinder",()=>{const r={sendCommand:jest.fn(),executeDeviceAction:jest.fn()};beforeEach(()=>{jest.clearAllMocks()}),it("should be defined",()=>{const a=new c.BtcAppBinder({},{},{},{},{},{},{});expect(a).toBeDefined()}),describe("getExtendedPublicKey",()=>{let a;afterEach(()=>{a&&a.unsubscribe()}),it("should return the pub key",i=>{const n="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";jest.spyOn(r,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:n}}]),cancel:jest.fn()});const s=new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}),{observable:o}=s.getExtendedPublicKey({derivationPath:"44'/501'",checkOnDevice:!1}),u=[];a=o.subscribe({next:e=>{u.push(e)},error:e=>{i(e)},complete:()=>{try{expect(u).toEqual([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:n}}]),i()}catch(e){i(e)}}})}),describe("calls of executeDeviceAction with the correct params",()=>{const i={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const s={...i,checkOnDevice:!0};new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}).getExtendedPublicKey(s),expect(r.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new l.GetExtendedPublicKeyCommand(s),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.VerifyAddress}})})}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const s={...i,checkOnDevice:!1};new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}).getExtendedPublicKey(s),expect(r.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new l.GetExtendedPublicKeyCommand(s),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.None}})})})})}),describe("signMessage",()=>{it("should return the signature",a=>{const i={r:"0xDEF1",s:"0xAFAF",v:0},n="Hello, World!";jest.spyOn(r,"executeDeviceAction").mockReturnValue({observable:(0,d.from)([{status:t.DeviceActionStatus.Completed,output:i}]),cancel:jest.fn()});const s=new c.BtcAppBinder(r,"sessionId",{},{},{},{},{}),{observable:o}=s.signMessage({derivationPath:"44'/60'/3'/2/1",message:n}),u=[];o.subscribe({next:e=>{u.push(e)},error:e=>{a(e)},complete:()=>{try{expect(u).toEqual([{status:t.DeviceActionStatus.Completed,output:i}]),a()}catch(e){a(e)}}})})})});
1
+ "use strict";var t=require("@ledgerhq/device-management-kit"),l=require("rxjs"),c=require("../app-binder/BtcAppBinder"),u=require("../app-binder/command/GetExtendedPublicKeyCommand");describe("BtcAppBinder",()=>{const a={sendCommand:vi.fn(),executeDeviceAction:vi.fn()};beforeEach(()=>{vi.clearAllMocks()}),it("should be defined",()=>{const s=new c.BtcAppBinder({},{},{},{},{},{},{});expect(s).toBeDefined()}),describe("getExtendedPublicKey",()=>{let s;afterEach(()=>{s&&s.unsubscribe()}),it("should return the pub key",()=>new Promise((r,n)=>{const i="D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5";vi.spyOn(a,"executeDeviceAction").mockReturnValue({observable:(0,l.from)([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:i}}]),cancel:vi.fn()});const o=new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}),{observable:d}=o.getExtendedPublicKey({derivationPath:"44'/501'",checkOnDevice:!1,skipOpenApp:!1}),p=[];s=d.subscribe({next:e=>{p.push(e)},error:e=>{n(e)},complete:()=>{try{expect(p).toEqual([{status:t.DeviceActionStatus.Completed,output:{extendedPublicKey:i}}]),r()}catch(e){n(e)}}})})),describe("calls of executeDeviceAction with the correct params",()=>{const r={derivationPath:"44'/60'/3'/2/1",returnChainCode:!1,skipOpenApp:!1};it("when checkOnDevice is true: UserInteractionRequired.VerifyAddress",()=>{const i={...r,checkOnDevice:!0};new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}).getExtendedPublicKey(i),expect(a.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new u.GetExtendedPublicKeyCommand(i),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.VerifyAddress,skipOpenApp:!1}})})}),it("when checkOnDevice is false: UserInteractionRequired.None",()=>{const i={...r,checkOnDevice:!1};new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}).getExtendedPublicKey(i),expect(a.executeDeviceAction).toHaveBeenCalledWith({sessionId:"sessionId",deviceAction:new t.SendCommandInAppDeviceAction({input:{command:new u.GetExtendedPublicKeyCommand(i),appName:"Bitcoin",requiredUserInteraction:t.UserInteractionRequired.None,skipOpenApp:!1}})})})})}),describe("signMessage",()=>{it("should return the signature",()=>new Promise((s,r)=>{const n={r:"0xDEF1",s:"0xAFAF",v:0},i="Hello, World!";vi.spyOn(a,"executeDeviceAction").mockReturnValue({observable:(0,l.from)([{status:t.DeviceActionStatus.Completed,output:n}]),cancel:vi.fn()});const o=new c.BtcAppBinder(a,"sessionId",{},{},{},{},{}),{observable:d}=o.signMessage({derivationPath:"44'/60'/3'/2/1",message:i,skipOpenApp:!1}),p=[];d.subscribe({next:e=>{p.push(e)},error:e=>{r(e)},complete:()=>{try{expect(p).toEqual([{status:t.DeviceActionStatus.Completed,output:n}]),s()}catch(e){r(e)}}})}))})});
2
2
  //# sourceMappingURL=BtcAppBinder.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/internal/app-binder/BtcAppBinder.test.ts"],
4
- "sourcesContent": ["import {\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from, type Subscription } from \"rxjs\";\n\nimport {\n type GetExtendedDAIntermediateValue,\n type GetExtendedPublicKeyDAError,\n type GetExtendedPublicKeyDAOutput,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport {\n type SignMessageDAError,\n type SignMessageDAIntermediateValue,\n type SignMessageDAOutput,\n} from \"@api/index\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { BtcAppBinder } from \"@internal/app-binder/BtcAppBinder\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\ndescribe(\"BtcAppBinder\", () => {\n const mockedDmk: DeviceManagementKit = {\n sendCommand: jest.fn(),\n executeDeviceAction: jest.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n jest.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new BtcAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getExtendedPublicKey\", () => {\n let subscription: Subscription;\n afterEach(() => {\n if (subscription) {\n subscription.unsubscribe();\n }\n });\n it(\"should return the pub key\", (done) => {\n // GIVEN\n const extendedPublicKey = \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n } as DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.getExtendedPublicKey({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >[] = [];\n subscription = observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.None,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signature\", (done) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEF1`,\n s: `0xAFAF`,\n v: 0,\n };\n const message = \"Hello, World!\";\n\n jest.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >,\n ]),\n cancel: jest.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.signMessage({\n derivationPath: \"44'/60'/3'/2/1\",\n message,\n });\n\n // THEN\n const states: DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n done(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n done();\n } catch (err) {\n done(err);\n }\n },\n });\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_rxjs", "import_BtcAppBinder", "import_GetExtendedPublicKeyCommand", "mockedDmk", "binder", "subscription", "done", "extendedPublicKey", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "message"]
4
+ "sourcesContent": ["import {\n type DeviceActionState,\n DeviceActionStatus,\n type DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { from, type Subscription } from \"rxjs\";\n\nimport {\n type GetExtendedDAIntermediateValue,\n type GetExtendedPublicKeyDAError,\n type GetExtendedPublicKeyDAOutput,\n} from \"@api/app-binder/GetExtendedPublicKeyDeviceActionTypes\";\nimport {\n type SignMessageDAError,\n type SignMessageDAIntermediateValue,\n type SignMessageDAOutput,\n} from \"@api/index\";\nimport { type Signature } from \"@api/model/Signature\";\nimport { BtcAppBinder } from \"@internal/app-binder/BtcAppBinder\";\nimport { GetExtendedPublicKeyCommand } from \"@internal/app-binder/command/GetExtendedPublicKeyCommand\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type PsbtMapper } from \"@internal/psbt/service/psbt/PsbtMapper\";\nimport { type ValueParser } from \"@internal/psbt/service/value/ValueParser\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\ndescribe(\"BtcAppBinder\", () => {\n const mockedDmk: DeviceManagementKit = {\n sendCommand: vi.fn(),\n executeDeviceAction: vi.fn(),\n } as unknown as DeviceManagementKit;\n\n beforeEach(() => {\n vi.clearAllMocks();\n });\n\n it(\"should be defined\", () => {\n const binder = new BtcAppBinder(\n {} as DeviceManagementKit,\n {} as DeviceSessionId,\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n expect(binder).toBeDefined();\n });\n\n describe(\"getExtendedPublicKey\", () => {\n let subscription: Subscription;\n afterEach(() => {\n if (subscription) {\n subscription.unsubscribe();\n }\n });\n it(\"should return the pub key\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const extendedPublicKey =\n \"D2PPQSYFe83nDzk96FqGumVU8JA7J8vj2Rhjc2oXzEi5\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n } as DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.getExtendedPublicKey({\n derivationPath: \"44'/501'\",\n checkOnDevice: false,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n GetExtendedPublicKeyDAOutput,\n GetExtendedPublicKeyDAError,\n GetExtendedDAIntermediateValue\n >[] = [];\n subscription = observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: { extendedPublicKey },\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n\n describe(\"calls of executeDeviceAction with the correct params\", () => {\n const baseParams = {\n derivationPath: \"44'/60'/3'/2/1\",\n returnChainCode: false,\n skipOpenApp: false,\n };\n\n it(\"when checkOnDevice is true: UserInteractionRequired.VerifyAddress\", () => {\n // GIVEN\n const checkOnDevice = true;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.VerifyAddress,\n skipOpenApp: false,\n },\n }),\n });\n });\n\n it(\"when checkOnDevice is false: UserInteractionRequired.None\", () => {\n // GIVEN\n const checkOnDevice = false;\n const params = {\n ...baseParams,\n checkOnDevice,\n };\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n appBinder.getExtendedPublicKey(params);\n\n // THEN\n expect(mockedDmk.executeDeviceAction).toHaveBeenCalledWith({\n sessionId: \"sessionId\",\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetExtendedPublicKeyCommand(params),\n appName: \"Bitcoin\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: false,\n },\n }),\n });\n });\n });\n });\n\n describe(\"signMessage\", () => {\n it(\"should return the signature\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n const signature: Signature = {\n r: `0xDEF1`,\n s: `0xAFAF`,\n v: 0,\n };\n const message = \"Hello, World!\";\n\n vi.spyOn(mockedDmk, \"executeDeviceAction\").mockReturnValue({\n observable: from([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n } as DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >,\n ]),\n cancel: vi.fn(),\n });\n\n // WHEN\n const appBinder = new BtcAppBinder(\n mockedDmk,\n \"sessionId\",\n {} as WalletBuilder,\n {} as WalletSerializer,\n {} as DataStoreService,\n {} as PsbtMapper,\n {} as ValueParser,\n );\n const { observable } = appBinder.signMessage({\n derivationPath: \"44'/60'/3'/2/1\",\n message,\n skipOpenApp: false,\n });\n\n // THEN\n const states: DeviceActionState<\n SignMessageDAOutput,\n SignMessageDAError,\n SignMessageDAIntermediateValue\n >[] = [];\n observable.subscribe({\n next: (state) => {\n states.push(state);\n },\n error: (err) => {\n reject(err);\n },\n complete: () => {\n try {\n expect(states).toEqual([\n {\n status: DeviceActionStatus.Completed,\n output: signature,\n },\n ]);\n resolve();\n } catch (err) {\n reject(err as Error);\n }\n },\n });\n }));\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_rxjs", "import_BtcAppBinder", "import_GetExtendedPublicKeyCommand", "mockedDmk", "binder", "subscription", "resolve", "reject", "extendedPublicKey", "appBinder", "observable", "states", "state", "err", "baseParams", "params", "signature", "message"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),o=require("@ledgerhq/device-management-kit"),a=require("./GetMasterFingerprintCommand");const i=new Uint8Array([225,5,0,0,0]),n=new Uint8Array([130,141,194,243]);describe("GetMasterFingerprintCommand",()=>{let s;beforeEach(()=>{s=new a.GetMasterFingerprintCommand}),describe("getApdu",()=>{it("returns the correct APDU",()=>{const r=s.getApdu();expect(r.getRawApdu()).toEqual(i)})}),describe("parseResponse",()=>{it("should return the master fingerprint",()=>{const r=new e.ApduResponse({data:n,statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);expect(t).toEqual((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([130,141,194,243])}}))}),it("should return an error if the response is not successful",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),t=s.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!1)}),it("should return an error if the response is too short",()=>{const r=new e.ApduResponse({data:n.slice(0,2),statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);(0,e.isSuccessCommandResult)(t)?fail("Expected an error, but the result was successful"):expect(t.error).toEqual(new o.InvalidStatusWordError("Master fingerprint is missing"))})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),o=require("@ledgerhq/device-management-kit"),a=require("./GetMasterFingerprintCommand");const i=new Uint8Array([225,5,0,0,0]),n=new Uint8Array([130,141,194,243]);describe("GetMasterFingerprintCommand",()=>{let s;beforeEach(()=>{s=new a.GetMasterFingerprintCommand}),describe("getApdu",()=>{it("returns the correct APDU",()=>{const r=s.getApdu();expect(r.getRawApdu()).toEqual(i)})}),describe("parseResponse",()=>{it("should return the master fingerprint",()=>{const r=new e.ApduResponse({data:n,statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);expect(t).toEqual((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([130,141,194,243])}}))}),it("should return an error if the response is not successful",()=>{const r=new e.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),t=s.parseResponse(r);expect((0,e.isSuccessCommandResult)(t)).toBe(!1)}),it("should return an error if the response is too short",()=>{const r=new e.ApduResponse({data:n.slice(0,2),statusCode:new Uint8Array([144,0])}),t=s.parseResponse(r);(0,e.isSuccessCommandResult)(t)?assert.fail("Expected an error, but the result was successful"):expect(t.error).toEqual(new o.InvalidStatusWordError("Master fingerprint is missing"))})})});
2
2
  //# sourceMappingURL=GetMasterFingerprintCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetMasterFingerprintCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { InvalidStatusWordError } from \"@ledgerhq/device-management-kit\";\n\nimport { GetMasterFingerprintCommand } from \"./GetMasterFingerprintCommand\";\n\nconst GET_MASTER_FINGERPRINT_APDU = new Uint8Array([\n 0xe1, 0x05, 0x00, 0x00, 0x00,\n]);\n\nconst GET_MASTER_FINGERPRINT_RESPONSE = new Uint8Array([\n 0x82, 0x8d, 0xc2, 0xf3,\n]);\n\ndescribe(\"GetMasterFingerprintCommand\", () => {\n let command: GetMasterFingerprintCommand;\n\n beforeEach(() => {\n command = new GetMasterFingerprintCommand();\n });\n\n describe(\"getApdu\", () => {\n it(\"returns the correct APDU\", () => {\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toEqual(GET_MASTER_FINGERPRINT_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the master fingerprint\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE,\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: {\n masterFingerprint: Uint8Array.from([0x82, 0x8d, 0xc2, 0xf3]),\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n // GIVEN\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6d, 0x00]),\n data: new Uint8Array(0),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE.slice(0, 2),\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Master fingerprint is missing\"),\n );\n } else {\n fail(\"Expected an error, but the result was successful\");\n }\n });\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAIO,2CACPA,EAAuC,2CAEvCC,EAA4C,yCAE5C,MAAMC,EAA8B,IAAI,WAAW,CACjD,IAAM,EAAM,EAAM,EAAM,CAC1B,CAAC,EAEKC,EAAkC,IAAI,WAAW,CACrD,IAAM,IAAM,IAAM,GACpB,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,6BAChB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,2BAA4B,IAAM,CAEnC,MAAMC,EAAOD,EAAQ,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQH,CAA2B,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,IAAM,CAE/C,MAAMI,EAAW,IAAI,eAAa,CAChC,KAAMH,EACN,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,OAAOC,CAAM,EAAE,WACb,wBAAqB,CACnB,KAAM,CACJ,kBAAmB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CAC7D,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CAEnE,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EAGKC,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAE9D,MAAMD,EAAW,IAAI,eAAa,CAChC,KAAMH,EAAgC,MAAM,EAAG,CAAC,EAChD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,KAGxC,0BAAuBC,CAAM,EAKhC,KAAK,kDAAkD,EAJvD,OAAOA,EAAO,KAAK,EAAE,QACnB,IAAI,yBAAuB,+BAA+B,CAC5D,CAIJ,CAAC,CACH,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { InvalidStatusWordError } from \"@ledgerhq/device-management-kit\";\n\nimport { GetMasterFingerprintCommand } from \"./GetMasterFingerprintCommand\";\n\nconst GET_MASTER_FINGERPRINT_APDU = new Uint8Array([\n 0xe1, 0x05, 0x00, 0x00, 0x00,\n]);\n\nconst GET_MASTER_FINGERPRINT_RESPONSE = new Uint8Array([\n 0x82, 0x8d, 0xc2, 0xf3,\n]);\n\ndescribe(\"GetMasterFingerprintCommand\", () => {\n let command: GetMasterFingerprintCommand;\n\n beforeEach(() => {\n command = new GetMasterFingerprintCommand();\n });\n\n describe(\"getApdu\", () => {\n it(\"returns the correct APDU\", () => {\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n expect(apdu.getRawApdu()).toEqual(GET_MASTER_FINGERPRINT_APDU);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the master fingerprint\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE,\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(result).toEqual(\n CommandResultFactory({\n data: {\n masterFingerprint: Uint8Array.from([0x82, 0x8d, 0xc2, 0xf3]),\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n // GIVEN\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6d, 0x00]),\n data: new Uint8Array(0),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n\n it(\"should return an error if the response is too short\", () => {\n // GIVEN\n const response = new ApduResponse({\n data: GET_MASTER_FINGERPRINT_RESPONSE.slice(0, 2),\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // WHEN\n const result = command.parseResponse(response);\n\n // THEN\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Master fingerprint is missing\"),\n );\n } else {\n assert.fail(\"Expected an error, but the result was successful\");\n }\n });\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAIO,2CACPA,EAAuC,2CAEvCC,EAA4C,yCAE5C,MAAMC,EAA8B,IAAI,WAAW,CACjD,IAAM,EAAM,EAAM,EAAM,CAC1B,CAAC,EAEKC,EAAkC,IAAI,WAAW,CACrD,IAAM,IAAM,IAAM,GACpB,CAAC,EAED,SAAS,8BAA+B,IAAM,CAC5C,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAU,IAAI,6BAChB,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,2BAA4B,IAAM,CAEnC,MAAMC,EAAOD,EAAQ,QAAQ,EAG7B,OAAOC,EAAK,WAAW,CAAC,EAAE,QAAQH,CAA2B,CAC/D,CAAC,CACH,CAAC,EAED,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,IAAM,CAE/C,MAAMI,EAAW,IAAI,eAAa,CAChC,KAAMH,EACN,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,OAAOC,CAAM,EAAE,WACb,wBAAqB,CACnB,KAAM,CACJ,kBAAmB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,GAAI,CAAC,CAC7D,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,2DAA4D,IAAM,CAEnE,MAAMD,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CACxB,CAAC,EAGKC,EAASH,EAAQ,cAAcE,CAAQ,EAG7C,UAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,CACnD,CAAC,EAED,GAAG,sDAAuD,IAAM,CAE9D,MAAMD,EAAW,IAAI,eAAa,CAChC,KAAMH,EAAgC,MAAM,EAAG,CAAC,EAChD,WAAY,IAAI,WAAW,CAAC,IAAM,CAAI,CAAC,CACzC,CAAC,EAGKI,EAASH,EAAQ,cAAcE,CAAQ,KAGxC,0BAAuBC,CAAM,EAKhC,OAAO,KAAK,kDAAkD,EAJ9D,OAAOA,EAAO,KAAK,EAAE,QACnB,IAAI,yBAAuB,+BAA+B,CAC5D,CAIJ,CAAC,CACH,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_GetMasterFingerprintCommand", "GET_MASTER_FINGERPRINT_APDU", "GET_MASTER_FINGERPRINT_RESPONSE", "command", "apdu", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var r=require("@ledgerhq/device-management-kit"),d=require("./utils/constants"),n=require("./GetWalletAddressCommand");const l=new Uint8Array([144,0]),A=new Uint8Array([105,133]);describe("GetWalletAddressCommand",()=>{let o;const c={checkOnDevice:!0,walletId:Uint8Array.from("walletIdBuffer",e=>e.charCodeAt(0)),walletHmac:Uint8Array.from("walletHmacBuffer",e=>e.charCodeAt(0)),change:!1,addressIndex:0};beforeEach(()=>{o=new n.GetWalletAddressCommand(c),jest.clearAllMocks(),jest.requireActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return correct APDU for default arguments",()=>{const e=o.getApdu(),t=Uint8Array.from([225,3,0,1,36,1,...Uint8Array.from("walletIdBuffer",a=>a.charCodeAt(0)),...Uint8Array.from("walletHmacBuffer",a=>a.charCodeAt(0)),0,0,0,0,0]);expect(e.getRawApdu()).toEqual(t)}),it("should return correct APDU for different arguments",()=>{const e={checkOnDevice:!1,walletId:Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),walletHmac:Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),change:!0,addressIndex:5};o=new n.GetWalletAddressCommand(e);const t=o.getApdu(),a=Uint8Array.from([225,3,0,1,38,0,...Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),...Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),1,0,0,0,5]);expect(t.getRawApdu()).toEqual(a)})}),describe("parseResponse",()=>{it("should return the APDU response if it's a continue response",()=>{const e=new Uint8Array([1,2,3,4]),t=new r.ApduResponse({statusCode:d.SW_INTERRUPTED_EXECUTION,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))}),it("should return an error if user denied the operation",()=>{const e=new r.ApduResponse({statusCode:A,data:new Uint8Array([])}),t=o.parseResponse(e);expect((0,r.isSuccessCommandResult)(t)).toBe(!1),(0,r.isSuccessCommandResult)(t)||expect(t.error).toBeDefined()}),it("should return correct data when response is not empty",()=>{const e=Uint8Array.from("addressData",s=>s.charCodeAt(0)),t=new r.ApduResponse({statusCode:l,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))})})});
1
+ "use strict";var r=require("@ledgerhq/device-management-kit"),d=require("./utils/constants"),n=require("./GetWalletAddressCommand");const l=new Uint8Array([144,0]),A=new Uint8Array([105,133]);describe("GetWalletAddressCommand",()=>{let o;const c={checkOnDevice:!0,walletId:Uint8Array.from("walletIdBuffer",e=>e.charCodeAt(0)),walletHmac:Uint8Array.from("walletHmacBuffer",e=>e.charCodeAt(0)),change:!1,addressIndex:0};beforeEach(()=>{o=new n.GetWalletAddressCommand(c),vi.clearAllMocks(),vi.importActual("@ledgerhq/device-management-kit")}),describe("getApdu",()=>{it("should return correct APDU for default arguments",()=>{const e=o.getApdu(),t=Uint8Array.from([225,3,0,1,36,1,...Uint8Array.from("walletIdBuffer",a=>a.charCodeAt(0)),...Uint8Array.from("walletHmacBuffer",a=>a.charCodeAt(0)),0,0,0,0,0]);expect(e.getRawApdu()).toEqual(t)}),it("should return correct APDU for different arguments",()=>{const e={checkOnDevice:!1,walletId:Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),walletHmac:Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),change:!0,addressIndex:5};o=new n.GetWalletAddressCommand(e);const t=o.getApdu(),a=Uint8Array.from([225,3,0,1,38,0,...Uint8Array.from("anotherWalletId",s=>s.charCodeAt(0)),...Uint8Array.from("anotherWalletHmac",s=>s.charCodeAt(0)),1,0,0,0,5]);expect(t.getRawApdu()).toEqual(a)})}),describe("parseResponse",()=>{it("should return the APDU response if it's a continue response",()=>{const e=new Uint8Array([1,2,3,4]),t=new r.ApduResponse({statusCode:d.SW_INTERRUPTED_EXECUTION,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))}),it("should return an error if user denied the operation",()=>{const e=new r.ApduResponse({statusCode:A,data:new Uint8Array([])}),t=o.parseResponse(e);expect((0,r.isSuccessCommandResult)(t)).toBe(!1),(0,r.isSuccessCommandResult)(t)||expect(t.error).toBeDefined()}),it("should return correct data when response is not empty",()=>{const e=Uint8Array.from("addressData",s=>s.charCodeAt(0)),t=new r.ApduResponse({statusCode:l,data:e}),a=o.parseResponse(t);expect(a).toStrictEqual((0,r.CommandResultFactory)({data:t}))})})});
2
2
  //# sourceMappingURL=GetWalletAddressCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/GetWalletAddressCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { SW_INTERRUPTED_EXECUTION } from \"./utils/constants\";\nimport {\n GetWalletAddressCommand,\n type GetWalletAddressCommandArgs,\n} from \"./GetWalletAddressCommand\";\n\nconst SUCCESS_STATUS = new Uint8Array([0x90, 0x00]);\nconst USER_DENIED_STATUS = new Uint8Array([0x69, 0x85]);\n\ndescribe(\"GetWalletAddressCommand\", () => {\n let command: GetWalletAddressCommand;\n const defaultArgs: GetWalletAddressCommandArgs = {\n checkOnDevice: true,\n walletId: Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n change: false,\n addressIndex: 0x00000000,\n };\n\n beforeEach(() => {\n command = new GetWalletAddressCommand(defaultArgs);\n jest.clearAllMocks();\n jest.requireActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return correct APDU for default arguments\", () => {\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x24, // Length of data: 36 bytes\n 0x01, // checkOnDevice: true\n ...Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n 0x00, // change: false\n 0x00,\n 0x00,\n 0x00,\n 0x00, // addressIndex: 0x00000000\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n\n it(\"should return correct APDU for different arguments\", () => {\n const args: GetWalletAddressCommandArgs = {\n checkOnDevice: false,\n walletId: Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"anotherWalletHmac\", (c) =>\n c.charCodeAt(0),\n ),\n change: true,\n addressIndex: 0x00000005,\n };\n command = new GetWalletAddressCommand(args);\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x26, // Length of data\n 0x00, // checkOnDevice: false\n ...Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"anotherWalletHmac\", (c) => c.charCodeAt(0)),\n 0x01, // change: true\n 0x00,\n 0x00,\n 0x00,\n 0x05, // addressIndex: 0x00000005\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the APDU response if it's a continue response\", () => {\n // given\n const continueResponseData = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n\n const apduResponse = new ApduResponse({\n statusCode: SW_INTERRUPTED_EXECUTION,\n data: continueResponseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({\n data: apduResponse,\n }),\n );\n });\n\n it(\"should return an error if user denied the operation\", () => {\n // given\n const apduResponse = new ApduResponse({\n statusCode: USER_DENIED_STATUS,\n data: new Uint8Array([]),\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(isSuccessCommandResult(response)).toBe(false);\n if (!isSuccessCommandResult(response)) {\n expect(response.error).toBeDefined();\n }\n });\n\n it(\"should return correct data when response is not empty\", () => {\n // given\n const responseData = Uint8Array.from(\"addressData\", (c) =>\n c.charCodeAt(0),\n );\n\n const apduResponse = new ApduResponse({\n statusCode: SUCCESS_STATUS,\n data: responseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({ data: apduResponse }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { SW_INTERRUPTED_EXECUTION } from \"./utils/constants\";\nimport {\n GetWalletAddressCommand,\n type GetWalletAddressCommandArgs,\n} from \"./GetWalletAddressCommand\";\n\nconst SUCCESS_STATUS = new Uint8Array([0x90, 0x00]);\nconst USER_DENIED_STATUS = new Uint8Array([0x69, 0x85]);\n\ndescribe(\"GetWalletAddressCommand\", () => {\n let command: GetWalletAddressCommand;\n const defaultArgs: GetWalletAddressCommandArgs = {\n checkOnDevice: true,\n walletId: Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n change: false,\n addressIndex: 0x00000000,\n };\n\n beforeEach(() => {\n command = new GetWalletAddressCommand(defaultArgs);\n vi.clearAllMocks();\n vi.importActual(\"@ledgerhq/device-management-kit\");\n });\n\n describe(\"getApdu\", () => {\n it(\"should return correct APDU for default arguments\", () => {\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x24, // Length of data: 36 bytes\n 0x01, // checkOnDevice: true\n ...Uint8Array.from(\"walletIdBuffer\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"walletHmacBuffer\", (c) => c.charCodeAt(0)),\n 0x00, // change: false\n 0x00,\n 0x00,\n 0x00,\n 0x00, // addressIndex: 0x00000000\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n\n it(\"should return correct APDU for different arguments\", () => {\n const args: GetWalletAddressCommandArgs = {\n checkOnDevice: false,\n walletId: Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n walletHmac: Uint8Array.from(\"anotherWalletHmac\", (c) =>\n c.charCodeAt(0),\n ),\n change: true,\n addressIndex: 0x00000005,\n };\n command = new GetWalletAddressCommand(args);\n const apdu = command.getApdu();\n const expectedApdu = Uint8Array.from([\n 0xe1, // CLA\n 0x03, // INS\n 0x00, // P1\n 0x01, // P2\n 0x26, // Length of data\n 0x00, // checkOnDevice: false\n ...Uint8Array.from(\"anotherWalletId\", (c) => c.charCodeAt(0)),\n ...Uint8Array.from(\"anotherWalletHmac\", (c) => c.charCodeAt(0)),\n 0x01, // change: true\n 0x00,\n 0x00,\n 0x00,\n 0x05, // addressIndex: 0x00000005\n ]);\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"parseResponse\", () => {\n it(\"should return the APDU response if it's a continue response\", () => {\n // given\n const continueResponseData = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n\n const apduResponse = new ApduResponse({\n statusCode: SW_INTERRUPTED_EXECUTION,\n data: continueResponseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({\n data: apduResponse,\n }),\n );\n });\n\n it(\"should return an error if user denied the operation\", () => {\n // given\n const apduResponse = new ApduResponse({\n statusCode: USER_DENIED_STATUS,\n data: new Uint8Array([]),\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(isSuccessCommandResult(response)).toBe(false);\n if (!isSuccessCommandResult(response)) {\n expect(response.error).toBeDefined();\n }\n });\n\n it(\"should return correct data when response is not empty\", () => {\n // given\n const responseData = Uint8Array.from(\"addressData\", (c) =>\n c.charCodeAt(0),\n );\n\n const apduResponse = new ApduResponse({\n statusCode: SUCCESS_STATUS,\n data: responseData,\n });\n\n // when\n const response = command.parseResponse(apduResponse);\n\n // then\n expect(response).toStrictEqual(\n CommandResultFactory({ data: apduResponse }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_constants", "import_GetWalletAddressCommand", "SUCCESS_STATUS", "USER_DENIED_STATUS", "command", "defaultArgs", "c", "apdu", "expectedApdu", "args", "continueResponseData", "apduResponse", "response", "responseData"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var x=require("@ledgerhq/device-management-kit"),s=require("../../app-binder/command/RegisterWalletAddressCommand");const r=Uint8Array.from([124,103,232,79,153,116,70,113,20,147,239,139,116,112,177,15,96,75,2,210,88,79,160,68,111,206,247,217,137,131,227,220]),n=2,d=Uint8Array.from([75,197,70,127,36,147,133,178,158,91,142,201,251,36,204,101,163,113,11,26,38,210,141,233,245,196,243,244,93,214,84,193]),l=Uint8Array.from([2,12,67,111,108,100,32,115,116,111,114,97,103,101,30]),i=2,o=Uint8Array.from([i].concat(...l).concat(...r).concat([n]).concat(...d)),f=Uint8Array.from([225,2,0,1,81].concat(...o)),a=Uint8Array.from([29,21,14,212,37,168,113,165,202,126,44,85,219,27,50,149,193,253,151,20,127,208,167,177,136,212,50,127,75,167,64,42,250,115,227,97,25,50,79,190,76,193,202,148,170,132,44,98,97,82,109,68,17,42,34,22,75,197,124,51,53,16,43,4]);describe("RegisterWalletAddressCommand",()=>{describe("getApdu",()=>{it("should send the correct APDU",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o});expect(e.getApdu().getRawApdu()).toEqual(f)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:new Uint8Array([144,0]),data:a});expect(e.parseResponse(t)).toEqual((0,x.CommandResultFactory)({data:{walletId:a.slice(0,32),walletHmac:a.slice(32)}}))}),it("should return an error if the response is not successful",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),c=e.parseResponse(t);expect((0,x.isSuccessCommandResult)(c)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({data:a.slice(0,2),statusCode:new Uint8Array([144,0])}),c=e.parseResponse(t);(0,x.isSuccessCommandResult)(c)?fail("Expected an error, but the result was successful"):expect(c.error).toEqual(new x.InvalidStatusWordError("Data mismatch"))})})});
1
+ "use strict";var x=require("@ledgerhq/device-management-kit"),s=require("../../app-binder/command/RegisterWalletAddressCommand");const r=Uint8Array.from([124,103,232,79,153,116,70,113,20,147,239,139,116,112,177,15,96,75,2,210,88,79,160,68,111,206,247,217,137,131,227,220]),n=2,d=Uint8Array.from([75,197,70,127,36,147,133,178,158,91,142,201,251,36,204,101,163,113,11,26,38,210,141,233,245,196,243,244,93,214,84,193]),l=Uint8Array.from([2,12,67,111,108,100,32,115,116,111,114,97,103,101,30]),i=2,o=Uint8Array.from([i].concat(...l).concat(...r).concat([n]).concat(...d)),f=Uint8Array.from([225,2,0,1,81].concat(...o)),c=Uint8Array.from([29,21,14,212,37,168,113,165,202,126,44,85,219,27,50,149,193,253,151,20,127,208,167,177,136,212,50,127,75,167,64,42,250,115,227,97,25,50,79,190,76,193,202,148,170,132,44,98,97,82,109,68,17,42,34,22,75,197,124,51,53,16,43,4]);describe("RegisterWalletAddressCommand",()=>{describe("getApdu",()=>{it("should send the correct APDU",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o});expect(e.getApdu().getRawApdu()).toEqual(f)})}),describe("parseResponse",()=>{it("should parse the response correctly",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:new Uint8Array([144,0]),data:c});expect(e.parseResponse(t)).toEqual((0,x.CommandResultFactory)({data:{walletId:c.slice(0,32),walletHmac:c.slice(32)}}))}),it("should return an error if the response is not successful",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({statusCode:Uint8Array.from([109,0]),data:new Uint8Array(0)}),a=e.parseResponse(t);expect((0,x.isSuccessCommandResult)(a)).toBe(!1)}),it("should return an error if the response is too short",()=>{const e=new s.RegisterWalletAddressCommand({walletPolicy:o}),t=new x.ApduResponse({data:c.slice(0,2),statusCode:new Uint8Array([144,0])}),a=e.parseResponse(t);(0,x.isSuccessCommandResult)(a)?assert.fail("Expected an error, but the result was successful"):expect(a.error).toEqual(new x.InvalidStatusWordError("Data mismatch"))})})});
2
2
  //# sourceMappingURL=RegisterWalletAddressCommand.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/command/RegisterWalletAddressCommand.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { RegisterWalletAddressCommand } from \"@internal/app-binder/command/RegisterWalletAddressCommand\";\n\nconst POLICY_HASH_DATA = Uint8Array.from([\n 0x7c, 0x67, 0xe8, 0x4f, 0x99, 0x74, 0x46, 0x71, 0x14, 0x93, 0xef, 0x8b, 0x74,\n 0x70, 0xb1, 0x0f, 0x60, 0x4b, 0x02, 0xd2, 0x58, 0x4f, 0xa0, 0x44, 0x6f, 0xce,\n 0xf7, 0xd9, 0x89, 0x83, 0xe3, 0xdc,\n]);\nconst KEYS_LENGTH = 0x02;\nconst KEYS_HASH_DATA = Uint8Array.from([\n 0x4b, 0xc5, 0x46, 0x7f, 0x24, 0x93, 0x85, 0xb2, 0x9e, 0x5b, 0x8e, 0xc9, 0xfb,\n 0x24, 0xcc, 0x65, 0xa3, 0x71, 0x0b, 0x1a, 0x26, 0xd2, 0x8d, 0xe9, 0xf5, 0xc4,\n 0xf3, 0xf4, 0x5d, 0xd6, 0x54, 0xc1,\n]);\nconst POLICY_NAME_DATA = Uint8Array.from([\n 0x02, 0x0c, 0x43, 0x6f, 0x6c, 0x64, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,\n 0x65, 0x1e,\n]);\nconst POLICY_VERSION = 0x02;\nconst WALLET_POLICY_DATA = Uint8Array.from(\n [POLICY_VERSION]\n .concat(...POLICY_NAME_DATA)\n .concat(...POLICY_HASH_DATA)\n .concat([KEYS_LENGTH])\n .concat(...KEYS_HASH_DATA),\n);\nconst EXPECTED_RAW_APDU = Uint8Array.from(\n [0xe1, 0x02, 0x00, 0x01, 0x51].concat(...WALLET_POLICY_DATA),\n);\nconst APDU_RESPONSE = Uint8Array.from([\n 0x1d, 0x15, 0x0e, 0xd4, 0x25, 0xa8, 0x71, 0xa5, 0xca, 0x7e, 0x2c, 0x55, 0xdb,\n 0x1b, 0x32, 0x95, 0xc1, 0xfd, 0x97, 0x14, 0x7f, 0xd0, 0xa7, 0xb1, 0x88, 0xd4,\n 0x32, 0x7f, 0x4b, 0xa7, 0x40, 0x2a, 0xfa, 0x73, 0xe3, 0x61, 0x19, 0x32, 0x4f,\n 0xbe, 0x4c, 0xc1, 0xca, 0x94, 0xaa, 0x84, 0x2c, 0x62, 0x61, 0x52, 0x6d, 0x44,\n 0x11, 0x2a, 0x22, 0x16, 0x4b, 0xc5, 0x7c, 0x33, 0x35, 0x10, 0x2b, 0x04,\n]);\n\ndescribe(\"RegisterWalletAddressCommand\", () => {\n describe(\"getApdu\", () => {\n it(\"should send the correct APDU\", () => {\n // when\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n\n // then\n expect(command.getApdu().getRawApdu()).toEqual(EXPECTED_RAW_APDU);\n });\n });\n describe(\"parseResponse\", () => {\n it(\"should parse the response correctly\", () => {\n // given\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: APDU_RESPONSE,\n });\n\n // then\n expect(command.parseResponse(response)).toEqual(\n CommandResultFactory({\n data: {\n walletId: APDU_RESPONSE.slice(0, 32),\n walletHmac: APDU_RESPONSE.slice(32),\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n // given\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6d, 0x00]),\n data: new Uint8Array(0),\n });\n\n // when\n const result = command.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n it(\"should return an error if the response is too short\", () => {\n // given\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n const response = new ApduResponse({\n data: APDU_RESPONSE.slice(0, 2),\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // when\n const result = command.parseResponse(response);\n\n // then\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Data mismatch\"),\n );\n } else {\n fail(\"Expected an error, but the result was successful\");\n }\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { RegisterWalletAddressCommand } from \"@internal/app-binder/command/RegisterWalletAddressCommand\";\n\nconst POLICY_HASH_DATA = Uint8Array.from([\n 0x7c, 0x67, 0xe8, 0x4f, 0x99, 0x74, 0x46, 0x71, 0x14, 0x93, 0xef, 0x8b, 0x74,\n 0x70, 0xb1, 0x0f, 0x60, 0x4b, 0x02, 0xd2, 0x58, 0x4f, 0xa0, 0x44, 0x6f, 0xce,\n 0xf7, 0xd9, 0x89, 0x83, 0xe3, 0xdc,\n]);\nconst KEYS_LENGTH = 0x02;\nconst KEYS_HASH_DATA = Uint8Array.from([\n 0x4b, 0xc5, 0x46, 0x7f, 0x24, 0x93, 0x85, 0xb2, 0x9e, 0x5b, 0x8e, 0xc9, 0xfb,\n 0x24, 0xcc, 0x65, 0xa3, 0x71, 0x0b, 0x1a, 0x26, 0xd2, 0x8d, 0xe9, 0xf5, 0xc4,\n 0xf3, 0xf4, 0x5d, 0xd6, 0x54, 0xc1,\n]);\nconst POLICY_NAME_DATA = Uint8Array.from([\n 0x02, 0x0c, 0x43, 0x6f, 0x6c, 0x64, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67,\n 0x65, 0x1e,\n]);\nconst POLICY_VERSION = 0x02;\nconst WALLET_POLICY_DATA = Uint8Array.from(\n [POLICY_VERSION]\n .concat(...POLICY_NAME_DATA)\n .concat(...POLICY_HASH_DATA)\n .concat([KEYS_LENGTH])\n .concat(...KEYS_HASH_DATA),\n);\nconst EXPECTED_RAW_APDU = Uint8Array.from(\n [0xe1, 0x02, 0x00, 0x01, 0x51].concat(...WALLET_POLICY_DATA),\n);\nconst APDU_RESPONSE = Uint8Array.from([\n 0x1d, 0x15, 0x0e, 0xd4, 0x25, 0xa8, 0x71, 0xa5, 0xca, 0x7e, 0x2c, 0x55, 0xdb,\n 0x1b, 0x32, 0x95, 0xc1, 0xfd, 0x97, 0x14, 0x7f, 0xd0, 0xa7, 0xb1, 0x88, 0xd4,\n 0x32, 0x7f, 0x4b, 0xa7, 0x40, 0x2a, 0xfa, 0x73, 0xe3, 0x61, 0x19, 0x32, 0x4f,\n 0xbe, 0x4c, 0xc1, 0xca, 0x94, 0xaa, 0x84, 0x2c, 0x62, 0x61, 0x52, 0x6d, 0x44,\n 0x11, 0x2a, 0x22, 0x16, 0x4b, 0xc5, 0x7c, 0x33, 0x35, 0x10, 0x2b, 0x04,\n]);\n\ndescribe(\"RegisterWalletAddressCommand\", () => {\n describe(\"getApdu\", () => {\n it(\"should send the correct APDU\", () => {\n // when\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n\n // then\n expect(command.getApdu().getRawApdu()).toEqual(EXPECTED_RAW_APDU);\n });\n });\n describe(\"parseResponse\", () => {\n it(\"should parse the response correctly\", () => {\n // given\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n const response = new ApduResponse({\n statusCode: new Uint8Array([0x90, 0x00]),\n data: APDU_RESPONSE,\n });\n\n // then\n expect(command.parseResponse(response)).toEqual(\n CommandResultFactory({\n data: {\n walletId: APDU_RESPONSE.slice(0, 32),\n walletHmac: APDU_RESPONSE.slice(32),\n },\n }),\n );\n });\n\n it(\"should return an error if the response is not successful\", () => {\n // given\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6d, 0x00]),\n data: new Uint8Array(0),\n });\n\n // when\n const result = command.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n });\n it(\"should return an error if the response is too short\", () => {\n // given\n const command = new RegisterWalletAddressCommand({\n walletPolicy: WALLET_POLICY_DATA,\n });\n const response = new ApduResponse({\n data: APDU_RESPONSE.slice(0, 2),\n statusCode: new Uint8Array([0x90, 0x00]),\n });\n\n // when\n const result = command.parseResponse(response);\n\n // then\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toEqual(\n new InvalidStatusWordError(\"Data mismatch\"),\n );\n } else {\n assert.fail(\"Expected an error, but the result was successful\");\n }\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_RegisterWalletAddressCommand", "POLICY_HASH_DATA", "KEYS_LENGTH", "KEYS_HASH_DATA", "POLICY_NAME_DATA", "POLICY_VERSION", "WALLET_POLICY_DATA", "EXPECTED_RAW_APDU", "APDU_RESPONSE", "command", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var d=require("purify-ts"),o=require("../../../app-binder/command/utils/constants"),h=require("../../../utils/Varint"),i=require("./GetMerkleLeafIndexCommandHandler");const x=o.ClientCommandCodes.GET_MERKLE_LEAF_INDEX;describe("GetMerkleLeafIndexCommandHandler",()=>{let s,r;beforeEach(()=>{jest.clearAllMocks(),r={getMerkleLeafIndex:jest.fn()},s={dataStore:r,queue:[],yieldedResults:[]}});const u=(e,t,f)=>new Uint8Array([e,...t,...f]);it("should return the index when the Merkle leaf is found",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t),n=123456,l=(0,h.encodeVarint)(n).unsafeCoerce();r.getMerkleLeafIndex.mockReturnValue((0,d.Just)(n));const c=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),a=new Uint8Array(1+l.length);a[0]=1,a.set(l,1),expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(s.queue).toHaveLength(0)}),it("should return a failure response when the Merkle leaf is not found",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t);r.getMerkleLeafIndex.mockReturnValue(d.Nothing);const n=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),l=Uint8Array.from([0]);expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(n.isRight()).toBe(!0),expect(n.unsafeCoerce()).toEqual(l),expect(s.queue).toHaveLength(0)}),it("should correctly handle a leaf index of zero",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t),n=0,l=(0,h.encodeVarint)(n).unsafeCoerce();r.getMerkleLeafIndex.mockReturnValue((0,d.Just)(n));const c=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),a=new Uint8Array(1+l.length);a[0]=1,a.set(l,1),expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(s.queue).toHaveLength(0)}),it("should correctly handle the maximum SHA256_SIZE-bit unsigned integer as a leaf index",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t),n=4294967295,l=(0,h.encodeVarint)(n).unsafeCoerce();r.getMerkleLeafIndex.mockReturnValue((0,d.Just)(n));const c=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),a=new Uint8Array(1+l.length);a[0]=1,a.set(l,1),expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(s.queue).toHaveLength(0)})});
1
+ "use strict";var d=require("purify-ts"),o=require("../../../app-binder/command/utils/constants"),h=require("../../../utils/Varint"),i=require("./GetMerkleLeafIndexCommandHandler");const x=o.ClientCommandCodes.GET_MERKLE_LEAF_INDEX;describe("GetMerkleLeafIndexCommandHandler",()=>{let s,r;beforeEach(()=>{vi.clearAllMocks(),r={getMerkleLeafIndex:vi.fn()},s={dataStore:r,queue:[],yieldedResults:[]}});const u=(e,t,f)=>new Uint8Array([e,...t,...f]);it("should return the index when the Merkle leaf is found",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t),n=123456,l=(0,h.encodeVarint)(n).unsafeCoerce();r.getMerkleLeafIndex.mockReturnValue((0,d.Just)(n));const c=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),a=new Uint8Array(1+l.length);a[0]=1,a.set(l,1),expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(s.queue).toHaveLength(0)}),it("should return a failure response when the Merkle leaf is not found",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t);r.getMerkleLeafIndex.mockReturnValue(d.Nothing);const n=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),l=Uint8Array.from([0]);expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(n.isRight()).toBe(!0),expect(n.unsafeCoerce()).toEqual(l),expect(s.queue).toHaveLength(0)}),it("should correctly handle a leaf index of zero",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t),n=0,l=(0,h.encodeVarint)(n).unsafeCoerce();r.getMerkleLeafIndex.mockReturnValue((0,d.Just)(n));const c=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),a=new Uint8Array(1+l.length);a[0]=1,a.set(l,1),expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(s.queue).toHaveLength(0)}),it("should correctly handle the maximum SHA256_SIZE-bit unsigned integer as a leaf index",()=>{const e=new Uint8Array(o.SHA256_SIZE).fill(170),t=new Uint8Array(o.SHA256_SIZE).fill(255),f=u(x,e,t),n=4294967295,l=(0,h.encodeVarint)(n).unsafeCoerce();r.getMerkleLeafIndex.mockReturnValue((0,d.Just)(n));const c=(0,i.GetMerkleLeafIndexCommandHandler)(f,s),a=new Uint8Array(1+l.length);a[0]=1,a.set(l,1),expect(r.getMerkleLeafIndex).toHaveBeenCalledWith(e,t),expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(s.queue).toHaveLength(0)})});
2
2
  //# sourceMappingURL=GetMerkleLeafIndexCommandHandler.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.ts"],
4
- "sourcesContent": ["import { Just, Nothing } from \"purify-ts\";\n\nimport {\n ClientCommandCodes,\n SHA256_SIZE,\n} from \"@internal/app-binder/command/utils/constants\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type CommandHandlerContext } from \"./ClientCommandHandlersTypes\";\nimport { GetMerkleLeafIndexCommandHandler } from \"./GetMerkleLeafIndexCommandHandler\";\n\nconst COMMAND_CODE = ClientCommandCodes.GET_MERKLE_LEAF_INDEX;\n\ndescribe(\"GetMerkleLeafIndexCommandHandler\", () => {\n let commandHandlerContext: CommandHandlerContext;\n let mockDataStore: jest.Mocked<DataStore>;\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n mockDataStore = {\n getMerkleLeafIndex: jest.fn(),\n } as unknown as jest.Mocked<DataStore>;\n\n commandHandlerContext = {\n dataStore: mockDataStore,\n queue: [],\n yieldedResults: [],\n };\n });\n\n const createRequest = (\n commandCode: number,\n merkleRootHash: Uint8Array,\n leafNodeHash: Uint8Array,\n ): Uint8Array =>\n new Uint8Array([commandCode, ...merkleRootHash, ...leafNodeHash]);\n\n it(\"should return the index when the Merkle leaf is found\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n const leafIndex = 123456;\n const encodedLeafIndexVarint = encodeVarint(leafIndex).unsafeCoerce();\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Just(leafIndex));\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedResponseBuffer = new Uint8Array(\n 1 + encodedLeafIndexVarint.length,\n );\n expectedResponseBuffer[0] = 1; // index found\n expectedResponseBuffer.set(encodedLeafIndexVarint, 1);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponseBuffer);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should return a failure response when the Merkle leaf is not found\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Nothing);\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedFailureResponseBuffer = Uint8Array.from([0]);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(\n expectedFailureResponseBuffer,\n );\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should correctly handle a leaf index of zero\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n const leafIndex = 0;\n const encodedLeafIndexVarint = encodeVarint(leafIndex).unsafeCoerce();\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Just(leafIndex));\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedResponseBuffer = new Uint8Array(\n 1 + encodedLeafIndexVarint.length,\n );\n expectedResponseBuffer[0] = 1; // index found\n expectedResponseBuffer.set(encodedLeafIndexVarint, 1);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponseBuffer);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should correctly handle the maximum SHA256_SIZE-bit unsigned integer as a leaf index\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n const maximumLeafIndex = 0xffffffff; // maximum value of a SHA256_SIZE-bit unsigned integer\n const encodedLeafIndexVarint =\n encodeVarint(maximumLeafIndex).unsafeCoerce();\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Just(maximumLeafIndex));\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedResponseBuffer = new Uint8Array(\n 1 + encodedLeafIndexVarint.length,\n );\n expectedResponseBuffer[0] = 1; // index found\n expectedResponseBuffer.set(encodedLeafIndexVarint, 1);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponseBuffer);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { Just, Nothing } from \"purify-ts\";\nimport { type Mocked } from \"vitest\";\n\nimport {\n ClientCommandCodes,\n SHA256_SIZE,\n} from \"@internal/app-binder/command/utils/constants\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type CommandHandlerContext } from \"./ClientCommandHandlersTypes\";\nimport { GetMerkleLeafIndexCommandHandler } from \"./GetMerkleLeafIndexCommandHandler\";\n\nconst COMMAND_CODE = ClientCommandCodes.GET_MERKLE_LEAF_INDEX;\n\ndescribe(\"GetMerkleLeafIndexCommandHandler\", () => {\n let commandHandlerContext: CommandHandlerContext;\n let mockDataStore: Mocked<DataStore>;\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n mockDataStore = {\n getMerkleLeafIndex: vi.fn(),\n } as unknown as Mocked<DataStore>;\n\n commandHandlerContext = {\n dataStore: mockDataStore,\n queue: [],\n yieldedResults: [],\n };\n });\n\n const createRequest = (\n commandCode: number,\n merkleRootHash: Uint8Array,\n leafNodeHash: Uint8Array,\n ): Uint8Array =>\n new Uint8Array([commandCode, ...merkleRootHash, ...leafNodeHash]);\n\n it(\"should return the index when the Merkle leaf is found\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n const leafIndex = 123456;\n const encodedLeafIndexVarint = encodeVarint(leafIndex).unsafeCoerce();\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Just(leafIndex));\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedResponseBuffer = new Uint8Array(\n 1 + encodedLeafIndexVarint.length,\n );\n expectedResponseBuffer[0] = 1; // index found\n expectedResponseBuffer.set(encodedLeafIndexVarint, 1);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponseBuffer);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should return a failure response when the Merkle leaf is not found\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Nothing);\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedFailureResponseBuffer = Uint8Array.from([0]);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(\n expectedFailureResponseBuffer,\n );\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should correctly handle a leaf index of zero\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n const leafIndex = 0;\n const encodedLeafIndexVarint = encodeVarint(leafIndex).unsafeCoerce();\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Just(leafIndex));\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedResponseBuffer = new Uint8Array(\n 1 + encodedLeafIndexVarint.length,\n );\n expectedResponseBuffer[0] = 1; // index found\n expectedResponseBuffer.set(encodedLeafIndexVarint, 1);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponseBuffer);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should correctly handle the maximum SHA256_SIZE-bit unsigned integer as a leaf index\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xff);\n const handlerRequest = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n leafNodeHash,\n );\n const maximumLeafIndex = 0xffffffff; // maximum value of a SHA256_SIZE-bit unsigned integer\n const encodedLeafIndexVarint =\n encodeVarint(maximumLeafIndex).unsafeCoerce();\n\n // when\n mockDataStore.getMerkleLeafIndex.mockReturnValue(Just(maximumLeafIndex));\n\n const handlerResponse = GetMerkleLeafIndexCommandHandler(\n handlerRequest,\n commandHandlerContext,\n );\n\n const expectedResponseBuffer = new Uint8Array(\n 1 + encodedLeafIndexVarint.length,\n );\n expectedResponseBuffer[0] = 1; // index found\n expectedResponseBuffer.set(encodedLeafIndexVarint, 1);\n\n // then\n expect(mockDataStore.getMerkleLeafIndex).toHaveBeenCalledWith(\n merkleRootHash,\n leafNodeHash,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponseBuffer);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_purify_ts", "import_constants", "import_Varint", "import_GetMerkleLeafIndexCommandHandler", "COMMAND_CODE", "commandHandlerContext", "mockDataStore", "createRequest", "commandCode", "merkleRootHash", "leafNodeHash", "handlerRequest", "leafIndex", "encodedLeafIndexVarint", "handlerResponse", "expectedResponseBuffer", "expectedFailureResponseBuffer", "maximumLeafIndex"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var y=require("@ledgerhq/device-management-kit"),h=require("purify-ts"),e=require("../../../app-binder/command/utils/constants"),M=require("../../../utils/Varint"),C=require("./Errors"),g=require("./GetMerkleLeafProofCommandHandler");const k=e.ClientCommandCodes.GET_MERKLE_LEAF_PROOF;describe("GetMerkleLeafProofCommandHandler",()=>{let l,m;beforeEach(()=>{jest.clearAllMocks(),m={getMerkleProof:jest.fn()},l={dataStore:m,queue:[],yieldedResults:[]}});const E=(n,u,r,d)=>new Uint8Array([n,...u,...(0,M.encodeVarint)(r).unsafeCoerce(),...(0,M.encodeVarint)(d).unsafeCoerce()]);it("should return the Merkle leaf and proof when found and proof length is less than or equal to the maximum allowed",()=>{const n=new Uint8Array(e.SHA256_SIZE).fill(1),u=1,r=2,d=E(k,n,u,r),c=new Uint8Array(e.SHA256_SIZE).fill(170),i=[new Uint8Array(e.SHA256_SIZE).fill(187),new Uint8Array(e.SHA256_SIZE).fill(204)];m.getMerkleProof.mockReturnValue((0,h.Just)({leafHash:c,proof:i}));const s=(0,g.GetMerkleLeafProofCommandHandler)(d,l),x=y.APDU_MAX_PAYLOAD-e.SHA256_SIZE-1-1,A=Math.floor(x/e.SHA256_SIZE),p=Math.min(i.length,A),o=new Uint8Array(e.SHA256_SIZE+1+1+e.SHA256_SIZE*p);let t=0;o.set(c,t),t+=e.SHA256_SIZE,o[t++]=i.length,o[t++]=p;for(let a=0;a<p;a++)o.set(i[a],t),t+=e.SHA256_SIZE;expect(m.getMerkleProof).toHaveBeenCalledWith(n,r),expect(s.isRight()).toBe(!0),expect(s.unsafeCoerce()).toEqual(o),expect(l.queue).toHaveLength(0)}),it("should handle proof longer than the maximum allowed by queuing the remaining proof elements",()=>{const n=new Uint8Array(e.SHA256_SIZE).fill(2),u=1,r=3,d=E(k,n,u,r),c=new Uint8Array(e.SHA256_SIZE).fill(221),s=Array.from({length:10},(f,H)=>new Uint8Array(e.SHA256_SIZE).fill(238+H));m.getMerkleProof.mockReturnValue((0,h.Just)({leafHash:c,proof:s}));const x=(0,g.GetMerkleLeafProofCommandHandler)(d,l),A=y.APDU_MAX_PAYLOAD-e.SHA256_SIZE-1-1,p=Math.floor(A/e.SHA256_SIZE),o=Math.min(s.length,p),t=new Uint8Array(e.SHA256_SIZE+1+1+e.SHA256_SIZE*o);let a=0;t.set(c,a),a+=e.SHA256_SIZE,t[a++]=s.length,t[a++]=o;for(let f=0;f<o;f++)t.set(s[f],a),a+=e.SHA256_SIZE;expect(m.getMerkleProof).toHaveBeenCalledWith(n,r),expect(x.isRight()).toBe(!0),expect(x.unsafeCoerce()).toEqual(t),expect(l.queue).toHaveLength(s.length-o);for(let f=0;f<l.queue.length;f++)expect(l.queue[f]).toEqual(s[o+f])}),it("should return an error when the Merkle proof is not found in the data store",()=>{const n=new Uint8Array(e.SHA256_SIZE).fill(4),u=1,r=5,d=E(k,n,u,r);m.getMerkleProof.mockReturnValue(h.Nothing);const c=(0,g.GetMerkleLeafProofCommandHandler)(d,l);expect(c.isLeft()).toBe(!0);const i=c.leftOrDefault(void 0);expect(i).toBeDefined(),expect(i instanceof C.ClientCommandHandlerError).toBe(!0),expect(m.getMerkleProof).toHaveBeenCalledWith(n,r),expect(l.queue).toHaveLength(0)})});
1
+ "use strict";var E=require("@ledgerhq/device-management-kit"),h=require("purify-ts"),e=require("../../../app-binder/command/utils/constants"),M=require("../../../utils/Varint"),C=require("./Errors"),g=require("./GetMerkleLeafProofCommandHandler");const y=e.ClientCommandCodes.GET_MERKLE_LEAF_PROOF;describe("GetMerkleLeafProofCommandHandler",()=>{let l,m;beforeEach(()=>{vi.clearAllMocks(),m={getMerkleProof:vi.fn()},l={dataStore:m,queue:[],yieldedResults:[]}});const A=(n,u,r,d)=>new Uint8Array([n,...u,...(0,M.encodeVarint)(r).unsafeCoerce(),...(0,M.encodeVarint)(d).unsafeCoerce()]);it("should return the Merkle leaf and proof when found and proof length is less than or equal to the maximum allowed",()=>{const n=new Uint8Array(e.SHA256_SIZE).fill(1),u=1,r=2,d=A(y,n,u,r),i=new Uint8Array(e.SHA256_SIZE).fill(170),c=[new Uint8Array(e.SHA256_SIZE).fill(187),new Uint8Array(e.SHA256_SIZE).fill(204)];m.getMerkleProof.mockReturnValue((0,h.Just)({leafHash:i,proof:c}));const s=(0,g.GetMerkleLeafProofCommandHandler)(d,l),x=E.APDU_MAX_PAYLOAD-e.SHA256_SIZE-1-1,k=Math.floor(x/e.SHA256_SIZE),p=Math.min(c.length,k),o=new Uint8Array(e.SHA256_SIZE+1+1+e.SHA256_SIZE*p);let t=0;o.set(i,t),t+=e.SHA256_SIZE,o[t++]=c.length,o[t++]=p;for(let a=0;a<p;a++)o.set(c[a],t),t+=e.SHA256_SIZE;expect(m.getMerkleProof).toHaveBeenCalledWith(n,r),expect(s.isRight()).toBe(!0),expect(s.unsafeCoerce()).toEqual(o),expect(l.queue).toHaveLength(0)}),it("should handle proof longer than the maximum allowed by queuing the remaining proof elements",()=>{const n=new Uint8Array(e.SHA256_SIZE).fill(2),u=1,r=3,d=A(y,n,u,r),i=new Uint8Array(e.SHA256_SIZE).fill(221),s=Array.from({length:10},(f,H)=>new Uint8Array(e.SHA256_SIZE).fill(238+H));m.getMerkleProof.mockReturnValue((0,h.Just)({leafHash:i,proof:s}));const x=(0,g.GetMerkleLeafProofCommandHandler)(d,l),k=E.APDU_MAX_PAYLOAD-e.SHA256_SIZE-1-1,p=Math.floor(k/e.SHA256_SIZE),o=Math.min(s.length,p),t=new Uint8Array(e.SHA256_SIZE+1+1+e.SHA256_SIZE*o);let a=0;t.set(i,a),a+=e.SHA256_SIZE,t[a++]=s.length,t[a++]=o;for(let f=0;f<o;f++)t.set(s[f],a),a+=e.SHA256_SIZE;expect(m.getMerkleProof).toHaveBeenCalledWith(n,r),expect(x.isRight()).toBe(!0),expect(x.unsafeCoerce()).toEqual(t),expect(l.queue).toHaveLength(s.length-o);for(let f=0;f<l.queue.length;f++)expect(l.queue[f]).toEqual(s[o+f])}),it("should return an error when the Merkle proof is not found in the data store",()=>{const n=new Uint8Array(e.SHA256_SIZE).fill(4),u=1,r=5,d=A(y,n,u,r);m.getMerkleProof.mockReturnValue(h.Nothing);const i=(0,g.GetMerkleLeafProofCommandHandler)(d,l);expect(i.isLeft()).toBe(!0);const c=i.leftOrDefault(void 0);expect(c).toBeDefined(),expect(c instanceof C.ClientCommandHandlerError).toBe(!0),expect(m.getMerkleProof).toHaveBeenCalledWith(n,r),expect(l.queue).toHaveLength(0)})});
2
2
  //# sourceMappingURL=GetMerkleLeafProofCommandHandler.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.ts"],
4
- "sourcesContent": ["import { APDU_MAX_PAYLOAD } from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\n\nimport {\n ClientCommandCodes,\n SHA256_SIZE,\n} from \"@internal/app-binder/command/utils/constants\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type CommandHandlerContext } from \"./ClientCommandHandlersTypes\";\nimport { ClientCommandHandlerError } from \"./Errors\";\nimport { GetMerkleLeafProofCommandHandler } from \"./GetMerkleLeafProofCommandHandler\";\n\nconst COMMAND_CODE = ClientCommandCodes.GET_MERKLE_LEAF_PROOF;\n\ndescribe(\"GetMerkleLeafProofCommandHandler\", () => {\n let commandHandlerContext: CommandHandlerContext;\n let mockDataStore: jest.Mocked<DataStore>;\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n mockDataStore = {\n getMerkleProof: jest.fn(),\n } as unknown as jest.Mocked<DataStore>;\n\n commandHandlerContext = {\n dataStore: mockDataStore,\n queue: [],\n yieldedResults: [],\n };\n });\n\n const createRequest = (\n commandCode: number,\n merkleRootHash: Uint8Array,\n totalElements: number,\n proofElementIndex: number,\n ): Uint8Array =>\n new Uint8Array([\n commandCode,\n ...merkleRootHash,\n ...encodeVarint(totalElements).unsafeCoerce(),\n ...encodeVarint(proofElementIndex).unsafeCoerce(),\n ]);\n\n it(\"should return the Merkle leaf and proof when found and proof length is less than or equal to the maximum allowed\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0x01);\n const totalElements = 1;\n const proofElementIndex = 2;\n const request = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n totalElements,\n proofElementIndex,\n );\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const proofElements = [\n new Uint8Array(SHA256_SIZE).fill(0xbb),\n new Uint8Array(SHA256_SIZE).fill(0xcc),\n ];\n\n // when\n mockDataStore.getMerkleProof.mockReturnValue(\n Just({ leafHash: leafNodeHash, proof: proofElements }),\n );\n\n const handlerResponse = GetMerkleLeafProofCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const maximumPayloadSize = APDU_MAX_PAYLOAD - SHA256_SIZE - 1 - 1;\n const maximumProofElements = Math.floor(maximumPayloadSize / SHA256_SIZE);\n const proofElementsToInclude = Math.min(\n proofElements.length,\n maximumProofElements,\n );\n\n const expectedResponse = new Uint8Array(\n SHA256_SIZE + 1 + 1 + SHA256_SIZE * proofElementsToInclude,\n );\n let responseBufferOffset = 0;\n expectedResponse.set(leafNodeHash, responseBufferOffset); // leafHash\n responseBufferOffset += SHA256_SIZE;\n expectedResponse[responseBufferOffset++] = proofElements.length; // total proof length\n expectedResponse[responseBufferOffset++] = proofElementsToInclude;\n for (\n let proofElementIndex = 0;\n proofElementIndex < proofElementsToInclude;\n proofElementIndex++\n ) {\n expectedResponse.set(\n proofElements[proofElementIndex] as Uint8Array,\n responseBufferOffset,\n );\n responseBufferOffset += SHA256_SIZE;\n }\n\n // then\n expect(mockDataStore.getMerkleProof).toHaveBeenCalledWith(\n merkleRootHash,\n proofElementIndex,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should handle proof longer than the maximum allowed by queuing the remaining proof elements\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0x02);\n const totalElements = 1;\n const proofElementIndex = 3;\n const request = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n totalElements,\n proofElementIndex,\n );\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xdd);\n const totalProofLength = 10;\n const proofElements = Array.from(\n { length: totalProofLength },\n (_, proofIndex) => new Uint8Array(SHA256_SIZE).fill(0xee + proofIndex),\n );\n\n // when\n mockDataStore.getMerkleProof.mockReturnValue(\n Just({ leafHash: leafNodeHash, proof: proofElements }),\n );\n\n const handlerResponse = GetMerkleLeafProofCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const maximumPayloadSize = APDU_MAX_PAYLOAD - SHA256_SIZE - 1 - 1;\n const maximumProofElements = Math.floor(maximumPayloadSize / SHA256_SIZE);\n const proofElementsToInclude = Math.min(\n proofElements.length,\n maximumProofElements,\n );\n\n const expectedResponse = new Uint8Array(\n SHA256_SIZE + 1 + 1 + SHA256_SIZE * proofElementsToInclude,\n );\n let responseBufferOffset = 0;\n expectedResponse.set(leafNodeHash, responseBufferOffset); // leafHash\n responseBufferOffset += SHA256_SIZE;\n expectedResponse[responseBufferOffset++] = proofElements.length; // total proof length\n expectedResponse[responseBufferOffset++] = proofElementsToInclude;\n for (\n let proofElementIndex = 0;\n proofElementIndex < proofElementsToInclude;\n proofElementIndex++\n ) {\n expectedResponse.set(\n proofElements[proofElementIndex] as Uint8Array,\n responseBufferOffset,\n );\n responseBufferOffset += SHA256_SIZE;\n }\n\n // then\n expect(mockDataStore.getMerkleProof).toHaveBeenCalledWith(\n merkleRootHash,\n proofElementIndex,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(\n proofElements.length - proofElementsToInclude,\n );\n for (\n let queuedProofIndex = 0;\n queuedProofIndex < commandHandlerContext.queue.length;\n queuedProofIndex++\n ) {\n expect(commandHandlerContext.queue[queuedProofIndex]).toEqual(\n proofElements[proofElementsToInclude + queuedProofIndex],\n );\n }\n });\n\n it(\"should return an error when the Merkle proof is not found in the data store\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0x04);\n const totalElements = 1;\n const proofElementIndex = 5;\n const request = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n totalElements,\n proofElementIndex,\n );\n\n // when\n mockDataStore.getMerkleProof.mockReturnValue(Nothing);\n\n const handlerResponse = GetMerkleLeafProofCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(handlerResponse.isLeft()).toBe(true);\n //@ts-ignore\n const errorResponse = handlerResponse.leftOrDefault(undefined);\n expect(errorResponse).toBeDefined();\n expect(errorResponse instanceof ClientCommandHandlerError).toBe(true);\n expect(mockDataStore.getMerkleProof).toHaveBeenCalledWith(\n merkleRootHash,\n proofElementIndex,\n );\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_purify_ts", "import_constants", "import_Varint", "import_Errors", "import_GetMerkleLeafProofCommandHandler", "COMMAND_CODE", "commandHandlerContext", "mockDataStore", "createRequest", "commandCode", "merkleRootHash", "totalElements", "proofElementIndex", "request", "leafNodeHash", "proofElements", "handlerResponse", "maximumPayloadSize", "maximumProofElements", "proofElementsToInclude", "expectedResponse", "responseBufferOffset", "_", "proofIndex", "queuedProofIndex", "errorResponse"]
4
+ "sourcesContent": ["import { APDU_MAX_PAYLOAD } from \"@ledgerhq/device-management-kit\";\nimport { Just, Nothing } from \"purify-ts\";\nimport { type Mocked } from \"vitest\";\n\nimport {\n ClientCommandCodes,\n SHA256_SIZE,\n} from \"@internal/app-binder/command/utils/constants\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\nimport { encodeVarint } from \"@internal/utils/Varint\";\n\nimport { type CommandHandlerContext } from \"./ClientCommandHandlersTypes\";\nimport { ClientCommandHandlerError } from \"./Errors\";\nimport { GetMerkleLeafProofCommandHandler } from \"./GetMerkleLeafProofCommandHandler\";\n\nconst COMMAND_CODE = ClientCommandCodes.GET_MERKLE_LEAF_PROOF;\n\ndescribe(\"GetMerkleLeafProofCommandHandler\", () => {\n let commandHandlerContext: CommandHandlerContext;\n let mockDataStore: Mocked<DataStore>;\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n mockDataStore = {\n getMerkleProof: vi.fn(),\n } as unknown as Mocked<DataStore>;\n\n commandHandlerContext = {\n dataStore: mockDataStore,\n queue: [],\n yieldedResults: [],\n };\n });\n\n const createRequest = (\n commandCode: number,\n merkleRootHash: Uint8Array,\n totalElements: number,\n proofElementIndex: number,\n ): Uint8Array =>\n new Uint8Array([\n commandCode,\n ...merkleRootHash,\n ...encodeVarint(totalElements).unsafeCoerce(),\n ...encodeVarint(proofElementIndex).unsafeCoerce(),\n ]);\n\n it(\"should return the Merkle leaf and proof when found and proof length is less than or equal to the maximum allowed\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0x01);\n const totalElements = 1;\n const proofElementIndex = 2;\n const request = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n totalElements,\n proofElementIndex,\n );\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xaa);\n const proofElements = [\n new Uint8Array(SHA256_SIZE).fill(0xbb),\n new Uint8Array(SHA256_SIZE).fill(0xcc),\n ];\n\n // when\n mockDataStore.getMerkleProof.mockReturnValue(\n Just({ leafHash: leafNodeHash, proof: proofElements }),\n );\n\n const handlerResponse = GetMerkleLeafProofCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const maximumPayloadSize = APDU_MAX_PAYLOAD - SHA256_SIZE - 1 - 1;\n const maximumProofElements = Math.floor(maximumPayloadSize / SHA256_SIZE);\n const proofElementsToInclude = Math.min(\n proofElements.length,\n maximumProofElements,\n );\n\n const expectedResponse = new Uint8Array(\n SHA256_SIZE + 1 + 1 + SHA256_SIZE * proofElementsToInclude,\n );\n let responseBufferOffset = 0;\n expectedResponse.set(leafNodeHash, responseBufferOffset); // leafHash\n responseBufferOffset += SHA256_SIZE;\n expectedResponse[responseBufferOffset++] = proofElements.length; // total proof length\n expectedResponse[responseBufferOffset++] = proofElementsToInclude;\n for (let index = 0; index < proofElementsToInclude; index++) {\n expectedResponse.set(\n proofElements[index] as Uint8Array,\n responseBufferOffset,\n );\n responseBufferOffset += SHA256_SIZE;\n }\n\n // then\n expect(mockDataStore.getMerkleProof).toHaveBeenCalledWith(\n merkleRootHash,\n proofElementIndex,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should handle proof longer than the maximum allowed by queuing the remaining proof elements\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0x02);\n const totalElements = 1;\n const proofElementIndex = 3;\n const request = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n totalElements,\n proofElementIndex,\n );\n const leafNodeHash = new Uint8Array(SHA256_SIZE).fill(0xdd);\n const totalProofLength = 10;\n const proofElements = Array.from(\n { length: totalProofLength },\n (_, proofIndex) => new Uint8Array(SHA256_SIZE).fill(0xee + proofIndex),\n );\n\n // when\n mockDataStore.getMerkleProof.mockReturnValue(\n Just({ leafHash: leafNodeHash, proof: proofElements }),\n );\n\n const handlerResponse = GetMerkleLeafProofCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const maximumPayloadSize = APDU_MAX_PAYLOAD - SHA256_SIZE - 1 - 1;\n const maximumProofElements = Math.floor(maximumPayloadSize / SHA256_SIZE);\n const proofElementsToInclude = Math.min(\n proofElements.length,\n maximumProofElements,\n );\n\n const expectedResponse = new Uint8Array(\n SHA256_SIZE + 1 + 1 + SHA256_SIZE * proofElementsToInclude,\n );\n let responseBufferOffset = 0;\n expectedResponse.set(leafNodeHash, responseBufferOffset); // leafHash\n responseBufferOffset += SHA256_SIZE;\n expectedResponse[responseBufferOffset++] = proofElements.length; // total proof length\n expectedResponse[responseBufferOffset++] = proofElementsToInclude;\n for (let index = 0; index < proofElementsToInclude; index++) {\n expectedResponse.set(\n proofElements[index] as Uint8Array,\n responseBufferOffset,\n );\n responseBufferOffset += SHA256_SIZE;\n }\n\n // then\n expect(mockDataStore.getMerkleProof).toHaveBeenCalledWith(\n merkleRootHash,\n proofElementIndex,\n );\n expect(handlerResponse.isRight()).toBe(true);\n expect(handlerResponse.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(\n proofElements.length - proofElementsToInclude,\n );\n for (\n let queuedProofIndex = 0;\n queuedProofIndex < commandHandlerContext.queue.length;\n queuedProofIndex++\n ) {\n expect(commandHandlerContext.queue[queuedProofIndex]).toEqual(\n proofElements[proofElementsToInclude + queuedProofIndex],\n );\n }\n });\n\n it(\"should return an error when the Merkle proof is not found in the data store\", () => {\n // given\n const merkleRootHash = new Uint8Array(SHA256_SIZE).fill(0x04);\n const totalElements = 1;\n const proofElementIndex = 5;\n const request = createRequest(\n COMMAND_CODE,\n merkleRootHash,\n totalElements,\n proofElementIndex,\n );\n\n // when\n mockDataStore.getMerkleProof.mockReturnValue(Nothing);\n\n const handlerResponse = GetMerkleLeafProofCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(handlerResponse.isLeft()).toBe(true);\n //@ts-expect-error purposedly use undefined insteal of a DMKError\n const errorResponse = handlerResponse.leftOrDefault(undefined);\n expect(errorResponse).toBeDefined();\n expect(errorResponse instanceof ClientCommandHandlerError).toBe(true);\n expect(mockDataStore.getMerkleProof).toHaveBeenCalledWith(\n merkleRootHash,\n proofElementIndex,\n );\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_purify_ts", "import_constants", "import_Varint", "import_Errors", "import_GetMerkleLeafProofCommandHandler", "COMMAND_CODE", "commandHandlerContext", "mockDataStore", "createRequest", "commandCode", "merkleRootHash", "totalElements", "proofElementIndex", "request", "leafNodeHash", "proofElements", "handlerResponse", "maximumPayloadSize", "maximumProofElements", "proofElementsToInclude", "expectedResponse", "responseBufferOffset", "index", "_", "proofIndex", "queuedProofIndex", "errorResponse"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var d=require("@ledgerhq/device-management-kit"),g=require("../../../app-binder/command/utils/constants"),f=require("./Errors"),m=require("./GetMoreElementsCommandHandler");const i=g.ClientCommandCodes.GET_MORE_ELEMENTS;describe("GetMoreElementsCommandHandler",()=>{let t,q;beforeEach(()=>{jest.clearAllMocks(),q={},t={dataStore:q,queue:[],yieldedResults:[]}});const l=o=>new Uint8Array([o]),p=(o,e)=>new Uint8Array(Array(o).fill(e));it("should retrieve the maximum number of elements within the payload size",()=>{const o=l(i),e=50,n=Math.floor((d.APDU_MAX_PAYLOAD-1-1)/e),s=Array.from({length:n},(a,u)=>p(e,16+u));t.queue=[...s];const r=(0,m.GetMoreElementsCommandHandler)(o,t),c=new Uint8Array(2+n*e);c[0]=n,c[1]=e;for(let a=0;a<n;a++)c.set(s[a],2+a*e);expect(r.isRight()).toBe(!0),expect(r.unsafeCoerce()).toEqual(c),expect(t.queue).toHaveLength(0)}),it("should retrieve the maximum number of elements allowed and queue the remainder",()=>{const o=l(i),e=30,n=Math.floor((d.APDU_MAX_PAYLOAD-1-1)/e),s=n+5,r=Array.from({length:s},(u,h)=>p(e,32+h));t.queue=[...r];const c=(0,m.GetMoreElementsCommandHandler)(o,t),a=new Uint8Array(2+n*e);a[0]=n,a[1]=e;for(let u=0;u<n;u++)a.set(r[u],2+u*e);expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(t.queue).toHaveLength(s-n);for(let u=0;u<t.queue.length;u++)expect(t.queue[u]).toEqual(r[n+u])}),it("should return an error when queue is empty",()=>{const o=l(i);t.queue=[];const e=(0,m.GetMoreElementsCommandHandler)(o,t);expect(e.isLeft()).toBe(!0),e.caseOf({Left:n=>{expect(n).toBeInstanceOf(f.ClientCommandHandlerError),expect(t.queue).toHaveLength(0)},Right:n=>{throw new Error("Expected Left, got Right")}})}),it("should return an error when the first element is undefined",()=>{const o=l(i);t.queue=[void 0];const e=(0,m.GetMoreElementsCommandHandler)(o,t);expect(e.isLeft()).toBe(!0),e.caseOf({Left:n=>{expect(n).toBeInstanceOf(f.ClientCommandHandlerError),expect(t.queue).toHaveLength(1)},Right:n=>{throw new Error("Expected Left, got Right")}})}),it("should return an error when elements in queue have varying lengths",()=>{const o=l(i),e=p(40,48),n=p(50,49);t.queue=[e,n];const s=(0,m.GetMoreElementsCommandHandler)(o,t);expect(s.isLeft()).toBe(!0),s.caseOf({Left:r=>{expect(r).toBeInstanceOf(f.ClientCommandHandlerError),expect(t.queue).toHaveLength(2)},Right:r=>{throw new Error("Expected Left, got Right")}})}),it("should handle a single element that matches the maximum payload size",()=>{const o=l(i),e=253,n=[p(e,64)];t.queue=[...n];const s=(0,m.GetMoreElementsCommandHandler)(o,t),r=new Uint8Array(2+e);r[0]=1,r[1]=e,r.set(n[0],2),expect(s.isRight()).toBe(!0),expect(s.unsafeCoerce()).toEqual(r),expect(t.queue).toHaveLength(0)}),it("should handle a single element that exceeds the maximum payload size",()=>{const o=l(i),e=254,n=[p(e,80)];t.queue=[...n];const s=(0,m.GetMoreElementsCommandHandler)(o,t),r=new Uint8Array([0,e]);expect(s.isRight()).toBe(!0),expect(s.unsafeCoerce()).toEqual(r),expect(t.queue).toHaveLength(1)}),it("should handle multiple executions correctly",()=>{const o=l(i),e=60,n=Math.floor((d.APDU_MAX_PAYLOAD-1-1)/e),s=10,r=Array.from({length:s},(c,a)=>p(e,96+a));t.queue=[...r];for(let c=0;c<Math.ceil(s/n);c++){const a=t.queue.length,u=Math.min(n,a),h=new Uint8Array(2+u*e);h[0]=u,h[1]=e;for(let x=0;x<u;x++)h.set(t.queue[x],2+x*e);const E=(0,m.GetMoreElementsCommandHandler)(o,t);expect(E.isRight()).toBe(!0),expect(E.unsafeCoerce()).toEqual(h),expect(t.queue).toHaveLength(a-u)}expect(t.queue).toHaveLength(0)})});
1
+ "use strict";var x=require("@ledgerhq/device-management-kit"),g=require("../../../app-binder/command/utils/constants"),f=require("./Errors"),m=require("./GetMoreElementsCommandHandler");const i=g.ClientCommandCodes.GET_MORE_ELEMENTS;describe("GetMoreElementsCommandHandler",()=>{let t,q;beforeEach(()=>{vi.clearAllMocks(),q={},t={dataStore:q,queue:[],yieldedResults:[]}});const l=o=>new Uint8Array([o]),p=(o,e)=>new Uint8Array(Array(o).fill(e));it("should retrieve the maximum number of elements within the payload size",()=>{const o=l(i),e=50,n=Math.floor((x.APDU_MAX_PAYLOAD-1-1)/e),s=Array.from({length:n},(a,u)=>p(e,16+u));t.queue=[...s];const r=(0,m.GetMoreElementsCommandHandler)(o,t),c=new Uint8Array(2+n*e);c[0]=n,c[1]=e;for(let a=0;a<n;a++)c.set(s[a],2+a*e);expect(r.isRight()).toBe(!0),expect(r.unsafeCoerce()).toEqual(c),expect(t.queue).toHaveLength(0)}),it("should retrieve the maximum number of elements allowed and queue the remainder",()=>{const o=l(i),e=30,n=Math.floor((x.APDU_MAX_PAYLOAD-1-1)/e),s=n+5,r=Array.from({length:s},(u,h)=>p(e,32+h));t.queue=[...r];const c=(0,m.GetMoreElementsCommandHandler)(o,t),a=new Uint8Array(2+n*e);a[0]=n,a[1]=e;for(let u=0;u<n;u++)a.set(r[u],2+u*e);expect(c.isRight()).toBe(!0),expect(c.unsafeCoerce()).toEqual(a),expect(t.queue).toHaveLength(s-n);for(let u=0;u<t.queue.length;u++)expect(t.queue[u]).toEqual(r[n+u])}),it("should return an error when queue is empty",()=>{const o=l(i);t.queue=[];const e=(0,m.GetMoreElementsCommandHandler)(o,t);expect(e.isLeft()).toBe(!0),e.caseOf({Left:n=>{expect(n).toBeInstanceOf(f.ClientCommandHandlerError),expect(t.queue).toHaveLength(0)},Right:n=>{throw new Error("Expected Left, got Right")}})}),it("should return an error when the first element is undefined",()=>{const o=l(i);t.queue=[void 0];const e=(0,m.GetMoreElementsCommandHandler)(o,t);expect(e.isLeft()).toBe(!0),e.caseOf({Left:n=>{expect(n).toBeInstanceOf(f.ClientCommandHandlerError),expect(t.queue).toHaveLength(1)},Right:n=>{throw new Error("Expected Left, got Right")}})}),it("should return an error when elements in queue have varying lengths",()=>{const o=l(i),e=p(40,48),n=p(50,49);t.queue=[e,n];const s=(0,m.GetMoreElementsCommandHandler)(o,t);expect(s.isLeft()).toBe(!0),s.caseOf({Left:r=>{expect(r).toBeInstanceOf(f.ClientCommandHandlerError),expect(t.queue).toHaveLength(2)},Right:r=>{throw new Error("Expected Left, got Right")}})}),it("should handle a single element that matches the maximum payload size",()=>{const o=l(i),e=253,n=[p(e,64)];t.queue=[...n];const s=(0,m.GetMoreElementsCommandHandler)(o,t),r=new Uint8Array(2+e);r[0]=1,r[1]=e,r.set(n[0],2),expect(s.isRight()).toBe(!0),expect(s.unsafeCoerce()).toEqual(r),expect(t.queue).toHaveLength(0)}),it("should handle a single element that exceeds the maximum payload size",()=>{const o=l(i),e=254,n=[p(e,80)];t.queue=[...n];const s=(0,m.GetMoreElementsCommandHandler)(o,t),r=new Uint8Array([0,e]);expect(s.isRight()).toBe(!0),expect(s.unsafeCoerce()).toEqual(r),expect(t.queue).toHaveLength(1)}),it("should handle multiple executions correctly",()=>{const o=l(i),e=60,n=Math.floor((x.APDU_MAX_PAYLOAD-1-1)/e),s=10,r=Array.from({length:s},(c,a)=>p(e,96+a));t.queue=[...r];for(let c=0;c<Math.ceil(s/n);c++){const a=t.queue.length,u=Math.min(n,a),h=new Uint8Array(2+u*e);h[0]=u,h[1]=e;for(let d=0;d<u;d++)h.set(t.queue[d],2+d*e);const E=(0,m.GetMoreElementsCommandHandler)(o,t);expect(E.isRight()).toBe(!0),expect(E.unsafeCoerce()).toEqual(h),expect(t.queue).toHaveLength(a-u)}expect(t.queue).toHaveLength(0)})});
2
2
  //# sourceMappingURL=GetMoreElementsCommandHandler.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.ts"],
4
- "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n type DmkError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { ClientCommandCodes } from \"@internal/app-binder/command/utils/constants\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\n\nimport { type CommandHandlerContext } from \"./ClientCommandHandlersTypes\";\nimport { ClientCommandHandlerError } from \"./Errors\";\nimport { GetMoreElementsCommandHandler } from \"./GetMoreElementsCommandHandler\";\n\nconst COMMAND_CODE = ClientCommandCodes.GET_MORE_ELEMENTS;\n\ndescribe(\"GetMoreElementsCommandHandler\", () => {\n let commandHandlerContext: CommandHandlerContext;\n let mockDataStore: jest.Mocked<DataStore>;\n\n beforeEach(() => {\n jest.clearAllMocks();\n\n mockDataStore = {} as unknown as jest.Mocked<DataStore>;\n\n commandHandlerContext = {\n dataStore: mockDataStore,\n queue: [],\n yieldedResults: [],\n };\n });\n\n const buildRequest = (commandCode: number): Uint8Array =>\n new Uint8Array([commandCode]);\n\n const createElement = (elementSize: number, fillValue: number): Uint8Array =>\n new Uint8Array(Array(elementSize).fill(fillValue));\n\n it(\"should retrieve the maximum number of elements within the payload size\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 50;\n const maximumElements = Math.floor(\n (APDU_MAX_PAYLOAD - 1 - 1) / elementSize,\n );\n const elements = Array.from({ length: maximumElements }, (_, index) =>\n createElement(elementSize, 0x10 + index),\n );\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array(\n 1 + 1 + maximumElements * elementSize,\n );\n expectedResponse[0] = maximumElements;\n expectedResponse[1] = elementSize;\n for (let elementIndex = 0; elementIndex < maximumElements; elementIndex++) {\n expectedResponse.set(\n elements[elementIndex] as Uint8Array,\n 2 + elementIndex * elementSize,\n );\n }\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should retrieve the maximum number of elements allowed and queue the remainder\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 30;\n const maximumElements = Math.floor(\n (APDU_MAX_PAYLOAD - 1 - 1) / elementSize,\n );\n const totalElements = maximumElements + 5;\n const elements = Array.from({ length: totalElements }, (_, index) =>\n createElement(elementSize, 0x20 + index),\n );\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array(\n 1 + 1 + maximumElements * elementSize,\n );\n expectedResponse[0] = maximumElements;\n expectedResponse[1] = elementSize;\n for (let elementIndex = 0; elementIndex < maximumElements; elementIndex++) {\n expectedResponse.set(\n elements[elementIndex] as Uint8Array,\n 2 + elementIndex * elementSize,\n );\n }\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(\n totalElements - maximumElements,\n );\n for (\n let queuedElementIndex = 0;\n queuedElementIndex < commandHandlerContext.queue.length;\n queuedElementIndex++\n ) {\n expect(commandHandlerContext.queue[queuedElementIndex]).toEqual(\n elements[maximumElements + queuedElementIndex],\n );\n }\n });\n\n it(\"should return an error when queue is empty\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n\n // when\n commandHandlerContext.queue = [];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(response.isLeft()).toBe(true);\n response.caseOf({\n Left: (error: DmkError) => {\n expect(error).toBeInstanceOf(ClientCommandHandlerError);\n expect(commandHandlerContext.queue).toHaveLength(0);\n },\n Right: (_) => {\n throw new Error(\"Expected Left, got Right\");\n },\n });\n });\n\n it(\"should return an error when the first element is undefined\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n\n // when\n commandHandlerContext.queue = [undefined as unknown as Uint8Array];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(response.isLeft()).toBe(true);\n response.caseOf({\n Left: (error: DmkError) => {\n expect(error).toBeInstanceOf(ClientCommandHandlerError);\n expect(commandHandlerContext.queue).toHaveLength(1);\n },\n Right: (_) => {\n throw new Error(\"Expected Left, got Right\");\n },\n });\n });\n\n it(\"should return an error when elements in queue have varying lengths\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const firstElement = createElement(40, 0x30);\n const secondElement = createElement(50, 0x31);\n\n // when\n commandHandlerContext.queue = [firstElement, secondElement];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(response.isLeft()).toBe(true);\n response.caseOf({\n Left: (error: DmkError) => {\n expect(error).toBeInstanceOf(ClientCommandHandlerError);\n expect(commandHandlerContext.queue).toHaveLength(2);\n },\n Right: (_) => {\n throw new Error(\"Expected Left, got Right\");\n },\n });\n });\n\n it(\"should handle a single element that matches the maximum payload size\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 253;\n const elements = [createElement(elementSize, 0x40)];\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array(1 + 1 + elementSize);\n expectedResponse[0] = 1;\n expectedResponse[1] = elementSize;\n expectedResponse.set(elements[0] as Uint8Array, 2);\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should handle a single element that exceeds the maximum payload size\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 254;\n const elements = [createElement(elementSize, 0x50)];\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array([0, elementSize]);\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(1); // still there\n });\n\n it(\"should handle multiple executions correctly\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 60;\n const maximumElements = Math.floor(\n (APDU_MAX_PAYLOAD - 1 - 1) / elementSize,\n );\n const totalElements = 10;\n const elements = Array.from({ length: totalElements }, (_, index) =>\n createElement(elementSize, 0x60 + index),\n );\n\n // when\n commandHandlerContext.queue = [...elements];\n\n // then\n for (\n let executionIndex = 0;\n executionIndex < Math.ceil(totalElements / maximumElements);\n executionIndex++\n ) {\n const previousQueueLength = commandHandlerContext.queue.length;\n const expectedNumberOfElements = Math.min(\n maximumElements,\n previousQueueLength,\n );\n const expectedResponse = new Uint8Array(\n 1 + 1 + expectedNumberOfElements * elementSize,\n );\n expectedResponse[0] = expectedNumberOfElements;\n expectedResponse[1] = elementSize;\n for (\n let elementIndex = 0;\n elementIndex < expectedNumberOfElements;\n elementIndex++\n ) {\n expectedResponse.set(\n commandHandlerContext.queue[elementIndex] as Uint8Array,\n 2 + elementIndex * elementSize,\n );\n }\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(\n previousQueueLength - expectedNumberOfElements,\n );\n }\n\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n APDU_MAX_PAYLOAD,\n type DmkError,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Mocked } from \"vitest\";\n\nimport { ClientCommandCodes } from \"@internal/app-binder/command/utils/constants\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\n\nimport { type CommandHandlerContext } from \"./ClientCommandHandlersTypes\";\nimport { ClientCommandHandlerError } from \"./Errors\";\nimport { GetMoreElementsCommandHandler } from \"./GetMoreElementsCommandHandler\";\n\nconst COMMAND_CODE = ClientCommandCodes.GET_MORE_ELEMENTS;\n\ndescribe(\"GetMoreElementsCommandHandler\", () => {\n let commandHandlerContext: CommandHandlerContext;\n let mockDataStore: Mocked<DataStore>;\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n mockDataStore = {} as unknown as Mocked<DataStore>;\n\n commandHandlerContext = {\n dataStore: mockDataStore,\n queue: [],\n yieldedResults: [],\n };\n });\n\n const buildRequest = (commandCode: number): Uint8Array =>\n new Uint8Array([commandCode]);\n\n const createElement = (elementSize: number, fillValue: number): Uint8Array =>\n new Uint8Array(Array(elementSize).fill(fillValue));\n\n it(\"should retrieve the maximum number of elements within the payload size\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 50;\n const maximumElements = Math.floor(\n (APDU_MAX_PAYLOAD - 1 - 1) / elementSize,\n );\n const elements = Array.from({ length: maximumElements }, (_, index) =>\n createElement(elementSize, 0x10 + index),\n );\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array(\n 1 + 1 + maximumElements * elementSize,\n );\n expectedResponse[0] = maximumElements;\n expectedResponse[1] = elementSize;\n for (let elementIndex = 0; elementIndex < maximumElements; elementIndex++) {\n expectedResponse.set(\n elements[elementIndex] as Uint8Array,\n 2 + elementIndex * elementSize,\n );\n }\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should retrieve the maximum number of elements allowed and queue the remainder\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 30;\n const maximumElements = Math.floor(\n (APDU_MAX_PAYLOAD - 1 - 1) / elementSize,\n );\n const totalElements = maximumElements + 5;\n const elements = Array.from({ length: totalElements }, (_, index) =>\n createElement(elementSize, 0x20 + index),\n );\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array(\n 1 + 1 + maximumElements * elementSize,\n );\n expectedResponse[0] = maximumElements;\n expectedResponse[1] = elementSize;\n for (let elementIndex = 0; elementIndex < maximumElements; elementIndex++) {\n expectedResponse.set(\n elements[elementIndex] as Uint8Array,\n 2 + elementIndex * elementSize,\n );\n }\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(\n totalElements - maximumElements,\n );\n for (\n let queuedElementIndex = 0;\n queuedElementIndex < commandHandlerContext.queue.length;\n queuedElementIndex++\n ) {\n expect(commandHandlerContext.queue[queuedElementIndex]).toEqual(\n elements[maximumElements + queuedElementIndex],\n );\n }\n });\n\n it(\"should return an error when queue is empty\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n\n // when\n commandHandlerContext.queue = [];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(response.isLeft()).toBe(true);\n response.caseOf({\n Left: (error: DmkError) => {\n expect(error).toBeInstanceOf(ClientCommandHandlerError);\n expect(commandHandlerContext.queue).toHaveLength(0);\n },\n Right: (_) => {\n throw new Error(\"Expected Left, got Right\");\n },\n });\n });\n\n it(\"should return an error when the first element is undefined\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n\n // when\n commandHandlerContext.queue = [undefined as unknown as Uint8Array];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(response.isLeft()).toBe(true);\n response.caseOf({\n Left: (error: DmkError) => {\n expect(error).toBeInstanceOf(ClientCommandHandlerError);\n expect(commandHandlerContext.queue).toHaveLength(1);\n },\n Right: (_) => {\n throw new Error(\"Expected Left, got Right\");\n },\n });\n });\n\n it(\"should return an error when elements in queue have varying lengths\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const firstElement = createElement(40, 0x30);\n const secondElement = createElement(50, 0x31);\n\n // when\n commandHandlerContext.queue = [firstElement, secondElement];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n // then\n expect(response.isLeft()).toBe(true);\n response.caseOf({\n Left: (error: DmkError) => {\n expect(error).toBeInstanceOf(ClientCommandHandlerError);\n expect(commandHandlerContext.queue).toHaveLength(2);\n },\n Right: (_) => {\n throw new Error(\"Expected Left, got Right\");\n },\n });\n });\n\n it(\"should handle a single element that matches the maximum payload size\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 253;\n const elements = [createElement(elementSize, 0x40)];\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array(1 + 1 + elementSize);\n expectedResponse[0] = 1;\n expectedResponse[1] = elementSize;\n expectedResponse.set(elements[0] as Uint8Array, 2);\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n\n it(\"should handle a single element that exceeds the maximum payload size\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 254;\n const elements = [createElement(elementSize, 0x50)];\n\n // when\n commandHandlerContext.queue = [...elements];\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n const expectedResponse = new Uint8Array([0, elementSize]);\n\n // then\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(1); // still there\n });\n\n it(\"should handle multiple executions correctly\", () => {\n // given\n const request = buildRequest(COMMAND_CODE);\n const elementSize = 60;\n const maximumElements = Math.floor(\n (APDU_MAX_PAYLOAD - 1 - 1) / elementSize,\n );\n const totalElements = 10;\n const elements = Array.from({ length: totalElements }, (_, index) =>\n createElement(elementSize, 0x60 + index),\n );\n\n // when\n commandHandlerContext.queue = [...elements];\n\n // then\n for (\n let executionIndex = 0;\n executionIndex < Math.ceil(totalElements / maximumElements);\n executionIndex++\n ) {\n const previousQueueLength = commandHandlerContext.queue.length;\n const expectedNumberOfElements = Math.min(\n maximumElements,\n previousQueueLength,\n );\n const expectedResponse = new Uint8Array(\n 1 + 1 + expectedNumberOfElements * elementSize,\n );\n expectedResponse[0] = expectedNumberOfElements;\n expectedResponse[1] = elementSize;\n for (\n let elementIndex = 0;\n elementIndex < expectedNumberOfElements;\n elementIndex++\n ) {\n expectedResponse.set(\n commandHandlerContext.queue[elementIndex] as Uint8Array,\n 2 + elementIndex * elementSize,\n );\n }\n\n const response = GetMoreElementsCommandHandler(\n request,\n commandHandlerContext,\n );\n\n expect(response.isRight()).toBe(true);\n expect(response.unsafeCoerce()).toEqual(expectedResponse);\n expect(commandHandlerContext.queue).toHaveLength(\n previousQueueLength - expectedNumberOfElements,\n );\n }\n\n expect(commandHandlerContext.queue).toHaveLength(0);\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAGO,2CAGPC,EAAmC,wDAInCC,EAA0C,oBAC1CC,EAA8C,2CAE9C,MAAMC,EAAe,qBAAmB,kBAExC,SAAS,gCAAiC,IAAM,CAC9C,IAAIC,EACAC,EAEJ,WAAW,IAAM,CACf,GAAG,cAAc,EAEjBA,EAAgB,CAAC,EAEjBD,EAAwB,CACtB,UAAWC,EACX,MAAO,CAAC,EACR,eAAgB,CAAC,CACnB,CACF,CAAC,EAED,MAAMC,EAAgBC,GACpB,IAAI,WAAW,CAACA,CAAW,CAAC,EAExBC,EAAgB,CAACC,EAAqBC,IAC1C,IAAI,WAAW,MAAMD,CAAW,EAAE,KAAKC,CAAS,CAAC,EAEnD,GAAG,yEAA0E,IAAM,CAEjF,MAAMC,EAAUL,EAAaH,CAAY,EACnCM,EAAc,GACdG,EAAkB,KAAK,OAC1B,mBAAmB,EAAI,GAAKH,CAC/B,EACMI,EAAW,MAAM,KAAK,CAAE,OAAQD,CAAgB,EAAG,CAACE,EAAGC,IAC3DP,EAAcC,EAAa,GAAOM,CAAK,CACzC,EAGAX,EAAsB,MAAQ,CAAC,GAAGS,CAAQ,EAE1C,MAAMG,KAAW,iCACfL,EACAP,CACF,EAEMa,EAAmB,IAAI,WAC3B,EAAQL,EAAkBH,CAC5B,EACAQ,EAAiB,CAAC,EAAIL,EACtBK,EAAiB,CAAC,EAAIR,EACtB,QAASS,EAAe,EAAGA,EAAeN,EAAiBM,IACzDD,EAAiB,IACfJ,EAASK,CAAY,EACrB,EAAIA,EAAeT,CACrB,EAIF,OAAOO,EAAS,QAAQ,CAAC,EAAE,KAAK,EAAI,EACpC,OAAOA,EAAS,aAAa,CAAC,EAAE,QAAQC,CAAgB,EACxD,OAAOb,EAAsB,KAAK,EAAE,aAAa,CAAC,CACpD,CAAC,EAED,GAAG,iFAAkF,IAAM,CAEzF,MAAMO,EAAUL,EAAaH,CAAY,EACnCM,EAAc,GACdG,EAAkB,KAAK,OAC1B,mBAAmB,EAAI,GAAKH,CAC/B,EACMU,EAAgBP,EAAkB,EAClCC,EAAW,MAAM,KAAK,CAAE,OAAQM,CAAc,EAAG,CAACL,EAAGC,IACzDP,EAAcC,EAAa,GAAOM,CAAK,CACzC,EAGAX,EAAsB,MAAQ,CAAC,GAAGS,CAAQ,EAE1C,MAAMG,KAAW,iCACfL,EACAP,CACF,EAEMa,EAAmB,IAAI,WAC3B,EAAQL,EAAkBH,CAC5B,EACAQ,EAAiB,CAAC,EAAIL,EACtBK,EAAiB,CAAC,EAAIR,EACtB,QAASS,EAAe,EAAGA,EAAeN,EAAiBM,IACzDD,EAAiB,IACfJ,EAASK,CAAY,EACrB,EAAIA,EAAeT,CACrB,EAIF,OAAOO,EAAS,QAAQ,CAAC,EAAE,KAAK,EAAI,EACpC,OAAOA,EAAS,aAAa,CAAC,EAAE,QAAQC,CAAgB,EACxD,OAAOb,EAAsB,KAAK,EAAE,aAClCe,EAAgBP,CAClB,EACA,QACMQ,EAAqB,EACzBA,EAAqBhB,EAAsB,MAAM,OACjDgB,IAEA,OAAOhB,EAAsB,MAAMgB,CAAkB,CAAC,EAAE,QACtDP,EAASD,EAAkBQ,CAAkB,CAC/C,CAEJ,CAAC,EAED,GAAG,6CAA8C,IAAM,CAErD,MAAMT,EAAUL,EAAaH,CAAY,EAGzCC,EAAsB,MAAQ,CAAC,EAE/B,MAAMY,KAAW,iCACfL,EACAP,CACF,EAGA,OAAOY,EAAS,OAAO,CAAC,EAAE,KAAK,EAAI,EACnCA,EAAS,OAAO,CACd,KAAOK,GAAoB,CACzB,OAAOA,CAAK,EAAE,eAAe,2BAAyB,EACtD,OAAOjB,EAAsB,KAAK,EAAE,aAAa,CAAC,CACpD,EACA,MAAQU,GAAM,CACZ,MAAM,IAAI,MAAM,0BAA0B,CAC5C,CACF,CAAC,CACH,CAAC,EAED,GAAG,6DAA8D,IAAM,CAErE,MAAMH,EAAUL,EAAaH,CAAY,EAGzCC,EAAsB,MAAQ,CAAC,MAAkC,EAEjE,MAAMY,KAAW,iCACfL,EACAP,CACF,EAGA,OAAOY,EAAS,OAAO,CAAC,EAAE,KAAK,EAAI,EACnCA,EAAS,OAAO,CACd,KAAOK,GAAoB,CACzB,OAAOA,CAAK,EAAE,eAAe,2BAAyB,EACtD,OAAOjB,EAAsB,KAAK,EAAE,aAAa,CAAC,CACpD,EACA,MAAQU,GAAM,CACZ,MAAM,IAAI,MAAM,0BAA0B,CAC5C,CACF,CAAC,CACH,CAAC,EAED,GAAG,qEAAsE,IAAM,CAE7E,MAAMH,EAAUL,EAAaH,CAAY,EACnCmB,EAAed,EAAc,GAAI,EAAI,EACrCe,EAAgBf,EAAc,GAAI,EAAI,EAG5CJ,EAAsB,MAAQ,CAACkB,EAAcC,CAAa,EAE1D,MAAMP,KAAW,iCACfL,EACAP,CACF,EAGA,OAAOY,EAAS,OAAO,CAAC,EAAE,KAAK,EAAI,EACnCA,EAAS,OAAO,CACd,KAAOK,GAAoB,CACzB,OAAOA,CAAK,EAAE,eAAe,2BAAyB,EACtD,OAAOjB,EAAsB,KAAK,EAAE,aAAa,CAAC,CACpD,EACA,MAAQU,GAAM,CACZ,MAAM,IAAI,MAAM,0BAA0B,CAC5C,CACF,CAAC,CACH,CAAC,EAED,GAAG,uEAAwE,IAAM,CAE/E,MAAMH,EAAUL,EAAaH,CAAY,EACnCM,EAAc,IACdI,EAAW,CAACL,EAAcC,EAAa,EAAI,CAAC,EAGlDL,EAAsB,MAAQ,CAAC,GAAGS,CAAQ,EAE1C,MAAMG,KAAW,iCACfL,EACAP,CACF,EAEMa,EAAmB,IAAI,WAAW,EAAQR,CAAW,EAC3DQ,EAAiB,CAAC,EAAI,EACtBA,EAAiB,CAAC,EAAIR,EACtBQ,EAAiB,IAAIJ,EAAS,CAAC,EAAiB,CAAC,EAGjD,OAAOG,EAAS,QAAQ,CAAC,EAAE,KAAK,EAAI,EACpC,OAAOA,EAAS,aAAa,CAAC,EAAE,QAAQC,CAAgB,EACxD,OAAOb,EAAsB,KAAK,EAAE,aAAa,CAAC,CACpD,CAAC,EAED,GAAG,uEAAwE,IAAM,CAE/E,MAAMO,EAAUL,EAAaH,CAAY,EACnCM,EAAc,IACdI,EAAW,CAACL,EAAcC,EAAa,EAAI,CAAC,EAGlDL,EAAsB,MAAQ,CAAC,GAAGS,CAAQ,EAE1C,MAAMG,KAAW,iCACfL,EACAP,CACF,EAEMa,EAAmB,IAAI,WAAW,CAAC,EAAGR,CAAW,CAAC,EAGxD,OAAOO,EAAS,QAAQ,CAAC,EAAE,KAAK,EAAI,EACpC,OAAOA,EAAS,aAAa,CAAC,EAAE,QAAQC,CAAgB,EACxD,OAAOb,EAAsB,KAAK,EAAE,aAAa,CAAC,CACpD,CAAC,EAED,GAAG,8CAA+C,IAAM,CAEtD,MAAMO,EAAUL,EAAaH,CAAY,EACnCM,EAAc,GACdG,EAAkB,KAAK,OAC1B,mBAAmB,EAAI,GAAKH,CAC/B,EACMU,EAAgB,GAChBN,EAAW,MAAM,KAAK,CAAE,OAAQM,CAAc,EAAG,CAACL,EAAGC,IACzDP,EAAcC,EAAa,GAAOM,CAAK,CACzC,EAGAX,EAAsB,MAAQ,CAAC,GAAGS,CAAQ,EAG1C,QACMW,EAAiB,EACrBA,EAAiB,KAAK,KAAKL,EAAgBP,CAAe,EAC1DY,IACA,CACA,MAAMC,EAAsBrB,EAAsB,MAAM,OAClDsB,EAA2B,KAAK,IACpCd,EACAa,CACF,EACMR,EAAmB,IAAI,WAC3B,EAAQS,EAA2BjB,CACrC,EACAQ,EAAiB,CAAC,EAAIS,EACtBT,EAAiB,CAAC,EAAIR,EACtB,QACMS,EAAe,EACnBA,EAAeQ,EACfR,IAEAD,EAAiB,IACfb,EAAsB,MAAMc,CAAY,EACxC,EAAIA,EAAeT,CACrB,EAGF,MAAMO,KAAW,iCACfL,EACAP,CACF,EAEA,OAAOY,EAAS,QAAQ,CAAC,EAAE,KAAK,EAAI,EACpC,OAAOA,EAAS,aAAa,CAAC,EAAE,QAAQC,CAAgB,EACxD,OAAOb,EAAsB,KAAK,EAAE,aAClCqB,EAAsBC,CACxB,CACF,CAEA,OAAOtB,EAAsB,KAAK,EAAE,aAAa,CAAC,CACpD,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_constants", "import_Errors", "import_GetMoreElementsCommandHandler", "COMMAND_CODE", "commandHandlerContext", "mockDataStore", "buildRequest", "commandCode", "createElement", "elementSize", "fillValue", "request", "maximumElements", "elements", "_", "index", "response", "expectedResponse", "elementIndex", "totalElements", "queuedElementIndex", "error", "firstElement", "secondElement", "executionIndex", "previousQueueLength", "expectedNumberOfElements"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var l=require("purify-ts"),h=require("../../../app-binder/command/utils/constants"),m=require("../../../utils/Varint"),p=require("./Errors"),u=require("./GetPreimageCommandHandler");const x=h.ClientCommandCodes.GET_PREIMAGE;jest.mock("@internal/utils/Varint",()=>({encodeVarint:jest.fn()}));describe("GetPreimageCommandHandler",()=>{let t,o;beforeEach(()=>{jest.clearAllMocks(),o={getPreimage:jest.fn()},t={dataStore:o,queue:[],yieldedResults:[]}}),it("should return the preimage when it is found and its length is within the maximum payload size",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(1),e=new Uint8Array([170,187,204]),c=e.length;m.encodeVarint.mockReturnValue({unsafeCoerce:()=>new Uint8Array([3])}),o.getPreimage.mockReturnValue((0,l.Just)(e));const s=new Uint8Array([x,0,...r]),i=(0,u.GetPreimageCommandHandler)(s,t),a=new Uint8Array([3,3,170,187,204]);expect(o.getPreimage).toHaveBeenCalledWith(r),expect(m.encodeVarint).toHaveBeenCalledWith(c),i.caseOf({Left:n=>{throw new Error("Expected Right, got Left")},Right:n=>{expect(n).toEqual(a),expect(t.queue).toHaveLength(0)}})}),it("should handle a preimage longer than the maximum payload size by queuing the remaining bytes",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(2),e=new Uint8Array(300).fill(255),c=e.length;m.encodeVarint.mockReturnValue({unsafeCoerce:()=>new Uint8Array([172,2])}),o.getPreimage.mockReturnValue((0,l.Just)(e));const s=new Uint8Array([x,0,...r]),i=(0,u.GetPreimageCommandHandler)(s,t),a=new Uint8Array([172,2]),n=Math.min(255-a.length-1,e.length),g=new Uint8Array(a.length+1+n);g.set(a,0),g.set([n],a.length),g.set(e.slice(0,n),a.length+1),expect(o.getPreimage).toHaveBeenCalledWith(r),expect(m.encodeVarint).toHaveBeenCalledWith(c),i.caseOf({Left:d=>{throw new Error("Expected Right, got Left")},Right:d=>{expect(d).toEqual(g),expect(t.queue).toHaveLength(e.length-n),expect(t.queue[0]).toEqual(new Uint8Array([255])),expect(t.queue[t.queue.length-1]).toEqual(new Uint8Array([255]))}})}),it("should return an error when the preimage is not found",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(3);o.getPreimage.mockReturnValue(l.Nothing);const e=new Uint8Array([x,0,...r]),c=(0,u.GetPreimageCommandHandler)(e,t);expect(o.getPreimage).toHaveBeenCalledWith(r),expect(m.encodeVarint).not.toHaveBeenCalled(),expect(t.queue).toHaveLength(0),c.caseOf({Left:s=>{expect(s).toBeInstanceOf(p.ClientCommandHandlerError)},Right:s=>{throw new Error("Expected Left, got Right")}})}),it("should handle a preimage length where the maximum payload size exactly matches the preimage length",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(5),e=new Uint8Array(252);e.fill(119),m.encodeVarint.mockReturnValue({unsafeCoerce:()=>new Uint8Array([252])}),o.getPreimage.mockReturnValue((0,l.Just)(e));const c=new Uint8Array([x,0,...r]),s=(0,u.GetPreimageCommandHandler)(c,t),i=new Uint8Array([252]),a=Math.min(255-i.length-1,e.length),n=new Uint8Array(i.length+1+a);n.set(i,0),n.set([a],i.length),n.set(e,i.length+1),expect(s).toStrictEqual(l.Either.of(n)),expect(t.queue).toHaveLength(0)})});
1
+ "use strict";var c=require("purify-ts"),h=require("../../../app-binder/command/utils/constants"),m=require("../../../utils/Varint"),p=require("./Errors"),u=require("./GetPreimageCommandHandler");const x=h.ClientCommandCodes.GET_PREIMAGE;vi.mock("@internal/utils/Varint",()=>({encodeVarint:vi.fn()}));describe("GetPreimageCommandHandler",()=>{let t,o;beforeEach(()=>{vi.clearAllMocks(),o={getPreimage:vi.fn()},t={dataStore:o,queue:[],yieldedResults:[]}}),it("should return the preimage when it is found and its length is within the maximum payload size",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(1),e=new Uint8Array([170,187,204]),l=e.length;m.encodeVarint.mockReturnValue({unsafeCoerce:()=>new Uint8Array([3])}),o.getPreimage.mockReturnValue((0,c.Just)(e));const s=new Uint8Array([x,0,...r]),i=(0,u.GetPreimageCommandHandler)(s,t),a=new Uint8Array([3,3,170,187,204]);expect(o.getPreimage).toHaveBeenCalledWith(r),expect(m.encodeVarint).toHaveBeenCalledWith(l),i.caseOf({Left:n=>{throw new Error("Expected Right, got Left")},Right:n=>{expect(n).toEqual(a),expect(t.queue).toHaveLength(0)}})}),it("should handle a preimage longer than the maximum payload size by queuing the remaining bytes",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(2),e=new Uint8Array(300).fill(255),l=e.length;m.encodeVarint.mockReturnValue({unsafeCoerce:()=>new Uint8Array([172,2])}),o.getPreimage.mockReturnValue((0,c.Just)(e));const s=new Uint8Array([x,0,...r]),i=(0,u.GetPreimageCommandHandler)(s,t),a=new Uint8Array([172,2]),n=Math.min(255-a.length-1,e.length),g=new Uint8Array(a.length+1+n);g.set(a,0),g.set([n],a.length),g.set(e.slice(0,n),a.length+1),expect(o.getPreimage).toHaveBeenCalledWith(r),expect(m.encodeVarint).toHaveBeenCalledWith(l),i.caseOf({Left:d=>{throw new Error("Expected Right, got Left")},Right:d=>{expect(d).toEqual(g),expect(t.queue).toHaveLength(e.length-n),expect(t.queue[0]).toEqual(new Uint8Array([255])),expect(t.queue[t.queue.length-1]).toEqual(new Uint8Array([255]))}})}),it("should return an error when the preimage is not found",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(3);o.getPreimage.mockReturnValue(c.Nothing);const e=new Uint8Array([x,0,...r]),l=(0,u.GetPreimageCommandHandler)(e,t);expect(o.getPreimage).toHaveBeenCalledWith(r),expect(m.encodeVarint).not.toHaveBeenCalled(),expect(t.queue).toHaveLength(0),l.caseOf({Left:s=>{expect(s).toBeInstanceOf(p.ClientCommandHandlerError)},Right:s=>{throw new Error("Expected Left, got Right")}})}),it("should handle a preimage length where the maximum payload size exactly matches the preimage length",()=>{const r=new Uint8Array(h.SHA256_SIZE).fill(5),e=new Uint8Array(252);e.fill(119),m.encodeVarint.mockReturnValue({unsafeCoerce:()=>new Uint8Array([252])}),o.getPreimage.mockReturnValue((0,c.Just)(e));const l=new Uint8Array([x,0,...r]),s=(0,u.GetPreimageCommandHandler)(l,t),i=new Uint8Array([252]),a=Math.min(255-i.length-1,e.length),n=new Uint8Array(i.length+1+a);n.set(i,0),n.set([a],i.length),n.set(e,i.length+1),expect(s).toStrictEqual(c.Either.of(n)),expect(t.queue).toHaveLength(0)})});
2
2
  //# sourceMappingURL=GetPreimageCommandHandler.test.js.map