@ledgerhq/device-signer-kit-bitcoin 0.0.0-20250216001123 → 0.0.0-webhid-20250124103640

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 (179) hide show
  1. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js +1 -1
  2. package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
  3. package/lib/cjs/internal/DefaultSignerBtc.test.js +1 -1
  4. package/lib/cjs/internal/DefaultSignerBtc.test.js.map +2 -2
  5. package/lib/cjs/internal/app-binder/BtcAppBinder.js +1 -1
  6. package/lib/cjs/internal/app-binder/BtcAppBinder.js.map +3 -3
  7. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js +1 -1
  8. package/lib/cjs/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  9. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  10. package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
  11. package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
  12. package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
  13. package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
  14. package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
  15. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
  16. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
  17. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
  18. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
  19. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
  20. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
  21. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
  22. package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
  23. package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
  24. package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
  25. package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
  26. package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
  27. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  28. package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  29. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +2 -0
  30. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +7 -0
  31. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +2 -0
  32. package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +7 -0
  33. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  34. package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  35. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  36. package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  37. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  38. package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  39. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  40. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  41. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
  42. package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
  43. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  44. package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  45. package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
  46. package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
  47. package/lib/cjs/internal/app-binder/task/ContinueTask.test.js +1 -1
  48. package/lib/cjs/internal/app-binder/task/ContinueTask.test.js.map +2 -2
  49. package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
  50. package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
  51. package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
  52. package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
  53. package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js +1 -1
  54. package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
  55. package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js +1 -1
  56. package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
  57. package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
  58. package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
  59. package/lib/cjs/internal/data-store/model/DataStore.test.js +1 -1
  60. package/lib/cjs/internal/data-store/model/DataStore.test.js.map +2 -2
  61. package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
  62. package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
  63. package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
  64. package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
  65. package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
  66. package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
  67. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
  68. package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
  69. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
  70. package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
  71. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
  72. package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +2 -2
  73. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
  74. package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
  75. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
  76. package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +2 -2
  77. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
  78. package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +2 -2
  79. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
  80. package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
  81. package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
  82. package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
  83. package/lib/cjs/package.json +5 -6
  84. package/lib/esm/internal/DefaultSignerBtc.test.js +1 -1
  85. package/lib/esm/internal/DefaultSignerBtc.test.js.map +2 -2
  86. package/lib/esm/internal/app-binder/BtcAppBinder.js +1 -1
  87. package/lib/esm/internal/app-binder/BtcAppBinder.js.map +3 -3
  88. package/lib/esm/internal/app-binder/BtcAppBinder.test.js +1 -1
  89. package/lib/esm/internal/app-binder/BtcAppBinder.test.js.map +3 -3
  90. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
  91. package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
  92. package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
  93. package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
  94. package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
  95. package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
  96. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
  97. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
  98. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
  99. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
  100. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
  101. package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
  102. package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
  103. package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
  104. package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
  105. package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
  106. package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
  107. package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
  108. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
  109. package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
  110. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +2 -0
  111. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +7 -0
  112. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +2 -0
  113. package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +7 -0
  114. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
  115. package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
  116. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
  117. package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
  118. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
  119. package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
  120. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
  121. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
  122. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
  123. package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
  124. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
  125. package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
  126. package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
  127. package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
  128. package/lib/esm/internal/app-binder/task/ContinueTask.test.js +1 -1
  129. package/lib/esm/internal/app-binder/task/ContinueTask.test.js.map +2 -2
  130. package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
  131. package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
  132. package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
  133. package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
  134. package/lib/esm/internal/app-binder/task/SignMessageTask.test.js +1 -1
  135. package/lib/esm/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
  136. package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js +1 -1
  137. package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
  138. package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
  139. package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
  140. package/lib/esm/internal/data-store/model/DataStore.test.js +1 -1
  141. package/lib/esm/internal/data-store/model/DataStore.test.js.map +2 -2
  142. package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
  143. package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
  144. package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
  145. package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
  146. package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
  147. package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
  148. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
  149. package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
  150. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
  151. package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
  152. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
  153. package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +2 -2
  154. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
  155. package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
  156. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
  157. package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +2 -2
  158. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
  159. package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +2 -2
  160. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
  161. package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
  162. package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
  163. package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
  164. package/lib/esm/package.json +5 -6
  165. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +12 -1
  166. package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
  167. package/lib/types/internal/app-binder/BtcAppBinder.d.ts.map +1 -1
  168. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts +19 -0
  169. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts.map +1 -0
  170. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts +2 -0
  171. package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts.map +1 -0
  172. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +1 -2
  173. package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
  174. package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
  175. package/lib/types/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.d.ts.map +1 -1
  176. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +2 -5
  177. package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
  178. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  179. package/package.json +10 -11
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.ts"],
4
- "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports: off */\nimport {\n CommandResultFactory,\n DeviceActionStatus,\n UnknownDeviceExchangeError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { UnknownDAError } from \"@ledgerhq/device-management-kit\";\nimport { InvalidStatusWordError } from \"@ledgerhq/device-management-kit\";\n\nimport { type SignPsbtDAState } from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { type RegisteredWallet } from \"@api/model/Wallet\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupOpenAppDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { type BuildPsbtTaskResult } from \"@internal/app-binder/task/BuildPsbtTask\";\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 Wallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { SignPsbtDeviceAction } from \"./SignPsbtDeviceAction\";\n\nvi.mock(\"@ledgerhq/device-management-kit\", async (importOriginal) => {\n const original =\n await importOriginal<typeof import(\"@ledgerhq/device-management-kit\")>();\n return {\n ...original,\n OpenAppDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n});\n\ndescribe(\"SignPsbtDeviceAction\", () => {\n const signPsbtMock = vi.fn();\n const prepareWalletPolicyMock = vi.fn();\n const buildPsbtMock = vi.fn();\n\n function extractDependenciesMock() {\n return {\n signPsbt: signPsbtMock,\n prepareWalletPolicy: prepareWalletPolicyMock,\n buildPsbt: buildPsbtMock,\n };\n }\n\n describe(\"Success case\", () => {\n it(\"should call external dependencies with the correct parameters\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n psbtMapper: \"PsbtMapper\" as unknown as PsbtMapper,\n valueParser: \"ValueParser\" as unknown as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"Wallet\" as unknown as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"BuildPsbtResult\" as unknown as BuildPsbtTaskResult,\n }),\n );\n signPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: [\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ],\n }),\n );\n\n // Expected intermediate values for the following state sequence:\n // Initial -> OpenApp -> PrepareWalletPolicy -> BuildPsbt -> SignPsbt\n const expectedStates: Array<SignPsbtDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: [\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ],\n status: DeviceActionStatus.Completed,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: () => {\n expect(prepareWalletPolicyMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n wallet: \"ApiWallet\",\n walletBuilder: \"WalletBuilder\",\n },\n }),\n );\n\n expect(buildPsbtMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n psbt: \"Hello world\",\n wallet: \"Wallet\",\n dataStoreService: \"DataStoreService\",\n psbtMapper: \"PsbtMapper\",\n },\n }),\n );\n\n expect(signPsbtMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n wallet: \"Wallet\",\n buildPsbtResult: \"BuildPsbtResult\",\n walletSerializer: \"WalletSerializer\",\n valueParser: \"ValueParser\",\n },\n }),\n );\n resolve();\n },\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"error cases\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n });\n it(\"Error if open app fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock(new UnknownDeviceExchangeError(\"Mocked error\"));\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"Error if prepareWallet fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"Error if buildPsbt fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"Error if signPsbt fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as BuildPsbtTaskResult,\n }),\n );\n signPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"Error if signPsbt throws an exception\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({ data: {} as Wallet }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({ data: {} as BuildPsbtTaskResult }),\n );\n signPsbtMock.mockRejectedValueOnce(\n new InvalidStatusWordError(\"Mocked error\"),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"Return a Left if the final state has no signature\", () =>\n new Promise<void>((resolve, reject) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as BuildPsbtTaskResult,\n }),\n );\n signPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: undefined,\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"No error in final state\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_makeInternalApi", "import_setupOpenAppDAMock", "import_testDeviceActionStates", "import_SignPsbtDeviceAction", "importOriginal", "signPsbtMock", "prepareWalletPolicyMock", "buildPsbtMock", "extractDependenciesMock", "resolve", "reject", "deviceAction", "expectedStates"]
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n DeviceActionStatus,\n UnknownDeviceExchangeError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { UnknownDAError } from \"@ledgerhq/device-management-kit\";\nimport { InvalidStatusWordError } from \"@ledgerhq/device-management-kit\";\n\nimport { type SignPsbtDAState } from \"@api/app-binder/SignPsbtDeviceActionTypes\";\nimport { type RegisteredWallet } from \"@api/model/Wallet\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupOpenAppDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { type BuildPsbtTaskResult } from \"@internal/app-binder/task/BuildPsbtTask\";\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 Wallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletBuilder } from \"@internal/wallet/service/WalletBuilder\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { SignPsbtDeviceAction } from \"./SignPsbtDeviceAction\";\n\njest.mock(\n \"@ledgerhq/device-management-kit\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n () => ({\n ...jest.requireActual(\"@ledgerhq/device-management-kit\"),\n OpenAppDeviceAction: jest.fn(() => ({\n makeStateMachine: jest.fn(),\n })),\n }),\n);\n\ndescribe(\"SignPsbtDeviceAction\", () => {\n const signPsbtMock = jest.fn();\n const prepareWalletPolicyMock = jest.fn();\n const buildPsbtMock = jest.fn();\n\n function extractDependenciesMock() {\n return {\n signPsbt: signPsbtMock,\n prepareWalletPolicy: prepareWalletPolicyMock,\n buildPsbt: buildPsbtMock,\n };\n }\n\n describe(\"Success case\", () => {\n it(\"should call external dependencies with the correct parameters\", (done) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n psbtMapper: \"PsbtMapper\" as unknown as PsbtMapper,\n valueParser: \"ValueParser\" as unknown as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"Wallet\" as unknown as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"BuildPsbtResult\" as unknown as BuildPsbtTaskResult,\n }),\n );\n signPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: [\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ],\n }),\n );\n\n // Expected intermediate values for the following state sequence:\n // Initial -> OpenApp -> PrepareWalletPolicy -> BuildPsbt -> SignPsbt\n const expectedStates: Array<SignPsbtDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: [\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ],\n status: DeviceActionStatus.Completed,\n },\n ];\n\n const { observable } = testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n\n // @todo Put this in a onDone handle of testDeviceActionStates\n observable.subscribe({\n complete: () => {\n expect(prepareWalletPolicyMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: { wallet: \"ApiWallet\", walletBuilder: \"WalletBuilder\" },\n }),\n );\n expect(buildPsbtMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n psbt: \"Hello world\",\n wallet: \"Wallet\",\n dataStoreService: \"DataStoreService\",\n psbtMapper: \"PsbtMapper\",\n },\n }),\n );\n expect(signPsbtMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n wallet: \"Wallet\",\n buildPsbtResult: \"BuildPsbtResult\",\n walletSerializer: \"WalletSerializer\",\n valueParser: \"ValueParser\",\n },\n }),\n );\n },\n });\n });\n });\n\n describe(\"error cases\", () => {\n beforeEach(() => {\n jest.resetAllMocks();\n });\n it(\"Error if open app fails\", (done) => {\n setupOpenAppDAMock(new UnknownDeviceExchangeError(\"Mocked error\"));\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n\n it(\"Error if prepareWallet fails\", (done) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n\n it(\"Error if buildPsbt fails\", (done) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n\n it(\"Error if signPsbt fails\", (done) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as BuildPsbtTaskResult,\n }),\n );\n signPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n\n it(\"Error if signPsbt throws an exception\", (done) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({ data: {} as Wallet }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({ data: {} as BuildPsbtTaskResult }),\n );\n signPsbtMock.mockRejectedValueOnce(\n new InvalidStatusWordError(\"Mocked error\"),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n\n it(\"Return a Left if the final state has no signature\", (done) => {\n setupOpenAppDAMock();\n\n const deviceAction = new SignPsbtDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n prepareWalletPolicyMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as Wallet,\n }),\n );\n buildPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: {} as BuildPsbtTaskResult,\n }),\n );\n signPsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: undefined,\n }),\n );\n\n const expectedStates: Array<SignPsbtDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"No error in final state\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_makeInternalApi", "import_setupOpenAppDAMock", "import_testDeviceActionStates", "import_SignPsbtDeviceAction", "signPsbtMock", "prepareWalletPolicyMock", "buildPsbtMock", "extractDependenciesMock", "done", "deviceAction", "expectedStates", "observable"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),o=require("../../../app-binder/device-action/__test-utils__/makeInternalApi"),l=require("../../../app-binder/device-action/__test-utils__/setupSignPsbtDAMock"),c=require("../../../app-binder/device-action/__test-utils__/testDeviceActionStates"),u=require("./SignTransactionDeviceAction");vi.mock("@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction",async r=>({...await r(),SignPsbtDeviceAction:vi.fn(()=>({makeStateMachine:vi.fn()}))}));describe("SignTransactionDeviceAction",()=>{const r=vi.fn(),s=vi.fn();function d(){return{updatePsbt:r,extractTransaction:s}}describe("Success case",()=>{it("should call external dependencies with the correct parameters",()=>new Promise((a,n)=>{(0,l.setupSignPsbtDAMock)([{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}]);const t=new u.SignTransactionDeviceAction({input:{wallet:"ApiWallet",psbt:"Hello world",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper",valueParser:"ValueParser"}});vi.spyOn(t,"extractDependencies").mockReturnValue(d()),r.mockResolvedValueOnce((0,e.CommandResultFactory)({data:"Psbt"})),s.mockResolvedValueOnce((0,e.CommandResultFactory)({data:"0x42"}));const i=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{output:"0x42",status:e.DeviceActionStatus.Completed}];(0,c.testDeviceActionStates)(t,i,(0,o.makeDeviceActionInternalApiMock)(),{onDone:()=>{expect(r).toHaveBeenCalledWith(expect.objectContaining({input:{psbt:"Hello world",psbtMapper:"PsbtMapper",signatures:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}],valueParser:"ValueParser"}})),expect(s).toHaveBeenCalledWith(expect.objectContaining({input:{psbt:"Psbt",valueParser:"ValueParser"}})),a()},onError:n})}))}),describe("error cases",()=>{beforeEach(()=>{vi.resetAllMocks()}),it("Error if sign psbt fails",()=>new Promise((a,n)=>{(0,l.setupSignPsbtDAMock)([],new e.UnknownDeviceExchangeError("Mocked error"));const t=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}],i=new u.SignTransactionDeviceAction({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});(0,c.testDeviceActionStates)(i,t,(0,o.makeDeviceActionInternalApiMock)(),{onDone:a,onError:n})})),it("Error if update psbt fails",()=>new Promise((a,n)=>{(0,l.setupSignPsbtDAMock)();const t=new u.SignTransactionDeviceAction({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});vi.spyOn(t,"extractDependencies").mockReturnValue(d()),r.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.UnknownDeviceExchangeError("Mocked error")}));const i=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}];(0,c.testDeviceActionStates)(t,i,(0,o.makeDeviceActionInternalApiMock)(),{onDone:a,onError:n})})),it("Error if extract transaction fails",()=>new Promise((a,n)=>{(0,l.setupSignPsbtDAMock)();const t=new u.SignTransactionDeviceAction({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});vi.spyOn(t,"extractDependencies").mockReturnValue(d()),r.mockResolvedValueOnce((0,e.CommandResultFactory)({data:"Psbt"})),s.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.UnknownDeviceExchangeError("Mocked error")}));const i=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}];(0,c.testDeviceActionStates)(t,i,(0,o.makeDeviceActionInternalApiMock)(),{onDone:a,onError:n})}))})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),i=require("../../../app-binder/device-action/__test-utils__/makeInternalApi"),s=require("../../../app-binder/device-action/__test-utils__/setupSignPsbtDAMock"),o=require("../../../app-binder/device-action/__test-utils__/testDeviceActionStates"),l=require("./SignTransactionDeviceAction");jest.mock("@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction",()=>({...jest.requireActual("@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction"),SignPsbtDeviceAction:jest.fn(()=>({makeStateMachine:jest.fn()}))}));describe("SignTransactionDeviceAction",()=>{const n=jest.fn(),c=jest.fn();function u(){return{updatePsbt:n,extractTransaction:c}}describe("Success case",()=>{it("should call external dependencies with the correct parameters",r=>{(0,s.setupSignPsbtDAMock)([{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}]);const t=new l.SignTransactionDeviceAction({input:{wallet:"ApiWallet",psbt:"Hello world",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper",valueParser:"ValueParser"}});jest.spyOn(t,"extractDependencies").mockReturnValue(u()),n.mockResolvedValueOnce((0,e.CommandResultFactory)({data:"Psbt"})),c.mockResolvedValueOnce((0,e.CommandResultFactory)({data:"0x42"}));const a=[{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None},status:e.DeviceActionStatus.Pending},{output:"0x42",status:e.DeviceActionStatus.Completed}],{observable:d}=(0,o.testDeviceActionStates)(t,a,(0,i.makeDeviceActionInternalApiMock)(),r);d.subscribe({complete:()=>{expect(n).toHaveBeenCalledWith(expect.objectContaining({input:{psbt:"Hello world",psbtMapper:"PsbtMapper",signatures:[{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}],valueParser:"ValueParser"}})),expect(c).toHaveBeenCalledWith(expect.objectContaining({input:{psbt:"Psbt",valueParser:"ValueParser"}}))}})})}),describe("error cases",()=>{beforeEach(()=>{jest.resetAllMocks()}),it("Error if sign psbt fails",r=>{(0,s.setupSignPsbtDAMock)([],new e.UnknownDeviceExchangeError("Mocked error"));const t=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}],a=new l.SignTransactionDeviceAction({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});(0,o.testDeviceActionStates)(a,t,(0,i.makeDeviceActionInternalApiMock)(),r)}),it("Error if update psbt fails",r=>{(0,s.setupSignPsbtDAMock)();const t=new l.SignTransactionDeviceAction({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});jest.spyOn(t,"extractDependencies").mockReturnValue(u()),n.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.UnknownDeviceExchangeError("Mocked error")}));const a=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}];(0,o.testDeviceActionStates)(t,a,(0,i.makeDeviceActionInternalApiMock)(),r)}),it("Error if extract transaction fails",r=>{(0,s.setupSignPsbtDAMock)();const t=new l.SignTransactionDeviceAction({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});jest.spyOn(t,"extractDependencies").mockReturnValue(u()),n.mockResolvedValueOnce((0,e.CommandResultFactory)({data:"Psbt"})),c.mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.UnknownDeviceExchangeError("Mocked error")}));const a=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.SignTransaction}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:e.UserInteractionRequired.None}},{status:e.DeviceActionStatus.Error,error:new e.UnknownDeviceExchangeError("Mocked error")}];(0,o.testDeviceActionStates)(t,a,(0,i.makeDeviceActionInternalApiMock)(),r)})})});
2
2
  //# sourceMappingURL=SignTransactionDeviceAction.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.ts"],
4
- "sourcesContent": ["/* eslint @typescript-eslint/consistent-type-imports: off */\nimport {\n CommandResultFactory,\n DeviceActionStatus,\n UnknownDeviceExchangeError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type SignTransactionDAState } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type RegisteredWallet } from \"@api/model/Wallet\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupSignPsbtDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Psbt as InternalPsbt } from \"@internal/psbt/model/Psbt\";\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\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\nvi.mock(\n \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\",\n async (importOriginal) => {\n const original =\n await importOriginal<\n typeof import(\"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\")\n >();\n return {\n ...original,\n SignPsbtDeviceAction: vi.fn(() => ({\n makeStateMachine: vi.fn(),\n })),\n };\n },\n);\n\ndescribe(\"SignTransactionDeviceAction\", () => {\n const updatePsbtMock = vi.fn();\n const extractTransactionMock = vi.fn();\n\n function extractDependenciesMock() {\n return {\n updatePsbt: updatePsbtMock,\n extractTransaction: extractTransactionMock,\n };\n }\n\n describe(\"Success case\", () => {\n it(\"should call external dependencies with the correct parameters\", () =>\n new Promise<void>((resolve, reject) => {\n setupSignPsbtDAMock([\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ]);\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n psbtMapper: \"PsbtMapper\" as unknown as PsbtMapper,\n valueParser: \"ValueParser\" as unknown as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n updatePsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"Psbt\" as unknown as InternalPsbt,\n }),\n );\n extractTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"0x42\",\n }),\n );\n\n // Expected intermediate values for the following state sequence:\n const expectedStates: Array<SignTransactionDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: \"0x42\",\n status: DeviceActionStatus.Completed,\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: () => {\n expect(updatePsbtMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n psbt: \"Hello world\",\n psbtMapper: \"PsbtMapper\",\n signatures: [\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ],\n valueParser: \"ValueParser\",\n },\n }),\n );\n expect(extractTransactionMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n psbt: \"Psbt\",\n valueParser: \"ValueParser\",\n },\n }),\n );\n resolve();\n },\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"error cases\", () => {\n beforeEach(() => {\n vi.resetAllMocks();\n });\n it(\"Error if sign psbt fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupSignPsbtDAMock([], new UnknownDeviceExchangeError(\"Mocked error\"));\n\n const expectedStates: Array<SignTransactionDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"Error if update psbt fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupSignPsbtDAMock();\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n updatePsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignTransactionDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"Error if extract transaction fails\", () =>\n new Promise<void>((resolve, reject) => {\n setupSignPsbtDAMock();\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n vi.spyOn(deviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n updatePsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"Psbt\" as unknown as InternalPsbt,\n }),\n );\n extractTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignTransactionDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["import_device_management_kit", "import_makeInternalApi", "import_setupSignPsbtDAMock", "import_testDeviceActionStates", "import_SignTransactionDeviceAction", "importOriginal", "updatePsbtMock", "extractTransactionMock", "extractDependenciesMock", "resolve", "reject", "deviceAction", "expectedStates"]
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n DeviceActionStatus,\n UnknownDeviceExchangeError,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type SignTransactionDAState } from \"@api/app-binder/SignTransactionDeviceActionTypes\";\nimport { type RegisteredWallet } from \"@api/model/Wallet\";\nimport { makeDeviceActionInternalApiMock } from \"@internal/app-binder/device-action/__test-utils__/makeInternalApi\";\nimport { setupSignPsbtDAMock } from \"@internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock\";\nimport { testDeviceActionStates } from \"@internal/app-binder/device-action/__test-utils__/testDeviceActionStates\";\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Psbt as InternalPsbt } from \"@internal/psbt/model/Psbt\";\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\nimport { SignTransactionDeviceAction } from \"./SignTransactionDeviceAction\";\n\njest.mock(\n \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\",\n () => ({\n ...jest.requireActual(\n \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\",\n ),\n SignPsbtDeviceAction: jest.fn(() => ({\n makeStateMachine: jest.fn(),\n })),\n }),\n);\n\ndescribe(\"SignTransactionDeviceAction\", () => {\n const updatePsbtMock = jest.fn();\n const extractTransactionMock = jest.fn();\n\n function extractDependenciesMock() {\n return {\n updatePsbt: updatePsbtMock,\n extractTransaction: extractTransactionMock,\n };\n }\n\n describe(\"Success case\", () => {\n it(\"should call external dependencies with the correct parameters\", (done) => {\n setupSignPsbtDAMock([\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ]);\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: \"ApiWallet\" as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: \"WalletBuilder\" as unknown as WalletBuilder,\n walletSerializer: \"WalletSerializer\" as unknown as WalletSerializer,\n dataStoreService: \"DataStoreService\" as unknown as DataStoreService,\n psbtMapper: \"PsbtMapper\" as unknown as PsbtMapper,\n valueParser: \"ValueParser\" as unknown as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n updatePsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"Psbt\" as unknown as InternalPsbt,\n }),\n );\n extractTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"0x42\",\n }),\n );\n\n // Expected intermediate values for the following state sequence:\n const expectedStates: Array<SignTransactionDAState> = [\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n status: DeviceActionStatus.Pending,\n },\n {\n output: \"0x42\",\n status: DeviceActionStatus.Completed,\n },\n ];\n\n const { observable } = testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n\n // @todo Put this in a onDone handle of testDeviceActionStates\n observable.subscribe({\n complete: () => {\n expect(updatePsbtMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n psbt: \"Hello world\",\n psbtMapper: \"PsbtMapper\",\n signatures: [\n {\n inputIndex: 0,\n pubkey: Uint8Array.from([0x04, 0x05, 0x06]),\n signature: Uint8Array.from([0x01, 0x02, 0x03]),\n },\n ],\n valueParser: \"ValueParser\",\n },\n }),\n );\n expect(extractTransactionMock).toHaveBeenCalledWith(\n expect.objectContaining({\n input: {\n psbt: \"Psbt\",\n valueParser: \"ValueParser\",\n },\n }),\n );\n },\n });\n });\n });\n\n describe(\"error cases\", () => {\n beforeEach(() => {\n jest.resetAllMocks();\n });\n it(\"Error if sign psbt fails\", (done) => {\n setupSignPsbtDAMock([], new UnknownDeviceExchangeError(\"Mocked error\"));\n\n const expectedStates: Array<SignTransactionDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n it(\"Error if update psbt fails\", (done) => {\n setupSignPsbtDAMock();\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n updatePsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignTransactionDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n it(\"Error if extract transaction fails\", (done) => {\n setupSignPsbtDAMock();\n\n const deviceAction = new SignTransactionDeviceAction({\n input: {\n wallet: {} as unknown as RegisteredWallet,\n psbt: \"Hello world\",\n walletBuilder: {} as WalletBuilder,\n walletSerializer: {} as WalletSerializer,\n dataStoreService: {} as DataStoreService,\n psbtMapper: {} as PsbtMapper,\n valueParser: {} as ValueParser,\n },\n });\n\n // Mock the dependencies to return some sample data\n jest\n .spyOn(deviceAction, \"extractDependencies\")\n .mockReturnValue(extractDependenciesMock());\n updatePsbtMock.mockResolvedValueOnce(\n CommandResultFactory({\n data: \"Psbt\" as unknown as InternalPsbt,\n }),\n );\n extractTransactionMock.mockResolvedValueOnce(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n }),\n );\n\n const expectedStates: Array<SignTransactionDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.SignTransaction,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDeviceExchangeError(\"Mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n deviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n done,\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["import_device_management_kit", "import_makeInternalApi", "import_setupSignPsbtDAMock", "import_testDeviceActionStates", "import_SignTransactionDeviceAction", "updatePsbtMock", "extractTransactionMock", "extractDependenciesMock", "done", "deviceAction", "expectedStates", "observable"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var r=Object.prototype.hasOwnProperty;var v=(n,e)=>{for(var i in e)c(n,i,{get:e[i],enumerable:!0})},S=(n,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of a(e))!r.call(n,t)&&t!==i&&c(n,t,{get:()=>e[t],enumerable:!(o=s(e,t))||o.enumerable});return n};var p=n=>S(c({},"__esModule",{value:!0}),n);var D={};v(D,{makeDeviceActionInternalApiMock:()=>l});module.exports=p(D);const M=vi.fn(),k=vi.fn(),d=vi.fn(),f=vi.fn(),m=vi.fn(),g=vi.fn(),A=vi.fn();function l(){return{sendApdu:M,sendCommand:k,getDeviceSessionState:d,getDeviceSessionStateObservable:f,setDeviceSessionState:m,getManagerApiService:g,getSecureChannelService:A}}0&&(module.exports={makeDeviceActionInternalApiMock});
1
+ "use strict";var i=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var r=Object.prototype.hasOwnProperty;var S=(t,e)=>{for(var s in e)i(t,s,{get:e[s],enumerable:!0})},v=(t,e,s,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of a(e))!r.call(t,n)&&n!==s&&i(t,n,{get:()=>e[n],enumerable:!(o=c(e,n))||o.enumerable});return t};var p=t=>v(i({},"__esModule",{value:!0}),t);var j={};S(j,{makeDeviceActionInternalApiMock:()=>g});module.exports=p(j);const M=jest.fn(),k=jest.fn(),f=jest.fn(),m=jest.fn(),D=jest.fn();function g(){return{sendCommand:M,getDeviceSessionState:k,getDeviceSessionStateObservable:f,setDeviceSessionState:m,getManagerApiService:D}}0&&(module.exports={makeDeviceActionInternalApiMock});
2
2
  //# sourceMappingURL=makeInternalApi.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/__test-utils__/makeInternalApi.ts"],
4
- "sourcesContent": ["import { type InternalApi } from \"@ledgerhq/device-management-kit\";\nimport { type Mocked } from \"vitest\";\n\nconst sendApduMock = vi.fn();\nconst sendCommandMock = vi.fn();\nconst apiGetDeviceSessionStateMock = vi.fn();\nconst apiGetDeviceSessionStateObservableMock = vi.fn();\nconst setDeviceSessionStateMock = vi.fn();\nconst getManagerApiServiceMock = vi.fn();\nconst getSecureChannelServiceMock = vi.fn();\n\nexport function makeDeviceActionInternalApiMock(): Mocked<InternalApi> {\n return {\n sendApdu: sendApduMock,\n sendCommand: sendCommandMock,\n getDeviceSessionState: apiGetDeviceSessionStateMock,\n getDeviceSessionStateObservable: apiGetDeviceSessionStateObservableMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n getManagerApiService: getManagerApiServiceMock,\n getSecureChannelService: getSecureChannelServiceMock,\n };\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,IAAA,eAAAC,EAAAH,GAGA,MAAMI,EAAe,GAAG,GAAG,EACrBC,EAAkB,GAAG,GAAG,EACxBC,EAA+B,GAAG,GAAG,EACrCC,EAAyC,GAAG,GAAG,EAC/CC,EAA4B,GAAG,GAAG,EAClCC,EAA2B,GAAG,GAAG,EACjCC,EAA8B,GAAG,GAAG,EAEnC,SAASR,GAAuD,CACrE,MAAO,CACL,SAAUE,EACV,YAAaC,EACb,sBAAuBC,EACvB,gCAAiCC,EACjC,sBAAuBC,EACvB,qBAAsBC,EACtB,wBAAyBC,CAC3B,CACF",
6
- "names": ["makeInternalApi_exports", "__export", "makeDeviceActionInternalApiMock", "__toCommonJS", "sendApduMock", "sendCommandMock", "apiGetDeviceSessionStateMock", "apiGetDeviceSessionStateObservableMock", "setDeviceSessionStateMock", "getManagerApiServiceMock", "getSecureChannelServiceMock"]
4
+ "sourcesContent": ["import { type InternalApi } from \"@ledgerhq/device-management-kit\";\n\nconst sendCommandMock = jest.fn();\nconst apiGetDeviceSessionStateMock = jest.fn();\nconst apiGetDeviceSessionStateObservableMock = jest.fn();\nconst setDeviceSessionStateMock = jest.fn();\nconst getManagerApiServiceMock = jest.fn();\n\nexport function makeDeviceActionInternalApiMock(): jest.Mocked<InternalApi> {\n return {\n sendCommand: sendCommandMock,\n getDeviceSessionState: apiGetDeviceSessionStateMock,\n getDeviceSessionStateObservable: apiGetDeviceSessionStateObservableMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n getManagerApiService: getManagerApiServiceMock,\n };\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qCAAAE,IAAA,eAAAC,EAAAH,GAEA,MAAMI,EAAkB,KAAK,GAAG,EAC1BC,EAA+B,KAAK,GAAG,EACvCC,EAAyC,KAAK,GAAG,EACjDC,EAA4B,KAAK,GAAG,EACpCC,EAA2B,KAAK,GAAG,EAElC,SAASN,GAA4D,CAC1E,MAAO,CACL,YAAaE,EACb,sBAAuBC,EACvB,gCAAiCC,EACjC,sBAAuBC,EACvB,qBAAsBC,CACxB,CACF",
6
+ "names": ["makeInternalApi_exports", "__export", "makeDeviceActionInternalApiMock", "__toCommonJS", "sendCommandMock", "apiGetDeviceSessionStateMock", "apiGetDeviceSessionStateObservableMock", "setDeviceSessionStateMock", "getManagerApiServiceMock"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var a=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var s=(e,n)=>{for(var i in n)a(e,i,{get:n[i],enumerable:!0})},u=(e,n,i,m)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of f(n))!d.call(e,t)&&t!==i&&a(e,t,{get:()=>n[t],enumerable:!(m=c(n,t))||m.enumerable});return e};var k=e=>u(a({},"__esModule",{value:!0}),e);var A={};s(A,{setupOpenAppDAMock:()=>l});module.exports=k(A);var o=require("@ledgerhq/device-management-kit"),p=require("purify-ts"),r=require("xstate");const l=e=>{o.OpenAppDeviceAction.mockImplementation(()=>({makeStateMachine:vi.fn().mockImplementation(()=>(0,r.createMachine)({initial:"pending",states:{pending:{entry:(0,r.assign)({intermediateValue:{requiredUserInteraction:o.UserInteractionRequired.ConfirmOpenApp}}),after:{0:"done"}},done:{type:"final"}},output:()=>e?(0,p.Left)(e):(0,p.Right)(void 0)}))}))};0&&(module.exports={setupOpenAppDAMock});
1
+ "use strict";var r=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var d=Object.prototype.hasOwnProperty;var f=(e,n)=>{for(var i in n)r(e,i,{get:n[i],enumerable:!0})},u=(e,n,i,m)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of s(n))!d.call(e,t)&&t!==i&&r(e,t,{get:()=>n[t],enumerable:!(m=c(n,t))||m.enumerable});return e};var k=e=>u(r({},"__esModule",{value:!0}),e);var A={};f(A,{setupOpenAppDAMock:()=>l});module.exports=k(A);var o=require("@ledgerhq/device-management-kit"),p=require("purify-ts"),a=require("xstate");const l=e=>{o.OpenAppDeviceAction.mockImplementation(()=>({makeStateMachine:jest.fn().mockImplementation(()=>(0,a.createMachine)({initial:"pending",states:{pending:{entry:(0,a.assign)({intermediateValue:{requiredUserInteraction:o.UserInteractionRequired.ConfirmOpenApp}}),after:{0:"done"}},done:{type:"final"}},output:()=>e?(0,p.Left)(e):(0,p.Right)(void 0)}))}))};0&&(module.exports={setupOpenAppDAMock});
2
2
  //# sourceMappingURL=setupOpenAppDAMock.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.ts"],
4
- "sourcesContent": ["import {\n OpenAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { type Mock } from \"vitest\";\nimport { assign, createMachine } from \"xstate\";\n\nexport const setupOpenAppDAMock = (error?: unknown) => {\n (OpenAppDeviceAction as Mock).mockImplementation(() => ({\n makeStateMachine: vi.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(undefined)),\n }),\n ),\n }));\n};\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAGO,2CACPC,EAA4B,qBAE5BC,EAAsC,kBAE/B,MAAMJ,EAAsBK,GAAoB,CACpD,sBAA6B,mBAAmB,KAAO,CACtD,iBAAkB,GAAG,GAAG,EAAE,mBAAmB,OAC3C,iBAAc,CACZ,QAAS,UACT,OAAQ,CACN,QAAS,CACP,SAAO,UAAO,CACZ,kBAAmB,CACjB,wBAAyB,0BAAwB,cACnD,CACF,CAAC,EACD,MAAO,CACL,EAAG,MACL,CACF,EACA,KAAM,CACJ,KAAM,OACR,CACF,EACA,OAAQ,IAAOA,KAAQ,QAAKA,CAAK,KAAI,SAAM,MAAS,CACtD,CAAC,CACH,CACF,EAAE,CACJ",
4
+ "sourcesContent": ["import {\n OpenAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, createMachine } from \"xstate\";\n\nexport const setupOpenAppDAMock = (error?: unknown) => {\n (OpenAppDeviceAction as jest.Mock).mockImplementation(() => ({\n makeStateMachine: jest.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(undefined)),\n }),\n ),\n }));\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,wBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAGO,2CACPC,EAA4B,qBAC5BC,EAAsC,kBAE/B,MAAMJ,EAAsBK,GAAoB,CACpD,sBAAkC,mBAAmB,KAAO,CAC3D,iBAAkB,KAAK,GAAG,EAAE,mBAAmB,OAC7C,iBAAc,CACZ,QAAS,UACT,OAAQ,CACN,QAAS,CACP,SAAO,UAAO,CACZ,kBAAmB,CACjB,wBAAyB,0BAAwB,cACnD,CACF,CAAC,EACD,MAAO,CACL,EAAG,MACL,CACF,EACA,KAAM,CACJ,KAAM,OACR,CACF,EACA,OAAQ,IAAOA,KAAQ,QAAKA,CAAK,KAAI,SAAM,MAAS,CACtD,CAAC,CACH,CACF,EAAE,CACJ",
6
6
  "names": ["setupOpenAppDAMock_exports", "__export", "setupOpenAppDAMock", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var a=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var u=(e,t)=>{for(var i in t)a(e,i,{get:t[i],enumerable:!0})},d=(e,t,i,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of f(t))!g.call(e,n)&&n!==i&&a(e,n,{get:()=>t[n],enumerable:!(m=s(t,n))||m.enumerable});return e};var k=e=>d(a({},"__esModule",{value:!0}),e);var l={};u(l,{setupSignPsbtDAMock:()=>S});module.exports=k(l);var p=require("@ledgerhq/device-management-kit"),o=require("purify-ts"),r=require("xstate"),c=require("../../../app-binder/device-action/SignPsbt/SignPsbtDeviceAction");const S=(e=[],t)=>{c.SignPsbtDeviceAction.mockImplementation(()=>({makeStateMachine:vi.fn().mockImplementation(()=>(0,r.createMachine)({initial:"pending",states:{pending:{entry:(0,r.assign)({intermediateValue:{requiredUserInteraction:p.UserInteractionRequired.SignTransaction}}),after:{0:"done"}},done:{type:"final"}},output:()=>t?(0,o.Left)(t):(0,o.Right)(e)}))}))};0&&(module.exports={setupSignPsbtDAMock});
1
+ "use strict";var a=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var f=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var u=(e,t)=>{for(var i in t)a(e,i,{get:t[i],enumerable:!0})},d=(e,t,i,m)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of f(t))!g.call(e,n)&&n!==i&&a(e,n,{get:()=>t[n],enumerable:!(m=c(t,n))||m.enumerable});return e};var k=e=>d(a({},"__esModule",{value:!0}),e);var l={};u(l,{setupSignPsbtDAMock:()=>S});module.exports=k(l);var s=require("@ledgerhq/device-management-kit"),o=require("purify-ts"),r=require("xstate"),p=require("../../../app-binder/device-action/SignPsbt/SignPsbtDeviceAction");const S=(e=[],t)=>{p.SignPsbtDeviceAction.mockImplementation(()=>({makeStateMachine:jest.fn().mockImplementation(()=>(0,r.createMachine)({initial:"pending",states:{pending:{entry:(0,r.assign)({intermediateValue:{requiredUserInteraction:s.UserInteractionRequired.SignTransaction}}),after:{0:"done"}},done:{type:"final"}},output:()=>t?(0,o.Left)(t):(0,o.Right)(e)}))}))};0&&(module.exports={setupSignPsbtDAMock});
2
2
  //# sourceMappingURL=setupSignPsbtDAMock.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.ts"],
4
- "sourcesContent": ["import { UserInteractionRequired } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { type Mock } from \"vitest\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { type PsbtSignature } from \"@api/model/Signature\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\n\nexport const setupSignPsbtDAMock = (\n sigs: PsbtSignature[] = [],\n error?: unknown,\n) => {\n // setupOpenAppDAMock();\n (SignPsbtDeviceAction as Mock).mockImplementation(() => ({\n makeStateMachine: vi.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction:\n UserInteractionRequired.SignTransaction,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(sigs)),\n }),\n ),\n }));\n};\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAwC,2CACxCC,EAA4B,qBAE5BC,EAAsC,kBAGtCC,EAAqC,4EAE9B,MAAML,EAAsB,CACjCM,EAAwB,CAAC,EACzBC,IACG,CAEF,uBAA8B,mBAAmB,KAAO,CACvD,iBAAkB,GAAG,GAAG,EAAE,mBAAmB,OAC3C,iBAAc,CACZ,QAAS,UACT,OAAQ,CACN,QAAS,CACP,SAAO,UAAO,CACZ,kBAAmB,CACjB,wBACE,0BAAwB,eAC5B,CACF,CAAC,EACD,MAAO,CACL,EAAG,MACL,CACF,EACA,KAAM,CACJ,KAAM,OACR,CACF,EACA,OAAQ,IAAOA,KAAQ,QAAKA,CAAK,KAAI,SAAMD,CAAI,CACjD,CAAC,CACH,CACF,EAAE,CACJ",
4
+ "sourcesContent": ["import { UserInteractionRequired } from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\nimport { assign, createMachine } from \"xstate\";\n\nimport { type PsbtSignature } from \"@api/model/Signature\";\nimport { SignPsbtDeviceAction } from \"@internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction\";\n\nexport const setupSignPsbtDAMock = (\n sigs: PsbtSignature[] = [],\n error?: unknown,\n) => {\n // setupOpenAppDAMock();\n (SignPsbtDeviceAction as jest.Mock).mockImplementation(() => ({\n makeStateMachine: jest.fn().mockImplementation(() =>\n createMachine({\n initial: \"pending\",\n states: {\n pending: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction:\n UserInteractionRequired.SignTransaction,\n },\n }),\n after: {\n 0: \"done\",\n },\n },\n done: {\n type: \"final\",\n },\n },\n output: () => (error ? Left(error) : Right(sigs)),\n }),\n ),\n }));\n};\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,yBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAwC,2CACxCC,EAA4B,qBAC5BC,EAAsC,kBAGtCC,EAAqC,4EAE9B,MAAML,EAAsB,CACjCM,EAAwB,CAAC,EACzBC,IACG,CAEF,uBAAmC,mBAAmB,KAAO,CAC5D,iBAAkB,KAAK,GAAG,EAAE,mBAAmB,OAC7C,iBAAc,CACZ,QAAS,UACT,OAAQ,CACN,QAAS,CACP,SAAO,UAAO,CACZ,kBAAmB,CACjB,wBACE,0BAAwB,eAC5B,CACF,CAAC,EACD,MAAO,CACL,EAAG,MACL,CACF,EACA,KAAM,CACJ,KAAM,OACR,CACF,EACA,OAAQ,IAAOA,KAAQ,QAAKA,CAAK,KAAI,SAAMD,CAAI,CACjD,CAAC,CACH,CACF,EAAE,CACJ",
6
6
  "names": ["setupSignPsbtDAMock_exports", "__export", "setupSignPsbtDAMock", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_xstate", "import_SignPsbtDeviceAction", "sigs", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var c=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var v=Object.prototype.hasOwnProperty;var A=(t,e)=>{for(var o in e)c(t,o,{get:e[o],enumerable:!0})},d=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of l(e))!v.call(t,r)&&r!==o&&c(t,r,{get:()=>e[r],enumerable:!(i=s(e,r))||i.enumerable});return t};var m=t=>d(c({},"__esModule",{value:!0}),t);var I={};A(I,{testDeviceActionStates:()=>D});module.exports=m(I);function D(t,e,o,{onDone:i,onError:r}){const a=[],{observable:u,cancel:p}=t._execute(o);return u.subscribe({next:n=>{a.push(n)},error:n=>{r(n)},complete:()=>{try{expect(a).toEqual(e),i()}catch(n){r(n)}}}),{observable:u,cancel:p}}0&&(module.exports={testDeviceActionStates});
1
+ "use strict";var n=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var A=(t,e)=>{for(var c in e)n(t,c,{get:e[c],enumerable:!0})},m=(t,e,c,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of l(e))!s.call(t,i)&&i!==c&&n(t,i,{get:()=>e[i],enumerable:!(r=p(e,i))||r.enumerable});return t};var D=t=>m(n({},"__esModule",{value:!0}),t);var I={};A(I,{testDeviceActionStates:()=>v});module.exports=D(I);function v(t,e,c,r){const i=[],{observable:u,cancel:o}=t._execute(c);return u.subscribe({next:a=>{i.push(a)},error:a=>{r&&r(a)},complete:()=>{try{expect(i).toEqual(e),r&&r()}catch(a){r&&r(a)}}}),{observable:u,cancel:o}}0&&(module.exports={testDeviceActionStates});
2
2
  //# sourceMappingURL=testDeviceActionStates.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.ts"],
4
- "sourcesContent": ["import {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type DeviceActionState,\n type DmkError,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\n\n/**\n * Test that the states emitted by a device action match the expected states.\n * @param deviceAction The device action to test.\n * @param expectedStates The expected states.\n * @param callbacks { onDone, onError } The callbacks to call when the test is done or an error occurs.\n */\nexport function testDeviceActionStates<\n Output,\n Input,\n Error extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n>(\n deviceAction: DeviceAction<Output, Input, Error, IntermediateValue>,\n expectedStates: Array<DeviceActionState<Output, Error, IntermediateValue>>,\n internalApi: InternalApi,\n {\n onDone,\n onError,\n }: {\n onDone: () => void;\n onError: (error: Error) => void;\n },\n) {\n const observedStates: Array<\n DeviceActionState<Output, Error, IntermediateValue>\n > = [];\n\n const { observable, cancel } = deviceAction._execute(internalApi);\n observable.subscribe({\n next: (state) => {\n observedStates.push(state);\n },\n error: (error) => {\n onError(error);\n },\n complete: () => {\n try {\n expect(observedStates).toEqual(expectedStates);\n onDone();\n } catch (e) {\n onError(e as Error);\n }\n },\n });\n return { observable, cancel };\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAcO,SAASE,EAMdE,EACAC,EACAC,EACA,CACE,OAAAC,EACA,QAAAC,CACF,EAIA,CACA,MAAMC,EAEF,CAAC,EAEC,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIP,EAAa,SAASE,CAAW,EAChE,OAAAI,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfH,EAAe,KAAKG,CAAK,CAC3B,EACA,MAAQC,GAAU,CAChBL,EAAQK,CAAK,CACf,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOJ,CAAc,EAAE,QAAQJ,CAAc,EAC7CE,EAAO,CACT,OAASO,EAAG,CACVN,EAAQM,CAAU,CACpB,CACF,CACF,CAAC,EACM,CAAE,WAAAJ,EAAY,OAAAC,CAAO,CAC9B",
6
- "names": ["testDeviceActionStates_exports", "__export", "testDeviceActionStates", "__toCommonJS", "deviceAction", "expectedStates", "internalApi", "onDone", "onError", "observedStates", "observable", "cancel", "state", "error", "e"]
4
+ "sourcesContent": ["import {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type DeviceActionState,\n type DmkError,\n type InternalApi,\n} from \"@ledgerhq/device-management-kit\";\n\n/**\n * Test that the states emitted by a device action match the expected states.\n * @param deviceAction The device action to test.\n * @param expectedStates The expected states.\n * @param done The Jest done callback.\n */\nexport function testDeviceActionStates<\n Output,\n Input,\n Error extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n>(\n deviceAction: DeviceAction<Output, Input, Error, IntermediateValue>,\n expectedStates: Array<DeviceActionState<Output, Error, IntermediateValue>>,\n internalApi: InternalApi,\n done?: jest.DoneCallback,\n) {\n const observedStates: Array<\n DeviceActionState<Output, Error, IntermediateValue>\n > = [];\n\n const { observable, cancel } = deviceAction._execute(internalApi);\n observable.subscribe({\n next: (state) => {\n observedStates.push(state);\n },\n error: (error) => {\n if (done) done(error);\n },\n complete: () => {\n try {\n expect(observedStates).toEqual(expectedStates);\n if (done) done();\n } catch (e) {\n if (done) done(e);\n }\n },\n });\n return { observable, cancel };\n}\n"],
5
+ "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAcO,SAASE,EAMdE,EACAC,EACAC,EACAC,EACA,CACA,MAAMC,EAEF,CAAC,EAEC,CAAE,WAAAC,EAAY,OAAAC,CAAO,EAAIN,EAAa,SAASE,CAAW,EAChE,OAAAG,EAAW,UAAU,CACnB,KAAOE,GAAU,CACfH,EAAe,KAAKG,CAAK,CAC3B,EACA,MAAQC,GAAU,CACZL,GAAMA,EAAKK,CAAK,CACtB,EACA,SAAU,IAAM,CACd,GAAI,CACF,OAAOJ,CAAc,EAAE,QAAQH,CAAc,EACzCE,GAAMA,EAAK,CACjB,OAASM,EAAG,CACNN,GAAMA,EAAKM,CAAC,CAClB,CACF,CACF,CAAC,EACM,CAAE,WAAAJ,EAAY,OAAAC,CAAO,CAC9B",
6
+ "names": ["testDeviceActionStates_exports", "__export", "testDeviceActionStates", "__toCommonJS", "deviceAction", "expectedStates", "internalApi", "done", "observedStates", "observable", "cancel", "state", "error", "e"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var s=require("@ledgerhq/device-management-kit"),a=require("purify-ts"),o=require("../../app-binder/task/BuildPsbtTask"),l=require("../../data-store/model/DataStore");describe("BuildPsbtTask",()=>{it("should build psbt and fill datastore",async()=>{const n={map:vi.fn(()=>(0,a.Right)("InternalPsbt"))},t={merklizeWallet:vi.fn(),merklizePsbt:vi.fn(()=>(0,a.Right)("PsbtCommitment"))},e=new l.DataStore,r=await new o.BuildPsbtTask({wallet:"Wallet",psbt:"ApiPsbt"},t,n,()=>e).run();expect(n.map).toHaveBeenCalledWith("ApiPsbt"),expect(t.merklizePsbt).toHaveBeenCalledWith(e,"InternalPsbt"),expect(t.merklizeWallet).toHaveBeenCalledWith(e,"Wallet"),expect(r).toStrictEqual((0,s.CommandResultFactory)({data:{psbtCommitment:"PsbtCommitment",dataStore:e,psbt:"InternalPsbt"}}))}),it("should return an error if datastore fails",async()=>{const n={map:vi.fn(()=>(0,a.Right)({}))},t=new Error("Failed"),e={merklizeWallet:vi.fn(),merklizePsbt:vi.fn(()=>(0,a.Left)(t)),merklizeChunks:vi.fn()},r=await new o.BuildPsbtTask({wallet:{},psbt:{}},e,n).run();expect(r).toStrictEqual((0,s.CommandResultFactory)({error:new s.UnknownDeviceExchangeError({error:t})}))}),it("should return an error if datastore fails",async()=>{const n=new Error("Failed"),t={map:vi.fn(()=>(0,a.Left)(n))},e={merklizeWallet:vi.fn(),merklizePsbt:vi.fn(()=>(0,a.Right)({})),merklizeChunks:vi.fn()},r=await new o.BuildPsbtTask({wallet:{},psbt:{}},e,t).run();expect(r).toStrictEqual((0,s.CommandResultFactory)({error:new s.UnknownDeviceExchangeError({error:n})}))})});
1
+ "use strict";var n=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),o=require("../../app-binder/task/BuildPsbtTask"),i=require("../../data-store/model/DataStore");describe("BuildPsbtTask",()=>{it("should build psbt and fill datastore",async()=>{const a={map:jest.fn(()=>(0,s.Right)("InternalPsbt"))},t={merklizeWallet:jest.fn(),merklizePsbt:jest.fn(()=>(0,s.Right)("PsbtCommitment"))},e=new i.DataStore,r=await new o.BuildPsbtTask({wallet:"Wallet",psbt:"ApiPsbt"},t,a,()=>e).run();expect(a.map).toHaveBeenCalledWith("ApiPsbt"),expect(t.merklizePsbt).toHaveBeenCalledWith(e,"InternalPsbt"),expect(t.merklizeWallet).toHaveBeenCalledWith(e,"Wallet"),expect(r).toStrictEqual((0,n.CommandResultFactory)({data:{psbtCommitment:"PsbtCommitment",dataStore:e,psbt:"InternalPsbt"}}))}),it("should return an error if datastore fails",async()=>{const a={map:jest.fn(()=>(0,s.Right)({}))},t=new Error("Failed"),e={merklizeWallet:jest.fn(),merklizePsbt:jest.fn(()=>(0,s.Left)(t)),merklizeChunks:jest.fn()},r=await new o.BuildPsbtTask({wallet:{},psbt:{}},e,a).run();expect(r).toStrictEqual((0,n.CommandResultFactory)({error:new n.UnknownDeviceExchangeError({error:t})}))}),it("should return an error if datastore fails",async()=>{const a=new Error("Failed"),t={map:jest.fn(()=>(0,s.Left)(a))},e={merklizeWallet:jest.fn(),merklizePsbt:jest.fn(()=>(0,s.Right)({})),merklizeChunks:jest.fn()},r=await new o.BuildPsbtTask({wallet:{},psbt:{}},e,t).run();expect(r).toStrictEqual((0,n.CommandResultFactory)({error:new n.UnknownDeviceExchangeError({error:a})}))})});
2
2
  //# sourceMappingURL=BuildPsbtTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/BuildPsbtTask.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type Psbt } from \"@api/model/Psbt\";\nimport { BuildPsbtTask } from \"@internal/app-binder/task/BuildPsbtTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport {\n type DataStoreService,\n type PsbtCommitment,\n} from \"@internal/data-store/service/DataStoreService\";\nimport { type Psbt as InternalPsbt } from \"@internal/psbt/model/Psbt\";\nimport { type Wallet } from \"@internal/wallet/model/Wallet\";\n\ndescribe(\"BuildPsbtTask\", () => {\n it(\"should build psbt and fill datastore\", async () => {\n // given\n const psbtMapper = {\n map: vi.fn(() => Right(\"InternalPsbt\" as unknown as InternalPsbt)),\n };\n const dataStoreService = {\n merklizeWallet: vi.fn(),\n merklizePsbt: vi.fn(() =>\n Right(\"PsbtCommitment\" as unknown as PsbtCommitment),\n ),\n } as unknown as DataStoreService;\n const dataStore = new DataStore();\n const task = new BuildPsbtTask(\n {\n wallet: \"Wallet\" as unknown as Wallet,\n psbt: \"ApiPsbt\" as unknown as Psbt,\n },\n dataStoreService,\n psbtMapper,\n () => dataStore,\n );\n // when\n const result = await task.run();\n // then\n expect(psbtMapper.map).toHaveBeenCalledWith(\"ApiPsbt\");\n expect(dataStoreService.merklizePsbt).toHaveBeenCalledWith(\n dataStore,\n \"InternalPsbt\",\n );\n expect(dataStoreService.merklizeWallet).toHaveBeenCalledWith(\n dataStore,\n \"Wallet\",\n );\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n psbtCommitment: \"PsbtCommitment\",\n dataStore,\n psbt: \"InternalPsbt\",\n },\n }),\n );\n });\n it(\"should return an error if datastore fails\", async () => {\n // given\n const psbtMapper = {\n map: vi.fn(() => Right({} as InternalPsbt)),\n };\n const error = new Error(\"Failed\");\n const dataStoreService = {\n merklizeWallet: vi.fn(),\n merklizePsbt: vi.fn(() => Left(error)),\n merklizeChunks: vi.fn(),\n };\n const task = new BuildPsbtTask(\n {\n wallet: {} as unknown as Wallet,\n psbt: {} as unknown as Psbt,\n },\n dataStoreService,\n psbtMapper,\n );\n // when\n const result = await task.run();\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError({ error }),\n }),\n );\n });\n it(\"should return an error if datastore fails\", async () => {\n // given\n const error = new Error(\"Failed\");\n const psbtMapper = {\n map: vi.fn(() => Left(error)),\n };\n const dataStoreService = {\n merklizeWallet: vi.fn(),\n merklizePsbt: vi.fn(() => Right({} as PsbtCommitment)),\n merklizeChunks: vi.fn(),\n };\n const task = new BuildPsbtTask(\n {\n wallet: {} as unknown as Wallet,\n psbt: {} as unknown as Psbt,\n },\n dataStoreService,\n psbtMapper,\n );\n // when\n const result = await task.run();\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError({ error }),\n }),\n );\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAGO,2CACPC,EAA4B,qBAG5BC,EAA8B,mDAC9BC,EAA0B,gDAQ1B,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,SAAY,CAErD,MAAMC,EAAa,CACjB,IAAK,GAAG,GAAG,OAAM,SAAM,cAAyC,CAAC,CACnE,EACMC,EAAmB,CACvB,eAAgB,GAAG,GAAG,EACtB,aAAc,GAAG,GAAG,OAClB,SAAM,gBAA6C,CACrD,CACF,EACMC,EAAY,IAAI,YAWhBC,EAAS,MAVF,IAAI,gBACf,CACE,OAAQ,SACR,KAAM,SACR,EACAF,EACAD,EACA,IAAME,CACR,EAE0B,IAAI,EAE9B,OAAOF,EAAW,GAAG,EAAE,qBAAqB,SAAS,EACrD,OAAOC,EAAiB,YAAY,EAAE,qBACpCC,EACA,cACF,EACA,OAAOD,EAAiB,cAAc,EAAE,qBACtCC,EACA,QACF,EACA,OAAOC,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,CACJ,eAAgB,iBAChB,UAAAD,EACA,KAAM,cACR,CACF,CAAC,CACH,CACF,CAAC,EACD,GAAG,4CAA6C,SAAY,CAE1D,MAAMF,EAAa,CACjB,IAAK,GAAG,GAAG,OAAM,SAAM,CAAC,CAAiB,CAAC,CAC5C,EACMI,EAAQ,IAAI,MAAM,QAAQ,EAC1BH,EAAmB,CACvB,eAAgB,GAAG,GAAG,EACtB,aAAc,GAAG,GAAG,OAAM,QAAKG,CAAK,CAAC,EACrC,eAAgB,GAAG,GAAG,CACxB,EAUMD,EAAS,MATF,IAAI,gBACf,CACE,OAAQ,CAAC,EACT,KAAM,CAAC,CACT,EACAF,EACAD,CACF,EAE0B,IAAI,EAE9B,OAAOG,CAAM,EAAE,iBACb,wBAAqB,CACnB,MAAO,IAAI,6BAA2B,CAAE,MAAAC,CAAM,CAAC,CACjD,CAAC,CACH,CACF,CAAC,EACD,GAAG,4CAA6C,SAAY,CAE1D,MAAMA,EAAQ,IAAI,MAAM,QAAQ,EAC1BJ,EAAa,CACjB,IAAK,GAAG,GAAG,OAAM,QAAKI,CAAK,CAAC,CAC9B,EACMH,EAAmB,CACvB,eAAgB,GAAG,GAAG,EACtB,aAAc,GAAG,GAAG,OAAM,SAAM,CAAC,CAAmB,CAAC,EACrD,eAAgB,GAAG,GAAG,CACxB,EAUME,EAAS,MATF,IAAI,gBACf,CACE,OAAQ,CAAC,EACT,KAAM,CAAC,CACT,EACAF,EACAD,CACF,EAE0B,IAAI,EAE9B,OAAOG,CAAM,EAAE,iBACb,wBAAqB,CACnB,MAAO,IAAI,6BAA2B,CAAE,MAAAC,CAAM,CAAC,CACjD,CAAC,CACH,CACF,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { Left, Right } from \"purify-ts\";\n\nimport { type Psbt } from \"@api/model/Psbt\";\nimport { BuildPsbtTask } from \"@internal/app-binder/task/BuildPsbtTask\";\nimport { DataStore } from \"@internal/data-store/model/DataStore\";\nimport {\n type DataStoreService,\n type PsbtCommitment,\n} from \"@internal/data-store/service/DataStoreService\";\nimport { type Psbt as InternalPsbt } from \"@internal/psbt/model/Psbt\";\nimport { type Wallet } from \"@internal/wallet/model/Wallet\";\n\ndescribe(\"BuildPsbtTask\", () => {\n it(\"should build psbt and fill datastore\", async () => {\n // given\n const psbtMapper = {\n map: jest.fn(() => Right(\"InternalPsbt\" as unknown as InternalPsbt)),\n };\n const dataStoreService = {\n merklizeWallet: jest.fn(),\n merklizePsbt: jest.fn(() =>\n Right(\"PsbtCommitment\" as unknown as PsbtCommitment),\n ),\n } as unknown as DataStoreService;\n const dataStore = new DataStore();\n const task = new BuildPsbtTask(\n {\n wallet: \"Wallet\" as unknown as Wallet,\n psbt: \"ApiPsbt\" as unknown as Psbt,\n },\n dataStoreService,\n psbtMapper,\n () => dataStore,\n );\n // when\n const result = await task.run();\n // then\n expect(psbtMapper.map).toHaveBeenCalledWith(\"ApiPsbt\");\n expect(dataStoreService.merklizePsbt).toHaveBeenCalledWith(\n dataStore,\n \"InternalPsbt\",\n );\n expect(dataStoreService.merklizeWallet).toHaveBeenCalledWith(\n dataStore,\n \"Wallet\",\n );\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n psbtCommitment: \"PsbtCommitment\",\n dataStore,\n psbt: \"InternalPsbt\",\n },\n }),\n );\n });\n it(\"should return an error if datastore fails\", async () => {\n // given\n const psbtMapper = {\n map: jest.fn(() => Right({} as InternalPsbt)),\n };\n const error = new Error(\"Failed\");\n const dataStoreService = {\n merklizeWallet: jest.fn(),\n merklizePsbt: jest.fn(() => Left(error)),\n merklizeChunks: jest.fn(),\n };\n const task = new BuildPsbtTask(\n {\n wallet: {} as unknown as Wallet,\n psbt: {} as unknown as Psbt,\n },\n dataStoreService,\n psbtMapper,\n );\n // when\n const result = await task.run();\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError({ error }),\n }),\n );\n });\n it(\"should return an error if datastore fails\", async () => {\n // given\n const error = new Error(\"Failed\");\n const psbtMapper = {\n map: jest.fn(() => Left(error)),\n };\n const dataStoreService = {\n merklizeWallet: jest.fn(),\n merklizePsbt: jest.fn(() => Right({} as PsbtCommitment)),\n merklizeChunks: jest.fn(),\n };\n const task = new BuildPsbtTask(\n {\n wallet: {} as unknown as Wallet,\n psbt: {} as unknown as Psbt,\n },\n dataStoreService,\n psbtMapper,\n );\n // when\n const result = await task.run();\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new UnknownDeviceExchangeError({ error }),\n }),\n );\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAGO,2CACPC,EAA4B,qBAG5BC,EAA8B,mDAC9BC,EAA0B,gDAQ1B,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,SAAY,CAErD,MAAMC,EAAa,CACjB,IAAK,KAAK,GAAG,OAAM,SAAM,cAAyC,CAAC,CACrE,EACMC,EAAmB,CACvB,eAAgB,KAAK,GAAG,EACxB,aAAc,KAAK,GAAG,OACpB,SAAM,gBAA6C,CACrD,CACF,EACMC,EAAY,IAAI,YAWhBC,EAAS,MAVF,IAAI,gBACf,CACE,OAAQ,SACR,KAAM,SACR,EACAF,EACAD,EACA,IAAME,CACR,EAE0B,IAAI,EAE9B,OAAOF,EAAW,GAAG,EAAE,qBAAqB,SAAS,EACrD,OAAOC,EAAiB,YAAY,EAAE,qBACpCC,EACA,cACF,EACA,OAAOD,EAAiB,cAAc,EAAE,qBACtCC,EACA,QACF,EACA,OAAOC,CAAM,EAAE,iBACb,wBAAqB,CACnB,KAAM,CACJ,eAAgB,iBAChB,UAAAD,EACA,KAAM,cACR,CACF,CAAC,CACH,CACF,CAAC,EACD,GAAG,4CAA6C,SAAY,CAE1D,MAAMF,EAAa,CACjB,IAAK,KAAK,GAAG,OAAM,SAAM,CAAC,CAAiB,CAAC,CAC9C,EACMI,EAAQ,IAAI,MAAM,QAAQ,EAC1BH,EAAmB,CACvB,eAAgB,KAAK,GAAG,EACxB,aAAc,KAAK,GAAG,OAAM,QAAKG,CAAK,CAAC,EACvC,eAAgB,KAAK,GAAG,CAC1B,EAUMD,EAAS,MATF,IAAI,gBACf,CACE,OAAQ,CAAC,EACT,KAAM,CAAC,CACT,EACAF,EACAD,CACF,EAE0B,IAAI,EAE9B,OAAOG,CAAM,EAAE,iBACb,wBAAqB,CACnB,MAAO,IAAI,6BAA2B,CAAE,MAAAC,CAAM,CAAC,CACjD,CAAC,CACH,CACF,CAAC,EACD,GAAG,4CAA6C,SAAY,CAE1D,MAAMA,EAAQ,IAAI,MAAM,QAAQ,EAC1BJ,EAAa,CACjB,IAAK,KAAK,GAAG,OAAM,QAAKI,CAAK,CAAC,CAChC,EACMH,EAAmB,CACvB,eAAgB,KAAK,GAAG,EACxB,aAAc,KAAK,GAAG,OAAM,SAAM,CAAC,CAAmB,CAAC,EACvD,eAAgB,KAAK,GAAG,CAC1B,EAUME,EAAS,MATF,IAAI,gBACf,CACE,OAAQ,CAAC,EACT,KAAM,CAAC,CACT,EACAF,EACAD,CACF,EAE0B,IAAI,EAE9B,OAAOG,CAAM,EAAE,iBACb,wBAAqB,CACnB,MAAO,IAAI,6BAA2B,CAAE,MAAAC,CAAM,CAAC,CACjD,CAAC,CACH,CACF,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_purify_ts", "import_BuildPsbtTask", "import_DataStore", "psbtMapper", "dataStoreService", "dataStore", "result", "error"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),o=require("../../app-binder/task/ContinueTask");describe("ContinueTask",()=>{const a={getClientCommandPayload:vi.fn(()=>(0,s.Right)(Uint8Array.from([])))},t={sendCommand:vi.fn()},i=Math.floor(Math.random()*10+2);afterEach(()=>{vi.clearAllMocks()}),it(`should call ${i} times client interpreter and return success`,async()=>{new Array(i).fill(0).forEach(d=>{t.sendCommand.mockReturnValueOnce((0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}))}),t.sendCommand.mockReturnValueOnce((0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([])})}));const r=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})});await new o.ContinueTask(t,{},a).run(r),expect(a.getClientCommandPayload).toHaveBeenCalledTimes(i+1)}),it("should return an error if the client interpreter fails",async()=>{const r=new e.UnknownDeviceExchangeError("Failed");a.getClientCommandPayload.mockReturnValueOnce((0,s.Left)(r));const n=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}),m=await new o.ContinueTask(t,{},a).run(n);expect(t.sendCommand).toHaveBeenCalledTimes(0),expect(m).toStrictEqual((0,e.CommandResultFactory)({error:new e.UnknownDeviceExchangeError(r)}))}),it("should return an error if send command fails",async()=>{const r=new e.UnknownDeviceExchangeError("Failed");t.sendCommand.mockReturnValueOnce((0,e.CommandResultFactory)({error:r}));const n=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}),m=await new o.ContinueTask(t,{},a).run(n);expect(a.getClientCommandPayload).toHaveBeenCalledTimes(1),expect(m).toStrictEqual((0,e.CommandResultFactory)({error:r}))})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),s=require("purify-ts"),o=require("../../app-binder/task/ContinueTask");describe("ContinueTask",()=>{const a={getClientCommandPayload:jest.fn(()=>(0,s.Right)(Uint8Array.from([])))},t={sendCommand:jest.fn()},m=Math.floor(Math.random()*10+2);afterEach(()=>{jest.clearAllMocks()}),it(`should call ${m} times client interpreter and return success`,async()=>{new Array(m).fill(0).forEach(d=>{t.sendCommand.mockReturnValueOnce((0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}))}),t.sendCommand.mockReturnValueOnce((0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([])})}));const r=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})});await new o.ContinueTask(t,{},a).run(r),expect(a.getClientCommandPayload).toHaveBeenCalledTimes(m+1)}),it("should return an error if the client interpreter fails",async()=>{const r=new e.UnknownDeviceExchangeError("Failed");a.getClientCommandPayload.mockReturnValueOnce((0,s.Left)(r));const n=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}),i=await new o.ContinueTask(t,{},a).run(n);expect(t.sendCommand).toHaveBeenCalledTimes(0),expect(i).toStrictEqual((0,e.CommandResultFactory)({error:new e.UnknownDeviceExchangeError(r)}))}),it("should return an error if send command fails",async()=>{const r=new e.UnknownDeviceExchangeError("Failed");t.sendCommand.mockReturnValueOnce((0,e.CommandResultFactory)({error:r}));const n=(0,e.CommandResultFactory)({data:new e.ApduResponse({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}),i=await new o.ContinueTask(t,{},a).run(n);expect(a.getClientCommandPayload).toHaveBeenCalledTimes(1),expect(i).toStrictEqual((0,e.CommandResultFactory)({error:r}))})});
2
2
  //# sourceMappingURL=ContinueTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/ContinueTask.test.ts"],
4
- "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n type DmkError,\n type InternalApi,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\n\ndescribe(\"ContinueTask\", () => {\n const clientCommandInterpreter = {\n getClientCommandPayload: vi.fn(\n () => Right(Uint8Array.from([])) as Either<DmkError, Uint8Array>,\n ),\n };\n const api = {\n sendCommand: vi.fn(),\n };\n const randomNumberOfClientCalls = Math.floor(Math.random() * 10 + 2);\n\n afterEach(() => {\n vi.clearAllMocks();\n });\n\n it(`should call ${randomNumberOfClientCalls} times client interpreter and return success`, async () => {\n // given\n new Array(randomNumberOfClientCalls).fill(0).forEach((_) => {\n api.sendCommand.mockReturnValueOnce(\n CommandResultFactory({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n }),\n );\n });\n api.sendCommand.mockReturnValueOnce(\n CommandResultFactory({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([]),\n }),\n }),\n );\n const fromResult = CommandResultFactory<ApduResponse, BtcErrorCodes>({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n });\n // when\n const task = new ContinueTask(\n api as unknown as InternalApi,\n {} as DataStore,\n clientCommandInterpreter,\n );\n await task.run(fromResult);\n // then\n expect(\n clientCommandInterpreter.getClientCommandPayload,\n ).toHaveBeenCalledTimes(randomNumberOfClientCalls + 1);\n });\n\n it(\"should return an error if the client interpreter fails\", async () => {\n // given\n const error = new UnknownDeviceExchangeError(\"Failed\");\n clientCommandInterpreter.getClientCommandPayload.mockReturnValueOnce(\n Left(error),\n );\n const fromResult = CommandResultFactory<ApduResponse, BtcErrorCodes>({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n });\n // when\n const task = new ContinueTask(\n api as unknown as InternalApi,\n {} as DataStore,\n clientCommandInterpreter,\n );\n const result = await task.run(fromResult);\n // then\n expect(api.sendCommand).toHaveBeenCalledTimes(0);\n expect(result).toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(error) }),\n );\n });\n it(\"should return an error if send command fails\", async () => {\n // given\n const error = new UnknownDeviceExchangeError(\"Failed\");\n api.sendCommand.mockReturnValueOnce(CommandResultFactory({ error }));\n const fromResult = CommandResultFactory<ApduResponse, BtcErrorCodes>({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n });\n // when\n const task = new ContinueTask(\n api as unknown as InternalApi,\n {} as DataStore,\n clientCommandInterpreter,\n );\n const result = await task.run(fromResult);\n // then\n expect(\n clientCommandInterpreter.getClientCommandPayload,\n ).toHaveBeenCalledTimes(1);\n expect(result).toStrictEqual(CommandResultFactory({ error }));\n });\n});\n"],
5
- "mappings": "aAAA,IAAAA,EAMO,2CACPC,EAAyC,qBAGzCC,EAA6B,kDAG7B,SAAS,eAAgB,IAAM,CAC7B,MAAMC,EAA2B,CAC/B,wBAAyB,GAAG,GAC1B,OAAM,SAAM,WAAW,KAAK,CAAC,CAAC,CAAC,CACjC,CACF,EACMC,EAAM,CACV,YAAa,GAAG,GAAG,CACrB,EACMC,EAA4B,KAAK,MAAM,KAAK,OAAO,EAAI,GAAK,CAAC,EAEnE,UAAU,IAAM,CACd,GAAG,cAAc,CACnB,CAAC,EAED,GAAG,eAAeA,CAAyB,+CAAgD,SAAY,CAErG,IAAI,MAAMA,CAAyB,EAAE,KAAK,CAAC,EAAE,QAASC,GAAM,CAC1DF,EAAI,YAAY,uBACd,wBAAqB,CACnB,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,CACH,CACF,CAAC,EACDA,EAAI,YAAY,uBACd,wBAAqB,CACnB,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,CACH,EACA,MAAMG,KAAa,wBAAkD,CACnE,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOD,MALa,IAAI,eACfH,EACA,CAAC,EACDD,CACF,EACW,IAAII,CAAU,EAEzB,OACEJ,EAAyB,uBAC3B,EAAE,sBAAsBE,EAA4B,CAAC,CACvD,CAAC,EAED,GAAG,yDAA0D,SAAY,CAEvE,MAAMG,EAAQ,IAAI,6BAA2B,QAAQ,EACrDL,EAAyB,wBAAwB,uBAC/C,QAAKK,CAAK,CACZ,EACA,MAAMD,KAAa,wBAAkD,CACnE,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOKE,EAAS,MALF,IAAI,eACfL,EACA,CAAC,EACDD,CACF,EAC0B,IAAII,CAAU,EAExC,OAAOH,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOK,CAAM,EAAE,iBACb,wBAAqB,CAAE,MAAO,IAAI,6BAA2BD,CAAK,CAAE,CAAC,CACvE,CACF,CAAC,EACD,GAAG,+CAAgD,SAAY,CAE7D,MAAMA,EAAQ,IAAI,6BAA2B,QAAQ,EACrDJ,EAAI,YAAY,uBAAoB,wBAAqB,CAAE,MAAAI,CAAM,CAAC,CAAC,EACnE,MAAMD,KAAa,wBAAkD,CACnE,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOKE,EAAS,MALF,IAAI,eACfL,EACA,CAAC,EACDD,CACF,EAC0B,IAAII,CAAU,EAExC,OACEJ,EAAyB,uBAC3B,EAAE,sBAAsB,CAAC,EACzB,OAAOM,CAAM,EAAE,iBAAc,wBAAqB,CAAE,MAAAD,CAAM,CAAC,CAAC,CAC9D,CAAC,CACH,CAAC",
4
+ "sourcesContent": ["import {\n ApduResponse,\n CommandResultFactory,\n type DmkError,\n type InternalApi,\n UnknownDeviceExchangeError,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { type BtcErrorCodes } from \"@internal/app-binder/command/utils/bitcoinAppErrors\";\nimport { ContinueTask } from \"@internal/app-binder/task/ContinueTask\";\nimport { type DataStore } from \"@internal/data-store/model/DataStore\";\n\ndescribe(\"ContinueTask\", () => {\n const clientCommandInterpreter = {\n getClientCommandPayload: jest.fn(\n () => Right(Uint8Array.from([])) as Either<DmkError, Uint8Array>,\n ),\n };\n const api = {\n sendCommand: jest.fn(),\n };\n const randomNumberOfClientCalls = Math.floor(Math.random() * 10 + 2);\n\n afterEach(() => {\n jest.clearAllMocks();\n });\n\n it(`should call ${randomNumberOfClientCalls} times client interpreter and return success`, async () => {\n // given\n new Array(randomNumberOfClientCalls).fill(0).forEach((_) => {\n api.sendCommand.mockReturnValueOnce(\n CommandResultFactory({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n }),\n );\n });\n api.sendCommand.mockReturnValueOnce(\n CommandResultFactory({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([]),\n }),\n }),\n );\n const fromResult = CommandResultFactory<ApduResponse, BtcErrorCodes>({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n });\n // when\n const task = new ContinueTask(\n api as unknown as InternalApi,\n {} as DataStore,\n clientCommandInterpreter,\n );\n await task.run(fromResult);\n // then\n expect(\n clientCommandInterpreter.getClientCommandPayload,\n ).toHaveBeenCalledTimes(randomNumberOfClientCalls + 1);\n });\n\n it(\"should return an error if the client interpreter fails\", async () => {\n // given\n const error = new UnknownDeviceExchangeError(\"Failed\");\n clientCommandInterpreter.getClientCommandPayload.mockReturnValueOnce(\n Left(error),\n );\n const fromResult = CommandResultFactory<ApduResponse, BtcErrorCodes>({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n });\n // when\n const task = new ContinueTask(\n api as unknown as InternalApi,\n {} as DataStore,\n clientCommandInterpreter,\n );\n const result = await task.run(fromResult);\n // then\n expect(api.sendCommand).toHaveBeenCalledTimes(0);\n expect(result).toStrictEqual(\n CommandResultFactory({ error: new UnknownDeviceExchangeError(error) }),\n );\n });\n it(\"should return an error if send command fails\", async () => {\n // given\n const error = new UnknownDeviceExchangeError(\"Failed\");\n api.sendCommand.mockReturnValueOnce(CommandResultFactory({ error }));\n const fromResult = CommandResultFactory<ApduResponse, BtcErrorCodes>({\n data: new ApduResponse({\n statusCode: Uint8Array.from([0xe0, 0x00]),\n data: Uint8Array.from([]),\n }),\n });\n // when\n const task = new ContinueTask(\n api as unknown as InternalApi,\n {} as DataStore,\n clientCommandInterpreter,\n );\n const result = await task.run(fromResult);\n // then\n expect(\n clientCommandInterpreter.getClientCommandPayload,\n ).toHaveBeenCalledTimes(1);\n expect(result).toStrictEqual(CommandResultFactory({ error }));\n });\n});\n"],
5
+ "mappings": "aAAA,IAAAA,EAMO,2CACPC,EAAyC,qBAGzCC,EAA6B,kDAG7B,SAAS,eAAgB,IAAM,CAC7B,MAAMC,EAA2B,CAC/B,wBAAyB,KAAK,GAC5B,OAAM,SAAM,WAAW,KAAK,CAAC,CAAC,CAAC,CACjC,CACF,EACMC,EAAM,CACV,YAAa,KAAK,GAAG,CACvB,EACMC,EAA4B,KAAK,MAAM,KAAK,OAAO,EAAI,GAAK,CAAC,EAEnE,UAAU,IAAM,CACd,KAAK,cAAc,CACrB,CAAC,EAED,GAAG,eAAeA,CAAyB,+CAAgD,SAAY,CAErG,IAAI,MAAMA,CAAyB,EAAE,KAAK,CAAC,EAAE,QAASC,GAAM,CAC1DF,EAAI,YAAY,uBACd,wBAAqB,CACnB,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,CACH,CACF,CAAC,EACDA,EAAI,YAAY,uBACd,wBAAqB,CACnB,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,CACH,EACA,MAAMG,KAAa,wBAAkD,CACnE,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOD,MALa,IAAI,eACfH,EACA,CAAC,EACDD,CACF,EACW,IAAII,CAAU,EAEzB,OACEJ,EAAyB,uBAC3B,EAAE,sBAAsBE,EAA4B,CAAC,CACvD,CAAC,EAED,GAAG,yDAA0D,SAAY,CAEvE,MAAMG,EAAQ,IAAI,6BAA2B,QAAQ,EACrDL,EAAyB,wBAAwB,uBAC/C,QAAKK,CAAK,CACZ,EACA,MAAMD,KAAa,wBAAkD,CACnE,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOKE,EAAS,MALF,IAAI,eACfL,EACA,CAAC,EACDD,CACF,EAC0B,IAAII,CAAU,EAExC,OAAOH,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOK,CAAM,EAAE,iBACb,wBAAqB,CAAE,MAAO,IAAI,6BAA2BD,CAAK,CAAE,CAAC,CACvE,CACF,CAAC,EACD,GAAG,+CAAgD,SAAY,CAE7D,MAAMA,EAAQ,IAAI,6BAA2B,QAAQ,EACrDJ,EAAI,YAAY,uBAAoB,wBAAqB,CAAE,MAAAI,CAAM,CAAC,CAAC,EACnE,MAAMD,KAAa,wBAAkD,CACnE,KAAM,IAAI,eAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOKE,EAAS,MALF,IAAI,eACfL,EACA,CAAC,EACDD,CACF,EAC0B,IAAII,CAAU,EAExC,OACEJ,EAAyB,uBAC3B,EAAE,sBAAsB,CAAC,EACzB,OAAOM,CAAM,EAAE,iBAAc,wBAAqB,CAAE,MAAAD,CAAM,CAAC,CAAC,CAC9D,CAAC,CACH,CAAC",
6
6
  "names": ["import_device_management_kit", "import_purify_ts", "import_ContinueTask", "clientCommandInterpreter", "api", "randomNumberOfClientCalls", "_", "fromResult", "error", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),l=require("./GetWalletAddressTask");describe("GetWalletAddressTask",()=>{describe("run",()=>{it("should return a wallet address successfully",async()=>{const t={sendCommand:vi.fn().mockResolvedValueOnce((0,e.CommandResultFactory)({data:Uint8Array.from([1,2,3])}))},a={hmac:Uint8Array.from([4])},n={getId:vi.fn().mockReturnValue(Uint8Array.from([5]))},r={merklizeWallet:vi.fn()},s=()=>({run:vi.fn().mockResolvedValue((0,e.CommandResultFactory)({data:{data:Uint8Array.from([52,86,120,154,188,222,241])}}))}),o=vi.fn().mockReturnValue((0,e.CommandResultFactory)({data:{address:"some address"}})),i=await new l.GetWalletAddressTask(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s,o).run();expect(n.getId).toHaveBeenCalledWith(a),expect(i).toStrictEqual((0,e.CommandResultFactory)({data:{address:"some address"}}))}),it("should fail if ContinueTask fails",async()=>{const t={sendCommand:vi.fn()},a={hmac:Uint8Array.from([4])},n={getId:vi.fn().mockReturnValue(Uint8Array.from([5]))},r={merklizeWallet:vi.fn()},s=()=>({run:vi.fn().mockResolvedValue((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ContinueTask failed")}))}),o=await new l.GetWalletAddressTask(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s).run();expect(o).toStrictEqual((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ContinueTask failed")}))}),it("should fail with an invalid device response",async()=>{const t={sendCommand:vi.fn().mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response from the device")}))},a={hmac:Uint8Array.from([4])},n={getId:vi.fn().mockReturnValue(Uint8Array.from([5]))},r={merklizeWallet:vi.fn()},s=()=>({run:vi.fn().mockResolvedValue((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response from the device")}))}),o=await new l.GetWalletAddressTask(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s).run();expect(o).toStrictEqual((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response from the device")}))})})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),l=require("./GetWalletAddressTask");describe("GetWalletAddressTask",()=>{describe("run",()=>{it("should return a wallet address successfully",async()=>{const t={sendCommand:jest.fn().mockResolvedValueOnce((0,e.CommandResultFactory)({data:Uint8Array.from([1,2,3])}))},a={hmac:Uint8Array.from([4])},n={getId:jest.fn().mockReturnValue(Uint8Array.from([5]))},r={merklizeWallet:jest.fn()},s=()=>({run:jest.fn().mockResolvedValue((0,e.CommandResultFactory)({data:{data:Uint8Array.from([52,86,120,154,188,222,241])}}))}),o=jest.fn().mockReturnValue((0,e.CommandResultFactory)({data:{address:"some address"}})),i=await new l.GetWalletAddressTask(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s,o).run();expect(n.getId).toHaveBeenCalledWith(a),expect(i).toStrictEqual((0,e.CommandResultFactory)({data:{address:"some address"}}))}),it("should fail if ContinueTask fails",async()=>{const t={sendCommand:jest.fn()},a={hmac:Uint8Array.from([4])},n={getId:jest.fn().mockReturnValue(Uint8Array.from([5]))},r={merklizeWallet:jest.fn()},s=()=>({run:jest.fn().mockResolvedValue((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ContinueTask failed")}))}),o=await new l.GetWalletAddressTask(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s).run();expect(o).toStrictEqual((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("ContinueTask failed")}))}),it("should fail with an invalid device response",async()=>{const t={sendCommand:jest.fn().mockResolvedValueOnce((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response from the device")}))},a={hmac:Uint8Array.from([4])},n={getId:jest.fn().mockReturnValue(Uint8Array.from([5]))},r={merklizeWallet:jest.fn()},s=()=>({run:jest.fn().mockResolvedValue((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response from the device")}))}),o=await new l.GetWalletAddressTask(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s).run();expect(o).toStrictEqual((0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response from the device")}))})})});
2
2
  //# sourceMappingURL=GetWalletAddressTask.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/internal/app-binder/task/GetWalletAddressTask.test.ts"],
4
- "sourcesContent": ["import {\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Wallet as InternalWallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { type ContinueTask } from \"./ContinueTask\";\nimport { GetWalletAddressTask } from \"./GetWalletAddressTask\";\n\ndescribe(\"GetWalletAddressTask\", () => {\n describe(\"run\", () => {\n it(\"should return a wallet address successfully\", async () => {\n // given\n const api = {\n sendCommand: vi.fn().mockResolvedValueOnce(\n CommandResultFactory({\n data: Uint8Array.from([0x01, 0x02, 0x03]),\n }),\n ),\n } as unknown as InternalApi;\n\n const wallet = {\n hmac: Uint8Array.from([0x04]),\n } as unknown as InternalWallet;\n\n const walletSerializer = {\n getId: vi.fn().mockReturnValue(Uint8Array.from([0x05])),\n } as unknown as WalletSerializer;\n\n const dataStoreService = {\n merklizeWallet: vi.fn(),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockResolvedValue(\n CommandResultFactory({\n data: {\n data: Uint8Array.from([\n 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf1,\n ]),\n },\n }),\n ),\n }) as unknown as ContinueTask;\n\n const mockGetAddress = vi.fn().mockReturnValue(\n CommandResultFactory({\n data: { address: \"some address\" },\n }),\n );\n\n // when\n const result = await new GetWalletAddressTask(\n api,\n {\n checkOnDevice: true,\n wallet,\n change: false,\n addressIndex: 0,\n },\n walletSerializer,\n dataStoreService,\n continueTaskFactory,\n mockGetAddress,\n ).run();\n\n // then\n expect(walletSerializer.getId).toHaveBeenCalledWith(wallet);\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n address: \"some address\",\n },\n }),\n );\n });\n\n it(\"should fail if ContinueTask fails\", async () => {\n // given\n const api = {\n sendCommand: vi.fn(),\n } as unknown as InternalApi;\n\n const wallet = {\n hmac: Uint8Array.from([0x04]),\n } as unknown as InternalWallet;\n\n const walletSerializer = {\n getId: vi.fn().mockReturnValue(Uint8Array.from([0x05])),\n } as unknown as WalletSerializer;\n\n const dataStoreService = {\n merklizeWallet: vi.fn(),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"ContinueTask failed\"),\n }),\n ),\n }) as unknown as ContinueTask;\n\n // when\n const result = await new GetWalletAddressTask(\n api,\n {\n checkOnDevice: true,\n wallet,\n change: false,\n addressIndex: 0,\n },\n walletSerializer,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"ContinueTask failed\"),\n }),\n );\n });\n\n it(\"should fail with an invalid device response\", async () => {\n // given\n const api = {\n sendCommand: vi.fn().mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response from the device\",\n ),\n }),\n ),\n } as unknown as InternalApi;\n\n const wallet = {\n hmac: Uint8Array.from([0x04]),\n } as unknown as InternalWallet;\n\n const walletSerializer = {\n getId: vi.fn().mockReturnValue(Uint8Array.from([0x05])),\n } as unknown as WalletSerializer;\n\n const dataStoreService = {\n merklizeWallet: vi.fn(),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: vi.fn().mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response from the device\",\n ),\n }),\n ),\n }) as unknown as ContinueTask;\n\n // when\n const result = await new GetWalletAddressTask(\n api,\n {\n checkOnDevice: true,\n wallet,\n change: false,\n addressIndex: 0,\n },\n walletSerializer,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Invalid response from the device\"),\n }),\n );\n });\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import {\n CommandResultFactory,\n type InternalApi,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\n\nimport { type DataStoreService } from \"@internal/data-store/service/DataStoreService\";\nimport { type Wallet as InternalWallet } from \"@internal/wallet/model/Wallet\";\nimport { type WalletSerializer } from \"@internal/wallet/service/WalletSerializer\";\n\nimport { type ContinueTask } from \"./ContinueTask\";\nimport { GetWalletAddressTask } from \"./GetWalletAddressTask\";\n\ndescribe(\"GetWalletAddressTask\", () => {\n describe(\"run\", () => {\n it(\"should return a wallet address successfully\", async () => {\n // given\n const api = {\n sendCommand: jest.fn().mockResolvedValueOnce(\n CommandResultFactory({\n data: Uint8Array.from([0x01, 0x02, 0x03]),\n }),\n ),\n } as unknown as InternalApi;\n\n const wallet = {\n hmac: Uint8Array.from([0x04]),\n } as unknown as InternalWallet;\n\n const walletSerializer = {\n getId: jest.fn().mockReturnValue(Uint8Array.from([0x05])),\n } as unknown as WalletSerializer;\n\n const dataStoreService = {\n merklizeWallet: jest.fn(),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: jest.fn().mockResolvedValue(\n CommandResultFactory({\n data: {\n data: Uint8Array.from([\n 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf1,\n ]),\n },\n }),\n ),\n }) as unknown as ContinueTask;\n\n const mockGetAddress = jest.fn().mockReturnValue(\n CommandResultFactory({\n data: { address: \"some address\" },\n }),\n );\n\n // when\n const result = await new GetWalletAddressTask(\n api,\n {\n checkOnDevice: true,\n wallet,\n change: false,\n addressIndex: 0,\n },\n walletSerializer,\n dataStoreService,\n continueTaskFactory,\n mockGetAddress,\n ).run();\n\n // then\n expect(walletSerializer.getId).toHaveBeenCalledWith(wallet);\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n address: \"some address\",\n },\n }),\n );\n });\n\n it(\"should fail if ContinueTask fails\", async () => {\n // given\n const api = {\n sendCommand: jest.fn(),\n } as unknown as InternalApi;\n\n const wallet = {\n hmac: Uint8Array.from([0x04]),\n } as unknown as InternalWallet;\n\n const walletSerializer = {\n getId: jest.fn().mockReturnValue(Uint8Array.from([0x05])),\n } as unknown as WalletSerializer;\n\n const dataStoreService = {\n merklizeWallet: jest.fn(),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: jest.fn().mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"ContinueTask failed\"),\n }),\n ),\n }) as unknown as ContinueTask;\n\n // when\n const result = await new GetWalletAddressTask(\n api,\n {\n checkOnDevice: true,\n wallet,\n change: false,\n addressIndex: 0,\n },\n walletSerializer,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"ContinueTask failed\"),\n }),\n );\n });\n\n it(\"should fail with an invalid device response\", async () => {\n // given\n const api = {\n sendCommand: jest.fn().mockResolvedValueOnce(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response from the device\",\n ),\n }),\n ),\n } as unknown as InternalApi;\n\n const wallet = {\n hmac: Uint8Array.from([0x04]),\n } as unknown as InternalWallet;\n\n const walletSerializer = {\n getId: jest.fn().mockReturnValue(Uint8Array.from([0x05])),\n } as unknown as WalletSerializer;\n\n const dataStoreService = {\n merklizeWallet: jest.fn(),\n } as unknown as DataStoreService;\n\n const continueTaskFactory = () =>\n ({\n run: jest.fn().mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response from the device\",\n ),\n }),\n ),\n }) as unknown as ContinueTask;\n\n // when\n const result = await new GetWalletAddressTask(\n api,\n {\n checkOnDevice: true,\n wallet,\n change: false,\n addressIndex: 0,\n },\n walletSerializer,\n dataStoreService,\n continueTaskFactory,\n ).run();\n\n // then\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"Invalid response from the device\"),\n }),\n );\n });\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["import_device_management_kit", "import_GetWalletAddressTask", "api", "wallet", "walletSerializer", "dataStoreService", "continueTaskFactory", "mockGetAddress", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var e=require("@ledgerhq/device-management-kit"),l=require("../../../api/model/Wallet"),s=require("../../app-binder/task/PrepareWalletPolicyTask");const c=vi.fn(),d=vi.fn();describe("PrepareWalletPolicyTask",()=>{let t;const i={fromDefaultWallet:c,fromRegisteredWallet:d};beforeEach(()=>{t={sendCommand:vi.fn()}}),afterEach(()=>{vi.resetAllMocks()}),it("should return a builded wallet from a default one",async()=>{const n=new l.DefaultWallet("49'/0'/0'",l.DefaultDescriptorTemplate.LEGACY),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i);t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{extendedPublicKey:"xPublicKey"}}))),t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}})));const a={};c.mockReturnValue(a);const r=await o.run();expect(c).toHaveBeenCalledWith(Uint8Array.from([66,33,18,36]),"xPublicKey",n),expect(r).toStrictEqual((0,e.CommandResultFactory)({data:a}))}),it("should return a builded wallet from a registered one",async()=>{const n=new l.RegisteredWallet("walletName",l.DefaultDescriptorTemplate.LEGACY,["key0","key1"],Uint8Array.from([42])),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i);t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{extendedPublicKey:"xPublicKey"}}))),t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}})));const a={};d.mockReturnValue(a);const r=await o.run();expect(d).toHaveBeenCalledWith(n),expect(r).toStrictEqual((0,e.CommandResultFactory)({data:a}))}),it("should return an error if getMasterFingerprint failed",async()=>{const n=new l.DefaultWallet("49'/0'/0'",l.DefaultDescriptorTemplate.LEGACY),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i),a=new e.UnknownDeviceExchangeError("Failed");t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({error:a})));const r=await o.run();expect(r).toStrictEqual((0,e.CommandResultFactory)({error:a}))}),it("should return an error if getExtendedPublicKey failed",async()=>{const n=new l.DefaultWallet("49'/0'/0'",l.DefaultDescriptorTemplate.LEGACY),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i),a=new e.UnknownDeviceExchangeError("Failed");t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}}))),t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({error:a})));const r=await o.run();expect(r).toStrictEqual((0,e.CommandResultFactory)({error:a})),expect(r).toStrictEqual((0,e.CommandResultFactory)({error:a}))})});
1
+ "use strict";var e=require("@ledgerhq/device-management-kit"),l=require("../../../api/model/Wallet"),s=require("../../app-binder/task/PrepareWalletPolicyTask");const c=jest.fn(),d=jest.fn();describe("PrepareWalletPolicyTask",()=>{let t;const i={fromDefaultWallet:c,fromRegisteredWallet:d};beforeEach(()=>{t={sendCommand:jest.fn()}}),afterEach(()=>{jest.resetAllMocks()}),it("should return a builded wallet from a default one",async()=>{const n=new l.DefaultWallet("49'/0'/0'",l.DefaultDescriptorTemplate.LEGACY),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i);t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{extendedPublicKey:"xPublicKey"}}))),t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}})));const a={};c.mockReturnValue(a);const r=await o.run();expect(c).toHaveBeenCalledWith(Uint8Array.from([66,33,18,36]),"xPublicKey",n),expect(r).toStrictEqual((0,e.CommandResultFactory)({data:a}))}),it("should return a builded wallet from a registered one",async()=>{const n=new l.RegisteredWallet("walletName",l.DefaultDescriptorTemplate.LEGACY,["key0","key1"],Uint8Array.from([42])),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i);t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{extendedPublicKey:"xPublicKey"}}))),t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}})));const a={};d.mockReturnValue(a);const r=await o.run();expect(d).toHaveBeenCalledWith(n),expect(r).toStrictEqual((0,e.CommandResultFactory)({data:a}))}),it("should return an error if getMasterFingerprint failed",async()=>{const n=new l.DefaultWallet("49'/0'/0'",l.DefaultDescriptorTemplate.LEGACY),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i),a=new e.UnknownDeviceExchangeError("Failed");t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({error:a})));const r=await o.run();expect(r).toStrictEqual((0,e.CommandResultFactory)({error:a}))}),it("should return an error if getExtendedPublicKey failed",async()=>{const n=new l.DefaultWallet("49'/0'/0'",l.DefaultDescriptorTemplate.LEGACY),o=new s.PrepareWalletPolicyTask(t,{wallet:n},i),a=new e.UnknownDeviceExchangeError("Failed");t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}}))),t.sendCommand.mockResolvedValueOnce(Promise.resolve((0,e.CommandResultFactory)({error:a})));const r=await o.run();expect(r).toStrictEqual((0,e.CommandResultFactory)({error:a})),expect(r).toStrictEqual((0,e.CommandResultFactory)({error:a}))})});
2
2
  //# sourceMappingURL=PrepareWalletPolicyTask.test.js.map