@ledgerhq/device-management-kit 1.7.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -3
- package/lib/cjs/package.json +1 -1
- package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
- package/lib/cjs/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
- package/lib/cjs/src/api/device-action/model/UserInteractionRequired.js +1 -1
- package/lib/cjs/src/api/device-action/model/UserInteractionRequired.js.map +2 -2
- package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +1 -1
- package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/GetDeviceStatus/types.js +1 -1
- package/lib/cjs/src/api/device-action/os/GetDeviceStatus/types.js.map +2 -2
- package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/types.js +1 -1
- package/lib/cjs/src/api/device-action/os/InstallLanguagePackage/types.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +1 -1
- package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +2 -2
- package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/types.js +1 -1
- package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/types.js.map +1 -1
- package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/types.js.map +1 -1
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js.map +3 -3
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +3 -3
- package/lib/cjs/src/api/index.js +1 -1
- package/lib/cjs/src/api/index.js.map +3 -3
- package/lib/cjs/src/api/types.js +1 -1
- package/lib/cjs/src/api/types.js.map +3 -3
- package/lib/cjs/src/api/utils/apduLogs.js +1 -1
- package/lib/cjs/src/api/utils/apduLogs.js.map +3 -3
- package/lib/cjs/src/api/utils/apduLogs.test.js +1 -1
- package/lib/cjs/src/api/utils/apduLogs.test.js.map +3 -3
- package/lib/cjs/src/internal/device-session/model/DeviceSession.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSession.js.map +3 -3
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js.map +2 -2
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +2 -2
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.js +1 -1
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.js.map +2 -2
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.test.js +1 -1
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.test.js.map +2 -2
- package/lib/cjs/src/internal/manager-api/data/ManagerApiDataSource.js +1 -1
- package/lib/cjs/src/internal/manager-api/data/ManagerApiDataSource.js.map +1 -1
- package/lib/cjs/src/internal/manager-api/model/Const.js +1 -1
- package/lib/cjs/src/internal/manager-api/model/Const.js.map +1 -1
- package/lib/cjs/src/internal/manager-api/model/Firmware.js +1 -1
- package/lib/cjs/src/internal/manager-api/model/Firmware.js.map +1 -1
- package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.js +1 -1
- package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.js.map +2 -2
- package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js +1 -1
- package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +3 -3
- package/lib/cjs/src/internal/manager-api/service/ManagerApiService.js +1 -1
- package/lib/cjs/src/internal/manager-api/service/ManagerApiService.js.map +1 -1
- package/lib/cjs/src/internal/secure-channel/model/Errors.js +1 -1
- package/lib/cjs/src/internal/secure-channel/model/Errors.js.map +2 -2
- package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.js +1 -1
- package/lib/cjs/src/internal/secure-channel/service/DefaultSecureChannelService.js.map +3 -3
- package/lib/cjs/src/internal/secure-channel/service/SecureChannelService.js +1 -1
- package/lib/cjs/src/internal/secure-channel/service/SecureChannelService.js.map +1 -1
- package/lib/esm/package.json +1 -1
- package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js +1 -1
- package/lib/esm/src/api/device-action/__test-utils__/setupTestMachine.js.map +3 -3
- package/lib/esm/src/api/device-action/model/UserInteractionRequired.js +1 -1
- package/lib/esm/src/api/device-action/model/UserInteractionRequired.js.map +2 -2
- package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +1 -1
- package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +3 -3
- package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +1 -1
- package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +3 -3
- package/lib/esm/src/api/device-action/os/GetDeviceStatus/types.js +1 -1
- package/lib/esm/src/api/device-action/os/GetDeviceStatus/types.js.map +2 -2
- package/lib/esm/src/api/device-action/os/InstallLanguagePackage/types.js +1 -1
- package/lib/esm/src/api/device-action/os/InstallLanguagePackage/types.js.map +3 -3
- package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +1 -1
- package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +2 -2
- package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +1 -1
- package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +2 -2
- package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/types.js.map +1 -1
- package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/types.js.map +1 -1
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js.map +3 -3
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +3 -3
- package/lib/esm/src/api/index.js +1 -1
- package/lib/esm/src/api/index.js.map +3 -3
- package/lib/esm/src/api/types.js +1 -0
- package/lib/esm/src/api/types.js.map +4 -4
- package/lib/esm/src/api/utils/apduLogs.js +1 -1
- package/lib/esm/src/api/utils/apduLogs.js.map +3 -3
- package/lib/esm/src/api/utils/apduLogs.test.js +1 -1
- package/lib/esm/src/api/utils/apduLogs.test.js.map +3 -3
- package/lib/esm/src/internal/device-session/model/DeviceSession.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSession.js.map +3 -3
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js.map +2 -2
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +2 -2
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.js +1 -1
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.js.map +3 -3
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.test.js +1 -1
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.test.js.map +3 -3
- package/lib/esm/src/internal/manager-api/model/Const.js +1 -1
- package/lib/esm/src/internal/manager-api/model/Const.js.map +1 -1
- package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.js +1 -1
- package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.js.map +2 -2
- package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js +1 -1
- package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +3 -3
- package/lib/esm/src/internal/secure-channel/model/Errors.js +1 -1
- package/lib/esm/src/internal/secure-channel/model/Errors.js.map +3 -3
- package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.js +1 -1
- package/lib/esm/src/internal/secure-channel/service/DefaultSecureChannelService.js.map +3 -3
- package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts +3 -0
- package/lib/types/src/api/device-action/__test-utils__/setupTestMachine.d.ts.map +1 -1
- package/lib/types/src/api/device-action/model/UserInteractionRequired.d.ts +3 -1
- package/lib/types/src/api/device-action/model/UserInteractionRequired.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.d.ts +0 -9
- package/lib/types/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/GetDeviceStatus/types.d.ts +5 -4
- package/lib/types/src/api/device-action/os/GetDeviceStatus/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/InstallLanguagePackage/types.d.ts +1 -0
- package/lib/types/src/api/device-action/os/InstallLanguagePackage/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/OpenAppDeviceAction/types.d.ts +1 -1
- package/lib/types/src/api/device-action/os/OpenAppDeviceAction/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/OpenAppWithDependencies/types.d.ts +1 -1
- package/lib/types/src/api/device-action/os/OpenAppWithDependencies/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/task/GetFirmwareMetadataTask.d.ts +2 -0
- package/lib/types/src/api/device-action/task/GetFirmwareMetadataTask.d.ts.map +1 -1
- package/lib/types/src/api/index.d.ts +3 -4
- package/lib/types/src/api/index.d.ts.map +1 -1
- package/lib/types/src/api/types.d.ts +1 -1
- package/lib/types/src/api/types.d.ts.map +1 -1
- package/lib/types/src/api/utils/apduLogs.d.ts +15 -0
- package/lib/types/src/api/utils/apduLogs.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/model/DeviceSession.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts.map +1 -1
- package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.d.ts +2 -2
- package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.d.ts.map +1 -1
- package/lib/types/src/internal/manager-api/data/ManagerApiDataSource.d.ts +4 -4
- package/lib/types/src/internal/manager-api/data/ManagerApiDataSource.d.ts.map +1 -1
- package/lib/types/src/internal/manager-api/model/Const.d.ts +1 -1
- package/lib/types/src/internal/manager-api/model/Firmware.d.ts +3 -0
- package/lib/types/src/internal/manager-api/model/Firmware.d.ts.map +1 -1
- package/lib/types/src/internal/manager-api/service/DefaultManagerApiService.d.ts +2 -1
- package/lib/types/src/internal/manager-api/service/DefaultManagerApiService.d.ts.map +1 -1
- package/lib/types/src/internal/manager-api/service/ManagerApiService.d.ts +9 -3
- package/lib/types/src/internal/manager-api/service/ManagerApiService.d.ts.map +1 -1
- package/lib/types/src/internal/secure-channel/model/Errors.d.ts +8 -1
- package/lib/types/src/internal/secure-channel/model/Errors.d.ts.map +1 -1
- package/lib/types/src/internal/secure-channel/service/DefaultSecureChannelService.d.ts +1 -1
- package/lib/types/src/internal/secure-channel/service/DefaultSecureChannelService.d.ts.map +1 -1
- package/lib/types/src/internal/secure-channel/service/SecureChannelService.d.ts +2 -2
- package/lib/types/src/internal/secure-channel/service/SecureChannelService.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +4 -4
- package/lib/cjs/src/api/command/os/BackupStorageCommand.js +0 -2
- package/lib/cjs/src/api/command/os/BackupStorageCommand.js.map +0 -7
- package/lib/cjs/src/api/command/os/BackupStorageCommand.test.js +0 -2
- package/lib/cjs/src/api/command/os/BackupStorageCommand.test.js.map +0 -7
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js +0 -2
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js.map +0 -7
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js +0 -2
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js.map +0 -7
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js +0 -2
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js.map +0 -7
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js +0 -2
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js.map +0 -7
- package/lib/cjs/src/api/storage/KeyValueStorage.js +0 -2
- package/lib/cjs/src/api/storage/KeyValueStorage.js.map +0 -7
- package/lib/esm/src/api/command/os/BackupStorageCommand.js +0 -2
- package/lib/esm/src/api/command/os/BackupStorageCommand.js.map +0 -7
- package/lib/esm/src/api/command/os/BackupStorageCommand.test.js +0 -2
- package/lib/esm/src/api/command/os/BackupStorageCommand.test.js.map +0 -7
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js +0 -2
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js.map +0 -7
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js +0 -2
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js.map +0 -7
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js +0 -2
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js.map +0 -7
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js +0 -2
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js.map +0 -7
- package/lib/esm/src/api/storage/KeyValueStorage.js +0 -2
- package/lib/esm/src/api/storage/KeyValueStorage.js.map +0 -7
- package/lib/types/src/api/command/os/BackupStorageCommand.d.ts +0 -23
- package/lib/types/src/api/command/os/BackupStorageCommand.d.ts.map +0 -1
- package/lib/types/src/api/command/os/BackupStorageCommand.test.d.ts +0 -2
- package/lib/types/src/api/command/os/BackupStorageCommand.test.d.ts.map +0 -1
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts +0 -31
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts.map +0 -1
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts +0 -2
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts.map +0 -1
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts +0 -23
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts.map +0 -1
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts +0 -2
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts.map +0 -1
- package/lib/types/src/api/storage/KeyValueStorage.d.ts +0 -7
- package/lib/types/src/api/storage/KeyValueStorage.d.ts.map +0 -1
package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { lastValueFrom } from \"rxjs\";\n\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { setupGetDeviceStatusMock } from \"@api/device-action/__test-utils__/setupTestMachine\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { DeviceActionStatus } from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport {\n DeviceLockedError,\n DeviceNotOnboardedError,\n UnknownDAError,\n} from \"@api/device-action/os/Errors\";\nimport { getDeviceStatusDAStateStep } from \"@api/device-action/os/GetDeviceStatus/types\";\nimport { DeviceSessionStateType } from \"@api/device-session/DeviceSessionState\";\nimport { DeviceDisconnectedWhileSendingError } from \"@api/transport/model/Errors\";\n\nimport { OpenAppDeviceAction } from \"./OpenAppDeviceAction\";\nimport {\n type OpenAppDAError,\n type OpenAppDAState,\n openAppDAStateStep,\n} from \"./types\";\n\nvi.mock(\"@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction\");\n\ndescribe(\"OpenAppDeviceAction\", () => {\n const getAppAndVersionMock = vi.fn();\n const openAppMock = vi.fn();\n const closeAppMock = vi.fn();\n const getDeviceSessionStateMock = vi.fn();\n const setDeviceSessionStateMock = vi.fn();\n\n function extractDependenciesMock() {\n return {\n getDeviceSessionState: getDeviceSessionStateMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n openApp: openAppMock,\n closeApp: closeAppMock,\n };\n }\n\n const { getDeviceSessionState: apiGetDeviceSessionStateMock } =\n makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"without overriding `extractDependencies`\", () => {\n it(\"should end if the required application is opened\", () =>\n new Promise<void>((resolve, reject) => {\n apiGetDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n installedApps: [],\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: false,\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarding status / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"success cases\", () => {\n it(\"should end in a success if the app is already opened\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"1.0.0\",\n },\n ]);\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\", unlockTimeout: undefined },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarding status / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version / onboard check / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in a success if the dashboard is open and open app succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n });\n\n setupGetDeviceStatusMock([\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"1.0.0\",\n },\n ]);\n\n openAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get app and version /list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version / onboard check / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n const { observable } = testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n lastValueFrom(observable).then(() => {\n expect(setDeviceSessionStateMock).toHaveBeenCalledWith({\n deviceStatus: DeviceStatus.CONNECTED,\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n });\n });\n }));\n\n it(\"should end in a success if disconnection occurs while open app succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n getAppAndVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n name: \"BOLOS\",\n version: \"0.0.0\",\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockRejectedValue(\n new DeviceDisconnectedWhileSendingError(),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status after open\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // final device status check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in a success if another app is open, close app succeeds and open app succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n { currentApp: \"Bitcoin\", currentAppVersion: \"1.0.0\" },\n ]);\n closeAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n openAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get app and version / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version (final)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n const { observable } = testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n lastValueFrom(observable).then(() => {\n expect(setDeviceSessionStateMock).toHaveBeenCalledWith({\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n deviceStatus: DeviceStatus.CONNECTED,\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n });\n });\n }));\n });\n\n describe(\"errors cases\", () => {\n it(\"should end in an error if the device is not onboarded\", () =>\n new Promise<void>((resolve, reject) => {\n apiGetDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n installedApps: [],\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: false,\n });\n setupGetDeviceStatusMock([new DeviceNotOnboardedError()]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n error: new DeviceNotOnboardedError(),\n status: DeviceActionStatus.Error,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if the device is locked\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.LOCKED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([new DeviceLockedError()]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new DeviceLockedError(),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if getAppAndVersion returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([new InvalidStatusWordError(\"mocked error\")]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get app and version / list apps / initial\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if the dashboard is open and open app returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n getAppAndVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n name: \"BOLOS\",\n version: \"0.0.0\",\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"mocked error\"),\n }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in a success if disconnection occurs while open app failed\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n getAppAndVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n name: \"BOLOS\",\n version: \"0.0.0\",\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockRejectedValue(\n new DeviceDisconnectedWhileSendingError(),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status after failure\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // final device status check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new DeviceDisconnectedWhileSendingError() as OpenAppDAError,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if another app is open, and close app returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n closeAppMock.mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"mocked error\"),\n }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if another app is open, close app succeeds but open app returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n closeAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n openAppMock.mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"mocked error\"),\n }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if getAppAndVersion actor throws an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([new UnknownDAError(\"Unknown error\")]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Unknown error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if openApp actor throws an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockImplementation(() => {\n throw new UnknownDAError(\"Unknown error\");\n });\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get device onboarded\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Unknown error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if closeApp actor throws an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"anApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n closeAppMock.mockImplementation(() => {\n throw new UnknownDAError(\"Unknown error\");\n });\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Unknown error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should emit a stopped state if the action is cancelled\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get device onboarded\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Stopped,\n },\n ];\n\n const { cancel } = testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n cancel();\n }));\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { lastValueFrom } from \"rxjs\";\n\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { setupGetDeviceStatusMock } from \"@api/device-action/__test-utils__/setupTestMachine\";\nimport { testDeviceActionStates } from \"@api/device-action/__test-utils__/testDeviceActionStates\";\nimport { DeviceActionStatus } from \"@api/device-action/model/DeviceActionState\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport {\n DeviceLockedError,\n DeviceNotOnboardedError,\n UnknownDAError,\n} from \"@api/device-action/os/Errors\";\nimport { getDeviceStatusDAStateStep } from \"@api/device-action/os/GetDeviceStatus/types\";\nimport { DeviceSessionStateType } from \"@api/device-session/DeviceSessionState\";\nimport { DeviceDisconnectedWhileSendingError } from \"@api/transport/model/Errors\";\n\nimport { OpenAppDeviceAction } from \"./OpenAppDeviceAction\";\nimport {\n type OpenAppDAError,\n type OpenAppDAState,\n openAppDAStateStep,\n} from \"./types\";\n\nvi.mock(\"@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction\");\n\ndescribe(\"OpenAppDeviceAction\", () => {\n const getAppAndVersionMock = vi.fn();\n const openAppMock = vi.fn();\n const closeAppMock = vi.fn();\n const getDeviceSessionStateMock = vi.fn();\n const setDeviceSessionStateMock = vi.fn();\n\n function extractDependenciesMock() {\n return {\n getDeviceSessionState: getDeviceSessionStateMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n openApp: openAppMock,\n closeApp: closeAppMock,\n };\n }\n\n const { getDeviceSessionState: apiGetDeviceSessionStateMock } =\n makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n });\n\n describe(\"without overriding `extractDependencies`\", () => {\n it(\"should end if the required application is opened\", () =>\n new Promise<void>((resolve, reject) => {\n apiGetDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n installedApps: [],\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: false,\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarding status / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n });\n\n describe(\"success cases\", () => {\n it(\"should end in a success if the app is already opened\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"1.0.0\",\n },\n ]);\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\", unlockTimeout: undefined },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarding status / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version / onboard check / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in a success if the dashboard is open and open app succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n });\n\n setupGetDeviceStatusMock([\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"1.0.0\",\n },\n ]);\n\n openAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get app and version /list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version / onboard check / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n const { observable } = testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n lastValueFrom(observable).then(() => {\n expect(setDeviceSessionStateMock).toHaveBeenCalledWith({\n deviceStatus: DeviceStatus.CONNECTED,\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n });\n });\n }));\n\n it(\"should end in a success if disconnection occurs while open app succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n getAppAndVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n name: \"BOLOS\",\n version: \"0.0.0\",\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n {\n currentApp: \"Bitcoin\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockRejectedValue(\n new DeviceDisconnectedWhileSendingError(),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status after open\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // final device status check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in a success if another app is open, close app succeeds and open app succeeds\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n { currentApp: \"Bitcoin\", currentAppVersion: \"1.0.0\" },\n ]);\n closeAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n openAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get app and version / list apps / initial step\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get device status / close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // get app and version (final)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Completed,\n output: undefined,\n },\n ];\n\n const { observable } = testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n\n lastValueFrom(observable).then(() => {\n expect(setDeviceSessionStateMock).toHaveBeenCalledWith({\n currentApp: { name: \"Bitcoin\", version: \"1.0.0\" },\n deviceStatus: DeviceStatus.CONNECTED,\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n });\n });\n }));\n });\n\n describe(\"errors cases\", () => {\n it(\"GIVEN a non-onboarded device WHEN opening an app THEN it blocks the app flow\", () =>\n new Promise<void>((resolve, reject) => {\n // GIVEN\n apiGetDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n installedApps: [],\n deviceModelId: DeviceModelId.NANO_X,\n isSecureConnectionAllowed: false,\n });\n setupGetDeviceStatusMock([new DeviceNotOnboardedError()]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n error: new DeviceNotOnboardedError(),\n status: DeviceActionStatus.Error,\n },\n ];\n\n // WHEN\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n // THEN\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if the device is locked\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.LOCKED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([new DeviceLockedError()]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new DeviceLockedError(),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if getAppAndVersion returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([new InvalidStatusWordError(\"mocked error\")]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get app and version / list apps / initial\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if the dashboard is open and open app returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n getAppAndVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n name: \"BOLOS\",\n version: \"0.0.0\",\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"mocked error\"),\n }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status / onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in a success if disconnection occurs while open app failed\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n getAppAndVersionMock.mockResolvedValue(\n CommandResultFactory({\n data: {\n name: \"BOLOS\",\n version: \"0.0.0\",\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockRejectedValue(\n new DeviceDisconnectedWhileSendingError(),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // device status after failure\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // final device status check\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new DeviceDisconnectedWhileSendingError() as OpenAppDAError,\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if another app is open, and close app returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n closeAppMock.mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"mocked error\"),\n }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if another app is open, close app succeeds but open app returns an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n closeAppMock.mockResolvedValue(\n CommandResultFactory({ data: undefined }),\n );\n openAppMock.mockResolvedValue(\n CommandResultFactory({\n error: new InvalidStatusWordError(\"mocked error\"),\n }),\n );\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new InvalidStatusWordError(\"mocked error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if getAppAndVersion actor throws an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n });\n\n setupGetDeviceStatusMock([new UnknownDAError(\"Unknown error\")]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Unknown error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if openApp actor throws an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"BOLOS\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n openAppMock.mockImplementation(() => {\n throw new UnknownDAError(\"Unknown error\");\n });\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get device onboarded\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // open app (confirm)\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Unknown error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should end in an error if closeApp actor throws an error\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue(\n CommandResultFactory({\n data: {\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"BOLOS\", version: \"0.0.0\" },\n },\n }),\n );\n setupGetDeviceStatusMock([\n {\n currentApp: \"anApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n closeAppMock.mockImplementation(() => {\n throw new UnknownDAError(\"Unknown error\");\n });\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get onboarded status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Pending, // close app\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Error,\n error: new UnknownDAError(\"Unknown error\"),\n },\n ];\n\n testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n }));\n\n it(\"should emit a stopped state if the action is cancelled\", () =>\n new Promise<void>((resolve, reject) => {\n getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"AnotherApp\", version: \"0.0.0\" },\n });\n setupGetDeviceStatusMock([\n {\n currentApp: \"AnotherApp\",\n currentAppVersion: \"0.0.0\",\n },\n ]);\n\n const openAppDeviceAction = new OpenAppDeviceAction({\n input: { appName: \"Bitcoin\" },\n });\n vi.spyOn(openAppDeviceAction, \"extractDependencies\").mockReturnValue(\n extractDependenciesMock(),\n );\n\n const expectedStates: Array<OpenAppDAState> = [\n {\n status: DeviceActionStatus.Pending, // get device onboarded\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n },\n {\n status: DeviceActionStatus.Pending, // onboard / device status\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: getDeviceStatusDAStateStep.ONBOARD_CHECK,\n },\n },\n {\n status: DeviceActionStatus.Stopped,\n },\n ];\n\n const { cancel } = testDeviceActionStates(\n openAppDeviceAction,\n expectedStates,\n makeDeviceActionInternalApiMock(),\n {\n onDone: resolve,\n onError: reject,\n },\n );\n cancel();\n }));\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["lastValueFrom", "InvalidStatusWordError", "CommandResultFactory", "DeviceModelId", "DeviceStatus", "makeDeviceActionInternalApiMock", "setupGetDeviceStatusMock", "testDeviceActionStates", "DeviceActionStatus", "UserInteractionRequired", "DeviceLockedError", "DeviceNotOnboardedError", "UnknownDAError", "getDeviceStatusDAStateStep", "DeviceSessionStateType", "DeviceDisconnectedWhileSendingError", "OpenAppDeviceAction", "openAppDAStateStep", "getAppAndVersionMock", "openAppMock", "closeAppMock", "getDeviceSessionStateMock", "setDeviceSessionStateMock", "extractDependenciesMock", "apiGetDeviceSessionStateMock", "resolve", "reject", "openAppDeviceAction", "expectedStates", "observable", "cancel"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/api/device-action/os/OpenAppDeviceAction/types.ts"],
|
|
4
|
-
"sourcesContent": ["import { type CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport { type OpenAppErrorCodes } from \"@api/command/os/OpenAppCommand\";\nimport { type DeviceActionState } from \"@api/device-action/model/DeviceActionState\";\nimport { type UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport {\n type DeviceLockedError,\n type DeviceNotOnboardedError,\n type UnknownDAError,\n} from \"@api/device-action/os/Errors\";\nimport {\n type GetDeviceStatusDAInput,\n type GetDeviceStatusDAStateStep,\n} from \"@api/device-action/os/GetDeviceStatus/types\";\n\nexport const openAppDAStateStep = Object.freeze({\n LIST_APPS: \"os.openApp.steps.listApps\",\n ONBOARD_CHECK: \"os.openApp.steps.onboardCheck\",\n GET_DEVICE_STATUS: \"os.openApp.steps.getDeviceStatus\",\n DASHBOARD_CHECK: \"os.openApp.steps.dashboardCheck\",\n CONFIRM_OPEN_APP: \"os.openApp.steps.confirmOpenApp\",\n CLOSE_APP: \"os.openApp.steps.closeApp\",\n} as const);\n\nexport type OpenAppDAStateStep =\n (typeof openAppDAStateStep)[keyof typeof openAppDAStateStep];\n\nexport type OpenAppDAOutput = void;\n\nexport type OpenAppDAInput = GetDeviceStatusDAInput & {\n readonly appName: string;\n};\n\nexport type OpenAppDAError =\n | DeviceNotOnboardedError\n | DeviceLockedError\n | UnknownDAError\n | CommandErrorResult<OpenAppErrorCodes | void>[\"error\"];\n\nexport type OpenAppDARequiredInteraction =\n | UserInteractionRequired.None\n | UserInteractionRequired.UnlockDevice\n | UserInteractionRequired.ConfirmOpenApp;\n\nexport type OpenAppDAIntermediateValue = {\n readonly requiredUserInteraction: OpenAppDARequiredInteraction;\n readonly step: OpenAppDAStateStep | GetDeviceStatusDAStateStep;\n};\n\nexport type OpenAppDAState = DeviceActionState<\n OpenAppDAOutput,\n OpenAppDAError,\n OpenAppDAIntermediateValue\n>;\n"],
|
|
4
|
+
"sourcesContent": ["import { type CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport { type OpenAppErrorCodes } from \"@api/command/os/OpenAppCommand\";\nimport { type DeviceActionState } from \"@api/device-action/model/DeviceActionState\";\nimport { type UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport {\n type DeviceLockedError,\n type DeviceNotOnboardedError,\n type UnknownDAError,\n} from \"@api/device-action/os/Errors\";\nimport {\n type GetDeviceStatusDAInput,\n type GetDeviceStatusDAStateStep,\n} from \"@api/device-action/os/GetDeviceStatus/types\";\n\nexport const openAppDAStateStep = Object.freeze({\n LIST_APPS: \"os.openApp.steps.listApps\",\n ONBOARD_CHECK: \"os.openApp.steps.onboardCheck\",\n GET_DEVICE_STATUS: \"os.openApp.steps.getDeviceStatus\",\n DASHBOARD_CHECK: \"os.openApp.steps.dashboardCheck\",\n CONFIRM_OPEN_APP: \"os.openApp.steps.confirmOpenApp\",\n CLOSE_APP: \"os.openApp.steps.closeApp\",\n} as const);\n\nexport type OpenAppDAStateStep =\n (typeof openAppDAStateStep)[keyof typeof openAppDAStateStep];\n\nexport type OpenAppDAOutput = void;\n\nexport type OpenAppDAInput = Omit<\n GetDeviceStatusDAInput,\n \"allowNonOnboardedDevice\"\n> & {\n readonly appName: string;\n};\n\nexport type OpenAppDAError =\n | DeviceNotOnboardedError\n | DeviceLockedError\n | UnknownDAError\n | CommandErrorResult<OpenAppErrorCodes | void>[\"error\"];\n\nexport type OpenAppDARequiredInteraction =\n | UserInteractionRequired.None\n | UserInteractionRequired.UnlockDevice\n | UserInteractionRequired.ConfirmOpenApp;\n\nexport type OpenAppDAIntermediateValue = {\n readonly requiredUserInteraction: OpenAppDARequiredInteraction;\n readonly step: OpenAppDAStateStep | GetDeviceStatusDAStateStep;\n};\n\nexport type OpenAppDAState = DeviceActionState<\n OpenAppDAOutput,\n OpenAppDAError,\n OpenAppDAIntermediateValue\n>;\n"],
|
|
5
5
|
"mappings": "AAcO,MAAMA,EAAqB,OAAO,OAAO,CAC9C,UAAW,4BACX,cAAe,gCACf,kBAAmB,mCACnB,gBAAiB,kCACjB,iBAAkB,kCAClB,UAAW,2BACb,CAAU",
|
|
6
6
|
"names": ["openAppDAStateStep"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/api/device-action/os/OpenAppWithDependencies/types.ts"],
|
|
4
|
-
"sourcesContent": ["import type { CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport type { DeviceActionState } from \"@api/device-action/model/DeviceActionState\";\nimport type {\n UnknownDAError,\n UnsupportedFirmwareDAError,\n} from \"@api/device-action/os/Errors\";\nimport type {\n GetDeviceMetadataDAOutput,\n GetDeviceMetadataDARequiredInteraction,\n} from \"@api/device-action/os/GetDeviceMetadata/types\";\nimport type { GetDeviceStatusDAInput } from \"@api/device-action/os/GetDeviceStatus/types\";\nimport type {\n ApplicationDependency,\n InstallOrUpdateAppsDAError,\n InstallOrUpdateAppsDAOutput,\n InstallOrUpdateAppsDARequiredInteraction,\n InstallPlan,\n} from \"@api/device-action/os/InstallOrUpdateApps/types\";\nimport type {\n OpenAppDAError,\n OpenAppDARequiredInteraction,\n} from \"@api/device-action/os/OpenAppDeviceAction/types\";\n\nexport const openAppWithDependenciesDAStateStep = Object.freeze({\n GET_DEVICE_METADATA: \"os.openAppWithDependencies.steps.getDeviceMetadata\",\n INSTALL_OR_UPDATE_APPS:\n \"os.openAppWithDependencies.steps.installOrUpdateApps\",\n OPEN_APP: \"os.openAppWithDependencies.steps.openApp\",\n} as const);\n\nexport type OpenAppWithDependenciesDAStateStep =\n (typeof openAppWithDependenciesDAStateStep)[keyof typeof openAppWithDependenciesDAStateStep];\n\nexport type OpenAppWithDependenciesDAOutput = {\n deviceMetadata: GetDeviceMetadataDAOutput;\n installResult: InstallOrUpdateAppsDAOutput;\n};\n\nexport type OpenAppWithDependenciesDAInput = GetDeviceStatusDAInput & {\n readonly application: ApplicationDependency;\n readonly dependencies: ApplicationDependency[];\n readonly requireLatestFirmware?: boolean;\n readonly allowMissingApplication?: boolean;\n};\n\nexport type OpenAppWithDependenciesDAError =\n | InstallOrUpdateAppsDAError\n | OpenAppDAError\n | UnknownDAError\n | UnsupportedFirmwareDAError\n | CommandErrorResult[\"error\"];\n\nexport type OpenAppWithDependenciesDARequiredInteraction =\n | GetDeviceMetadataDARequiredInteraction\n | InstallOrUpdateAppsDARequiredInteraction\n | OpenAppDARequiredInteraction;\n\nexport type OpenAppWithDependenciesDAIntermediateValue = {\n requiredUserInteraction: OpenAppWithDependenciesDARequiredInteraction;\n installPlan: InstallPlan | null;\n deviceId?: Uint8Array;\n step: OpenAppWithDependenciesDAStateStep;\n};\n\nexport type OpenAppWithDependenciesDAState = DeviceActionState<\n OpenAppWithDependenciesDAOutput,\n OpenAppWithDependenciesDAError,\n OpenAppWithDependenciesDAIntermediateValue\n>;\n"],
|
|
4
|
+
"sourcesContent": ["import type { CommandErrorResult } from \"@api/command/model/CommandResult\";\nimport type { DeviceActionState } from \"@api/device-action/model/DeviceActionState\";\nimport type {\n UnknownDAError,\n UnsupportedFirmwareDAError,\n} from \"@api/device-action/os/Errors\";\nimport type {\n GetDeviceMetadataDAOutput,\n GetDeviceMetadataDARequiredInteraction,\n} from \"@api/device-action/os/GetDeviceMetadata/types\";\nimport type { GetDeviceStatusDAInput } from \"@api/device-action/os/GetDeviceStatus/types\";\nimport type {\n ApplicationDependency,\n InstallOrUpdateAppsDAError,\n InstallOrUpdateAppsDAOutput,\n InstallOrUpdateAppsDARequiredInteraction,\n InstallPlan,\n} from \"@api/device-action/os/InstallOrUpdateApps/types\";\nimport type {\n OpenAppDAError,\n OpenAppDARequiredInteraction,\n} from \"@api/device-action/os/OpenAppDeviceAction/types\";\n\nexport const openAppWithDependenciesDAStateStep = Object.freeze({\n GET_DEVICE_METADATA: \"os.openAppWithDependencies.steps.getDeviceMetadata\",\n INSTALL_OR_UPDATE_APPS:\n \"os.openAppWithDependencies.steps.installOrUpdateApps\",\n OPEN_APP: \"os.openAppWithDependencies.steps.openApp\",\n} as const);\n\nexport type OpenAppWithDependenciesDAStateStep =\n (typeof openAppWithDependenciesDAStateStep)[keyof typeof openAppWithDependenciesDAStateStep];\n\nexport type OpenAppWithDependenciesDAOutput = {\n deviceMetadata: GetDeviceMetadataDAOutput;\n installResult: InstallOrUpdateAppsDAOutput;\n};\n\nexport type OpenAppWithDependenciesDAInput = Omit<\n GetDeviceStatusDAInput,\n \"allowNonOnboardedDevice\"\n> & {\n readonly application: ApplicationDependency;\n readonly dependencies: ApplicationDependency[];\n readonly requireLatestFirmware?: boolean;\n readonly allowMissingApplication?: boolean;\n};\n\nexport type OpenAppWithDependenciesDAError =\n | InstallOrUpdateAppsDAError\n | OpenAppDAError\n | UnknownDAError\n | UnsupportedFirmwareDAError\n | CommandErrorResult[\"error\"];\n\nexport type OpenAppWithDependenciesDARequiredInteraction =\n | GetDeviceMetadataDARequiredInteraction\n | InstallOrUpdateAppsDARequiredInteraction\n | OpenAppDARequiredInteraction;\n\nexport type OpenAppWithDependenciesDAIntermediateValue = {\n requiredUserInteraction: OpenAppWithDependenciesDARequiredInteraction;\n installPlan: InstallPlan | null;\n deviceId?: Uint8Array;\n step: OpenAppWithDependenciesDAStateStep;\n};\n\nexport type OpenAppWithDependenciesDAState = DeviceActionState<\n OpenAppWithDependenciesDAOutput,\n OpenAppWithDependenciesDAError,\n OpenAppWithDependenciesDAIntermediateValue\n>;\n"],
|
|
5
5
|
"mappings": "AAuBO,MAAMA,EAAqC,OAAO,OAAO,CAC9D,oBAAqB,qDACrB,uBACE,uDACF,SAAU,0CACZ,CAAU",
|
|
6
6
|
"names": ["openAppWithDependenciesDAStateStep"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{isSuccessCommandResult as
|
|
1
|
+
import{isSuccessCommandResult as c}from"../../command/model/CommandResult";import{GetBackgroundImageSizeCommand as f}from"../../command/os/GetBackgroundImageSizeCommand";import{GetOsVersionCommand as F}from"../../command/os/GetOsVersionCommand";import{InvalidGetFirmwareMetadataResponseError as l}from"../../device-action/task/Errors";import{DmkResultFactory as m}from"../../model/DmkResult";class M{constructor(e){this.api=e}async run(){const e=await this.api.sendCommand(new F);if(!c(e))return m({error:e.error});const t={mcu:e.data.mcuSephVersion,bootloader:e.data.mcuBootloaderVersion,os:e.data.seVersion,metadata:e.data},i=this.api.getManagerApiService(),n=await i.getDeviceVersion(e.data).chain(u=>i.getFirmwareVersion(e.data,u).map(w=>({deviceVersion:u,currentFirmware:w})));if(n.isLeft())return m({error:new l});const{deviceVersion:a,currentFirmware:r}=n.unsafeCoerce(),o=await this.getAvailableUpdate(i,r,a,t),s={currentFirmware:r,availableUpdate:o};let d={};const p=await this.api.sendCommand(new f);return c(p)&&(d={size:p.data}),m({data:{deviceVersion:a,firmware:r,firmwareVersion:t,firmwareUpdateContext:s,customImage:d}})}async getAvailableUpdate(e,t,i,n){const a=await e.getLatestFirmwareVersion(t,i);if(a.isLeft())return;const r=a.unsafeCoerce();if(!r.isNothing())return this.getFirmwareUpdate(e,r.unsafeCoerce(),n)}async getFirmwareUpdate(e,t,i){const n=await e.getNextFirmwareVersion(t);if(n.isLeft())return;const a=await e.getMcuList();if(a.isLeft())return;const r=n.unsafeCoerce(),o=a.unsafeCoerce().find(s=>s.name===i.mcu);return{osuFirmware:t,finalFirmware:r,mcuUpdateRequired:o===void 0||!r.mcuVersions.includes(o.id)}}}export{M as GetFirmwareMetadataTask};
|
|
2
2
|
//# sourceMappingURL=GetFirmwareMetadataTask.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/device-action/task/GetFirmwareMetadataTask.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type CommandErrorResult,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { GetBackgroundImageSizeCommand } from \"@api/command/os/GetBackgroundImageSizeCommand\";\nimport { GetOsVersionCommand } from \"@api/command/os/GetOsVersionCommand\";\nimport type { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { InvalidGetFirmwareMetadataResponseError } from \"@api/device-action/task/Errors\";\nimport {\n type CustomImage,\n type FirmwareUpdate,\n type FirmwareUpdateContext,\n type FirmwareVersion,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DmkResult, DmkResultFactory } from \"@api/model/DmkResult\";\nimport { type DeviceVersion } from \"@internal/manager-api/model/Device\";\nimport {
|
|
5
|
-
"mappings": "AAAA,OAEE,0BAAAA,MACK,mCACP,OAAS,iCAAAC,MAAqC,gDAC9C,OAAS,uBAAAC,MAA2B,sCAEpC,OAAS,2CAAAC,MAA+C,iCAOxD,OAAyB,oBAAAC,MAAwB,
|
|
6
|
-
"names": ["isSuccessCommandResult", "GetBackgroundImageSizeCommand", "GetOsVersionCommand", "InvalidGetFirmwareMetadataResponseError", "DmkResultFactory", "GetFirmwareMetadataTask", "api", "osVersion", "firmwareVersion", "manager", "result", "deviceVersion", "currentFirmware", "availableUpdate", "
|
|
4
|
+
"sourcesContent": ["import {\n type CommandErrorResult,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { GetBackgroundImageSizeCommand } from \"@api/command/os/GetBackgroundImageSizeCommand\";\nimport { GetOsVersionCommand } from \"@api/command/os/GetOsVersionCommand\";\nimport type { InternalApi } from \"@api/device-action/DeviceAction\";\nimport { InvalidGetFirmwareMetadataResponseError } from \"@api/device-action/task/Errors\";\nimport {\n type CustomImage,\n type FirmwareUpdate,\n type FirmwareUpdateContext,\n type FirmwareVersion,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DmkResult, DmkResultFactory } from \"@api/model/DmkResult\";\nimport { type DeviceVersion } from \"@internal/manager-api/model/Device\";\nimport {\n type FinalFirmware,\n type OsuFirmware,\n} from \"@internal/manager-api/model/Firmware\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\n\nexport type GetFirmwareMetadataTaskResponse = {\n deviceVersion: DeviceVersion;\n firmware: FinalFirmware;\n firmwareVersion: FirmwareVersion;\n firmwareUpdateContext: FirmwareUpdateContext;\n customImage: CustomImage;\n};\n\nexport type GetFirmwareMetadataTaskError =\n | CommandErrorResult[\"error\"]\n | InvalidGetFirmwareMetadataResponseError;\n\nexport type GetFirmwareMetadataTaskResult = DmkResult<\n GetFirmwareMetadataTaskResponse,\n GetFirmwareMetadataTaskError\n>;\n\nexport class GetFirmwareMetadataTask {\n constructor(private readonly api: InternalApi) {}\n\n async run(): Promise<GetFirmwareMetadataTaskResult> {\n // Get installed firmware metadata\n const osVersion = await this.api.sendCommand(new GetOsVersionCommand());\n if (!isSuccessCommandResult(osVersion)) {\n return DmkResultFactory({\n error: osVersion.error,\n });\n }\n const firmwareVersion: FirmwareVersion = {\n mcu: osVersion.data.mcuSephVersion,\n bootloader: osVersion.data.mcuBootloaderVersion,\n os: osVersion.data.seVersion,\n metadata: osVersion.data,\n };\n\n // Fetch current firmware metadata from app store\n const manager = this.api.getManagerApiService();\n const result = await manager\n .getDeviceVersion(osVersion.data)\n .chain((deviceVersion) =>\n manager\n .getFirmwareVersion(osVersion.data, deviceVersion)\n .map((currentFirmware) => ({ deviceVersion, currentFirmware })),\n );\n if (result.isLeft()) {\n return DmkResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n });\n }\n const { deviceVersion, currentFirmware } = result.unsafeCoerce();\n\n const availableUpdate = await this.getAvailableUpdate(\n manager,\n currentFirmware,\n deviceVersion,\n firmwareVersion,\n );\n\n const firmwareUpdateContext = {\n currentFirmware,\n availableUpdate,\n };\n\n // Get custom image metadata\n let customImage: CustomImage = {};\n const imageSize = await this.api.sendCommand(\n new GetBackgroundImageSizeCommand(),\n );\n if (isSuccessCommandResult(imageSize)) {\n customImage = { size: imageSize.data };\n }\n\n // Return firmware metadata\n return DmkResultFactory({\n data: {\n deviceVersion,\n firmware: currentFirmware,\n firmwareVersion,\n firmwareUpdateContext,\n customImage,\n },\n });\n }\n\n private async getAvailableUpdate(\n manager: ManagerApiService,\n currentFirmware: FinalFirmware,\n deviceVersion: DeviceVersion,\n firmwareVersion: FirmwareVersion,\n ): Promise<FirmwareUpdate | undefined> {\n // Fetch latest firmware available, if any\n const maybeOsuFirmwareResult = await manager.getLatestFirmwareVersion(\n currentFirmware,\n deviceVersion,\n );\n if (maybeOsuFirmwareResult.isLeft()) {\n return undefined;\n }\n\n const maybeOsuFirmware = maybeOsuFirmwareResult.unsafeCoerce();\n if (maybeOsuFirmware.isNothing()) {\n return undefined;\n }\n\n return this.getFirmwareUpdate(\n manager,\n maybeOsuFirmware.unsafeCoerce(),\n firmwareVersion,\n );\n }\n\n private async getFirmwareUpdate(\n manager: ManagerApiService,\n osuFirmware: OsuFirmware,\n firmwareVersion: FirmwareVersion,\n ): Promise<FirmwareUpdate | undefined> {\n const finalFirmwareResult =\n await manager.getNextFirmwareVersion(osuFirmware);\n if (finalFirmwareResult.isLeft()) {\n return undefined;\n }\n\n const mcusResult = await manager.getMcuList();\n if (mcusResult.isLeft()) {\n return undefined;\n }\n\n const finalFirmware = finalFirmwareResult.unsafeCoerce();\n const mcu = mcusResult\n .unsafeCoerce()\n .find((candidate) => candidate.name === firmwareVersion.mcu);\n\n return {\n osuFirmware,\n finalFirmware,\n mcuUpdateRequired:\n mcu === undefined || !finalFirmware.mcuVersions.includes(mcu.id),\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,0BAAAA,MACK,mCACP,OAAS,iCAAAC,MAAqC,gDAC9C,OAAS,uBAAAC,MAA2B,sCAEpC,OAAS,2CAAAC,MAA+C,iCAOxD,OAAyB,oBAAAC,MAAwB,uBAyB1C,MAAMC,CAAwB,CACnC,YAA6BC,EAAkB,CAAlB,SAAAA,CAAmB,CAEhD,MAAM,KAA8C,CAElD,MAAMC,EAAY,MAAM,KAAK,IAAI,YAAY,IAAIL,CAAqB,EACtE,GAAI,CAACF,EAAuBO,CAAS,EACnC,OAAOH,EAAiB,CACtB,MAAOG,EAAU,KACnB,CAAC,EAEH,MAAMC,EAAmC,CACvC,IAAKD,EAAU,KAAK,eACpB,WAAYA,EAAU,KAAK,qBAC3B,GAAIA,EAAU,KAAK,UACnB,SAAUA,EAAU,IACtB,EAGME,EAAU,KAAK,IAAI,qBAAqB,EACxCC,EAAS,MAAMD,EAClB,iBAAiBF,EAAU,IAAI,EAC/B,MAAOI,GACNF,EACG,mBAAmBF,EAAU,KAAMI,CAAa,EAChD,IAAKC,IAAqB,CAAE,cAAAD,EAAe,gBAAAC,CAAgB,EAAE,CAClE,EACF,GAAIF,EAAO,OAAO,EAChB,OAAON,EAAiB,CACtB,MAAO,IAAID,CACb,CAAC,EAEH,KAAM,CAAE,cAAAQ,EAAe,gBAAAC,CAAgB,EAAIF,EAAO,aAAa,EAEzDG,EAAkB,MAAM,KAAK,mBACjCJ,EACAG,EACAD,EACAH,CACF,EAEMM,EAAwB,CAC5B,gBAAAF,EACA,gBAAAC,CACF,EAGA,IAAIE,EAA2B,CAAC,EAChC,MAAMC,EAAY,MAAM,KAAK,IAAI,YAC/B,IAAIf,CACN,EACA,OAAID,EAAuBgB,CAAS,IAClCD,EAAc,CAAE,KAAMC,EAAU,IAAK,GAIhCZ,EAAiB,CACtB,KAAM,CACJ,cAAAO,EACA,SAAUC,EACV,gBAAAJ,EACA,sBAAAM,EACA,YAAAC,CACF,CACF,CAAC,CACH,CAEA,MAAc,mBACZN,EACAG,EACAD,EACAH,EACqC,CAErC,MAAMS,EAAyB,MAAMR,EAAQ,yBAC3CG,EACAD,CACF,EACA,GAAIM,EAAuB,OAAO,EAChC,OAGF,MAAMC,EAAmBD,EAAuB,aAAa,EAC7D,GAAI,CAAAC,EAAiB,UAAU,EAI/B,OAAO,KAAK,kBACVT,EACAS,EAAiB,aAAa,EAC9BV,CACF,CACF,CAEA,MAAc,kBACZC,EACAU,EACAX,EACqC,CACrC,MAAMY,EACJ,MAAMX,EAAQ,uBAAuBU,CAAW,EAClD,GAAIC,EAAoB,OAAO,EAC7B,OAGF,MAAMC,EAAa,MAAMZ,EAAQ,WAAW,EAC5C,GAAIY,EAAW,OAAO,EACpB,OAGF,MAAMC,EAAgBF,EAAoB,aAAa,EACjDG,EAAMF,EACT,aAAa,EACb,KAAMG,GAAcA,EAAU,OAAShB,EAAgB,GAAG,EAE7D,MAAO,CACL,YAAAW,EACA,cAAAG,EACA,kBACEC,IAAQ,QAAa,CAACD,EAAc,YAAY,SAASC,EAAI,EAAE,CACnE,CACF,CACF",
|
|
6
|
+
"names": ["isSuccessCommandResult", "GetBackgroundImageSizeCommand", "GetOsVersionCommand", "InvalidGetFirmwareMetadataResponseError", "DmkResultFactory", "GetFirmwareMetadataTask", "api", "osVersion", "firmwareVersion", "manager", "result", "deviceVersion", "currentFirmware", "availableUpdate", "firmwareUpdateContext", "customImage", "imageSize", "maybeOsuFirmwareResult", "maybeOsuFirmware", "osuFirmware", "finalFirmwareResult", "mcusResult", "finalFirmware", "mcu", "candidate"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{EitherAsync as
|
|
1
|
+
import{EitherAsync as i,Just as f,Nothing as R}from"purify-ts";import{InvalidStatusWordError as d}from"../../command/Errors";import{CommandResultFactory as o}from"../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as F}from"../../device-action/__test-utils__/makeInternalApi";import{InvalidGetFirmwareMetadataResponseError as V}from"../../device-action/task/Errors";import{DmkResultFactory as m}from"../../model/DmkResult";import{GetFirmwareMetadataTask as u}from"./GetFirmwareMetadataTask";describe("GetFirmwareMetadataTask",()=>{const e=F(),a={mcuSephVersion:"mcu_version",mcuBootloaderVersion:"bl_version",seVersion:"se_version"},w=97,c={id:7},n={id:361,version:"1.6.0",perso:"perso_11"},l={id:362,perso:"perso_11",notes:"notes"},v={id:363,version:"1.7.0",perso:"perso_11",mcuVersions:[1]},p=[{id:3,name:"other_version",fromBootloaderVersion:"1.0"},{id:1,name:"mcu_version",fromBootloaderVersion:"1.0"}],t={getDeviceVersion:vi.fn(),getFirmwareVersion:vi.fn(),getLatestFirmwareVersion:vi.fn(),getNextFirmwareVersion:vi.fn(),getMcuList:vi.fn()};beforeEach(()=>{vi.resetAllMocks(),e.getManagerApiService.mockReturnValue(t),t.getDeviceVersion.mockReturnValue(i(async()=>c)),t.getFirmwareVersion.mockReturnValue(i(async()=>n)),t.getLatestFirmwareVersion.mockReturnValue(i(async()=>f(l))),t.getNextFirmwareVersion.mockReturnValue(i(async()=>v)),t.getMcuList.mockReturnValue(i(async()=>p))}),it("success with no firmware update available",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})).mockResolvedValueOnce(o({data:w})),t.getLatestFirmwareVersion.mockReturnValueOnce(i(async()=>R));const r=await new u(e).run();expect(r).toStrictEqual(m({data:{deviceVersion:c,firmware:n,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:a},firmwareUpdateContext:{currentFirmware:n,availableUpdate:void 0},customImage:{size:w}}}))}),it("success with no firmware update when latest firmware cannot be fetched",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})).mockResolvedValueOnce(o({data:w})),t.getLatestFirmwareVersion.mockReturnValueOnce(i(async({throwE:s})=>{s(new Error("error"))}));const r=await new u(e).run();expect(r).toStrictEqual(m({data:{deviceVersion:c,firmware:n,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:a},firmwareUpdateContext:{currentFirmware:n,availableUpdate:void 0},customImage:{size:w}}}))}),it("success with a firmware update available",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})).mockResolvedValueOnce(o({error:new d("error")}));const r=await new u(e).run();expect(r).toStrictEqual(m({data:{deviceVersion:c,firmware:n,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:a},firmwareUpdateContext:{currentFirmware:n,availableUpdate:{osuFirmware:l,finalFirmware:v,mcuUpdateRequired:!1}},customImage:{}}})),expect(t.getDeviceVersion).toHaveBeenCalledWith(a),expect(t.getFirmwareVersion).toHaveBeenCalledWith(a,c),expect(t.getLatestFirmwareVersion).toHaveBeenCalledWith(n,c),expect(t.getNextFirmwareVersion).toHaveBeenCalledWith(l)}),it("success with a firmware update available and MCU update",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})).mockResolvedValueOnce(o({error:new d("error")}));const r={...v,mcuVersions:[3]};t.getNextFirmwareVersion.mockReturnValue(i(async()=>r));const s=await new u(e).run();expect(s).toStrictEqual(m({data:{deviceVersion:c,firmware:n,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:a},firmwareUpdateContext:{currentFirmware:n,availableUpdate:{osuFirmware:l,finalFirmware:r,mcuUpdateRequired:!0}},customImage:{}}}))}),it("success with a firmware update available when current MCU is unknown",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})).mockResolvedValueOnce(o({error:new d("error")})),t.getMcuList.mockReturnValueOnce(i(async()=>[{id:3,name:"other_version",fromBootloaderVersion:"1.0"}]));const r=await new u(e).run();expect(r).toStrictEqual(m({data:{deviceVersion:c,firmware:n,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:a},firmwareUpdateContext:{currentFirmware:n,availableUpdate:{osuFirmware:l,finalFirmware:v,mcuUpdateRequired:!0}},customImage:{}}}))}),it("success with no firmware update when next firmware cannot be fetched",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})).mockResolvedValueOnce(o({error:new d("error")})),t.getNextFirmwareVersion.mockReturnValueOnce(i(async({throwE:s})=>{s(new Error("error"))}));const r=await new u(e).run();expect(r).toStrictEqual(m({data:{deviceVersion:c,firmware:n,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:a},firmwareUpdateContext:{currentFirmware:n,availableUpdate:void 0},customImage:{}}}))}),it("success with no firmware update when MCU list cannot be fetched",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})).mockResolvedValueOnce(o({error:new d("error")})),t.getMcuList.mockReturnValueOnce(i(async({throwE:s})=>{s(new Error("error"))}));const r=await new u(e).run();expect(r).toStrictEqual(m({data:{deviceVersion:c,firmware:n,firmwareVersion:{mcu:"mcu_version",bootloader:"bl_version",os:"se_version",metadata:a},firmwareUpdateContext:{currentFirmware:n,availableUpdate:void 0},customImage:{}}}))}),it("should fail when OS version cannot be retrieved",async()=>{e.sendCommand.mockResolvedValueOnce(o({error:new d("error")}));const r=await new u(e).run();expect(r).toStrictEqual(m({error:new d("error")}))}),it("should fail if device version cannot be fetched with InvalidGetFirmwareMetadataResponseError",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})),t.getDeviceVersion.mockReturnValueOnce(i(async({throwE:s})=>{s(new Error("error"))}));const r=await new u(e).run();expect(r).toStrictEqual(m({error:new V}))}),it("should fail if firmware version cannot be fetched with InvalidGetFirmwareMetadataResponseError",async()=>{e.sendCommand.mockResolvedValueOnce(o({data:a})),t.getFirmwareVersion.mockReturnValueOnce(i(async({throwE:s})=>{s(new Error("error"))}));const r=await new u(e).run();expect(r).toStrictEqual(m({error:new V}))})});
|
|
2
2
|
//# sourceMappingURL=GetFirmwareMetadataTask.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/device-action/task/GetFirmwareMetadataTask.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { EitherAsync } from \"purify-ts\";\n\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { type GetOsVersionResponse } from \"@api/command/os/GetOsVersionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { InvalidGetFirmwareMetadataResponseError } from \"@api/device-action/task/Errors\";\nimport { DmkResultFactory } from \"@api/model/DmkResult\";\nimport {\n type FinalFirmware,\n type McuFirmware,\n type OsuFirmware,\n} from \"@internal/manager-api/model/Firmware\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\n\nimport { GetFirmwareMetadataTask } from \"./GetFirmwareMetadataTask\";\n\ndescribe(\"GetFirmwareMetadataTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const OS_VERSION = {\n mcuSephVersion: \"mcu_version\",\n mcuBootloaderVersion: \"bl_version\",\n seVersion: \"se_version\",\n } as GetOsVersionResponse;\n\n const CUSTOM_IMAGE_SIZE = 97;\n\n const DEVICE_VERSION = {\n id: 7,\n };\n\n const FIRMWARE_VERSION = {\n id: 361,\n version: \"1.6.0\",\n perso: \"perso_11\",\n } as FinalFirmware;\n\n const OSU_VERSION = {\n id: 362,\n perso: \"perso_11\",\n } as OsuFirmware;\n\n const NEXT_FIRMWARE_VERSION = {\n id: 363,\n version: \"1.7.0\",\n perso: \"perso_11\",\n mcuVersions: [1],\n } as FinalFirmware;\n\n const MCUS = [\n {\n id: 3,\n name: \"other_version\",\n },\n {\n id: 1,\n name: \"mcu_version\",\n },\n ] as McuFirmware[];\n\n const MANAGER_MOCK = {\n getDeviceVersion: vi.fn(),\n getFirmwareVersion: vi.fn(),\n getLatestFirmwareVersion: vi.fn(),\n getNextFirmwareVersion: vi.fn(),\n getMcuList: vi.fn(),\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n\n apiMock.getManagerApiService.mockReturnValue(\n MANAGER_MOCK as unknown as ManagerApiService,\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValue(\n EitherAsync(async () => DEVICE_VERSION),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValue(\n EitherAsync(async () => FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValue(\n EitherAsync(async () => OSU_VERSION),\n );\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => NEXT_FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getMcuList.mockReturnValue(EitherAsync(async () => MCUS));\n });\n\n it(\"success with no firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(CommandResultFactory({ data: CUSTOM_IMAGE_SIZE }));\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: undefined,\n },\n customImage: { size: CUSTOM_IMAGE_SIZE },\n },\n }),\n );\n });\n\n it(\"success with a firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: NEXT_FIRMWARE_VERSION,\n mcuUpdateRequired: false,\n },\n },\n customImage: {},\n },\n }),\n );\n expect(MANAGER_MOCK.getDeviceVersion).toHaveBeenCalledWith(OS_VERSION);\n expect(MANAGER_MOCK.getFirmwareVersion).toHaveBeenCalledWith(\n OS_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getLatestFirmwareVersion).toHaveBeenCalledWith(\n FIRMWARE_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getNextFirmwareVersion).toHaveBeenCalledWith(\n OSU_VERSION,\n );\n });\n\n it(\"success with a firmware update available and MCU update\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n const nextFirmware = {\n ...NEXT_FIRMWARE_VERSION,\n mcuVersions: [3],\n };\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => nextFirmware),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: nextFirmware,\n mcuUpdateRequired: true,\n },\n },\n customImage: {},\n },\n }),\n );\n });\n\n it(\"should fail when OS version cannot be retrieved\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n });\n\n it(\"should fail if device version cannot be fetched with InvalidGetFirmwareMetadataResponseError\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n }),\n );\n });\n\n it(\"should fail if firmware version cannot be fetched with InvalidGetFirmwareMetadataResponseError\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n }),\n );\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,eAAAA,
|
|
6
|
-
"names": ["EitherAsync", "InvalidStatusWordError", "CommandResultFactory", "makeDeviceActionInternalApiMock", "InvalidGetFirmwareMetadataResponseError", "DmkResultFactory", "GetFirmwareMetadataTask", "apiMock", "OS_VERSION", "CUSTOM_IMAGE_SIZE", "DEVICE_VERSION", "FIRMWARE_VERSION", "OSU_VERSION", "NEXT_FIRMWARE_VERSION", "MCUS", "MANAGER_MOCK", "
|
|
4
|
+
"sourcesContent": ["import { EitherAsync, Just, Nothing } from \"purify-ts\";\n\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { CommandResultFactory } from \"@api/command/model/CommandResult\";\nimport { type GetOsVersionResponse } from \"@api/command/os/GetOsVersionCommand\";\nimport { makeDeviceActionInternalApiMock } from \"@api/device-action/__test-utils__/makeInternalApi\";\nimport { InvalidGetFirmwareMetadataResponseError } from \"@api/device-action/task/Errors\";\nimport { DmkResultFactory } from \"@api/model/DmkResult\";\nimport {\n type FinalFirmware,\n type McuFirmware,\n type OsuFirmware,\n} from \"@internal/manager-api/model/Firmware\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\n\nimport { GetFirmwareMetadataTask } from \"./GetFirmwareMetadataTask\";\n\ndescribe(\"GetFirmwareMetadataTask\", () => {\n const apiMock = makeDeviceActionInternalApiMock();\n const OS_VERSION = {\n mcuSephVersion: \"mcu_version\",\n mcuBootloaderVersion: \"bl_version\",\n seVersion: \"se_version\",\n } as GetOsVersionResponse;\n\n const CUSTOM_IMAGE_SIZE = 97;\n\n const DEVICE_VERSION = {\n id: 7,\n };\n\n const FIRMWARE_VERSION = {\n id: 361,\n version: \"1.6.0\",\n perso: \"perso_11\",\n } as FinalFirmware;\n\n const OSU_VERSION = {\n id: 362,\n perso: \"perso_11\",\n notes: \"notes\",\n } as OsuFirmware;\n\n const NEXT_FIRMWARE_VERSION = {\n id: 363,\n version: \"1.7.0\",\n perso: \"perso_11\",\n mcuVersions: [1],\n } as FinalFirmware;\n\n const MCUS = [\n {\n id: 3,\n name: \"other_version\",\n fromBootloaderVersion: \"1.0\",\n },\n {\n id: 1,\n name: \"mcu_version\",\n fromBootloaderVersion: \"1.0\",\n },\n ] as McuFirmware[];\n\n const MANAGER_MOCK = {\n getDeviceVersion: vi.fn(),\n getFirmwareVersion: vi.fn(),\n getLatestFirmwareVersion: vi.fn(),\n getNextFirmwareVersion: vi.fn(),\n getMcuList: vi.fn(),\n };\n\n beforeEach(() => {\n vi.resetAllMocks();\n\n apiMock.getManagerApiService.mockReturnValue(\n MANAGER_MOCK as unknown as ManagerApiService,\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValue(\n EitherAsync(async () => DEVICE_VERSION),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValue(\n EitherAsync(async () => FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValue(\n EitherAsync(async () => Just(OSU_VERSION)),\n );\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => NEXT_FIRMWARE_VERSION),\n );\n MANAGER_MOCK.getMcuList.mockReturnValue(EitherAsync(async () => MCUS));\n });\n\n it(\"success with no firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(CommandResultFactory({ data: CUSTOM_IMAGE_SIZE }));\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async () => Nothing),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: undefined,\n },\n customImage: { size: CUSTOM_IMAGE_SIZE },\n },\n }),\n );\n });\n\n it(\"success with no firmware update when latest firmware cannot be fetched\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(CommandResultFactory({ data: CUSTOM_IMAGE_SIZE }));\n MANAGER_MOCK.getLatestFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: undefined,\n },\n customImage: { size: CUSTOM_IMAGE_SIZE },\n },\n }),\n );\n });\n\n it(\"success with a firmware update available\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: NEXT_FIRMWARE_VERSION,\n mcuUpdateRequired: false,\n },\n },\n customImage: {},\n },\n }),\n );\n expect(MANAGER_MOCK.getDeviceVersion).toHaveBeenCalledWith(OS_VERSION);\n expect(MANAGER_MOCK.getFirmwareVersion).toHaveBeenCalledWith(\n OS_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getLatestFirmwareVersion).toHaveBeenCalledWith(\n FIRMWARE_VERSION,\n DEVICE_VERSION,\n );\n expect(MANAGER_MOCK.getNextFirmwareVersion).toHaveBeenCalledWith(\n OSU_VERSION,\n );\n });\n\n it(\"success with a firmware update available and MCU update\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n const nextFirmware = {\n ...NEXT_FIRMWARE_VERSION,\n mcuVersions: [3],\n };\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValue(\n EitherAsync(async () => nextFirmware),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: nextFirmware,\n mcuUpdateRequired: true,\n },\n },\n customImage: {},\n },\n }),\n );\n });\n\n it(\"success with a firmware update available when current MCU is unknown\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n MANAGER_MOCK.getMcuList.mockReturnValueOnce(\n EitherAsync(async () => [\n {\n id: 3,\n name: \"other_version\",\n fromBootloaderVersion: \"1.0\",\n },\n ]),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: {\n osuFirmware: OSU_VERSION,\n finalFirmware: NEXT_FIRMWARE_VERSION,\n mcuUpdateRequired: true,\n },\n },\n customImage: {},\n },\n }),\n );\n });\n\n it(\"success with no firmware update when next firmware cannot be fetched\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n MANAGER_MOCK.getNextFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: undefined,\n },\n customImage: {},\n },\n }),\n );\n });\n\n it(\"success with no firmware update when MCU list cannot be fetched\", async () => {\n // GIVEN\n apiMock.sendCommand\n .mockResolvedValueOnce(CommandResultFactory({ data: OS_VERSION }))\n .mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n MANAGER_MOCK.getMcuList.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n data: {\n deviceVersion: DEVICE_VERSION,\n firmware: FIRMWARE_VERSION,\n firmwareVersion: {\n mcu: \"mcu_version\",\n bootloader: \"bl_version\",\n os: \"se_version\",\n metadata: OS_VERSION,\n },\n firmwareUpdateContext: {\n currentFirmware: FIRMWARE_VERSION,\n availableUpdate: undefined,\n },\n customImage: {},\n },\n }),\n );\n });\n\n it(\"should fail when OS version cannot be retrieved\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({ error: new InvalidStatusWordError(\"error\") }),\n );\n });\n\n it(\"should fail if device version cannot be fetched with InvalidGetFirmwareMetadataResponseError\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getDeviceVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n }),\n );\n });\n\n it(\"should fail if firmware version cannot be fetched with InvalidGetFirmwareMetadataResponseError\", async () => {\n // GIVEN\n apiMock.sendCommand.mockResolvedValueOnce(\n CommandResultFactory({ data: OS_VERSION }),\n );\n MANAGER_MOCK.getFirmwareVersion.mockReturnValueOnce(\n EitherAsync(async ({ throwE }) => {\n throwE(new Error(\"error\"));\n }),\n );\n\n // WHEN\n const result = await new GetFirmwareMetadataTask(apiMock).run();\n\n // THEN\n expect(result).toStrictEqual(\n DmkResultFactory({\n error: new InvalidGetFirmwareMetadataResponseError(),\n }),\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["EitherAsync", "Just", "Nothing", "InvalidStatusWordError", "CommandResultFactory", "makeDeviceActionInternalApiMock", "InvalidGetFirmwareMetadataResponseError", "DmkResultFactory", "GetFirmwareMetadataTask", "apiMock", "OS_VERSION", "CUSTOM_IMAGE_SIZE", "DEVICE_VERSION", "FIRMWARE_VERSION", "OSU_VERSION", "NEXT_FIRMWARE_VERSION", "MCUS", "MANAGER_MOCK", "result", "throwE", "nextFirmware"]
|
|
7
7
|
}
|
package/lib/esm/src/api/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Apdu as r}from"./apdu/model/Apdu";import{APDU_MAX_PAYLOAD as p,ApduBuilder as a}from"./apdu/utils/ApduBuilder";import{ApduParser as
|
|
1
|
+
import{Apdu as r}from"./apdu/model/Apdu";import{APDU_MAX_PAYLOAD as p,ApduBuilder as a}from"./apdu/utils/ApduBuilder";import{ApduParser as i}from"./apdu/utils/ApduParser";export*from"./apdu/utils/AppBuilderError";import{ByteArrayBuilder as c}from"./apdu/utils/ByteArrayBuilder";import{ByteArrayParser as f}from"./apdu/utils/ByteArrayParser";import{InvalidResponseFormatError as D,InvalidStatusWordError as x}from"./command/Errors";import{CommandResultFactory as l,CommandResultStatus as g,isSuccessCommandResult as y}from"./command/model/CommandResult";import{CloseAppCommand as v}from"./command/os/CloseAppCommand";import{DeleteLanguagePackCommand as L,DeleteLanguagePackCommandError as k}from"./command/os/DeleteLanguagePackCommand";import{GetAppAndVersionCommand as R}from"./command/os/GetAppAndVersionCommand";import{GetBackgroundImageSizeCommand as I,GetBackgroundImageSizeCommandError as T}from"./command/os/GetBackgroundImageSizeCommand";import{BatteryStatusType as h,GetBatteryStatusCommand as P}from"./command/os/GetBatteryStatusCommand";import{GetOsVersionCommand as O}from"./command/os/GetOsVersionCommand";import{ListAppsCommand as M}from"./command/os/ListAppsCommand";import{ListLanguagePackCommand as U,ListLanguagePackCommandError as W}from"./command/os/ListLanguagePackCommand";import{LoadCertificateCommand as _}from"./command/os/LoadCertificateCommand";import{OpenAppCommand as z}from"./command/os/OpenAppCommand";import{isCommandErrorCode as H}from"./command/utils/CommandErrors";import{CommandUtils as Q}from"./command/utils/CommandUtils";import{GLOBAL_ERRORS as Y,GlobalCommandError as j,GlobalCommandErrorHandler as J}from"./command/utils/GlobalCommandError";import{DeviceModel as $,DeviceModelId as ee,LEDGER_VENDOR_ID as oe}from"./device/DeviceModel";import{DeviceStatus as te}from"./device/DeviceStatus";import{DeviceActionStatus as ae}from"./device-action/model/DeviceActionState";import{UserInteractionRequired as ie}from"./device-action/model/UserInteractionRequired";import{CallTaskInAppDeviceAction as se}from"./device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction";import{DEFAULT_UNLOCK_TIMEOUT_MS as de}from"./device-action/os/Const";import{AppAlreadyInstalledDAError as Ae,DeleteLanguagePackDAError as De,DeviceLockedError as xe,DeviceNotOnboardedError as ue,OutOfMemoryDAError as le,RefusedByUserDAError as ge,UnknownDAError as ye,UnsupportedFirmwareDAError as Ce}from"./device-action/os/Errors";import{GetDeviceMetadataDeviceAction as Se}from"./device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction";import{GetDeviceStatusDeviceAction as ke}from"./device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction";import{GoToDashboardDeviceAction as Re}from"./device-action/os/GoToDashboard/GoToDashboardDeviceAction";import{InstallLanguagePackageDeviceAction as Ie}from"./device-action/os/InstallLanguagePackage/InstallLanguagePackageDeviceAction";import{InstallOrUpdateAppsDeviceAction as Be}from"./device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction";import{ListAppsDeviceAction as Pe}from"./device-action/os/ListApps/ListAppsDeviceAction";import{ListAppsWithMetadataDeviceAction as Oe}from"./device-action/os/ListAppsWithMetadata/ListAppsWithMetadataDeviceAction";import{OpenAppDeviceAction as Me}from"./device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{OpenAppWithDependenciesDeviceAction as Ue}from"./device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction";import{SendCommandInAppDeviceAction as Ne}from"./device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction";import{WaitForAppAndVersionDeviceAction as we}from"./device-action/os/WaitForAppAndVersion/WaitForAppAndVersionDeviceAction";import{GetApplicationsMetadataTaskError as qe,InvalidGetFirmwareMetadataResponseError as He}from"./device-action/task/Errors";import{XStateDeviceAction as Qe}from"./device-action/xstate-utils/XStateDeviceAction";import{StaticDeviceModelDataSource as Ye}from"./device-model/data/StaticDeviceModelDataSource";import{BleDeviceInfos as Je}from"./device-model/model/BleDeviceInfos";import{TransportDeviceModel as $e}from"./device-model/model/DeviceModel";import{ApduResponse as oo}from"./device-session/ApduResponse";export*from"./device-session/data/FramerConst";import{DeviceSessionStateType as po}from"./device-session/DeviceSessionState";import{DmkResultFactory as no,DmkResultStatus as io,isSuccessDmkResult as mo}from"./model/DmkResult";import{GenuineCheckDeviceAction as co}from"./secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction";import{InstallAppDeviceAction as Ao}from"./secure-channel/device-action/InstallApp/InstallAppDeviceAction";import{ListInstalledAppsDeviceAction as xo}from"./secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction";import{UninstallAppDeviceAction as lo}from"./secure-channel/device-action/UninstallApp/UninstallAppDeviceAction";import{ConnectToSecureChannelTask as yo}from"./secure-channel/task/ConnectToSecureChannelTask";import{SecureChannelEventType as vo}from"./secure-channel/task/types";import{SecureChannelError as Lo}from"../internal/secure-channel/model/Errors";import{defaultApduReceiverServiceStubBuilder as Eo}from"./device-session/service/DefaultApduReceiverService.stub";import{defaultApduSenderServiceStubBuilder as Go}from"./device-session/service/DefaultApduSenderService.stub";import{FramerUtils as To}from"./device-session/utils/FramerUtils";import{DeviceManagementKit as ho}from"./DeviceManagementKit";import{DeviceManagementKitBuilder as bo}from"./DeviceManagementKitBuilder";export*from"./Error";import{noopLogger as Mo,noopLoggerFactory as Vo}from"./logger-publisher/utils/noopLoggerFactory";import{LogLevel as Wo}from"./logger-subscriber/model/LogLevel";import{ConsoleLogger as _o}from"./logger-subscriber/service/ConsoleLogger";import{DefaultLogTagFormatter as zo}from"./logger-subscriber/service/DefaultLogTagFormatter";import{WebLogsExporterLogger as Ho}from"./logger-subscriber/service/WebLogsExporterLogger";import{DmkNetworkClient as Qo}from"./network/DmkNetworkClient";import{DmkNetworkClientError as Yo}from"./network/DmkNetworkClientError";import{ConnectedDevice as Jo}from"./transport/model/ConnectedDevice";import{DeviceConnectionStateMachine as $o}from"./transport/model/DeviceConnectionStateMachine";export*from"./transport/model/Errors";import{TransportConnectedDevice as rr}from"./transport/model/TransportConnectedDevice";import{connectedDeviceStubBuilder as pr}from"./transport/model/TransportConnectedDevice.stub";export*from"./types";import{formatApduReceivedLog as ir,formatApduSentLog as mr}from"./utils/apduLogs";import{ApplicationChecker as cr}from"./utils/ApplicationChecker";import{isDashboardName as fr}from"./utils/AppName";import{base64StringToBuffer as Dr,bufferToBase64String as xr,isBase64String as ur}from"./utils/Base64String";import{bufferToHexaString as gr,hexaStringToBuffer as yr,isHexaString as Cr}from"./utils/HexaString";export{p as APDU_MAX_PAYLOAD,r as Apdu,a as ApduBuilder,i as ApduParser,oo as ApduResponse,Ae as AppAlreadyInstalledDAError,cr as ApplicationChecker,h as BatteryStatusType,Je as BleDeviceInfos,c as ByteArrayBuilder,f as ByteArrayParser,se as CallTaskInAppDeviceAction,v as CloseAppCommand,l as CommandResultFactory,g as CommandResultStatus,Q as CommandUtils,yo as ConnectToSecureChannelTask,Jo as ConnectedDevice,_o as ConsoleLogger,de as DEFAULT_UNLOCK_TIMEOUT_MS,zo as DefaultLogTagFormatter,L as DeleteLanguagePackCommand,k as DeleteLanguagePackCommandError,De as DeleteLanguagePackDAError,ae as DeviceActionStatus,$o as DeviceConnectionStateMachine,xe as DeviceLockedError,ho as DeviceManagementKit,bo as DeviceManagementKitBuilder,$ as DeviceModel,ee as DeviceModelId,ue as DeviceNotOnboardedError,po as DeviceSessionStateType,te as DeviceStatus,Qo as DmkNetworkClient,Yo as DmkNetworkClientError,no as DmkResultFactory,io as DmkResultStatus,To as FramerUtils,Y as GLOBAL_ERRORS,co as GenuineCheckDeviceAction,R as GetAppAndVersionCommand,qe as GetApplicationsMetadataTaskError,I as GetBackgroundImageSizeCommand,T as GetBackgroundImageSizeCommandError,P as GetBatteryStatusCommand,Se as GetDeviceMetadataDeviceAction,ke as GetDeviceStatusDeviceAction,O as GetOsVersionCommand,j as GlobalCommandError,J as GlobalCommandErrorHandler,Re as GoToDashboardDeviceAction,Ao as InstallAppDeviceAction,Ie as InstallLanguagePackageDeviceAction,Be as InstallOrUpdateAppsDeviceAction,He as InvalidGetFirmwareMetadataResponseError,D as InvalidResponseFormatError,x as InvalidStatusWordError,oe as LEDGER_VENDOR_ID,M as ListAppsCommand,Pe as ListAppsDeviceAction,Oe as ListAppsWithMetadataDeviceAction,xo as ListInstalledAppsDeviceAction,U as ListLanguagePackCommand,W as ListLanguagePackCommandError,_ as LoadCertificateCommand,Wo as LogLevel,z as OpenAppCommand,Me as OpenAppDeviceAction,Ue as OpenAppWithDependenciesDeviceAction,le as OutOfMemoryDAError,ge as RefusedByUserDAError,Lo as SecureChannelError,vo as SecureChannelEventType,Ne as SendCommandInAppDeviceAction,Ye as StaticDeviceModelDataSource,rr as TransportConnectedDevice,$e as TransportDeviceModel,lo as UninstallAppDeviceAction,ye as UnknownDAError,Ce as UnsupportedFirmwareDAError,ie as UserInteractionRequired,we as WaitForAppAndVersionDeviceAction,Ho as WebLogsExporterLogger,Qe as XStateDeviceAction,Dr as base64StringToBuffer,xr as bufferToBase64String,gr as bufferToHexaString,pr as connectedDeviceStubBuilder,Eo as defaultApduReceiverServiceStubBuilder,Go as defaultApduSenderServiceStubBuilder,ir as formatApduReceivedLog,mr as formatApduSentLog,yr as hexaStringToBuffer,ur as isBase64String,H as isCommandErrorCode,fr as isDashboardName,Cr as isHexaString,y as isSuccessCommandResult,mo as isSuccessDmkResult,Mo as noopLogger,Vo as noopLoggerFactory};
|
|
2
2
|
//# sourceMappingURL=index.js.map
|