@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.
- package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignMessageDeviceActionTypes.js.map +1 -1
- package/lib/cjs/internal/DefaultSignerBtc.test.js +1 -1
- package/lib/cjs/internal/DefaultSignerBtc.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/BtcAppBinder.js +1 -1
- package/lib/cjs/internal/app-binder/BtcAppBinder.js.map +3 -3
- package/lib/cjs/internal/app-binder/BtcAppBinder.test.js +1 -1
- package/lib/cjs/internal/app-binder/BtcAppBinder.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +2 -0
- package/lib/cjs/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +7 -0
- package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/ContinueTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/ContinueTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
- package/lib/cjs/internal/data-store/model/DataStore.test.js +1 -1
- package/lib/cjs/internal/data-store/model/DataStore.test.js.map +2 -2
- package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
- package/lib/cjs/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
- package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
- package/lib/cjs/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
- package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
- package/lib/cjs/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
- package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
- package/lib/cjs/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
- package/lib/cjs/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +2 -2
- package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
- package/lib/cjs/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
- package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
- package/lib/cjs/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
- package/lib/cjs/package.json +5 -6
- package/lib/esm/internal/DefaultSignerBtc.test.js +1 -1
- package/lib/esm/internal/DefaultSignerBtc.test.js.map +2 -2
- package/lib/esm/internal/app-binder/BtcAppBinder.js +1 -1
- package/lib/esm/internal/app-binder/BtcAppBinder.js.map +3 -3
- package/lib/esm/internal/app-binder/BtcAppBinder.test.js +1 -1
- package/lib/esm/internal/app-binder/BtcAppBinder.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/GetMasterFingerprintCommand.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/GetWalletAddressCommand.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/RegisterWalletAddressCommand.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js +1 -1
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafIndexCommandHandler.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js +1 -1
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetMerkleLeafProofCommandHandler.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js +1 -1
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetMoreElementsCommandHandler.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js +1 -1
- package/lib/esm/internal/app-binder/command/client-command-handlers/GetPreimageCommandHandler.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js +1 -1
- package/lib/esm/internal/app-binder/command/service/ClientCommandInterpreter.test.js.map +2 -2
- package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js +1 -1
- package/lib/esm/internal/app-binder/command/utils/bitcoinAppError.test.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/GetWalletAddress/GetWalletAddressDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js +2 -0
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js +2 -0
- package/lib/esm/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.js.map +7 -0
- package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignPsbt/SignPsbtDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js +1 -1
- package/lib/esm/internal/app-binder/device-action/SignTransaction/SignTransactionDeviceAction.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/makeInternalApi.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.js.map +2 -2
- package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js +1 -1
- package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map +3 -3
- package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/BuildPsbtTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/ContinueTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/ContinueTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/GetWalletAddressTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/PrepareWalletPolicyTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/SignMessageTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/SignMessageTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/SignPsbtTask.test.js.map +2 -2
- package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/UpdatePsbtTask.test.js.map +2 -2
- package/lib/esm/internal/data-store/model/DataStore.test.js +1 -1
- package/lib/esm/internal/data-store/model/DataStore.test.js.map +2 -2
- package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js +1 -1
- package/lib/esm/internal/data-store/service/DefaultDataStoreService.test.js.map +2 -2
- package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js +1 -1
- package/lib/esm/internal/merkle-tree/service/MerkleMapBuilder.test.js.map +2 -2
- package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js +1 -1
- package/lib/esm/internal/merkle-tree/service/MerkleTreeBuilder.test.js.map +2 -2
- package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js +1 -1
- package/lib/esm/internal/psbt/service/psbt/DefaultPsbtMapper.test.js.map +2 -2
- package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/get-extended-public-key/GetExtendedPublicKeyUseCase.test.js.map +2 -2
- package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/get-wallet-address/GetWalletAddressUseCase.test.js.map +2 -2
- package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/sign-message/SignMessageUseCase.test.js.map +2 -2
- package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/sign-psbt/SignPsbtUseCase.test.js.map +2 -2
- package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js +1 -1
- package/lib/esm/internal/use-cases/sign-transaction/SignTransactionUseCase.test.js.map +2 -2
- package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js +1 -1
- package/lib/esm/internal/wallet/service/DefaultWalletBuilder.test.js.map +2 -2
- package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js +1 -1
- package/lib/esm/internal/wallet/service/DefaultWalletSerializer.test.js.map +2 -2
- package/lib/esm/package.json +5 -6
- package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts +12 -1
- package/lib/types/api/app-binder/SignMessageDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/BtcAppBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts +19 -0
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts +2 -0
- package/lib/types/internal/app-binder/device-action/SignMessage/SignMessageDeviceAction.test.d.ts.map +1 -0
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts +1 -2
- package/lib/types/internal/app-binder/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/setupOpenAppDAMock.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/setupSignPsbtDAMock.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts +2 -5
- package/lib/types/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- 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": "
|
|
6
|
-
"names": ["CommandResultFactory", "DeviceActionStatus", "UnknownDeviceExchangeError", "UserInteractionRequired", "UnknownDAError", "InvalidStatusWordError", "makeDeviceActionInternalApiMock", "setupOpenAppDAMock", "testDeviceActionStates", "SignPsbtDeviceAction", "
|
|
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": ["CommandResultFactory", "DeviceActionStatus", "UnknownDeviceExchangeError", "UserInteractionRequired", "UnknownDAError", "InvalidStatusWordError", "makeDeviceActionInternalApiMock", "setupOpenAppDAMock", "testDeviceActionStates", "SignPsbtDeviceAction", "signPsbtMock", "prepareWalletPolicyMock", "buildPsbtMock", "extractDependenciesMock", "done", "deviceAction", "expectedStates", "observable"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as
|
|
1
|
+
import{CommandResultFactory as o,DeviceActionStatus as e,UnknownDeviceExchangeError as i,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{makeDeviceActionInternalApiMock as c}from"../../../app-binder/device-action/__test-utils__/makeInternalApi";import{setupSignPsbtDAMock as u}from"../../../app-binder/device-action/__test-utils__/setupSignPsbtDAMock";import{testDeviceActionStates as d}from"../../../app-binder/device-action/__test-utils__/testDeviceActionStates";import{SignTransactionDeviceAction as p}from"./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 s=jest.fn(),l=jest.fn();function S(){return{updatePsbt:s,extractTransaction:l}}describe("Success case",()=>{it("should call external dependencies with the correct parameters",a=>{u([{inputIndex:0,pubkey:Uint8Array.from([4,5,6]),signature:Uint8Array.from([1,2,3])}]);const r=new p({input:{wallet:"ApiWallet",psbt:"Hello world",walletBuilder:"WalletBuilder",walletSerializer:"WalletSerializer",dataStoreService:"DataStoreService",psbtMapper:"PsbtMapper",valueParser:"ValueParser"}});jest.spyOn(r,"extractDependencies").mockReturnValue(S()),s.mockResolvedValueOnce(o({data:"Psbt"})),l.mockResolvedValueOnce(o({data:"0x42"}));const n=[{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.SignTransaction},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{intermediateValue:{requiredUserInteraction:t.None},status:e.Pending},{output:"0x42",status:e.Completed}],{observable:m}=d(r,n,c(),a);m.subscribe({complete:()=>{expect(s).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(l).toHaveBeenCalledWith(expect.objectContaining({input:{psbt:"Psbt",valueParser:"ValueParser"}}))}})})}),describe("error cases",()=>{beforeEach(()=>{jest.resetAllMocks()}),it("Error if sign psbt fails",a=>{u([],new i("Mocked error"));const r=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction}},{status:e.Error,error:new i("Mocked error")}],n=new p({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});d(n,r,c(),a)}),it("Error if update psbt fails",a=>{u();const r=new p({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});jest.spyOn(r,"extractDependencies").mockReturnValue(S()),s.mockResolvedValueOnce(o({error:new i("Mocked error")}));const n=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new i("Mocked error")}];d(r,n,c(),a)}),it("Error if extract transaction fails",a=>{u();const r=new p({input:{wallet:{},psbt:"Hello world",walletBuilder:{},walletSerializer:{},dataStoreService:{},psbtMapper:{},valueParser:{}}});jest.spyOn(r,"extractDependencies").mockReturnValue(S()),s.mockResolvedValueOnce(o({data:"Psbt"})),l.mockResolvedValueOnce(o({error:new i("Mocked error")}));const n=[{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.SignTransaction}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Pending,intermediateValue:{requiredUserInteraction:t.None}},{status:e.Error,error:new i("Mocked error")}];d(r,n,c(),a)})})});
|
|
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": "
|
|
6
|
-
"names": ["CommandResultFactory", "DeviceActionStatus", "UnknownDeviceExchangeError", "UserInteractionRequired", "makeDeviceActionInternalApiMock", "setupSignPsbtDAMock", "testDeviceActionStates", "SignTransactionDeviceAction", "
|
|
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": ["CommandResultFactory", "DeviceActionStatus", "UnknownDeviceExchangeError", "UserInteractionRequired", "makeDeviceActionInternalApiMock", "setupSignPsbtDAMock", "testDeviceActionStates", "SignTransactionDeviceAction", "updatePsbtMock", "extractTransactionMock", "extractDependenciesMock", "done", "deviceAction", "expectedStates", "observable"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e=
|
|
1
|
+
const e=jest.fn(),t=jest.fn(),n=jest.fn(),s=jest.fn(),i=jest.fn();function o(){return{sendCommand:e,getDeviceSessionState:t,getDeviceSessionStateObservable:n,setDeviceSessionState:s,getManagerApiService:i}}export{o as 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\";\
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["
|
|
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": "AAEA,MAAMA,EAAkB,KAAK,GAAG,EAC1BC,EAA+B,KAAK,GAAG,EACvCC,EAAyC,KAAK,GAAG,EACjDC,EAA4B,KAAK,GAAG,EACpCC,EAA2B,KAAK,GAAG,EAElC,SAASC,GAA4D,CAC1E,MAAO,CACL,YAAaL,EACb,sBAAuBC,EACvB,gCAAiCC,EACjC,sBAAuBC,EACvB,qBAAsBC,CACxB,CACF",
|
|
6
|
+
"names": ["sendCommandMock", "apiGetDeviceSessionStateMock", "apiGetDeviceSessionStateObservableMock", "setDeviceSessionStateMock", "getManagerApiServiceMock", "makeDeviceActionInternalApiMock"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{OpenAppDeviceAction as n,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{Left as i,Right as o}from"purify-ts";import{assign as p,createMachine as
|
|
1
|
+
import{OpenAppDeviceAction as n,UserInteractionRequired as t}from"@ledgerhq/device-management-kit";import{Left as i,Right as o}from"purify-ts";import{assign as p,createMachine as a}from"xstate";const s=e=>{n.mockImplementation(()=>({makeStateMachine:jest.fn().mockImplementation(()=>a({initial:"pending",states:{pending:{entry:p({intermediateValue:{requiredUserInteraction:t.ConfirmOpenApp}}),after:{0:"done"}},done:{type:"final"}},output:()=>e?i(e):o(void 0)}))}))};export{s as 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 {
|
|
5
|
-
"mappings": "AAAA,OACE,uBAAAA,EACA,2BAAAC,MACK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,
|
|
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": "AAAA,OACE,uBAAAA,EACA,2BAAAC,MACK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAC5B,OAAS,UAAAC,EAAQ,iBAAAC,MAAqB,SAE/B,MAAMC,EAAsBC,GAAoB,CACpDP,EAAkC,mBAAmB,KAAO,CAC3D,iBAAkB,KAAK,GAAG,EAAE,mBAAmB,IAC7CK,EAAc,CACZ,QAAS,UACT,OAAQ,CACN,QAAS,CACP,MAAOD,EAAO,CACZ,kBAAmB,CACjB,wBAAyBH,EAAwB,cACnD,CACF,CAAC,EACD,MAAO,CACL,EAAG,MACL,CACF,EACA,KAAM,CACJ,KAAM,OACR,CACF,EACA,OAAQ,IAAOM,EAAQL,EAAKK,CAAK,EAAIJ,EAAM,MAAS,CACtD,CAAC,CACH,CACF,EAAE,CACJ",
|
|
6
6
|
"names": ["OpenAppDeviceAction", "UserInteractionRequired", "Left", "Right", "assign", "createMachine", "setupOpenAppDAMock", "error"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{UserInteractionRequired as n}from"@ledgerhq/device-management-kit";import{Left as i,Right as o}from"purify-ts";import{assign as r,createMachine as a}from"xstate";import{SignPsbtDeviceAction as m}from"../../../app-binder/device-action/SignPsbt/SignPsbtDeviceAction";const g=(e=[],t)=>{m.mockImplementation(()=>({makeStateMachine:
|
|
1
|
+
import{UserInteractionRequired as n}from"@ledgerhq/device-management-kit";import{Left as i,Right as o}from"purify-ts";import{assign as r,createMachine as a}from"xstate";import{SignPsbtDeviceAction as m}from"../../../app-binder/device-action/SignPsbt/SignPsbtDeviceAction";const g=(e=[],t)=>{m.mockImplementation(()=>({makeStateMachine:jest.fn().mockImplementation(()=>a({initial:"pending",states:{pending:{entry:r({intermediateValue:{requiredUserInteraction:n.SignTransaction}}),after:{0:"done"}},done:{type:"final"}},output:()=>t?i(t):o(e)}))}))};export{g as 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 {
|
|
5
|
-
"mappings": "AAAA,OAAS,2BAAAA,MAA+B,kCACxC,OAAS,QAAAC,EAAM,SAAAC,MAAa,
|
|
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": "AAAA,OAAS,2BAAAA,MAA+B,kCACxC,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAC5B,OAAS,UAAAC,EAAQ,iBAAAC,MAAqB,SAGtC,OAAS,wBAAAC,MAA4B,mEAE9B,MAAMC,EAAsB,CACjCC,EAAwB,CAAC,EACzBC,IACG,CAEFH,EAAmC,mBAAmB,KAAO,CAC5D,iBAAkB,KAAK,GAAG,EAAE,mBAAmB,IAC7CD,EAAc,CACZ,QAAS,UACT,OAAQ,CACN,QAAS,CACP,MAAOD,EAAO,CACZ,kBAAmB,CACjB,wBACEH,EAAwB,eAC5B,CACF,CAAC,EACD,MAAO,CACL,EAAG,MACL,CACF,EACA,KAAM,CACJ,KAAM,OACR,CACF,EACA,OAAQ,IAAOQ,EAAQP,EAAKO,CAAK,EAAIN,EAAMK,CAAI,CACjD,CAAC,CACH,CACF,EAAE,CACJ",
|
|
6
6
|
"names": ["UserInteractionRequired", "Left", "Right", "assign", "createMachine", "SignPsbtDeviceAction", "setupSignPsbtDAMock", "sigs", "error"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
function
|
|
1
|
+
function o(c,a,n,e){const r=[],{observable:i,cancel:u}=c._execute(n);return i.subscribe({next:t=>{r.push(t)},error:t=>{e&&e(t)},complete:()=>{try{expect(r).toEqual(a),e&&e()}catch(t){e&&e(t)}}}),{observable:i,cancel:u}}export{o as testDeviceActionStates};
|
|
2
2
|
//# sourceMappingURL=testDeviceActionStates.js.map
|
package/lib/esm/internal/app-binder/device-action/__test-utils__/testDeviceActionStates.js.map
CHANGED
|
@@ -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
|
|
5
|
-
"mappings": "AAcO,SAASA,EAMdC,EACAC,EACAC,
|
|
6
|
-
"names": ["testDeviceActionStates", "deviceAction", "expectedStates", "internalApi", "
|
|
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": "AAcO,SAASA,EAMdC,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", "deviceAction", "expectedStates", "internalApi", "done", "observedStates", "observable", "cancel", "state", "error", "e"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as r,UnknownDeviceExchangeError as
|
|
1
|
+
import{CommandResultFactory as r,UnknownDeviceExchangeError as i}from"@ledgerhq/device-management-kit";import{Left as m,Right as n}from"purify-ts";import{BuildPsbtTask as o}from"../../app-binder/task/BuildPsbtTask";import{DataStore as p}from"../../data-store/model/DataStore";describe("BuildPsbtTask",()=>{it("should build psbt and fill datastore",async()=>{const s={map:jest.fn(()=>n("InternalPsbt"))},t={merklizeWallet:jest.fn(),merklizePsbt:jest.fn(()=>n("PsbtCommitment"))},e=new p,a=await new o({wallet:"Wallet",psbt:"ApiPsbt"},t,s,()=>e).run();expect(s.map).toHaveBeenCalledWith("ApiPsbt"),expect(t.merklizePsbt).toHaveBeenCalledWith(e,"InternalPsbt"),expect(t.merklizeWallet).toHaveBeenCalledWith(e,"Wallet"),expect(a).toStrictEqual(r({data:{psbtCommitment:"PsbtCommitment",dataStore:e,psbt:"InternalPsbt"}}))}),it("should return an error if datastore fails",async()=>{const s={map:jest.fn(()=>n({}))},t=new Error("Failed"),e={merklizeWallet:jest.fn(),merklizePsbt:jest.fn(()=>m(t)),merklizeChunks:jest.fn()},a=await new o({wallet:{},psbt:{}},e,s).run();expect(a).toStrictEqual(r({error:new i({error:t})}))}),it("should return an error if datastore fails",async()=>{const s=new Error("Failed"),t={map:jest.fn(()=>m(s))},e={merklizeWallet:jest.fn(),merklizePsbt:jest.fn(()=>n({})),merklizeChunks:jest.fn()},a=await new o({wallet:{},psbt:{}},e,t).run();expect(a).toStrictEqual(r({error:new i({error:s})}))})});
|
|
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:
|
|
5
|
-
"mappings": "AAAA,OACE,wBAAAA,EACA,8BAAAC,MACK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAG5B,OAAS,iBAAAC,MAAqB,0CAC9B,OAAS,aAAAC,MAAiB,uCAQ1B,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,SAAY,CAErD,MAAMC,EAAa,CACjB,IAAK,
|
|
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,OACE,wBAAAA,EACA,8BAAAC,MACK,kCACP,OAAS,QAAAC,EAAM,SAAAC,MAAa,YAG5B,OAAS,iBAAAC,MAAqB,0CAC9B,OAAS,aAAAC,MAAiB,uCAQ1B,SAAS,gBAAiB,IAAM,CAC9B,GAAG,uCAAwC,SAAY,CAErD,MAAMC,EAAa,CACjB,IAAK,KAAK,GAAG,IAAMH,EAAM,cAAyC,CAAC,CACrE,EACMI,EAAmB,CACvB,eAAgB,KAAK,GAAG,EACxB,aAAc,KAAK,GAAG,IACpBJ,EAAM,gBAA6C,CACrD,CACF,EACMK,EAAY,IAAIH,EAWhBI,EAAS,MAVF,IAAIL,EACf,CACE,OAAQ,SACR,KAAM,SACR,EACAG,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,cACbT,EAAqB,CACnB,KAAM,CACJ,eAAgB,iBAChB,UAAAQ,EACA,KAAM,cACR,CACF,CAAC,CACH,CACF,CAAC,EACD,GAAG,4CAA6C,SAAY,CAE1D,MAAMF,EAAa,CACjB,IAAK,KAAK,GAAG,IAAMH,EAAM,CAAC,CAAiB,CAAC,CAC9C,EACMO,EAAQ,IAAI,MAAM,QAAQ,EAC1BH,EAAmB,CACvB,eAAgB,KAAK,GAAG,EACxB,aAAc,KAAK,GAAG,IAAML,EAAKQ,CAAK,CAAC,EACvC,eAAgB,KAAK,GAAG,CAC1B,EAUMD,EAAS,MATF,IAAIL,EACf,CACE,OAAQ,CAAC,EACT,KAAM,CAAC,CACT,EACAG,EACAD,CACF,EAE0B,IAAI,EAE9B,OAAOG,CAAM,EAAE,cACbT,EAAqB,CACnB,MAAO,IAAIC,EAA2B,CAAE,MAAAS,CAAM,CAAC,CACjD,CAAC,CACH,CACF,CAAC,EACD,GAAG,4CAA6C,SAAY,CAE1D,MAAMA,EAAQ,IAAI,MAAM,QAAQ,EAC1BJ,EAAa,CACjB,IAAK,KAAK,GAAG,IAAMJ,EAAKQ,CAAK,CAAC,CAChC,EACMH,EAAmB,CACvB,eAAgB,KAAK,GAAG,EACxB,aAAc,KAAK,GAAG,IAAMJ,EAAM,CAAC,CAAmB,CAAC,EACvD,eAAgB,KAAK,GAAG,CAC1B,EAUMM,EAAS,MATF,IAAIL,EACf,CACE,OAAQ,CAAC,EACT,KAAM,CAAC,CACT,EACAG,EACAD,CACF,EAE0B,IAAI,EAE9B,OAAOG,CAAM,EAAE,cACbT,EAAqB,CACnB,MAAO,IAAIC,EAA2B,CAAE,MAAAS,CAAM,CAAC,CACjD,CAAC,CACH,CACF,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["CommandResultFactory", "UnknownDeviceExchangeError", "Left", "Right", "BuildPsbtTask", "DataStore", "psbtMapper", "dataStoreService", "dataStore", "result", "error"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduResponse as n,CommandResultFactory as e,UnknownDeviceExchangeError as
|
|
1
|
+
import{ApduResponse as n,CommandResultFactory as e,UnknownDeviceExchangeError as i}from"@ledgerhq/device-management-kit";import{Left as c,Right as u}from"purify-ts";import{ContinueTask as d}from"../../app-binder/task/ContinueTask";describe("ContinueTask",()=>{const a={getClientCommandPayload:jest.fn(()=>u(Uint8Array.from([])))},t={sendCommand:jest.fn()},s=Math.floor(Math.random()*10+2);afterEach(()=>{jest.clearAllMocks()}),it(`should call ${s} times client interpreter and return success`,async()=>{new Array(s).fill(0).forEach(l=>{t.sendCommand.mockReturnValueOnce(e({data:new n({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}))}),t.sendCommand.mockReturnValueOnce(e({data:new n({statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([])})}));const r=e({data:new n({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})});await new d(t,{},a).run(r),expect(a.getClientCommandPayload).toHaveBeenCalledTimes(s+1)}),it("should return an error if the client interpreter fails",async()=>{const r=new i("Failed");a.getClientCommandPayload.mockReturnValueOnce(c(r));const o=e({data:new n({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}),m=await new d(t,{},a).run(o);expect(t.sendCommand).toHaveBeenCalledTimes(0),expect(m).toStrictEqual(e({error:new i(r)}))}),it("should return an error if send command fails",async()=>{const r=new i("Failed");t.sendCommand.mockReturnValueOnce(e({error:r}));const o=e({data:new n({statusCode:Uint8Array.from([224,0]),data:Uint8Array.from([])})}),m=await new d(t,{},a).run(o);expect(a.getClientCommandPayload).toHaveBeenCalledTimes(1),expect(m).toStrictEqual(e({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:
|
|
5
|
-
"mappings": "AAAA,OACE,gBAAAA,EACA,wBAAAC,EAGA,8BAAAC,MACK,kCACP,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAGzC,OAAS,gBAAAC,MAAoB,yCAG7B,SAAS,eAAgB,IAAM,CAC7B,MAAMC,EAA2B,CAC/B,wBAAyB,
|
|
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,OACE,gBAAAA,EACA,wBAAAC,EAGA,8BAAAC,MACK,kCACP,OAAsB,QAAAC,EAAM,SAAAC,MAAa,YAGzC,OAAS,gBAAAC,MAAoB,yCAG7B,SAAS,eAAgB,IAAM,CAC7B,MAAMC,EAA2B,CAC/B,wBAAyB,KAAK,GAC5B,IAAMF,EAAM,WAAW,KAAK,CAAC,CAAC,CAAC,CACjC,CACF,EACMG,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,oBACdN,EAAqB,CACnB,KAAM,IAAID,EAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,CACH,CACF,CAAC,EACDO,EAAI,YAAY,oBACdN,EAAqB,CACnB,KAAM,IAAID,EAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,CACH,EACA,MAAMU,EAAaT,EAAkD,CACnE,KAAM,IAAID,EAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOD,MALa,IAAIK,EACfE,EACA,CAAC,EACDD,CACF,EACW,IAAII,CAAU,EAEzB,OACEJ,EAAyB,uBAC3B,EAAE,sBAAsBE,EAA4B,CAAC,CACvD,CAAC,EAED,GAAG,yDAA0D,SAAY,CAEvE,MAAMG,EAAQ,IAAIT,EAA2B,QAAQ,EACrDI,EAAyB,wBAAwB,oBAC/CH,EAAKQ,CAAK,CACZ,EACA,MAAMD,EAAaT,EAAkD,CACnE,KAAM,IAAID,EAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOKY,EAAS,MALF,IAAIP,EACfE,EACA,CAAC,EACDD,CACF,EAC0B,IAAII,CAAU,EAExC,OAAOH,EAAI,WAAW,EAAE,sBAAsB,CAAC,EAC/C,OAAOK,CAAM,EAAE,cACbX,EAAqB,CAAE,MAAO,IAAIC,EAA2BS,CAAK,CAAE,CAAC,CACvE,CACF,CAAC,EACD,GAAG,+CAAgD,SAAY,CAE7D,MAAMA,EAAQ,IAAIT,EAA2B,QAAQ,EACrDK,EAAI,YAAY,oBAAoBN,EAAqB,CAAE,MAAAU,CAAM,CAAC,CAAC,EACnE,MAAMD,EAAaT,EAAkD,CACnE,KAAM,IAAID,EAAa,CACrB,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,CAAC,CAC1B,CAAC,CACH,CAAC,EAOKY,EAAS,MALF,IAAIP,EACfE,EACA,CAAC,EACDD,CACF,EAC0B,IAAII,CAAU,EAExC,OACEJ,EAAyB,uBAC3B,EAAE,sBAAsB,CAAC,EACzB,OAAOM,CAAM,EAAE,cAAcX,EAAqB,CAAE,MAAAU,CAAM,CAAC,CAAC,CAC9D,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["ApduResponse", "CommandResultFactory", "UnknownDeviceExchangeError", "Left", "Right", "ContinueTask", "clientCommandInterpreter", "api", "randomNumberOfClientCalls", "_", "fromResult", "error", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as e,InvalidStatusWordError as l}from"@ledgerhq/device-management-kit";import{GetWalletAddressTask as i}from"./GetWalletAddressTask";describe("GetWalletAddressTask",()=>{describe("run",()=>{it("should return a wallet address successfully",async()=>{const t={sendCommand:
|
|
1
|
+
import{CommandResultFactory as e,InvalidStatusWordError as l}from"@ledgerhq/device-management-kit";import{GetWalletAddressTask as i}from"./GetWalletAddressTask";describe("GetWalletAddressTask",()=>{describe("run",()=>{it("should return a wallet address successfully",async()=>{const t={sendCommand:jest.fn().mockResolvedValueOnce(e({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(e({data:{data:Uint8Array.from([52,86,120,154,188,222,241])}}))}),o=jest.fn().mockReturnValue(e({data:{address:"some address"}})),c=await new i(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s,o).run();expect(n.getId).toHaveBeenCalledWith(a),expect(c).toStrictEqual(e({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(e({error:new l("ContinueTask failed")}))}),o=await new i(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s).run();expect(o).toStrictEqual(e({error:new l("ContinueTask failed")}))}),it("should fail with an invalid device response",async()=>{const t={sendCommand:jest.fn().mockResolvedValueOnce(e({error:new l("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(e({error:new l("Invalid response from the device")}))}),o=await new i(t,{checkOnDevice:!0,wallet:a,change:!1,addressIndex:0},n,r,s).run();expect(o).toStrictEqual(e({error:new l("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:
|
|
5
|
-
"mappings": "AAAA,OACE,wBAAAA,EAEA,0BAAAC,MACK,kCAOP,OAAS,wBAAAC,MAA4B,yBAErC,SAAS,uBAAwB,IAAM,CACrC,SAAS,MAAO,IAAM,CACpB,GAAG,8CAA+C,SAAY,CAE5D,MAAMC,EAAM,CACV,YAAa,
|
|
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": ["CommandResultFactory", "InvalidStatusWordError", "GetWalletAddressTask", "api", "wallet", "walletSerializer", "dataStoreService", "continueTaskFactory", "mockGetAddress", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as a,UnknownDeviceExchangeError as u}from"@ledgerhq/device-management-kit";import{DefaultDescriptorTemplate as s,DefaultWallet as c,RegisteredWallet as f}from"../../../api/model/Wallet";import{PrepareWalletPolicyTask as i}from"../../app-binder/task/PrepareWalletPolicyTask";const d=
|
|
1
|
+
import{CommandResultFactory as a,UnknownDeviceExchangeError as u}from"@ledgerhq/device-management-kit";import{DefaultDescriptorTemplate as s,DefaultWallet as c,RegisteredWallet as f}from"../../../api/model/Wallet";import{PrepareWalletPolicyTask as i}from"../../app-binder/task/PrepareWalletPolicyTask";const d=jest.fn(),m=jest.fn();describe("PrepareWalletPolicyTask",()=>{let e;const o={fromDefaultWallet:d,fromRegisteredWallet:m};beforeEach(()=>{e={sendCommand:jest.fn()}}),afterEach(()=>{jest.resetAllMocks()}),it("should return a builded wallet from a default one",async()=>{const l=new c("49'/0'/0'",s.LEGACY),r=new i(e,{wallet:l},o);e.sendCommand.mockResolvedValueOnce(Promise.resolve(a({data:{extendedPublicKey:"xPublicKey"}}))),e.sendCommand.mockResolvedValueOnce(Promise.resolve(a({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}})));const t={};d.mockReturnValue(t);const n=await r.run();expect(d).toHaveBeenCalledWith(Uint8Array.from([66,33,18,36]),"xPublicKey",l),expect(n).toStrictEqual(a({data:t}))}),it("should return a builded wallet from a registered one",async()=>{const l=new f("walletName",s.LEGACY,["key0","key1"],Uint8Array.from([42])),r=new i(e,{wallet:l},o);e.sendCommand.mockResolvedValueOnce(Promise.resolve(a({data:{extendedPublicKey:"xPublicKey"}}))),e.sendCommand.mockResolvedValueOnce(Promise.resolve(a({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}})));const t={};m.mockReturnValue(t);const n=await r.run();expect(m).toHaveBeenCalledWith(l),expect(n).toStrictEqual(a({data:t}))}),it("should return an error if getMasterFingerprint failed",async()=>{const l=new c("49'/0'/0'",s.LEGACY),r=new i(e,{wallet:l},o),t=new u("Failed");e.sendCommand.mockResolvedValueOnce(Promise.resolve(a({error:t})));const n=await r.run();expect(n).toStrictEqual(a({error:t}))}),it("should return an error if getExtendedPublicKey failed",async()=>{const l=new c("49'/0'/0'",s.LEGACY),r=new i(e,{wallet:l},o),t=new u("Failed");e.sendCommand.mockResolvedValueOnce(Promise.resolve(a({data:{masterFingerprint:Uint8Array.from([66,33,18,36])}}))),e.sendCommand.mockResolvedValueOnce(Promise.resolve(a({error:t})));const n=await r.run();expect(n).toStrictEqual(a({error:t})),expect(n).toStrictEqual(a({error:t}))})});
|
|
2
2
|
//# sourceMappingURL=PrepareWalletPolicyTask.test.js.map
|