@ledgerhq/device-management-kit 0.0.0-develop-20260527003225 → 0.0.0-develop-20260529003437

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/lib/cjs/package.json +1 -1
  2. package/lib/cjs/src/api/command/os/__mocks__/GetOsVersionCommand.js +1 -1
  3. package/lib/cjs/src/api/command/os/__mocks__/GetOsVersionCommand.js.map +2 -2
  4. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +1 -1
  5. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +3 -3
  6. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +1 -1
  7. package/lib/cjs/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +3 -3
  8. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +1 -1
  9. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +3 -3
  10. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +1 -1
  11. package/lib/cjs/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +3 -3
  12. package/lib/esm/package.json +1 -1
  13. package/lib/esm/src/api/command/os/__mocks__/GetOsVersionCommand.js +1 -1
  14. package/lib/esm/src/api/command/os/__mocks__/GetOsVersionCommand.js.map +2 -2
  15. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js +1 -1
  16. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.js.map +3 -3
  17. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js +1 -1
  18. package/lib/esm/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.test.js.map +3 -3
  19. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js +1 -1
  20. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.js.map +3 -3
  21. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js +1 -1
  22. package/lib/esm/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.test.js.map +3 -3
  23. package/lib/types/src/api/command/os/__mocks__/GetOsVersionCommand.d.ts.map +1 -1
  24. package/lib/types/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.d.ts +3 -1
  25. package/lib/types/src/api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction.d.ts.map +1 -1
  26. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.d.ts +0 -1
  27. package/lib/types/src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.d.ts.map +1 -1
  28. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  29. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction.ts"],
4
- "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n CloseAppCommand,\n type CloseAppCommandResult,\n} from \"@api/command/os/CloseAppCommand\";\nimport {\n OpenAppCommand,\n type OpenAppCommandResult,\n} from \"@api/command/os/OpenAppCommand\";\nimport { type InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nimport { DeviceNotOnboardedError } from \"@api/device-action/os/Errors\";\nimport { GetDeviceStatusDeviceAction } from \"@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction\";\nimport { type StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n type DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { DeviceDisconnectedWhileSendingError } from \"@api/transport/model/Errors\";\nimport { isDashboardName } from \"@api/utils/AppName\";\n\nimport {\n type OpenAppDAError,\n type OpenAppDAInput,\n type OpenAppDAIntermediateValue,\n type OpenAppDAOutput,\n openAppDAStateStep,\n} from \"./types\";\n\ntype OpenAppStateMachineInternalState = {\n readonly currentlyRunningApp: string | null;\n readonly error: OpenAppDAError | null;\n};\n\nexport type MachineDependencies = {\n readonly closeApp: () => Promise<CloseAppCommandResult>;\n readonly openApp: (arg0: {\n input: { appName: string };\n }) => Promise<OpenAppCommandResult>;\n readonly getDeviceSessionState: () => DeviceSessionState;\n readonly setDeviceSessionState: (state: DeviceSessionState) => void;\n readonly isDeviceOnboarded: () => boolean;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\n/**\n * Opens a given app on the device.\n *\n * It checks if the device is onboarded, unlocked, and which app is currently open.\n * If the current app is the dashboard, it will directly open the requested app.\n * If another app is opened, it will close the current app and open the requested app.\n *\n * Example of usage:\n *\n * ```ts\n * const deviceAction = new OpenAppDeviceAction({\n * input: {\n * appName: \"MyApp\",\n * },\n * });\n * dmk.executeDeviceAction({ sessionId: \"mySessionId\", deviceAction });\n * ```\n */\nexport class OpenAppDeviceAction extends XStateDeviceAction<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n > {\n type types = StateMachineTypes<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n >;\n\n const {\n closeApp,\n openApp,\n getDeviceSessionState,\n isDeviceOnboarded,\n setDeviceSessionState,\n } = this.extractDependencies(internalApi);\n\n const unlockTimeout = this.input.unlockTimeout ?? DEFAULT_UNLOCK_TIMEOUT_MS;\n\n const getDeviceStatusMachine = new GetDeviceStatusDeviceAction({\n input: {\n unlockTimeout,\n },\n }).makeStateMachine(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n closeApp: fromPromise(closeApp),\n openApp: fromPromise(openApp),\n getDeviceStatus: getDeviceStatusMachine,\n },\n guards: {\n isDeviceOnboarded: () => isDeviceOnboarded(), // TODO: we don't have this info for now, this can be derived from the \"flags\" obtained in the getVersion command\n isRequestedAppOpen: ({ context }: { context: types[\"context\"] }) => {\n if (context._internalState.currentlyRunningApp === null) return false;\n return (\n context._internalState.currentlyRunningApp === context.input.appName\n );\n },\n isDashboardOpen: ({ context }: { context: types[\"context\"] }) => {\n if (context._internalState.currentlyRunningApp === null)\n throw new Error(\"context.currentlyRunningApp === null\");\n return isDashboardName(context._internalState.currentlyRunningApp);\n },\n hasDisconnectedWhileSending: ({ context }) =>\n context._internalState.error !== null &&\n context._internalState.error instanceof\n DeviceDisconnectedWhileSendingError,\n hasError: ({ context }) => context._internalState.error !== null,\n },\n actions: {\n assignErrorDeviceNotOnboarded: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: new DeviceNotOnboardedError(),\n }),\n }),\n assignUserActionNeededOpenApp: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignNoUserActionNeeded: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.None,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // FIXME: add a typeguard\n }),\n }),\n assignNoError: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: null,\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EARhWCGADgAsAZm1b1SwUoDspgDQhuiAEzX1DbQE5tJlQDYlm414CsAXz8LNEwcfCIyCmo6RmQMACNaDgAnCGIMKABhAAswUgBrARE5CSkZDDlFBCUPbQYfZx91H0FtTRNjCysEbWM1bTdHAzcfH2q9awCg9GxcZgjKMoZYhOTU9Ozcgv4lUSQQEuloiuUauoamlrbzSxtBNTu7pW1BEe1rJUmQYJmwlkjFgAytHyaUyOXyhV24kkh1ke0q7w8DDcxmqjkM1l6Kh8nUQzR8DEEjjcz3UxKUjiMbk+31Cc3IC2iDCBIPW4K2O2KMLKxwQiKUyNRAwxWKUOJu3TaDFsw28bkExmsgnU-Rp0zp4QZUXoDFCABsyBwylhCBxiHqOHE9WBeBB6GAGGlCLQ8g7abNNf8mfrDcbTebLdaEE7gUbokJhBGuaUjvCbCSCdZNI5UQqhg1cQhNOprAxND4XP0xZTHI01SEPX9GTqfaQw-QTWaLVabWAkklaEkGKgLVQAGadgC2S3Vlfm2sYtfr2H9zaDIbrZQjUb2Bx5cb5CelydTxnT2nFXTcmjUBYTzlazkcE0CX1Hv3HiynfqbgbA7FgAFc9VQNhCV9CMZwqAlQuAWZwHiqbStI0mY+PmdRKNYxLZmKgjvDeUwVg+WpPrgBqLtEjYBi2H7fr+7ICJyq7crGIGIK0LwME8dzJuizzNNYmZeLmAysZ4Ph2KYmiaOWPz0l6Nb4b60R-lsRQ0UB5Qbq0pgMM4FJ8dYx4KpomaOJo6k9G4yHvEhBmYmJGpVhOurSYR9ByVRUL7LRwEKAxYq1PUkGtE8+ZaJmBh1A8hieMh17vFZY64UyeAcLAWQrCkTkAa5Sm8tY-TIkmlJvFojjXuocHysiegvB4JJ6P4t7ujhkmMPFiXJRAqXUYBsLKfRfLZSZyYtHYbF2JmQoaMeIweEmJjHtF9XVowGR6pIFD2dOtr2o6GDOq6I7YRJ80MIty3PtEwZbaGS4iGla50R5CBVYSJkFncbzGC4mYoo4zHlfUCo+KieizfttlHbAK09jJ9C8G2HZdj2RoDkkw51cDiyg+DBHTmdzoORgy4KR167dQ9ghPc8A1vUomZIQqeZksmTw9JoJlA56B3oyd9BkT+qUE+lnW8iohgaDoeioUYpgdBKQu5sz8rEgYxjwaJtX3qjTIc6tZTcxRmzOdGAsbqoagmM8Yr-aTTyOCNpXWAW-TGIMfmO6zNmLHVmNlOtGAOiGO0o2ztke5DGDYxd4ZXXzN3uZU1RPBBjTNM7UtdAWxjqQZ6gqv0LyO9oruPkywe49D7adt2vaI8jauB+796e6dC7TvjLnR11d1x955xJ1cKeIAZ6dGEJqJKk4qqq3ttdF-XIc67zrdue3CLVG4gqZyMpbGG4bhBeoq9b-mB7jaTZYT+JU86sX05z5R2wLxlG78oKYpNKW16mx9x6EkhWdGKTSvXgLrFKSENcbsC4Hwa6i9eQHgQgmCkIlBjKmcEFUY24ejaSTMeCkHxPgYFoBAOAcgA5u1um3XkABaHeEoKEEkKvQwQJ4XjKl6ErIBDUmCenATwA2RM7rknUm4FUhV-oiTJFTCUth05j0xJVFUTxt7sIOssRIKRQRyV4bdWOTNkTqDekqAwbxNDIUzFIhwzhZHVHkf0akZ9rKFx1CyPI6j2SaJjsoUsBIBimB8MMeUZJqFdH6PYDwKYBjwQaEYpRtlOYzlfC2NxS8bB6HsM4RUIwiSH0VNxAy6lkL1EEjTYUtisLn1ISAhuDZZxvhvpsRJmVX51FJFlZ4-Qk5wUYcxR2BTTIGUKtEvCoDpwaMUobbqugUzIg8PmEwIiTJ9yqAMaUW90IngCaIgZcUEpJVUa1Vxoy+GVGMbvZiuVf5IM8CoTZOpNZDL4eQjcIlDLIRRH5FhoxDyIGFMiASe8IoFlGNchaS0waxNqfkepG4tACiMGeQw6IiQeBGncMaMycxEl8eoIFu0fiVPbg87qSE3q6MVBpehPQ4K6G+uoZUJIVB7laNiq+2s4DkRGYTLRygs6GSQtmO4iIaWljgvUBgip-K5RErofOdiYocLBZwHhBzOWSkKqKz6Lw3i6U+QgPchlTB7xTPBeCWVHDYoAMqflIOQWA8AlXuO6KMQylImipgMi4BZzhDIKkpM0FEypRimplXNWyABRMuSRIXjNaKvHQ3h0Q0reCYT+3khGNEKgqIRxgAgBCAA */\n id: \"OpenAppDeviceAction\",\n initial: \"DeviceReady\",\n context: ({ input }) => {\n const sessionState = getDeviceSessionState();\n const { sessionStateType } = sessionState;\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n _internalState: {\n error: null,\n currentlyRunningApp:\n sessionStateType ===\n DeviceSessionStateType.ReadyWithoutSecureChannel\n ? sessionState.currentApp.name\n : null,\n },\n };\n },\n states: {\n DeviceReady: {\n // check device capabilities & status known\n always: {\n target: \"OnboardingCheck\",\n },\n },\n\n OnboardingCheck: {\n // check onboarding status provided by device session\n always: [\n {\n target: \"GetDeviceStatus\",\n guard: {\n type: \"isDeviceOnboarded\",\n },\n },\n {\n target: \"Error\",\n actions: \"assignErrorDeviceNotOnboarded\",\n },\n ],\n },\n\n GetDeviceStatus: {\n // We run the GetDeviceStatus flow to get information about the device state\n invoke: {\n id: \"deviceStatus\",\n src: \"getDeviceStatus\",\n input: (_) => ({\n unlockTimeout: _.context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"CheckDeviceStatus\",\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<OpenAppStateMachineInternalState>(\n {\n Right: (output) => {\n const state: DeviceSessionState =\n getDeviceSessionState();\n\n if (\n state.sessionStateType !==\n DeviceSessionStateType.Connected\n ) {\n setDeviceSessionState({\n ...state,\n currentApp: {\n name: output.currentApp,\n version: output.currentAppVersion,\n },\n });\n }\n return {\n ..._.context._internalState,\n currentlyRunningApp: output.currentApp,\n };\n },\n Left: (error) => ({\n ..._.context._internalState,\n currentlyRunningApp: null,\n error,\n }),\n },\n );\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: [\n assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n currentlyRunningApp: null,\n }),\n }),\n \"assignErrorFromEvent\",\n ],\n },\n },\n },\n CheckDeviceStatus: {\n // We check the device status to see if we can have an error\n always: [\n {\n target: \"ApplicationReady\",\n guard: \"isRequestedAppOpen\",\n // If target app is currently opened, we can ignore errors\n actions: \"assignNoError\",\n },\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"DashboardCheck\",\n },\n ],\n },\n\n DashboardCheck: {\n // Is the current application the dashboard\n always: [\n {\n target: \"OpenApplication\",\n guard: \"isDashboardOpen\",\n },\n \"CloseApplication\",\n ],\n },\n\n OpenApplication: {\n // execute openApp command,\n entry: \"assignUserActionNeededOpenApp\",\n exit: \"assignNoUserActionNeeded\",\n invoke: {\n src: \"openApp\",\n input: ({ context }) => ({ appName: context.input.appName }),\n onDone: {\n target: \"OpenApplicationResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n currentlyRunningApp: _.context.input.appName,\n };\n } else {\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"OpenApplicationResultCheck\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n\n OpenApplicationResultCheck: {\n always: [\n {\n // When an APDU triggers a disconnection, some transports may possibly\n // be closed on device side before the APDU response could be received,\n // especially on BLE transports.\n // Therefore when a disconnection occurs while sending, we should verify\n // the device status because it may have been successfully executed.\n target: \"GetDeviceStatus\",\n guard: \"hasDisconnectedWhileSending\",\n },\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n { target: \"GetDeviceStatus\" },\n ],\n },\n\n CloseApplication: {\n invoke: {\n src: \"closeApp\",\n onDone: {\n target: \"CloseApplicationResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n currentlyRunningApp: \"BOLOS\",\n };\n } else {\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n CloseApplicationResultCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n { target: \"OpenApplication\" },\n ],\n },\n\n ApplicationReady: {\n // application is ready to be used\n always: \"Success\",\n },\n\n // success state\n Success: {\n type: \"final\",\n actions: \"assignNoError\", // TODO, we should not need this\n },\n\n // error state\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.error // TODO: instead we should rely on the current state (\"Success\" or \"Error\")\n ? Left(context._internalState.error)\n : Right(undefined),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const closeApp = async () => internalApi.sendCommand(new CloseAppCommand());\n const openApp = async (arg0: { input: { appName: string } }) =>\n internalApi.sendCommand(\n new OpenAppCommand({ appName: arg0.input.appName }),\n );\n\n return {\n closeApp,\n openApp,\n getDeviceSessionState: () => internalApi.getDeviceSessionState(),\n setDeviceSessionState: (state: DeviceSessionState) =>\n internalApi.setDeviceSessionState(state),\n isDeviceOnboarded: () => true, // TODO: we don't have this info for now, this can be derived from the \"flags\" obtained in the getVersion command\n };\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["OpenAppDeviceAction_exports", "__export", "OpenAppDeviceAction", "__toCommonJS", "import_purify_ts", "import_xstate", "import_CommandResult", "import_CloseAppCommand", "import_OpenAppCommand", "import_UserInteractionRequired", "import_Const", "import_Errors", "import_GetDeviceStatusDeviceAction", "import_XStateDeviceAction", "import_DeviceSessionState", "import_AppName", "import_types", "internalApi", "closeApp", "openApp", "getDeviceSessionState", "isDeviceOnboarded", "setDeviceSessionState", "unlockTimeout", "getDeviceStatusMachine", "context", "_", "input", "sessionState", "sessionStateType", "output", "state", "error", "arg0"]
4
+ "sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport {\n CloseAppCommand,\n type CloseAppCommandResult,\n} from \"@api/command/os/CloseAppCommand\";\nimport {\n OpenAppCommand,\n type OpenAppCommandResult,\n} from \"@api/command/os/OpenAppCommand\";\nimport { type InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { DEFAULT_UNLOCK_TIMEOUT_MS } from \"@api/device-action/os/Const\";\nimport { GetDeviceStatusDeviceAction } from \"@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction\";\nimport { type StateMachineTypes } from \"@api/device-action/xstate-utils/StateMachineTypes\";\nimport {\n type DeviceActionStateMachine,\n XStateDeviceAction,\n} from \"@api/device-action/xstate-utils/XStateDeviceAction\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { DeviceDisconnectedWhileSendingError } from \"@api/transport/model/Errors\";\nimport { isDashboardName } from \"@api/utils/AppName\";\n\nimport {\n type OpenAppDAError,\n type OpenAppDAInput,\n type OpenAppDAIntermediateValue,\n type OpenAppDAOutput,\n openAppDAStateStep,\n} from \"./types\";\n\ntype OpenAppStateMachineInternalState = {\n readonly currentlyRunningApp: string | null;\n readonly error: OpenAppDAError | null;\n};\n\nexport type MachineDependencies = {\n readonly closeApp: () => Promise<CloseAppCommandResult>;\n readonly openApp: (arg0: {\n input: { appName: string };\n }) => Promise<OpenAppCommandResult>;\n readonly getDeviceSessionState: () => DeviceSessionState;\n readonly setDeviceSessionState: (state: DeviceSessionState) => void;\n};\n\nexport type ExtractMachineDependencies = (\n internalApi: InternalApi,\n) => MachineDependencies;\n\n/**\n * Opens a given app on the device.\n *\n * It checks if the device is onboarded, unlocked, and which app is currently open.\n * If the current app is the dashboard, it will directly open the requested app.\n * If another app is opened, it will close the current app and open the requested app.\n *\n * Example of usage:\n *\n * ```ts\n * const deviceAction = new OpenAppDeviceAction({\n * input: {\n * appName: \"MyApp\",\n * },\n * });\n * dmk.executeDeviceAction({ sessionId: \"mySessionId\", deviceAction });\n * ```\n */\nexport class OpenAppDeviceAction extends XStateDeviceAction<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n> {\n makeStateMachine(\n internalApi: InternalApi,\n ): DeviceActionStateMachine<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n > {\n type types = StateMachineTypes<\n OpenAppDAOutput,\n OpenAppDAInput,\n OpenAppDAError,\n OpenAppDAIntermediateValue,\n OpenAppStateMachineInternalState\n >;\n\n const { closeApp, openApp, getDeviceSessionState, setDeviceSessionState } =\n this.extractDependencies(internalApi);\n\n const unlockTimeout = this.input.unlockTimeout ?? DEFAULT_UNLOCK_TIMEOUT_MS;\n\n const getDeviceStatusMachine = new GetDeviceStatusDeviceAction({\n input: {\n unlockTimeout,\n },\n }).makeStateMachine(internalApi);\n\n return setup({\n types: {\n input: {} as types[\"input\"],\n context: {} as types[\"context\"],\n output: {} as types[\"output\"],\n },\n actors: {\n closeApp: fromPromise(closeApp),\n openApp: fromPromise(openApp),\n getDeviceStatus: getDeviceStatusMachine,\n },\n guards: {\n isRequestedAppOpen: ({ context }: { context: types[\"context\"] }) => {\n if (context._internalState.currentlyRunningApp === null) return false;\n return (\n context._internalState.currentlyRunningApp === context.input.appName\n );\n },\n isDashboardOpen: ({ context }: { context: types[\"context\"] }) => {\n if (context._internalState.currentlyRunningApp === null)\n throw new Error(\"context.currentlyRunningApp === null\");\n return isDashboardName(context._internalState.currentlyRunningApp);\n },\n hasDisconnectedWhileSending: ({ context }) =>\n context._internalState.error !== null &&\n context._internalState.error instanceof\n DeviceDisconnectedWhileSendingError,\n hasError: ({ context }) => context._internalState.error !== null,\n },\n actions: {\n assignUserActionNeededOpenApp: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.ConfirmOpenApp,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignNoUserActionNeeded: assign({\n intermediateValue: (_) =>\n ({\n ..._.context.intermediateValue,\n requiredUserInteraction: UserInteractionRequired.None,\n }) satisfies types[\"context\"][\"intermediateValue\"],\n }),\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // FIXME: add a typeguard\n }),\n }),\n assignNoError: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: null,\n }),\n }),\n },\n }).createMachine({\n /** @xstate-layout N4IgpgJg5mDOIC5QHkAOYB2BBVqAiYAbgJYDGYWpALsQPYYB0BJ5ASmAIYQCeAxANoAGALqJQqWrGI16YkAA9EARhWCGADgAsAZm1b1SwUoDspgDQhuiAEzX1DbQE5tJlQDYlm414CsAXz8LNEwcfCIyCmo6RmQMACNaDgAnCGIMKABhAAswUgBrARE5CSkZDDlFBCUPbQYfZx91H0FtTRNjCysEbWM1bTdHAzcfH2q9awCg9GxcZgjKMoZYhOTU9Ozcgv4lUSQQEuloiuUauoamlrbzSxtBNTu7pW1BEe1rJUmQYJmwlkjFgAytHyaUyOXyhV24kkh1ke0q7w8DDcxmqjkM1l6Kh8nUQzR8DEEjjcz3UxKUjiMbk+31Cc3IC2iDCBIPW4K2O2KMLKxwQiKUyNRAwxWKUOJu3TaDFsw28bkExmsgnU-Rp0zp4QZUXoDFCABsyBwylhCBxiHqOHE9WBeBB6GAGGlCLQ8g7abNNf8mfrDcbTebLdaEE7gUbokJhBGuaUjvCbCSCdZNI5UQqhg1cQhNOprAxND4XP0xZTHI01SEPX9GTqfaQw-QTWaLVabWAkklaEkGKgLVQAGadgC2S3Vlfm2sYtfr2H9zaDIbrZQjUb2Bx5cb5CelydTxnT2nFXTcmjUBYTzlazkcE0CX1Hv3HiynfqbgbA7FgAFc9VQNhCV9CMZwqAlQuAWZwHiqbStI0mY+PmdRKNYxLZmKgjvDeUwVg+WpPrgBqLtEjYBi2H7fr+7ICJyq7crGIGIK0LwME8dzJuizzNNYmZeLmAysZ4Ph2KYmiaOWPz0l6Nb4b60R-lsRQ0UB5Qbq0pgMM4FJ8dYx4KpomaOJo6k9G4yHvEhBmYmJGpVhOurSYR9ByVRUL7LRwEKAxYq1PUkGtE8+ZaJmBh1A8hieMh17vFZY64UyeAcLAWQrCkTkAa5Sm8tY-TIkmlJvFojjXuocHysiegvB4JJ6P4t7ujhkmMPFiXJRAqXUYBsLKfRfLZSZyYtHYbF2JmQoaMeIweEmJjHtF9XVowGR6pIFD2dOtr2o6GDOq6I7YRJ80MIty3PtEwZbaGS4iGla50R5CBVYSJkFncbzGC4mYoo4zHlfUCo+KieizfttlHbAK09jJ9C8G2HZdj2RoDkkw51cDiyg+DBHTmdzoORgy4KR167dQ9ghPc8A1vUomZIQqeZksmTw9JoJlA56B3oyd9BkT+qUE+lnW8iohgaDoeioUYpgdBKQu5sz8rEgYxjwaJtX3qjTIc6tZTcxRmzOdGAsbqoagmM8Yr-aTTyOCNpXWAW-TGIMfmO6zNmLHVmNlOtGAOiGO0o2ztke5DGDYxd4ZXXzN3uZU1RPBBjTNM7UtdAWxjqQZ6gqv0LyO9oruPkywe49D7adt2vaI8jauB+796e6dC7TvjLnR11d1x955xJ1cKeIAZ6dGEJqJKk4qqq3ttdF-XIc67zrdue3CLVG4gqZyMpbGG4bhBeoq9b-mB7jaTZYT+JU86sX05z5R2wLxlG78oKYpNKW16mx9x6EkhWdGKTSvXgLrFKSENcbsC4Hwa6i9eQHgQgmCkIlBjKmcEFUY24ejaSTMeCkHxPgYFoBAOAcgA5u1um3XkABaHeEoKEEkKvQwQJ4XjKl6ErIBDUmCenATwA2RM7rknUm4FUhV-oiTJFTCUth05j0xJVFUTxt7sIOssRIKRQRyV4bdWOTNkTqDekqAwbxNDIUzFIhwzhZHVHkf0akZ9rKFx1CyPI6j2SaJjsoUsBIBimB8MMeUZJqFdH6PYDwKYBjwQaEYpRtlOYzlfC2NxS8bB6HsM4RUIwiSH0VNxAy6lkL1EEjTYUtisLn1ISAhuDZZxvhvpsRJmVX51FJFlZ4-Qk5wUYcxR2BTTIGUKtEvCoDpwaMUobbqugUzIg8PmEwIiTJ9yqAMaUW90IngCaIgZcUEpJVUa1Vxoy+GVGMbvZiuVf5IM8CoTZOpNZDL4eQjcIlDLIRRH5FhoxDyIGFMiASe8IoFlGNchaS0waxNqfkepG4tACiMGeQw6IiQeBGncMaMycxEl8eoIFu0fiVPbg87qSE3q6MVBpehPQ4K6G+uoZUJIVB7laNiq+2s4DkRGYTLRygs6GSQtmO4iIaWljgvUBgip-K5RErofOdiYocLBZwHhBzOWSkKqKz6Lw3i6U+QgPchlTB7xTPBeCWVHDYoAMqflIOQWA8AlXuO6KMQylImipgMi4BZzhDIKkpM0FEypRimplXNWyABRMuSRIXjNaKvHQ3h0Q0reCYT+3khGNEKgqIRxgAgBCAA */\n id: \"OpenAppDeviceAction\",\n initial: \"DeviceReady\",\n context: ({ input }) => {\n const sessionState = getDeviceSessionState();\n const { sessionStateType } = sessionState;\n return {\n input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: openAppDAStateStep.GET_DEVICE_STATUS,\n },\n _internalState: {\n error: null,\n currentlyRunningApp:\n sessionStateType ===\n DeviceSessionStateType.ReadyWithoutSecureChannel\n ? sessionState.currentApp.name\n : null,\n },\n };\n },\n states: {\n DeviceReady: {\n always: {\n target: \"GetDeviceStatus\",\n },\n },\n\n GetDeviceStatus: {\n // We run the GetDeviceStatus flow to get information about the device state\n invoke: {\n id: \"deviceStatus\",\n src: \"getDeviceStatus\",\n input: (_) => ({\n unlockTimeout: _.context.input.unlockTimeout,\n }),\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n target: \"CheckDeviceStatus\",\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<OpenAppStateMachineInternalState>(\n {\n Right: (output) => {\n const state: DeviceSessionState =\n getDeviceSessionState();\n\n if (\n state.sessionStateType !==\n DeviceSessionStateType.Connected\n ) {\n setDeviceSessionState({\n ...state,\n currentApp: {\n name: output.currentApp,\n version: output.currentAppVersion,\n },\n });\n }\n return {\n ..._.context._internalState,\n currentlyRunningApp: output.currentApp,\n };\n },\n Left: (error) => ({\n ..._.context._internalState,\n currentlyRunningApp: null,\n error,\n }),\n },\n );\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: [\n assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n currentlyRunningApp: null,\n }),\n }),\n \"assignErrorFromEvent\",\n ],\n },\n },\n },\n CheckDeviceStatus: {\n // We check the device status to see if we can have an error\n always: [\n {\n target: \"ApplicationReady\",\n guard: \"isRequestedAppOpen\",\n // If target app is currently opened, we can ignore errors\n actions: \"assignNoError\",\n },\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n {\n target: \"DashboardCheck\",\n },\n ],\n },\n\n DashboardCheck: {\n // Is the current application the dashboard\n always: [\n {\n target: \"OpenApplication\",\n guard: \"isDashboardOpen\",\n },\n \"CloseApplication\",\n ],\n },\n\n OpenApplication: {\n // execute openApp command,\n entry: \"assignUserActionNeededOpenApp\",\n exit: \"assignNoUserActionNeeded\",\n invoke: {\n src: \"openApp\",\n input: ({ context }) => ({ appName: context.input.appName }),\n onDone: {\n target: \"OpenApplicationResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n currentlyRunningApp: _.context.input.appName,\n };\n } else {\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"OpenApplicationResultCheck\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n\n OpenApplicationResultCheck: {\n always: [\n {\n // When an APDU triggers a disconnection, some transports may possibly\n // be closed on device side before the APDU response could be received,\n // especially on BLE transports.\n // Therefore when a disconnection occurs while sending, we should verify\n // the device status because it may have been successfully executed.\n target: \"GetDeviceStatus\",\n guard: \"hasDisconnectedWhileSending\",\n },\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n { target: \"GetDeviceStatus\" },\n ],\n },\n\n CloseApplication: {\n invoke: {\n src: \"closeApp\",\n onDone: {\n target: \"CloseApplicationResultCheck\",\n actions: assign({\n _internalState: (_) => {\n if (isSuccessCommandResult(_.event.output)) {\n return {\n ..._.context._internalState,\n currentlyRunningApp: \"BOLOS\",\n };\n } else {\n return {\n ..._.context._internalState,\n error: _.event.output.error,\n };\n }\n },\n }),\n },\n onError: {\n target: \"Error\",\n actions: \"assignErrorFromEvent\",\n },\n },\n },\n CloseApplicationResultCheck: {\n always: [\n {\n target: \"Error\",\n guard: \"hasError\",\n },\n { target: \"OpenApplication\" },\n ],\n },\n\n ApplicationReady: {\n // application is ready to be used\n always: \"Success\",\n },\n\n // success state\n Success: {\n type: \"final\",\n actions: \"assignNoError\", // TODO, we should not need this\n },\n\n // error state\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.error // TODO: instead we should rely on the current state (\"Success\" or \"Error\")\n ? Left(context._internalState.error)\n : Right(undefined),\n });\n }\n\n extractDependencies(internalApi: InternalApi): MachineDependencies {\n const closeApp = async () => internalApi.sendCommand(new CloseAppCommand());\n const openApp = async (arg0: { input: { appName: string } }) =>\n internalApi.sendCommand(\n new OpenAppCommand({ appName: arg0.input.appName }),\n );\n\n return {\n closeApp,\n openApp,\n getDeviceSessionState: () => internalApi.getDeviceSessionState(),\n setDeviceSessionState: (state: DeviceSessionState) =>\n internalApi.setDeviceSessionState(state),\n };\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["OpenAppDeviceAction_exports", "__export", "OpenAppDeviceAction", "__toCommonJS", "import_purify_ts", "import_xstate", "import_CommandResult", "import_CloseAppCommand", "import_OpenAppCommand", "import_UserInteractionRequired", "import_Const", "import_GetDeviceStatusDeviceAction", "import_XStateDeviceAction", "import_DeviceSessionState", "import_Errors", "import_AppName", "import_types", "internalApi", "closeApp", "openApp", "getDeviceSessionState", "setDeviceSessionState", "unlockTimeout", "getDeviceStatusMachine", "context", "_", "input", "sessionState", "sessionStateType", "output", "state", "error", "arg0"]
7
7
  }
@@ -1,2 +1,2 @@
1
- "use strict";var T=require("rxjs"),C=require("../../../command/Errors"),m=require("../../../command/model/CommandResult"),y=require("../../../device/DeviceModel"),a=require("../../../device/DeviceStatus"),c=require("../../../device-action/__test-utils__/makeInternalApi"),l=require("../../../device-action/__test-utils__/setupTestMachine"),u=require("../../../device-action/__test-utils__/testDeviceActionStates"),e=require("../../../device-action/model/DeviceActionState"),n=require("../../../device-action/model/UserInteractionRequired"),O=require("../../../device-action/os/Errors"),r=require("../../../device-action/os/GetDeviceStatus/types"),p=require("../../../device-session/DeviceSessionState"),R=require("../../../transport/model/Errors"),d=require("./OpenAppDeviceAction"),D=require("./types");vi.mock("@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction");describe("OpenAppDeviceAction",()=>{const N=vi.fn(),E=vi.fn(),v=vi.fn(),A=vi.fn(),h=vi.fn(),k=vi.fn();function S(){return{getDeviceSessionState:A,setDeviceSessionState:h,getAppAndVersion:N,openApp:E,closeApp:v,isDeviceOnboarded:k}}const{getDeviceSessionState:B}=(0,c.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks(),k.mockReturnValue(!0)}),describe("without overriding `extractDependencies`",()=>{it("should end if the required application is opened",()=>new Promise((o,i)=>{B.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"Bitcoin",version:"1.0.0"},installedApps:[],deviceModelId:y.DeviceModelId.NANO_X,isSecureConnectionAllowed:!1}),(0,l.setupGetDeviceStatusMock)([{currentApp:"Bitcoin",currentAppVersion:"0.0.0"}]);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}}),s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})}))}),describe("success cases",()=>{it("should end in a success if the app is already opened",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"Bitcoin",version:"1.0.0"}}),(0,l.setupGetDeviceStatusMock)([{currentApp:"Bitcoin",currentAppVersion:"1.0.0"}]);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin",unlockTimeout:void 0}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in a success if the dashboard is open and open app succeeds",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}),(0,l.setupGetDeviceStatusMock)([{currentApp:"Bitcoin",currentAppVersion:"1.0.0"}]),E.mockResolvedValue((0,m.CommandResultFactory)({data:void 0}));const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}],{observable:V}=(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i});(0,T.lastValueFrom)(V).then(()=>{expect(h).toHaveBeenCalledWith({deviceStatus:a.DeviceStatus.CONNECTED,sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,currentApp:{name:"Bitcoin",version:"1.0.0"}})})})),it("should end in a success if disconnection occurs while open app succeeds",()=>new Promise((o,i)=>{A.mockReturnValue((0,m.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),N.mockResolvedValue((0,m.CommandResultFactory)({data:{name:"BOLOS",version:"0.0.0"}})),(0,l.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"},{currentApp:"Bitcoin",currentAppVersion:"0.0.0"}]),E.mockRejectedValue(new R.DeviceDisconnectedWhileSendingError);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in a success if another app is open, close app succeeds and open app succeeds",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,l.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"},{currentApp:"Bitcoin",currentAppVersion:"1.0.0"}]),v.mockResolvedValue((0,m.CommandResultFactory)({data:void 0})),E.mockResolvedValue((0,m.CommandResultFactory)({data:void 0}));const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}],{observable:V}=(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i});(0,T.lastValueFrom)(V).then(()=>{expect(h).toHaveBeenCalledWith({currentApp:{name:"Bitcoin",version:"1.0.0"},deviceStatus:a.DeviceStatus.CONNECTED,sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel})})}))}),describe("errors cases",()=>{it("should end in an error if the device is not onboarded",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"}}),k.mockReturnValue(!1);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{error:new O.DeviceNotOnboardedError,status:e.DeviceActionStatus.Error}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if the device is locked",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.LOCKED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"}}),(0,l.setupGetDeviceStatusMock)([new O.DeviceLockedError]);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.DeviceLockedError}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if getAppAndVersion returns an error",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"}}),(0,l.setupGetDeviceStatusMock)([new C.InvalidStatusWordError("mocked error")]);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if the dashboard is open and open app returns an error",()=>new Promise((o,i)=>{A.mockReturnValue((0,m.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),N.mockResolvedValue((0,m.CommandResultFactory)({data:{name:"BOLOS",version:"0.0.0"}})),(0,l.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"}]),E.mockResolvedValue((0,m.CommandResultFactory)({error:new C.InvalidStatusWordError("mocked error")}));const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in a success if disconnection occurs while open app failed",()=>new Promise((o,i)=>{A.mockReturnValue((0,m.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),N.mockResolvedValue((0,m.CommandResultFactory)({data:{name:"BOLOS",version:"0.0.0"}})),(0,l.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"},{currentApp:"BOLOS",currentAppVersion:"0.0.0"}]),E.mockRejectedValue(new R.DeviceDisconnectedWhileSendingError);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new R.DeviceDisconnectedWhileSendingError}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if another app is open, and close app returns an error",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,l.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"}]),v.mockResolvedValue((0,m.CommandResultFactory)({error:new C.InvalidStatusWordError("mocked error")}));const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if another app is open, close app succeeds but open app returns an error",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,l.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"}]),v.mockResolvedValue((0,m.CommandResultFactory)({data:void 0})),E.mockResolvedValue((0,m.CommandResultFactory)({error:new C.InvalidStatusWordError("mocked error")}));const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if getAppAndVersion actor throws an error",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"}}),(0,l.setupGetDeviceStatusMock)([new O.UnknownDAError("Unknown error")]);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.UnknownDAError("Unknown error")}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if openApp actor throws an error",()=>new Promise((o,i)=>{A.mockReturnValue((0,m.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),(0,l.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"}]),E.mockImplementation(()=>{throw new O.UnknownDAError("Unknown error")});const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.UnknownDAError("Unknown error")}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if closeApp actor throws an error",()=>new Promise((o,i)=>{A.mockReturnValue((0,m.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),(0,l.setupGetDeviceStatusMock)([{currentApp:"anApp",currentAppVersion:"0.0.0"}]),v.mockImplementation(()=>{throw new O.UnknownDAError("Unknown error")});const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.UnknownDAError("Unknown error")}];(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should emit a stopped state if the action is cancelled",()=>new Promise((o,i)=>{A.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,l.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"}]);const t=new d.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(t,"extractDependencies").mockReturnValue(S());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:D.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:n.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Stopped}],{cancel:V}=(0,u.testDeviceActionStates)(t,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i});V()}))})});
1
+ "use strict";var T=require("rxjs"),C=require("../../../command/Errors"),l=require("../../../command/model/CommandResult"),k=require("../../../device/DeviceModel"),a=require("../../../device/DeviceStatus"),c=require("../../../device-action/__test-utils__/makeInternalApi"),u=require("../../../device-action/__test-utils__/setupTestMachine"),d=require("../../../device-action/__test-utils__/testDeviceActionStates"),e=require("../../../device-action/model/DeviceActionState"),t=require("../../../device-action/model/UserInteractionRequired"),O=require("../../../device-action/os/Errors"),r=require("../../../device-action/os/GetDeviceStatus/types"),p=require("../../../device-session/DeviceSessionState"),V=require("../../../transport/model/Errors"),A=require("./OpenAppDeviceAction"),m=require("./types");vi.mock("@api/device-action/os/GetDeviceStatus/GetDeviceStatusDeviceAction");describe("OpenAppDeviceAction",()=>{const R=vi.fn(),E=vi.fn(),v=vi.fn(),S=vi.fn(),h=vi.fn();function D(){return{getDeviceSessionState:S,setDeviceSessionState:h,openApp:E,closeApp:v}}const{getDeviceSessionState:B}=(0,c.makeDeviceActionInternalApiMock)();beforeEach(()=>{vi.resetAllMocks()}),describe("without overriding `extractDependencies`",()=>{it("should end if the required application is opened",()=>new Promise((o,i)=>{B.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"Bitcoin",version:"1.0.0"},installedApps:[],deviceModelId:k.DeviceModelId.NANO_X,isSecureConnectionAllowed:!1}),(0,u.setupGetDeviceStatusMock)([{currentApp:"Bitcoin",currentAppVersion:"0.0.0"}]);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}}),s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})}))}),describe("success cases",()=>{it("should end in a success if the app is already opened",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"Bitcoin",version:"1.0.0"}}),(0,u.setupGetDeviceStatusMock)([{currentApp:"Bitcoin",currentAppVersion:"1.0.0"}]);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin",unlockTimeout:void 0}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in a success if the dashboard is open and open app succeeds",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}),(0,u.setupGetDeviceStatusMock)([{currentApp:"Bitcoin",currentAppVersion:"1.0.0"}]),E.mockResolvedValue((0,l.CommandResultFactory)({data:void 0}));const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}],{observable:N}=(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i});(0,T.lastValueFrom)(N).then(()=>{expect(h).toHaveBeenCalledWith({deviceStatus:a.DeviceStatus.CONNECTED,sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,currentApp:{name:"Bitcoin",version:"1.0.0"}})})})),it("should end in a success if disconnection occurs while open app succeeds",()=>new Promise((o,i)=>{S.mockReturnValue((0,l.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),R.mockResolvedValue((0,l.CommandResultFactory)({data:{name:"BOLOS",version:"0.0.0"}})),(0,u.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"},{currentApp:"Bitcoin",currentAppVersion:"0.0.0"}]),E.mockRejectedValue(new V.DeviceDisconnectedWhileSendingError);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in a success if another app is open, close app succeeds and open app succeeds",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,u.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"},{currentApp:"Bitcoin",currentAppVersion:"1.0.0"}]),v.mockResolvedValue((0,l.CommandResultFactory)({data:void 0})),E.mockResolvedValue((0,l.CommandResultFactory)({data:void 0}));const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Completed,output:void 0}],{observable:N}=(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i});(0,T.lastValueFrom)(N).then(()=>{expect(h).toHaveBeenCalledWith({currentApp:{name:"Bitcoin",version:"1.0.0"},deviceStatus:a.DeviceStatus.CONNECTED,sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel})})}))}),describe("errors cases",()=>{it("should end in an error if the device is not onboarded",()=>new Promise((o,i)=>{B.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"},installedApps:[],deviceModelId:k.DeviceModelId.NANO_X,isSecureConnectionAllowed:!1}),(0,u.setupGetDeviceStatusMock)([new O.DeviceNotOnboardedError]);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}}),s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{error:new O.DeviceNotOnboardedError,status:e.DeviceActionStatus.Error}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if the device is locked",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.LOCKED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"}}),(0,u.setupGetDeviceStatusMock)([new O.DeviceLockedError]);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.DeviceLockedError}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if getAppAndVersion returns an error",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"}}),(0,u.setupGetDeviceStatusMock)([new C.InvalidStatusWordError("mocked error")]);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if the dashboard is open and open app returns an error",()=>new Promise((o,i)=>{S.mockReturnValue((0,l.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),R.mockResolvedValue((0,l.CommandResultFactory)({data:{name:"BOLOS",version:"0.0.0"}})),(0,u.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"}]),E.mockResolvedValue((0,l.CommandResultFactory)({error:new C.InvalidStatusWordError("mocked error")}));const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in a success if disconnection occurs while open app failed",()=>new Promise((o,i)=>{S.mockReturnValue((0,l.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),R.mockResolvedValue((0,l.CommandResultFactory)({data:{name:"BOLOS",version:"0.0.0"}})),(0,u.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"},{currentApp:"BOLOS",currentAppVersion:"0.0.0"}]),E.mockRejectedValue(new V.DeviceDisconnectedWhileSendingError);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new V.DeviceDisconnectedWhileSendingError}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if another app is open, and close app returns an error",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,u.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"}]),v.mockResolvedValue((0,l.CommandResultFactory)({error:new C.InvalidStatusWordError("mocked error")}));const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if another app is open, close app succeeds but open app returns an error",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,u.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"}]),v.mockResolvedValue((0,l.CommandResultFactory)({data:void 0})),E.mockResolvedValue((0,l.CommandResultFactory)({error:new C.InvalidStatusWordError("mocked error")}));const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new C.InvalidStatusWordError("mocked error")}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if getAppAndVersion actor throws an error",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"mockedCurrentApp",version:"1.0.0"}}),(0,u.setupGetDeviceStatusMock)([new O.UnknownDAError("Unknown error")]);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.UnknownDAError("Unknown error")}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if openApp actor throws an error",()=>new Promise((o,i)=>{S.mockReturnValue((0,l.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),(0,u.setupGetDeviceStatusMock)([{currentApp:"BOLOS",currentAppVersion:"0.0.0"}]),E.mockImplementation(()=>{throw new O.UnknownDAError("Unknown error")});const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.ConfirmOpenApp,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.UnknownDAError("Unknown error")}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should end in an error if closeApp actor throws an error",()=>new Promise((o,i)=>{S.mockReturnValue((0,l.CommandResultFactory)({data:{sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"BOLOS",version:"0.0.0"}}})),(0,u.setupGetDeviceStatusMock)([{currentApp:"anApp",currentAppVersion:"0.0.0"}]),v.mockImplementation(()=>{throw new O.UnknownDAError("Unknown error")});const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Error,error:new O.UnknownDAError("Unknown error")}];(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i})})),it("should emit a stopped state if the action is cancelled",()=>new Promise((o,i)=>{S.mockReturnValue({sessionStateType:p.DeviceSessionStateType.ReadyWithoutSecureChannel,deviceStatus:a.DeviceStatus.CONNECTED,currentApp:{name:"AnotherApp",version:"0.0.0"}}),(0,u.setupGetDeviceStatusMock)([{currentApp:"AnotherApp",currentAppVersion:"0.0.0"}]);const n=new A.OpenAppDeviceAction({input:{appName:"Bitcoin"}});vi.spyOn(n,"extractDependencies").mockReturnValue(D());const s=[{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:m.openAppDAStateStep.GET_DEVICE_STATUS}},{status:e.DeviceActionStatus.Pending,intermediateValue:{requiredUserInteraction:t.UserInteractionRequired.None,step:r.getDeviceStatusDAStateStep.ONBOARD_CHECK}},{status:e.DeviceActionStatus.Stopped}],{cancel:N}=(0,d.testDeviceActionStates)(n,s,(0,c.makeDeviceActionInternalApiMock)(),{onDone:o,onError:i});N()}))})});
2
2
  //# sourceMappingURL=OpenAppDeviceAction.test.js.map
@@ -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 const isDeviceOnboardedMock = vi.fn();\n\n function extractDependenciesMock() {\n return {\n getDeviceSessionState: getDeviceSessionStateMock,\n setDeviceSessionState: setDeviceSessionStateMock,\n getAppAndVersion: getAppAndVersionMock,\n openApp: openAppMock,\n closeApp: closeAppMock,\n isDeviceOnboarded: isDeviceOnboardedMock,\n };\n }\n\n const { getDeviceSessionState: apiGetDeviceSessionStateMock } =\n makeDeviceActionInternalApiMock();\n\n beforeEach(() => {\n vi.resetAllMocks();\n isDeviceOnboardedMock.mockReturnValue(true);\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 getDeviceSessionStateMock.mockReturnValue({\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.CONNECTED,\n currentApp: { name: \"mockedCurrentApp\", version: \"1.0.0\" },\n });\n isDeviceOnboardedMock.mockReturnValue(false);\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 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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",
6
- "names": ["import_rxjs", "import_Errors", "import_CommandResult", "import_DeviceModel", "import_DeviceStatus", "import_makeInternalApi", "import_setupTestMachine", "import_testDeviceActionStates", "import_DeviceActionState", "import_UserInteractionRequired", "import_types", "import_DeviceSessionState", "import_OpenAppDeviceAction", "getAppAndVersionMock", "openAppMock", "closeAppMock", "getDeviceSessionStateMock", "setDeviceSessionStateMock", "isDeviceOnboardedMock", "extractDependenciesMock", "apiGetDeviceSessionStateMock", "resolve", "reject", "openAppDeviceAction", "expectedStates", "observable", "cancel"]
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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",
6
+ "names": ["import_rxjs", "import_Errors", "import_CommandResult", "import_DeviceModel", "import_DeviceStatus", "import_makeInternalApi", "import_setupTestMachine", "import_testDeviceActionStates", "import_DeviceActionState", "import_UserInteractionRequired", "import_types", "import_DeviceSessionState", "import_OpenAppDeviceAction", "getAppAndVersionMock", "openAppMock", "closeAppMock", "getDeviceSessionStateMock", "setDeviceSessionStateMock", "extractDependenciesMock", "apiGetDeviceSessionStateMock", "resolve", "reject", "openAppDeviceAction", "expectedStates", "observable", "cancel"]
7
7
  }
@@ -63,5 +63,5 @@
63
63
  "watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
64
64
  "watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
65
65
  },
66
- "version": "0.0.0-develop-20260527003225"
66
+ "version": "0.0.0-develop-20260529003437"
67
67
  }
@@ -1,2 +1,2 @@
1
- import{DeviceModelId as e}from"../../../device/DeviceModel";const o=(r=e.NANO_SP,s={})=>({[e.NANO_SP]:{isBootloader:!1,isOsu:!1,targetId:856686596,seTargetId:856686596,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"4.03",mcuBootloaderVersion:"3.12",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.NANO_S]:{isBootloader:!1,isOsu:!1,targetId:858783748,seTargetId:858783748,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"6.4.0",mcuBootloaderVersion:"5.4.0",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.NANO_X]:{isBootloader:!1,isOsu:!1,targetId:855638020,seTargetId:855638020,seVersion:"2.2.3",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"2.30",mcuBootloaderVersion:"1.16",hwVersion:"00",langId:0,recoverState:0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1}},[e.STAX]:{isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"5.24",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.FLEX]:{isBootloader:!1,isOsu:!1,targetId:858783748,seTargetId:858783748,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"6.4.0",mcuBootloaderVersion:"5.4.0",hwVersion:"00",langId:0,recoverState:0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.APEX]:{isBootloader:!1,isOsu:!1,targetId:858783748,seTargetId:858783748,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"6.4.0",mcuBootloaderVersion:"5.4.0",hwVersion:"00",langId:0,recoverState:0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1}}})[r];export{o as getOsVersionCommandResponseMockBuilder};
1
+ import{DeviceModelId as e}from"../../../device/DeviceModel";const o=(r=e.NANO_SP,s={})=>({[e.NANO_SP]:{isBootloader:!1,isOsu:!1,targetId:856686596,seTargetId:856686596,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"4.03",mcuBootloaderVersion:"3.12",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.NANO_S]:{isBootloader:!1,isOsu:!1,targetId:858783748,seTargetId:858783748,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"6.4.0",mcuBootloaderVersion:"5.4.0",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.NANO_X]:{isBootloader:!1,isOsu:!1,targetId:855638020,seTargetId:855638020,seVersion:"2.2.3",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"2.30",mcuBootloaderVersion:"1.16",hwVersion:"00",langId:0,recoverState:0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.STAX]:{isBootloader:!1,isOsu:!1,targetId:857735172,seTargetId:857735172,seVersion:"1.3.0",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"5.24",mcuBootloaderVersion:"0.48",hwVersion:"00",langId:0,recoverState:void 0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.FLEX]:{isBootloader:!1,isOsu:!1,targetId:858783748,seTargetId:858783748,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"6.4.0",mcuBootloaderVersion:"5.4.0",hwVersion:"00",langId:0,recoverState:0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1},...s},[e.APEX]:{isBootloader:!1,isOsu:!1,targetId:858783748,seTargetId:858783748,seVersion:"1.1.1",seFlags:new Uint8Array([230,0,0,0]),mcuTargetId:void 0,mcuSephVersion:"6.4.0",mcuBootloaderVersion:"5.4.0",hwVersion:"00",langId:0,recoverState:0,secureElementFlags:{isPinValidated:!0,hasMcuSerialNumber:!0,hasValidCertificate:!0,isCustomAuthorityConnectionAllowed:!1,isSecureConnectionAllowed:!1,isOnboarded:!0,isMcuCodeSigned:!0,isInRecoveryMode:!1}}})[r];export{o as getOsVersionCommandResponseMockBuilder};
2
2
  //# sourceMappingURL=GetOsVersionCommand.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../../src/api/command/os/__mocks__/GetOsVersionCommand.ts"],
4
- "sourcesContent": ["import { type GetOsVersionResponse } from \"@api/command/os/GetOsVersionCommand\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\n\nexport const getOsVersionCommandResponseMockBuilder = (\n deviceModelId: DeviceModelId = DeviceModelId.NANO_SP,\n props: Partial<GetOsVersionResponse> = {},\n): GetOsVersionResponse =>\n ({\n [DeviceModelId.NANO_SP]: {\n isBootloader: false,\n isOsu: false,\n targetId: 856686596,\n seTargetId: 856686596,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"4.03\",\n mcuBootloaderVersion: \"3.12\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.NANO_S]: {\n isBootloader: false,\n isOsu: false,\n targetId: 858783748,\n seTargetId: 858783748,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"6.4.0\",\n mcuBootloaderVersion: \"5.4.0\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.NANO_X]: {\n isBootloader: false,\n isOsu: false,\n targetId: 855638020,\n seTargetId: 855638020,\n seVersion: \"2.2.3\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"2.30\",\n mcuBootloaderVersion: \"1.16\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: 0,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n },\n [DeviceModelId.STAX]: {\n isBootloader: false,\n isOsu: false,\n targetId: 857735172,\n seTargetId: 857735172,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"5.24\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.FLEX]: {\n isBootloader: false,\n isOsu: false,\n targetId: 858783748,\n seTargetId: 858783748,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"6.4.0\",\n mcuBootloaderVersion: \"5.4.0\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: 0,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.APEX]: {\n isBootloader: false,\n isOsu: false,\n targetId: 858783748,\n seTargetId: 858783748,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"6.4.0\",\n mcuBootloaderVersion: \"5.4.0\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: 0,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n },\n })[deviceModelId];\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { type GetOsVersionResponse } from \"@api/command/os/GetOsVersionCommand\";\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\n\nexport const getOsVersionCommandResponseMockBuilder = (\n deviceModelId: DeviceModelId = DeviceModelId.NANO_SP,\n props: Partial<GetOsVersionResponse> = {},\n): GetOsVersionResponse =>\n ({\n [DeviceModelId.NANO_SP]: {\n isBootloader: false,\n isOsu: false,\n targetId: 856686596,\n seTargetId: 856686596,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"4.03\",\n mcuBootloaderVersion: \"3.12\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.NANO_S]: {\n isBootloader: false,\n isOsu: false,\n targetId: 858783748,\n seTargetId: 858783748,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"6.4.0\",\n mcuBootloaderVersion: \"5.4.0\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.NANO_X]: {\n isBootloader: false,\n isOsu: false,\n targetId: 855638020,\n seTargetId: 855638020,\n seVersion: \"2.2.3\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"2.30\",\n mcuBootloaderVersion: \"1.16\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: 0,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.STAX]: {\n isBootloader: false,\n isOsu: false,\n targetId: 857735172,\n seTargetId: 857735172,\n seVersion: \"1.3.0\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"5.24\",\n mcuBootloaderVersion: \"0.48\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: undefined,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.FLEX]: {\n isBootloader: false,\n isOsu: false,\n targetId: 858783748,\n seTargetId: 858783748,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"6.4.0\",\n mcuBootloaderVersion: \"5.4.0\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: 0,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n ...props,\n },\n [DeviceModelId.APEX]: {\n isBootloader: false,\n isOsu: false,\n targetId: 858783748,\n seTargetId: 858783748,\n seVersion: \"1.1.1\",\n seFlags: new Uint8Array([0xe6, 0x00, 0x00, 0x00]),\n mcuTargetId: undefined,\n mcuSephVersion: \"6.4.0\",\n mcuBootloaderVersion: \"5.4.0\",\n hwVersion: \"00\",\n langId: 0,\n recoverState: 0,\n secureElementFlags: {\n isPinValidated: true,\n hasMcuSerialNumber: true,\n hasValidCertificate: true,\n isCustomAuthorityConnectionAllowed: false,\n isSecureConnectionAllowed: false,\n isOnboarded: true,\n isMcuCodeSigned: true,\n isInRecoveryMode: false,\n },\n },\n })[deviceModelId];\n"],
5
+ "mappings": "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",
6
6
  "names": ["DeviceModelId", "getOsVersionCommandResponseMockBuilder", "deviceModelId", "props"]
7
7
  }