@ledgerhq/device-management-kit 1.2.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/package.json +1 -2
- package/lib/cjs/src/api/command/Errors.js +1 -1
- package/lib/cjs/src/api/command/Errors.js.map +3 -3
- package/lib/cjs/src/api/command/model/CommandResult.js +1 -1
- package/lib/cjs/src/api/command/model/CommandResult.js.map +3 -3
- package/lib/cjs/src/api/command/os/BackupStorageCommand.js +2 -0
- package/lib/cjs/src/api/command/os/BackupStorageCommand.js.map +7 -0
- package/lib/cjs/src/api/command/os/BackupStorageCommand.test.js +2 -0
- package/lib/cjs/src/api/command/os/BackupStorageCommand.test.js.map +7 -0
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js +2 -0
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.js.map +7 -0
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js +2 -0
- package/lib/cjs/src/api/command/os/GetAppStorageInfoCommand.test.js.map +7 -0
- package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js +1 -1
- package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js.map +3 -3
- package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.test.js.map +3 -3
- package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
- package/lib/cjs/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js +1 -1
- package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.js.map +2 -2
- package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js +1 -1
- package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js.map +3 -3
- package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/types.js +1 -1
- package/lib/cjs/src/api/device-action/os/GetDeviceMetadata/types.js.map +2 -2
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js +2 -0
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.js.map +7 -0
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js +2 -0
- package/lib/cjs/src/api/device-action/task/BackupAppStorageTask.test.js.map +7 -0
- package/lib/cjs/src/api/device-action/task/Errors.js +2 -0
- package/lib/cjs/src/api/device-action/task/Errors.js.map +7 -0
- package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.js +1 -1
- package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.js.map +3 -3
- package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.test.js +1 -1
- package/lib/cjs/src/api/device-action/task/GetApplicationsMetadataTask.test.js.map +3 -3
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js.map +3 -3
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +3 -3
- package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
- package/lib/cjs/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
- package/lib/cjs/src/api/index.js +1 -1
- package/lib/cjs/src/api/index.js.map +3 -3
- package/lib/cjs/src/api/model/DmkResult.js +2 -0
- package/lib/cjs/src/api/model/DmkResult.js.map +7 -0
- package/lib/cjs/src/api/model/DmkResult.test.js +2 -0
- package/lib/cjs/src/api/model/DmkResult.test.js.map +7 -0
- package/lib/cjs/src/api/network/DmkNetworkClient.js +2 -0
- package/lib/cjs/src/api/network/DmkNetworkClient.js.map +7 -0
- package/lib/cjs/src/api/network/DmkNetworkClient.test.js +2 -0
- package/lib/cjs/src/api/network/DmkNetworkClient.test.js.map +7 -0
- package/lib/cjs/src/api/network/DmkNetworkClientError.js +2 -0
- package/lib/cjs/src/api/network/DmkNetworkClientError.js.map +7 -0
- package/lib/cjs/src/api/network/DmkNetworkClientHelpers.js +2 -0
- package/lib/cjs/src/api/network/DmkNetworkClientHelpers.js.map +7 -0
- package/lib/cjs/src/api/network/DmkNetworkClientHelpers.test.js +2 -0
- package/lib/cjs/src/api/network/DmkNetworkClientHelpers.test.js.map +7 -0
- package/lib/cjs/src/api/storage/KeyValueStorage.js +2 -0
- package/lib/cjs/src/api/storage/KeyValueStorage.js.map +7 -0
- package/lib/cjs/src/api/types.js +1 -1
- package/lib/cjs/src/api/types.js.map +1 -1
- package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
- package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
- package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
- package/lib/cjs/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
- package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
- package/lib/cjs/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
- package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
- package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
- package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
- package/lib/cjs/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
- package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
- package/lib/cjs/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
- package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
- package/lib/cjs/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.js +2 -0
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.js.map +7 -0
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.test.js +2 -0
- package/lib/cjs/src/internal/manager-api/data/HttpManagerApiDataSource.test.js.map +7 -0
- package/lib/cjs/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.js +2 -0
- package/lib/cjs/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.js.map +7 -0
- package/lib/cjs/src/internal/manager-api/di/managerApiModule.js +1 -1
- package/lib/cjs/src/internal/manager-api/di/managerApiModule.js.map +3 -3
- package/lib/cjs/src/internal/manager-api/di/managerApiModule.test.js +1 -1
- package/lib/cjs/src/internal/manager-api/di/managerApiModule.test.js.map +3 -3
- package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js +1 -1
- package/lib/cjs/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +3 -3
- package/lib/esm/package.json +1 -2
- package/lib/esm/src/api/command/Errors.js +1 -1
- package/lib/esm/src/api/command/Errors.js.map +3 -3
- package/lib/esm/src/api/command/model/CommandResult.js +1 -1
- package/lib/esm/src/api/command/model/CommandResult.js.map +3 -3
- package/lib/esm/src/api/command/os/BackupStorageCommand.js +2 -0
- package/lib/esm/src/api/command/os/BackupStorageCommand.js.map +7 -0
- package/lib/esm/src/api/command/os/BackupStorageCommand.test.js +2 -0
- package/lib/esm/src/api/command/os/BackupStorageCommand.test.js.map +7 -0
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js +2 -0
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.js.map +7 -0
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js +2 -0
- package/lib/esm/src/api/command/os/GetAppStorageInfoCommand.test.js.map +7 -0
- package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js +1 -1
- package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js.map +3 -3
- package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/GetBatteryStatusCommand.test.js.map +3 -3
- package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js +1 -1
- package/lib/esm/src/api/command/use-case/SendCommandUseCase.test.js.map +3 -3
- package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js +1 -1
- package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js.map +3 -3
- package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js +1 -1
- package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js.map +3 -3
- package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.js.map +2 -2
- package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js +1 -1
- package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.js.map +3 -3
- package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js +1 -1
- package/lib/esm/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.test.js.map +3 -3
- package/lib/esm/src/api/device-action/os/GetDeviceMetadata/types.js.map +2 -2
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js +2 -0
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.js.map +7 -0
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js +2 -0
- package/lib/esm/src/api/device-action/task/BackupAppStorageTask.test.js.map +7 -0
- package/lib/esm/src/api/device-action/task/Errors.js +2 -0
- package/lib/esm/src/api/device-action/task/Errors.js.map +7 -0
- package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.js +1 -1
- package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.js.map +3 -3
- package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.test.js +1 -1
- package/lib/esm/src/api/device-action/task/GetApplicationsMetadataTask.test.js.map +3 -3
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.js.map +3 -3
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js +1 -1
- package/lib/esm/src/api/device-action/task/GetFirmwareMetadataTask.test.js.map +3 -3
- package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js +1 -1
- package/lib/esm/src/api/device-action/xstate-utils/XStateDeviceAction.js.map +2 -2
- package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js +1 -1
- package/lib/esm/src/api/device-session/use-case/DisableDeviceSessionRefresher.test.js.map +3 -3
- package/lib/esm/src/api/index.js +1 -1
- package/lib/esm/src/api/index.js.map +3 -3
- package/lib/esm/src/api/model/DmkResult.js +2 -0
- package/lib/esm/src/api/model/DmkResult.js.map +7 -0
- package/lib/esm/src/api/model/DmkResult.test.js +2 -0
- package/lib/esm/src/api/model/DmkResult.test.js.map +7 -0
- package/lib/esm/src/api/network/DmkNetworkClient.js +2 -0
- package/lib/esm/src/api/network/DmkNetworkClient.js.map +7 -0
- package/lib/esm/src/api/network/DmkNetworkClient.test.js +2 -0
- package/lib/esm/src/api/network/DmkNetworkClient.test.js.map +7 -0
- package/lib/esm/src/api/network/DmkNetworkClientError.js +2 -0
- package/lib/esm/src/api/network/DmkNetworkClientError.js.map +7 -0
- package/lib/esm/src/api/network/DmkNetworkClientHelpers.js +2 -0
- package/lib/esm/src/api/network/DmkNetworkClientHelpers.js.map +7 -0
- package/lib/esm/src/api/network/DmkNetworkClientHelpers.test.js +2 -0
- package/lib/esm/src/api/network/DmkNetworkClientHelpers.test.js.map +7 -0
- package/lib/esm/src/api/storage/KeyValueStorage.js +2 -0
- package/lib/esm/src/api/storage/KeyValueStorage.js.map +7 -0
- package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js +1 -1
- package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.test.js.map +3 -3
- package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js +1 -1
- package/lib/esm/src/internal/device-session/use-case/CloseSessionsUseCase.test.js.map +3 -3
- package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js +1 -1
- package/lib/esm/src/internal/device-session/use-case/GetDeviceSessionStateUseCase.test.js.map +3 -3
- package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js +1 -1
- package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.test.js.map +3 -3
- package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js +1 -1
- package/lib/esm/src/internal/discovery/use-case/GetConnectedDeviceUseCase.test.js.map +3 -3
- package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js +1 -1
- package/lib/esm/src/internal/discovery/use-case/ListConnectedDevicesUseCase.test.js.map +3 -3
- package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js +1 -1
- package/lib/esm/src/internal/discovery/use-case/ListenToConnectedDeviceUseCase.test.js.map +3 -3
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.js +2 -0
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.js.map +7 -0
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.test.js +2 -0
- package/lib/esm/src/internal/manager-api/data/HttpManagerApiDataSource.test.js.map +7 -0
- package/lib/esm/src/internal/manager-api/data/__mocks__/{AxiosManagerApiDataSource.js → HttpManagerApiDataSource.js} +2 -2
- package/lib/esm/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.js.map +7 -0
- package/lib/esm/src/internal/manager-api/di/managerApiModule.js +1 -1
- package/lib/esm/src/internal/manager-api/di/managerApiModule.js.map +3 -3
- package/lib/esm/src/internal/manager-api/di/managerApiModule.test.js +1 -1
- package/lib/esm/src/internal/manager-api/di/managerApiModule.test.js.map +3 -3
- package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js +1 -1
- package/lib/esm/src/internal/manager-api/service/DefaultManagerApiService.test.js.map +3 -3
- package/lib/types/src/api/command/Errors.d.ts +0 -20
- package/lib/types/src/api/command/Errors.d.ts.map +1 -1
- package/lib/types/src/api/command/model/CommandResult.d.ts +11 -17
- package/lib/types/src/api/command/model/CommandResult.d.ts.map +1 -1
- package/lib/types/src/api/command/os/BackupStorageCommand.d.ts +23 -0
- package/lib/types/src/api/command/os/BackupStorageCommand.d.ts.map +1 -0
- package/lib/types/src/api/command/os/BackupStorageCommand.test.d.ts +2 -0
- package/lib/types/src/api/command/os/BackupStorageCommand.test.d.ts.map +1 -0
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts +31 -0
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.d.ts.map +1 -0
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts +2 -0
- package/lib/types/src/api/command/os/GetAppStorageInfoCommand.test.d.ts.map +1 -0
- package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.d.ts +9 -6
- package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.d.ts +7 -6
- package/lib/types/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/GetDeviceMetadata/GetDeviceMetadataDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/GetDeviceMetadata/types.d.ts +3 -2
- package/lib/types/src/api/device-action/os/GetDeviceMetadata/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts +23 -0
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.d.ts.map +1 -0
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts +2 -0
- package/lib/types/src/api/device-action/task/BackupAppStorageTask.test.d.ts.map +1 -0
- package/lib/types/src/api/device-action/task/Errors.d.ts +12 -0
- package/lib/types/src/api/device-action/task/Errors.d.ts.map +1 -0
- package/lib/types/src/api/device-action/task/GetApplicationsMetadataTask.d.ts +5 -3
- package/lib/types/src/api/device-action/task/GetApplicationsMetadataTask.d.ts.map +1 -1
- package/lib/types/src/api/device-action/task/GetFirmwareMetadataTask.d.ts +7 -3
- package/lib/types/src/api/device-action/task/GetFirmwareMetadataTask.d.ts.map +1 -1
- package/lib/types/src/api/device-action/xstate-utils/XStateDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/index.d.ts +10 -1
- package/lib/types/src/api/index.d.ts.map +1 -1
- package/lib/types/src/api/model/DmkResult.d.ts +24 -0
- package/lib/types/src/api/model/DmkResult.d.ts.map +1 -0
- package/lib/types/src/api/model/DmkResult.test.d.ts +2 -0
- package/lib/types/src/api/model/DmkResult.test.d.ts.map +1 -0
- package/lib/types/src/api/network/DmkNetworkClient.d.ts +97 -0
- package/lib/types/src/api/network/DmkNetworkClient.d.ts.map +1 -0
- package/lib/types/src/api/network/DmkNetworkClient.test.d.ts +2 -0
- package/lib/types/src/api/network/DmkNetworkClient.test.d.ts.map +1 -0
- package/lib/types/src/api/network/DmkNetworkClientError.d.ts +33 -0
- package/lib/types/src/api/network/DmkNetworkClientError.d.ts.map +1 -0
- package/lib/types/src/api/network/DmkNetworkClientHelpers.d.ts +73 -0
- package/lib/types/src/api/network/DmkNetworkClientHelpers.d.ts.map +1 -0
- package/lib/types/src/api/network/DmkNetworkClientHelpers.test.d.ts +2 -0
- package/lib/types/src/api/network/DmkNetworkClientHelpers.test.d.ts.map +1 -0
- package/lib/types/src/api/storage/KeyValueStorage.d.ts +7 -0
- package/lib/types/src/api/storage/KeyValueStorage.d.ts.map +1 -0
- package/lib/types/src/api/types.d.ts +1 -0
- package/lib/types/src/api/types.d.ts.map +1 -1
- package/lib/types/src/internal/manager-api/data/{AxiosManagerApiDataSource.d.ts → HttpManagerApiDataSource.d.ts} +3 -3
- package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.d.ts.map +1 -0
- package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.test.d.ts +2 -0
- package/lib/types/src/internal/manager-api/data/HttpManagerApiDataSource.test.d.ts.map +1 -0
- package/lib/types/src/internal/manager-api/data/__mocks__/{AxiosManagerApiDataSource.d.ts → HttpManagerApiDataSource.d.ts} +2 -2
- package/lib/types/src/internal/manager-api/data/__mocks__/HttpManagerApiDataSource.d.ts.map +1 -0
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +3 -4
- package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.js +0 -2
- package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.js.map +0 -7
- package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +0 -2
- package/lib/cjs/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +0 -7
- package/lib/cjs/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js +0 -2
- package/lib/cjs/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js.map +0 -7
- package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.js +0 -2
- package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.js.map +0 -7
- package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js +0 -2
- package/lib/esm/src/internal/manager-api/data/AxiosManagerApiDataSource.test.js.map +0 -7
- package/lib/esm/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.js.map +0 -7
- package/lib/types/src/internal/manager-api/data/AxiosManagerApiDataSource.d.ts.map +0 -1
- package/lib/types/src/internal/manager-api/data/AxiosManagerApiDataSource.test.d.ts +0 -2
- package/lib/types/src/internal/manager-api/data/AxiosManagerApiDataSource.test.d.ts.map +0 -1
- package/lib/types/src/internal/manager-api/data/__mocks__/AxiosManagerApiDataSource.d.ts.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/command/model/CommandResult.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["import type {\n InvalidResponseFormatError,\n InvalidStatusWordError,\n} from \"@api/command/Errors\";\nimport type { GlobalCommandErrorStatusCode } from \"@api/command/utils/GlobalCommandError\";\nimport type {\n DeviceExchangeError,\n UnknownDeviceExchangeError,\n} from \"@api/Error\";\nimport type {\n DmkErrorResult,\n DmkResult,\n DmkSuccessResult,\n} from \"@api/model/DmkResult\";\nimport {\n DmkResultFactory,\n DmkResultStatus,\n isSuccessDmkResult,\n} from \"@api/model/DmkResult\";\n\nexport { DmkResultStatus as CommandResultStatus };\ntype CommandError<SpecificErrorCodes = void> =\n | DeviceExchangeError<SpecificErrorCodes | GlobalCommandErrorStatusCode>\n | InvalidResponseFormatError\n | InvalidStatusWordError\n | UnknownDeviceExchangeError;\n\nexport type CommandSuccessResult<Data> = DmkSuccessResult<Data>;\nexport type CommandErrorResult<SpecificErrorCodes = void> = DmkErrorResult<\n CommandError<SpecificErrorCodes>\n>;\nexport type CommandResult<Data, SpecificErrorCodes = void> = DmkResult<\n Data,\n CommandError<SpecificErrorCodes>\n>;\n\nexport function CommandResultFactory<Data, SpecificErrorCodes = void>({\n data,\n error,\n}:\n | { data: Data; error?: undefined }\n | {\n data?: undefined;\n error: CommandError<SpecificErrorCodes>;\n }): CommandResult<Data, SpecificErrorCodes> {\n if (error !== undefined) {\n return DmkResultFactory({\n error,\n });\n }\n\n return DmkResultFactory({\n data,\n });\n}\n\nexport function isSuccessCommandResult<Data, StatusCode>(\n result: CommandResult<Data, StatusCode>,\n): result is CommandSuccessResult<Data> {\n return isSuccessDmkResult(result);\n}\n"],
|
|
5
|
+
"mappings": "AAcA,OACE,oBAAAA,EACA,mBAAAC,EACA,sBAAAC,MACK,uBAkBA,SAASC,EAAsD,CACpE,KAAAC,EACA,MAAAC,CACF,EAKgD,CAC9C,OAAIA,IAAU,OACLC,EAAiB,CACtB,MAAAD,CACF,CAAC,EAGIC,EAAiB,CACtB,KAAAF,CACF,CAAC,CACH,CAEO,SAASG,EACdC,EACsC,CACtC,OAAOC,EAAmBD,CAAM,CAClC",
|
|
6
|
+
"names": ["DmkResultFactory", "DmkResultStatus", "isSuccessDmkResult", "CommandResultFactory", "data", "error", "DmkResultFactory", "isSuccessCommandResult", "result", "isSuccessDmkResult"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ApduBuilder as d}from"../../apdu/utils/ApduBuilder";import{ApduParser as p}from"../../apdu/utils/ApduParser";import{InvalidStatusWordError as s}from"../../command/Errors";import{CommandResultFactory as e}from"../../command/model/CommandResult";import{isCommandErrorCode as c}from"../../command/utils/CommandErrors";import{CommandUtils as u}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as i}from"../../command/utils/GlobalCommandError";import{DeviceExchangeError as C}from"../../Error";const m={5123:{message:"Invalid context. Get info must be called."},5419:{message:"Failed to generate AES key."},"541a":{message:"Internal error, crypto operation failed."},"541b":{message:"Internal error, failed to compute AES CMAC."},"541c":{message:"Failed to encrypt the app storage backup."},"622f":{message:"Invalid device state, recovery mode."},6642:{message:"Invalid backup state, backup already performed."}};class g extends C{constructor(r){super({tag:"BackupStorageCommandError",...r})}}class h{name="BackupStorage";header={cla:224,ins:107,p1:0,p2:0};getApdu(){return new d(this.header).build()}parseResponse(r){const o=new p(r);if(!u.isSuccessResponse(r)){const t=o.encodeToHexaString(r.statusCode);return c(t,m)?e({error:new g({...m[t],errorCode:t})}):e({error:i.handle(r)})}const a=o.extractFieldByLength(o.getUnparsedRemainingLength());return a===void 0?e({error:new s("Failed to extract app storage data chunk")}):e({data:{chunkData:a,chunkSize:a.length}})}}export{m as BACKUP_STORAGE_ERRORS,h as BackupStorageCommand,g as BackupStorageCommandError};
|
|
2
|
+
//# sourceMappingURL=BackupStorageCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/api/command/os/BackupStorageCommand.ts"],
|
|
4
|
+
"sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport {\n type CommandErrors,\n isCommandErrorCode,\n} from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type BackupStorageCommandResponse = {\n chunkData: Uint8Array;\n chunkSize: number;\n};\n\nexport type BackupStorageCommandErrorCodes =\n | \"5123\"\n | \"5419\"\n | \"541a\"\n | \"541b\"\n | \"541c\"\n | \"622f\"\n | \"6642\";\n\nexport const BACKUP_STORAGE_ERRORS: CommandErrors<BackupStorageCommandErrorCodes> =\n {\n \"5123\": { message: \"Invalid context. Get info must be called.\" },\n \"5419\": { message: \"Failed to generate AES key.\" },\n \"541a\": { message: \"Internal error, crypto operation failed.\" },\n \"541b\": { message: \"Internal error, failed to compute AES CMAC.\" },\n \"541c\": { message: \"Failed to encrypt the app storage backup.\" },\n \"622f\": { message: \"Invalid device state, recovery mode.\" },\n \"6642\": { message: \"Invalid backup state, backup already performed.\" },\n };\n\nexport class BackupStorageCommandError extends DeviceExchangeError<BackupStorageCommandErrorCodes> {\n constructor(args: CommandErrorArgs<BackupStorageCommandErrorCodes>) {\n super({ tag: \"BackupStorageCommandError\", ...args });\n }\n}\n\nexport type BackupStorageCommandResult = CommandResult<\n BackupStorageCommandResponse,\n BackupStorageCommandErrorCodes\n>;\n\nexport class BackupStorageCommand\n implements\n Command<BackupStorageCommandResponse, void, BackupStorageCommandErrorCodes>\n{\n readonly name = \"BackupStorage\";\n\n private readonly header = {\n cla: 0xe0,\n ins: 0x6b,\n p1: 0x00,\n p2: 0x00,\n };\n\n getApdu(): Apdu {\n return new ApduBuilder(this.header).build();\n }\n\n parseResponse(apduResponse: ApduResponse): BackupStorageCommandResult {\n const parser = new ApduParser(apduResponse);\n\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, BACKUP_STORAGE_ERRORS)) {\n return CommandResultFactory({\n error: new BackupStorageCommandError({\n ...BACKUP_STORAGE_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n const appStorageDataChunk = parser.extractFieldByLength(\n parser.getUnparsedRemainingLength(),\n );\n\n if (appStorageDataChunk === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage data chunk\",\n ),\n });\n }\n\n return CommandResultFactory({\n data: {\n chunkData: appStorageDataChunk,\n chunkSize: appStorageDataChunk.length,\n },\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,cAAAC,MAAkB,6BAE3B,OAAS,0BAAAC,MAA8B,sBACvC,OAEE,wBAAAC,MACK,mCACP,OAEE,sBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAgBpD,MAAMC,EACX,CACE,KAAQ,CAAE,QAAS,2CAA4C,EAC/D,KAAQ,CAAE,QAAS,6BAA8B,EACjD,OAAQ,CAAE,QAAS,0CAA2C,EAC9D,OAAQ,CAAE,QAAS,6CAA8C,EACjE,OAAQ,CAAE,QAAS,2CAA4C,EAC/D,OAAQ,CAAE,QAAS,sCAAuC,EAC1D,KAAQ,CAAE,QAAS,iDAAkD,CACvE,EAEK,MAAMC,UAAkCF,CAAoD,CACjG,YAAYG,EAAwD,CAClE,MAAM,CAAE,IAAK,4BAA6B,GAAGA,CAAK,CAAC,CACrD,CACF,CAOO,MAAMC,CAGb,CACW,KAAO,gBAEC,OAAS,CACxB,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EAEA,SAAgB,CACd,OAAO,IAAIX,EAAY,KAAK,MAAM,EAAE,MAAM,CAC5C,CAEA,cAAcY,EAAwD,CACpE,MAAMC,EAAS,IAAIZ,EAAWW,CAAY,EAE1C,GAAI,CAACP,EAAa,kBAAkBO,CAAY,EAAG,CACjD,MAAME,EAAYD,EAAO,mBAAmBD,EAAa,UAAU,EACnE,OAAIR,EAAmBU,EAAWN,CAAqB,EAC9CL,EAAqB,CAC1B,MAAO,IAAIM,EAA0B,CACnC,GAAGD,EAAsBM,CAAS,EAClC,UAAAA,CACF,CAAC,CACH,CAAC,EAEIX,EAAqB,CAC1B,MAAOG,EAA0B,OAAOM,CAAY,CACtD,CAAC,CACH,CAEA,MAAMG,EAAsBF,EAAO,qBACjCA,EAAO,2BAA2B,CACpC,EAEA,OAAIE,IAAwB,OACnBZ,EAAqB,CAC1B,MAAO,IAAID,EACT,0CACF,CACF,CAAC,EAGIC,EAAqB,CAC1B,KAAM,CACJ,UAAWY,EACX,UAAWA,EAAoB,MACjC,CACF,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["ApduBuilder", "ApduParser", "InvalidStatusWordError", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "BACKUP_STORAGE_ERRORS", "BackupStorageCommandError", "args", "BackupStorageCommand", "apduResponse", "parser", "errorCode", "appStorageDataChunk"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{isSuccessCommandResult as r}from"../../command/model/CommandResult";import{BackupStorageCommand as o}from"../../command/os/BackupStorageCommand";import{ApduResponse as c}from"../../device-session/ApduResponse";describe("BackupStorageCommand",()=>{describe("Name",()=>{it("name should be 'BackupStorage'",()=>{const e=new o().name;expect(e).toBe("BackupStorage")})}),describe("Command",()=>{it("should return the correct APDU for backing up app storage",()=>{const t=Uint8Array.from([224,107,0,0,0]),e=new o().getApdu();expect(e.getRawApdu()).toEqual(t)})}),describe("Success response",()=>{it("should return the app storage data chunk as a hex string",()=>{const t=Uint8Array.from([144,0]),e=new c({statusCode:t,data:Uint8Array.from([171,205,239,1,35])}),a=new o().parseResponse(e);expect(r(a)).toBe(!0),expect(a).toEqual({data:{chunkData:Uint8Array.from([171,205,239,1,35]),chunkSize:5},status:"SUCCESS"})})}),describe("Error response",()=>{it.each([{description:"get info was not called first",statusCode:[81,35],expectedMessage:"Invalid context. Get info must be called."},{description:"AES key generation fails",statusCode:[84,25],expectedMessage:"Failed to generate AES key."},{description:"crypto operation fails",statusCode:[84,26],expectedMessage:"Internal error, crypto operation failed."},{description:"AES CMAC computation fails",statusCode:[84,27],expectedMessage:"Internal error, failed to compute AES CMAC."},{description:"encryption of backup fails",statusCode:[84,28],expectedMessage:"Failed to encrypt the app storage backup."},{description:"device is in recovery mode",statusCode:[98,47],expectedMessage:"Invalid device state, recovery mode."},{description:"backup was already performed",statusCode:[102,66],expectedMessage:"Invalid backup state, backup already performed."},{description:"error code is not specific to BackupStorageCommand (global error)",statusCode:[85,21],expectedMessage:"Device is locked."}])("should return error when $description",({statusCode:t,expectedMessage:e})=>{const a=new c({statusCode:Uint8Array.from(t),data:new Uint8Array([])}),s=new o().parseResponse(a);expect(r(s)).toBe(!1),expect(s.error.message).toBe(e)})})});
|
|
2
|
+
//# sourceMappingURL=BackupStorageCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/api/command/os/BackupStorageCommand.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { BackupStorageCommand } from \"@api/command/os/BackupStorageCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"BackupStorageCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'BackupStorage'\", () => {\n // ARRANGE\n const command = new BackupStorageCommand();\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"BackupStorage\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for backing up app storage\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([0xe0, 0x6b, 0x00, 0x00, 0x00]);\n\n // ACT\n const apdu = new BackupStorageCommand().getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return the app storage data chunk as a hex string\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([0xab, 0xcd, 0xef, 0x01, 0x23]),\n });\n\n // ACT\n const result = new BackupStorageCommand().parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n chunkData: Uint8Array.from([0xab, 0xcd, 0xef, 0x01, 0x23]),\n chunkSize: 5,\n },\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"get info was not called first\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Invalid context. Get info must be called.\",\n },\n {\n description: \"AES key generation fails\",\n statusCode: [0x54, 0x19],\n expectedMessage: \"Failed to generate AES key.\",\n },\n {\n description: \"crypto operation fails\",\n statusCode: [0x54, 0x1a],\n expectedMessage: \"Internal error, crypto operation failed.\",\n },\n {\n description: \"AES CMAC computation fails\",\n statusCode: [0x54, 0x1b],\n expectedMessage: \"Internal error, failed to compute AES CMAC.\",\n },\n {\n description: \"encryption of backup fails\",\n statusCode: [0x54, 0x1c],\n expectedMessage: \"Failed to encrypt the app storage backup.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x62, 0x2f],\n expectedMessage: \"Invalid device state, recovery mode.\",\n },\n {\n description: \"backup was already performed\",\n statusCode: [0x66, 0x42],\n expectedMessage: \"Invalid backup state, backup already performed.\",\n },\n {\n description:\n \"error code is not specific to BackupStorageCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new BackupStorageCommand().parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,0BAAAA,MAA8B,mCACvC,OAAS,wBAAAC,MAA4B,uCACrC,OAAS,gBAAAC,MAAoB,mCAE7B,SAAS,uBAAwB,IAAM,CACrC,SAAS,OAAQ,IAAM,CACrB,GAAG,iCAAkC,IAAM,CAKzC,MAAMC,EAHU,IAAIF,EAAqB,EAGpB,KAGrB,OAAOE,CAAI,EAAE,KAAK,eAAe,CACnC,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,4DAA6D,IAAM,CAEpE,MAAMC,EAAe,WAAW,KAAK,CAAC,IAAM,IAAM,EAAM,EAAM,CAAI,CAAC,EAG7DC,EAAO,IAAIJ,EAAqB,EAAE,QAAQ,EAGhD,OAAOI,EAAK,WAAW,CAAC,EAAE,QAAQD,CAAY,CAChD,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,2DAA4D,IAAM,CAEnE,MAAME,EAAa,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACzCC,EAAW,IAAIL,EAAa,CAChC,WAAAI,EACA,KAAM,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAM,EAAI,CAAC,CACtD,CAAC,EAGKE,EAAS,IAAIP,EAAqB,EAAE,cAAcM,CAAQ,EAGhE,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAI,EAChD,OAAOA,CAAM,EAAE,QAAQ,CACrB,KAAM,CACJ,UAAW,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAM,EAAI,CAAC,EACzD,UAAW,CACb,EACA,OAAQ,SACV,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,KAAK,CACN,CACE,YAAa,gCACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,2CACnB,EACA,CACE,YAAa,2BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,6BACnB,EACA,CACE,YAAa,yBACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,0CACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,6CACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,2CACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,sCACnB,EACA,CACE,YAAa,+BACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,iDACnB,EACA,CACE,YACE,oEACF,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,mBACnB,CACF,CAAC,EACC,wCACA,CAAC,CAAE,WAAAF,EAAY,gBAAAG,CAAgB,IAAM,CAEnC,MAAMF,EAAW,IAAIL,EAAa,CAChC,WAAY,WAAW,KAAKI,CAAU,EACtC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKE,EAAS,IAAIP,EAAqB,EAAE,cAAcM,CAAQ,EAGhE,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAQA,EAAuC,MAAM,OAAO,EAAE,KAC5DC,CACF,CACF,CACF,CACF,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["isSuccessCommandResult", "BackupStorageCommand", "ApduResponse", "name", "expectedApdu", "apdu", "statusCode", "response", "result", "expectedMessage"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ApduBuilder as C}from"../../apdu/utils/ApduBuilder";import{ApduParser as S}from"../../apdu/utils/ApduParser";import{InvalidStatusWordError as p}from"../../command/Errors";import{CommandResultFactory as t}from"../../command/model/CommandResult";import{isCommandErrorCode as l}from"../../command/utils/CommandErrors";import{CommandUtils as A}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as c}from"../../command/utils/GlobalCommandError";import{DeviceExchangeError as u}from"../../Error";const g={5123:{message:"Application not found."},"662f":{message:"Device is in recovery mode."},"670a":{message:"Invalid application name length, two chars minimum."}};class I extends u{constructor(e){super({tag:"GetAppStorageInfoCommandError",...e})}}class b{constructor(e){this.args=e}name="GetAppStorageInfo";header={cla:224,ins:106,p1:0,p2:0};getApdu(){const{appName:e}=this.args;return new C(this.header).addAsciiStringToData(e).build()}parseResponse(e){const r=new S(e);if(!A.isSuccessResponse(e)){const o=r.encodeToHexaString(e.statusCode);return l(o,g)?t({error:new I({...g[o],errorCode:o})}):t({error:c.handle(e)})}const a=r.extract32BitUInt();if(a===void 0)return t({error:new p("Failed to extract app storage size")});let s="",m=!1,i=!1,d="";if(a!==0){const o=r.extract32BitUInt();if(o===void 0)return t({error:new p("Failed to extract app storage version")});s=o.toString(16);const n=r.extract16BitUInt();if(n===void 0)return t({error:new p("Failed to extract app storage properties")});m=(n&1)===1,i=(n&2)===2,d=r.encodeToHexaString(r.extractFieldByLength(32))}return t({data:{storageSize:a,storageVersion:s,hasSettings:m,hasData:i,storageHash:d}})}}export{g as GET_APP_STORAGE_INFO_ERRORS,b as GetAppStorageInfoCommand,I as GetAppStorageInfoCommandError};
|
|
2
|
+
//# sourceMappingURL=GetAppStorageInfoCommand.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/api/command/os/GetAppStorageInfoCommand.ts"],
|
|
4
|
+
"sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport { InvalidStatusWordError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { isCommandErrorCode } from \"@api/command/utils/CommandErrors\";\nimport { type CommandErrors } from \"@api/command/utils/CommandErrors\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { type CommandErrorArgs, DeviceExchangeError } from \"@api/Error\";\n\nexport type GetAppStorageInfoCommandArgs = {\n appName: string;\n};\n\nexport type GetAppStorageInfoCommandResponse = {\n storageSize: number;\n storageVersion: string;\n hasSettings: boolean;\n hasData: boolean;\n storageHash: string;\n};\n\nexport type GetAppStorageInfoCommandErrorCodes = \"5123\" | \"662f\" | \"670a\";\n\nexport const GET_APP_STORAGE_INFO_ERRORS: CommandErrors<GetAppStorageInfoCommandErrorCodes> =\n {\n \"5123\": { message: \"Application not found.\" },\n \"662f\": { message: \"Device is in recovery mode.\" },\n \"670a\": { message: \"Invalid application name length, two chars minimum.\" },\n };\n\nexport class GetAppStorageInfoCommandError extends DeviceExchangeError<GetAppStorageInfoCommandErrorCodes> {\n constructor(args: CommandErrorArgs<GetAppStorageInfoCommandErrorCodes>) {\n super({ tag: \"GetAppStorageInfoCommandError\", ...args });\n }\n}\n\nexport type GetAppStorageInfoCommandResult = CommandResult<\n GetAppStorageInfoCommandResponse,\n GetAppStorageInfoCommandErrorCodes\n>;\n\nexport class GetAppStorageInfoCommand\n implements\n Command<\n GetAppStorageInfoCommandResponse,\n GetAppStorageInfoCommandArgs,\n GetAppStorageInfoCommandErrorCodes\n >\n{\n readonly name = \"GetAppStorageInfo\";\n\n private readonly header = {\n cla: 0xe0,\n ins: 0x6a,\n p1: 0x00,\n p2: 0x00,\n };\n\n constructor(private readonly args: GetAppStorageInfoCommandArgs) {}\n\n getApdu(): Apdu {\n const { appName } = this.args;\n return new ApduBuilder(this.header).addAsciiStringToData(appName).build();\n }\n\n parseResponse(apduResponse: ApduResponse): GetAppStorageInfoCommandResult {\n const parser = new ApduParser(apduResponse);\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n const errorCode = parser.encodeToHexaString(apduResponse.statusCode);\n if (isCommandErrorCode(errorCode, GET_APP_STORAGE_INFO_ERRORS)) {\n return CommandResultFactory({\n error: new GetAppStorageInfoCommandError({\n ...GET_APP_STORAGE_INFO_ERRORS[errorCode],\n errorCode,\n }),\n });\n }\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n\n const appStorageSize = parser.extract32BitUInt();\n if (appStorageSize === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Failed to extract app storage size\"),\n });\n }\n\n let appStorageVersion = \"\";\n let hasAppStorageSettings = false;\n let hasAppStorageData = false;\n let hash = \"\";\n\n if (appStorageSize !== 0) {\n const appStorageVersionNumber = parser.extract32BitUInt();\n if (appStorageVersionNumber === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage version\",\n ),\n });\n }\n appStorageVersion = appStorageVersionNumber.toString(16);\n /**\n * The properties byte is a bitfield with the following structure:\n * - Bit 0: hasSettings\n * - Bit 1: hasData\n */\n const appStorageProperties = parser.extract16BitUInt();\n if (appStorageProperties === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Failed to extract app storage properties\",\n ),\n });\n }\n\n hasAppStorageSettings = (appStorageProperties & 1) === 1;\n hasAppStorageData = (appStorageProperties & 2) === 2;\n hash = parser.encodeToHexaString(parser.extractFieldByLength(0x20));\n }\n\n return CommandResultFactory({\n data: {\n storageSize: appStorageSize,\n storageVersion: appStorageVersion,\n hasSettings: hasAppStorageSettings,\n hasData: hasAppStorageData,\n storageHash: hash,\n },\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,eAAAA,MAAmB,8BAC5B,OAAS,cAAAC,MAAkB,6BAE3B,OAAS,0BAAAC,MAA8B,sBACvC,OAEE,wBAAAC,MACK,mCACP,OAAS,sBAAAC,MAA0B,mCAEnC,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAE1C,OAAgC,uBAAAC,MAA2B,aAgBpD,MAAMC,EACX,CACE,KAAQ,CAAE,QAAS,wBAAyB,EAC5C,OAAQ,CAAE,QAAS,6BAA8B,EACjD,OAAQ,CAAE,QAAS,qDAAsD,CAC3E,EAEK,MAAMC,UAAsCF,CAAwD,CACzG,YAAYG,EAA4D,CACtE,MAAM,CAAE,IAAK,gCAAiC,GAAGA,CAAK,CAAC,CACzD,CACF,CAOO,MAAMC,CAOb,CAUE,YAA6BD,EAAoC,CAApC,UAAAA,CAAqC,CATzD,KAAO,oBAEC,OAAS,CACxB,IAAK,IACL,IAAK,IACL,GAAI,EACJ,GAAI,CACN,EAIA,SAAgB,CACd,KAAM,CAAE,QAAAE,CAAQ,EAAI,KAAK,KACzB,OAAO,IAAIZ,EAAY,KAAK,MAAM,EAAE,qBAAqBY,CAAO,EAAE,MAAM,CAC1E,CAEA,cAAcC,EAA4D,CACxE,MAAMC,EAAS,IAAIb,EAAWY,CAAY,EAC1C,GAAI,CAACR,EAAa,kBAAkBQ,CAAY,EAAG,CACjD,MAAME,EAAYD,EAAO,mBAAmBD,EAAa,UAAU,EACnE,OAAIT,EAAmBW,EAAWP,CAA2B,EACpDL,EAAqB,CAC1B,MAAO,IAAIM,EAA8B,CACvC,GAAGD,EAA4BO,CAAS,EACxC,UAAAA,CACF,CAAC,CACH,CAAC,EAEIZ,EAAqB,CAC1B,MAAOG,EAA0B,OAAOO,CAAY,CACtD,CAAC,CACH,CAEA,MAAMG,EAAiBF,EAAO,iBAAiB,EAC/C,GAAIE,IAAmB,OACrB,OAAOb,EAAqB,CAC1B,MAAO,IAAID,EAAuB,oCAAoC,CACxE,CAAC,EAGH,IAAIe,EAAoB,GACpBC,EAAwB,GACxBC,EAAoB,GACpBC,EAAO,GAEX,GAAIJ,IAAmB,EAAG,CACxB,MAAMK,EAA0BP,EAAO,iBAAiB,EACxD,GAAIO,IAA4B,OAC9B,OAAOlB,EAAqB,CAC1B,MAAO,IAAID,EACT,uCACF,CACF,CAAC,EAEHe,EAAoBI,EAAwB,SAAS,EAAE,EAMvD,MAAMC,EAAuBR,EAAO,iBAAiB,EACrD,GAAIQ,IAAyB,OAC3B,OAAOnB,EAAqB,CAC1B,MAAO,IAAID,EACT,0CACF,CACF,CAAC,EAGHgB,GAAyBI,EAAuB,KAAO,EACvDH,GAAqBG,EAAuB,KAAO,EACnDF,EAAON,EAAO,mBAAmBA,EAAO,qBAAqB,EAAI,CAAC,CACpE,CAEA,OAAOX,EAAqB,CAC1B,KAAM,CACJ,YAAaa,EACb,eAAgBC,EAChB,YAAaC,EACb,QAASC,EACT,YAAaC,CACf,CACF,CAAC,CACH,CACF",
|
|
6
|
+
"names": ["ApduBuilder", "ApduParser", "InvalidStatusWordError", "CommandResultFactory", "isCommandErrorCode", "CommandUtils", "GlobalCommandErrorHandler", "DeviceExchangeError", "GET_APP_STORAGE_INFO_ERRORS", "GetAppStorageInfoCommandError", "args", "GetAppStorageInfoCommand", "appName", "apduResponse", "parser", "errorCode", "appStorageSize", "appStorageVersion", "hasAppStorageSettings", "hasAppStorageData", "hash", "appStorageVersionNumber", "appStorageProperties"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{InvalidStatusWordError as p}from"../../command/Errors";import{isSuccessCommandResult as s}from"../../command/model/CommandResult";import{GetAppStorageInfoCommand as o}from"../../command/os/GetAppStorageInfoCommand";import{ApduResponse as n}from"../../device-session/ApduResponse";describe("GetAppStorageInfoCommand",()=>{describe("Name",()=>{it("name should be 'GetAppStorageInfo'",()=>{const e=new o({appName:"MyApp"}).name;expect(e).toBe("GetAppStorageInfo")})}),describe("Command",()=>{it("should return the correct APDU for getting the app storage info",()=>{const t=Uint8Array.from([224,106,0,0,5,77,121,65,112,112]),e=new o({appName:"MyApp"}).getApdu();expect(e.getRawApdu()).toEqual(t)})}),describe("Success response",()=>{it("should return correct app storage info when app storage size is not 0",()=>{const t=Uint8Array.from([144,0]),e=new n({statusCode:t,data:Uint8Array.from([0,0,0,1,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1])}),r=new o({appName:"MyApp"}).parseResponse(e);expect(s(r)).toBe(!0),expect(r).toEqual({data:{storageSize:1,storageVersion:"1",hasSettings:!0,hasData:!0,storageHash:"0000000000000000000000000000000000000000000000000000000000000001"},status:"SUCCESS"})}),it("should return correct app storage info when app storage size is 0",()=>{const t=Uint8Array.from([144,0]),e=new n({statusCode:t,data:Uint8Array.from([0,0,0,0])}),r=new o({appName:"MyApp"}).parseResponse(e);expect(s(r)).toBe(!0),expect(r).toEqual({data:{storageSize:0,storageVersion:"",hasSettings:!1,hasData:!1,storageHash:""},status:"SUCCESS"})})}),describe("Error response",()=>{it.each([{description:"application is not found",statusCode:[81,35],expectedMessage:"Application not found."},{description:"device is in recovery mode",statusCode:[102,47],expectedMessage:"Device is in recovery mode."},{description:"application name length is invalid",statusCode:[103,10],expectedMessage:"Invalid application name length, two chars minimum."},{description:"error code is not specific to GetAppStorageInfoCommand (global error)",statusCode:[85,21],expectedMessage:"Device is locked."}])("should return error when $description",({statusCode:t,expectedMessage:e})=>{const r=new n({statusCode:Uint8Array.from(t),data:new Uint8Array([])}),a=new o({appName:"MyApp"}).parseResponse(r);expect(s(a)).toBe(!1),expect(a.error.message).toBe(e)}),it.each([{description:"app storage size extraction fails",data:new Uint8Array([]),expectedOriginalMessage:"Failed to extract app storage size"},{description:"app storage version extraction fails",data:Uint8Array.from([0,0,0,1]),expectedOriginalMessage:"Failed to extract app storage version"},{description:"app storage properties extraction fails",data:Uint8Array.from([0,0,0,1,0,0,0,1]),expectedOriginalMessage:"Failed to extract app storage properties"}])("should return error when $description",({data:t,expectedOriginalMessage:e})=>{const r=new n({statusCode:Uint8Array.from([144,0]),data:t}),a=new o({appName:"MyApp"}).parseResponse(r);expect(s(a)).toBe(!1),expect(a.error).toBeInstanceOf(p),expect(a.error.originalError?.message).toBe(e)})})});
|
|
2
|
+
//# sourceMappingURL=GetAppStorageInfoCommand.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/api/command/os/GetAppStorageInfoCommand.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { InvalidStatusWordError } from \"@api/command/Errors\";\nimport { isSuccessCommandResult } from \"@api/command/model/CommandResult\";\nimport { GetAppStorageInfoCommand } from \"@api/command/os/GetAppStorageInfoCommand\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\ndescribe(\"GetAppStorageInfoCommand\", () => {\n describe(\"Name\", () => {\n it(\"name should be 'GetAppStorageInfo'\", () => {\n // ARRANGE\n const command = new GetAppStorageInfoCommand({ appName: \"MyApp\" });\n\n // ACT\n const name = command.name;\n\n // ASSERT\n expect(name).toBe(\"GetAppStorageInfo\");\n });\n });\n\n describe(\"Command\", () => {\n it(\"should return the correct APDU for getting the app storage info\", () => {\n // ARRANGE\n const expectedApdu = Uint8Array.from([\n 0xe0, 0x6a, 0x00, 0x00, 0x05, 0x4d, 0x79, 0x41, 0x70, 0x70,\n ]);\n\n // ACT\n const apdu = new GetAppStorageInfoCommand({ appName: \"MyApp\" }).getApdu();\n\n // ASSERT\n expect(apdu.getRawApdu()).toEqual(expectedApdu);\n });\n });\n\n describe(\"Success response\", () => {\n it(\"should return correct app storage info when app storage size is not 0\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([\n // appStorageSize (32-bit BE) = 1\n 0x00, 0x00, 0x00, 0x01,\n // appStorageVersion (32-bit BE) = 1\n 0x00, 0x00, 0x00, 0x01,\n // appStorageProperties (16-bit BE) = 0x0003 (bits 0 and 1 set)\n 0x00, 0x03,\n // appStorageHash (32 bytes)\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,\n ]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n storageSize: 1,\n storageVersion: \"1\",\n hasSettings: true,\n hasData: true,\n storageHash:\n \"0000000000000000000000000000000000000000000000000000000000000001\",\n },\n status: \"SUCCESS\",\n });\n });\n\n it(\"should return correct app storage info when app storage size is 0\", () => {\n // ARRANGE\n const statusCode = Uint8Array.from([0x90, 0x00]);\n const response = new ApduResponse({\n statusCode,\n data: Uint8Array.from([\n // appStorageSize (32-bit BE) = 0\n 0x00, 0x00, 0x00, 0x00,\n ]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(true);\n expect(result).toEqual({\n data: {\n storageSize: 0,\n storageVersion: \"\",\n hasSettings: false,\n hasData: false,\n storageHash: \"\",\n },\n status: \"SUCCESS\",\n });\n });\n });\n\n describe(\"Error response\", () => {\n it.each([\n {\n description: \"application is not found\",\n statusCode: [0x51, 0x23],\n expectedMessage: \"Application not found.\",\n },\n {\n description: \"device is in recovery mode\",\n statusCode: [0x66, 0x2f],\n expectedMessage: \"Device is in recovery mode.\",\n },\n {\n description: \"application name length is invalid\",\n statusCode: [0x67, 0x0a],\n expectedMessage: \"Invalid application name length, two chars minimum.\",\n },\n {\n description:\n \"error code is not specific to GetAppStorageInfoCommand (global error)\",\n statusCode: [0x55, 0x15],\n expectedMessage: \"Device is locked.\",\n },\n ])(\n \"should return error when $description\",\n ({ statusCode, expectedMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from(statusCode),\n data: new Uint8Array([]),\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect((result as unknown as { error: Error }).error.message).toBe(\n expectedMessage,\n );\n },\n );\n\n it.each([\n {\n description: \"app storage size extraction fails\",\n data: new Uint8Array([]),\n expectedOriginalMessage: \"Failed to extract app storage size\",\n },\n {\n description: \"app storage version extraction fails\",\n data: Uint8Array.from([0x00, 0x00, 0x00, 0x01]),\n expectedOriginalMessage: \"Failed to extract app storage version\",\n },\n {\n description: \"app storage properties extraction fails\",\n data: Uint8Array.from([0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01]),\n expectedOriginalMessage: \"Failed to extract app storage properties\",\n },\n ])(\n \"should return error when $description\",\n ({ data, expectedOriginalMessage }) => {\n // ARRANGE\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data,\n });\n\n // ACT\n const result = new GetAppStorageInfoCommand({\n appName: \"MyApp\",\n }).parseResponse(response);\n\n // ASSERT\n expect(isSuccessCommandResult(result)).toBe(false);\n expect(\n (result as unknown as { error: InvalidStatusWordError }).error,\n ).toBeInstanceOf(InvalidStatusWordError);\n expect(\n (result as unknown as { error: InvalidStatusWordError }).error\n .originalError?.message,\n ).toBe(expectedOriginalMessage);\n },\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,0BAAAA,MAA8B,sBACvC,OAAS,0BAAAC,MAA8B,mCACvC,OAAS,4BAAAC,MAAgC,2CACzC,OAAS,gBAAAC,MAAoB,mCAE7B,SAAS,2BAA4B,IAAM,CACzC,SAAS,OAAQ,IAAM,CACrB,GAAG,qCAAsC,IAAM,CAK7C,MAAMC,EAHU,IAAIF,EAAyB,CAAE,QAAS,OAAQ,CAAC,EAG5C,KAGrB,OAAOE,CAAI,EAAE,KAAK,mBAAmB,CACvC,CAAC,CACH,CAAC,EAED,SAAS,UAAW,IAAM,CACxB,GAAG,kEAAmE,IAAM,CAE1E,MAAMC,EAAe,WAAW,KAAK,CACnC,IAAM,IAAM,EAAM,EAAM,EAAM,GAAM,IAAM,GAAM,IAAM,GACxD,CAAC,EAGKC,EAAO,IAAIJ,EAAyB,CAAE,QAAS,OAAQ,CAAC,EAAE,QAAQ,EAGxE,OAAOI,EAAK,WAAW,CAAC,EAAE,QAAQD,CAAY,CAChD,CAAC,CACH,CAAC,EAED,SAAS,mBAAoB,IAAM,CACjC,GAAG,wEAAyE,IAAM,CAEhF,MAAME,EAAa,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACzCC,EAAW,IAAIL,EAAa,CAChC,WAAAI,EACA,KAAM,WAAW,KAAK,CAEpB,EAAM,EAAM,EAAM,EAElB,EAAM,EAAM,EAAM,EAElB,EAAM,EAEN,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC5D,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAC5D,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CACxD,CAAC,CACH,CAAC,EAGKE,EAAS,IAAIP,EAAyB,CAC1C,QAAS,OACX,CAAC,EAAE,cAAcM,CAAQ,EAGzB,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAI,EAChD,OAAOA,CAAM,EAAE,QAAQ,CACrB,KAAM,CACJ,YAAa,EACb,eAAgB,IAChB,YAAa,GACb,QAAS,GACT,YACE,kEACJ,EACA,OAAQ,SACV,CAAC,CACH,CAAC,EAED,GAAG,oEAAqE,IAAM,CAE5E,MAAMF,EAAa,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACzCC,EAAW,IAAIL,EAAa,CAChC,WAAAI,EACA,KAAM,WAAW,KAAK,CAEpB,EAAM,EAAM,EAAM,CACpB,CAAC,CACH,CAAC,EAGKE,EAAS,IAAIP,EAAyB,CAC1C,QAAS,OACX,CAAC,EAAE,cAAcM,CAAQ,EAGzB,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAI,EAChD,OAAOA,CAAM,EAAE,QAAQ,CACrB,KAAM,CACJ,YAAa,EACb,eAAgB,GAChB,YAAa,GACb,QAAS,GACT,YAAa,EACf,EACA,OAAQ,SACV,CAAC,CACH,CAAC,CACH,CAAC,EAED,SAAS,iBAAkB,IAAM,CAC/B,GAAG,KAAK,CACN,CACE,YAAa,2BACb,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,wBACnB,EACA,CACE,YAAa,6BACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,6BACnB,EACA,CACE,YAAa,qCACb,WAAY,CAAC,IAAM,EAAI,EACvB,gBAAiB,qDACnB,EACA,CACE,YACE,wEACF,WAAY,CAAC,GAAM,EAAI,EACvB,gBAAiB,mBACnB,CACF,CAAC,EACC,wCACA,CAAC,CAAE,WAAAF,EAAY,gBAAAG,CAAgB,IAAM,CAEnC,MAAMF,EAAW,IAAIL,EAAa,CAChC,WAAY,WAAW,KAAKI,CAAU,EACtC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKE,EAAS,IAAIP,EAAyB,CAC1C,QAAS,OACX,CAAC,EAAE,cAAcM,CAAQ,EAGzB,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OAAQA,EAAuC,MAAM,OAAO,EAAE,KAC5DC,CACF,CACF,CACF,EAEA,GAAG,KAAK,CACN,CACE,YAAa,oCACb,KAAM,IAAI,WAAW,CAAC,CAAC,EACvB,wBAAyB,oCAC3B,EACA,CACE,YAAa,uCACb,KAAM,WAAW,KAAK,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAC9C,wBAAyB,uCAC3B,EACA,CACE,YAAa,0CACb,KAAM,WAAW,KAAK,CAAC,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,CAAI,CAAC,EACtE,wBAAyB,0CAC3B,CACF,CAAC,EACC,wCACA,CAAC,CAAE,KAAAC,EAAM,wBAAAC,CAAwB,IAAM,CAErC,MAAMJ,EAAW,IAAIL,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAAQ,CACF,CAAC,EAGKF,EAAS,IAAIP,EAAyB,CAC1C,QAAS,OACX,CAAC,EAAE,cAAcM,CAAQ,EAGzB,OAAOP,EAAuBQ,CAAM,CAAC,EAAE,KAAK,EAAK,EACjD,OACGA,EAAwD,KAC3D,EAAE,eAAeT,CAAsB,EACvC,OACGS,EAAwD,MACtD,eAAe,OACpB,EAAE,KAAKG,CAAuB,CAChC,CACF,CACF,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["InvalidStatusWordError", "isSuccessCommandResult", "GetAppStorageInfoCommand", "ApduResponse", "name", "expectedApdu", "apdu", "statusCode", "response", "result", "expectedMessage", "data", "expectedOriginalMessage"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as u}from"../../apdu/utils/ApduBuilder";import{ApduParser as
|
|
1
|
+
import{ApduBuilder as u}from"../../apdu/utils/ApduBuilder";import{ApduParser as i}from"../../apdu/utils/ApduParser";import{InvalidResponseFormatError as p}from"../../command/Errors";import{CommandResultFactory as n}from"../../command/model/CommandResult";import{CommandUtils as E}from"../../command/utils/CommandUtils";import{GlobalCommandErrorHandler as m}from"../../command/utils/GlobalCommandError";var R=(e=>(e[e.BATTERY_PERCENTAGE=0]="BATTERY_PERCENTAGE",e[e.BATTERY_VOLTAGE=1]="BATTERY_VOLTAGE",e[e.BATTERY_TEMPERATURE=2]="BATTERY_TEMPERATURE",e[e.BATTERY_CURRENT=3]="BATTERY_CURRENT",e[e.BATTERY_FLAGS=4]="BATTERY_FLAGS",e))(R||{}),B=(r=>(r[r.NONE=0]="NONE",r[r.USB=1]="USB",r[r.QI=2]="QI",r))(B||{});class x{name="getBatteryStatus";args;constructor(s){this.args=s}getApdu(){const s={cla:224,ins:16,p1:0,p2:this.args.statusType};return new u(s).build()}parseResponse(s){if(!E.isSuccessResponse(s))return n({error:m.handle(s)});const a=new i(s),r=t=>n({error:new p(t)});switch(this.args.statusType){case 0:{const t=a.extract8BitUInt();return t===void 0?r("getBatteryStatus: missing battery percentage in response"):n({data:t>100?-1:t})}case 1:{const t=a.extract16BitUInt();return t===void 0?r("getBatteryStatus: missing battery voltage in response"):n({data:t})}case 2:case 3:{const t=a.extract8BitUInt();return t===void 0?r(this.args.statusType===2?"getBatteryStatus: missing battery temperature in response":"getBatteryStatus: missing battery current in response"):n({data:t<<24>>24})}case 4:{const t=a.extract32BitUInt();if(t===void 0)return r("getBatteryStatus: missing battery flags in response");const e=!!(t&8),o=!e&&!!(t&1);return n({data:{charging:o?2:e?1:0,issueCharging:!!(t&16),issueTemperature:!!(t&32),issueBattery:!!(t&128)}})}default:return r("getBatteryStatus: unsupported battery status type")}}}export{R as BatteryStatusType,B as ChargingMode,x as GetBatteryStatusCommand};
|
|
2
2
|
//# sourceMappingURL=GetBatteryStatusCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/command/os/GetBatteryStatusCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, type ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport {
|
|
5
|
-
"mappings": "AACA,OAAS,eAAAA,MAAyC,8BAClD,OAAS,cAAAC,MAAkB,6BAE3B,
|
|
6
|
-
"names": ["ApduBuilder", "ApduParser", "
|
|
4
|
+
"sourcesContent": ["import { type Apdu } from \"@api/apdu/model/Apdu\";\nimport { ApduBuilder, type ApduBuilderArgs } from \"@api/apdu/utils/ApduBuilder\";\nimport { ApduParser } from \"@api/apdu/utils/ApduParser\";\nimport { type Command } from \"@api/command/Command\";\nimport { InvalidResponseFormatError } from \"@api/command/Errors\";\nimport {\n type CommandResult,\n CommandResultFactory,\n} from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\n\n/**\n * The type of battery information to retrieve.\n */\nexport enum BatteryStatusType {\n /**\n * The command response will be the battery percentage.\n */\n BATTERY_PERCENTAGE = 0x00,\n /**\n * The command response will be the battery voltage in mV.\n */\n BATTERY_VOLTAGE = 0x01,\n /**\n * The command response will be the battery temperature in degree celsius\n */\n BATTERY_TEMPERATURE = 0x02,\n /**\n * The command response will be the battery current in mA.\n */\n BATTERY_CURRENT = 0x03,\n /**\n * The command response will be the battery status (cf. `BatteryStatusFlags`)\n */\n BATTERY_FLAGS = 0x04,\n}\n\nexport enum ChargingMode {\n NONE = 0x00,\n USB = 0x01,\n QI = 0x02,\n}\n\nenum FlagMasks {\n CHARGING = 0x00000001,\n USB = 0x00000002,\n USB_POWERED = 0x00000008,\n BLE = 0x00000004,\n ISSUE_BATTERY = 0x00000080,\n ISSUE_CHARGING = 0x00000010,\n ISSUE_TEMPERATURE = 0x00000020,\n}\n\nexport type BatteryStatusFlags = {\n readonly charging: ChargingMode;\n readonly issueCharging: boolean;\n readonly issueTemperature: boolean;\n readonly issueBattery: boolean;\n};\n\n/**\n * The response type depends on the `statusType` parameter sent with the command,\n * cf. `BatteryStatusType`.\n */\nexport type GetBatteryStatusResponse = number | BatteryStatusFlags;\n\nexport type GetBatteryStatusArgs = {\n readonly statusType: BatteryStatusType;\n};\n\n/**\n * Command to get the battery status of the device.\n * The parameter statusType defines the type of information to retrieve, cf.\n * `BatteryStatusType`.\n *\n * WARNING: this command should not be sent within a logic of polling as it is\n * going to decrease the overall performance of the communication with the device.\n */\nexport class GetBatteryStatusCommand\n implements Command<GetBatteryStatusResponse, GetBatteryStatusArgs>\n{\n readonly name = \"getBatteryStatus\";\n readonly args: GetBatteryStatusArgs;\n\n constructor(args: GetBatteryStatusArgs) {\n this.args = args;\n }\n\n getApdu(): Apdu {\n const getBatteryStatusArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x10,\n p1: 0x00,\n p2: this.args.statusType,\n };\n return new ApduBuilder(getBatteryStatusArgs).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetBatteryStatusResponse> {\n if (!CommandUtils.isSuccessResponse(apduResponse)) {\n return CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(apduResponse),\n });\n }\n const parser = new ApduParser(apduResponse);\n const invalidResponseFormat = (message: string) =>\n CommandResultFactory<GetBatteryStatusResponse>({\n error: new InvalidResponseFormatError(message),\n });\n\n switch (this.args.statusType) {\n case BatteryStatusType.BATTERY_PERCENTAGE: {\n const percentage = parser.extract8BitUInt();\n if (percentage === undefined) {\n return invalidResponseFormat(\n \"getBatteryStatus: missing battery percentage in response\",\n );\n }\n return CommandResultFactory({\n data: percentage > 100 ? -1 : percentage,\n });\n }\n case BatteryStatusType.BATTERY_VOLTAGE: {\n const data = parser.extract16BitUInt();\n if (data === undefined) {\n return invalidResponseFormat(\n \"getBatteryStatus: missing battery voltage in response\",\n );\n }\n return CommandResultFactory({\n data,\n });\n }\n case BatteryStatusType.BATTERY_TEMPERATURE:\n case BatteryStatusType.BATTERY_CURRENT: {\n const data = parser.extract8BitUInt();\n if (data === undefined) {\n return invalidResponseFormat(\n this.args.statusType === BatteryStatusType.BATTERY_TEMPERATURE\n ? \"getBatteryStatus: missing battery temperature in response\"\n : \"getBatteryStatus: missing battery current in response\",\n );\n }\n return CommandResultFactory({\n data: (data << 24) >> 24,\n });\n }\n case BatteryStatusType.BATTERY_FLAGS: {\n const flags = parser.extract32BitUInt();\n if (flags === undefined) {\n return invalidResponseFormat(\n \"getBatteryStatus: missing battery flags in response\",\n );\n }\n const chargingUSB = !!(flags & FlagMasks.USB_POWERED);\n const chargingQi = !chargingUSB && !!(flags & FlagMasks.CHARGING);\n return CommandResultFactory({\n data: {\n charging: chargingQi\n ? ChargingMode.QI\n : chargingUSB\n ? ChargingMode.USB\n : ChargingMode.NONE,\n issueCharging: !!(flags & FlagMasks.ISSUE_CHARGING),\n issueTemperature: !!(flags & FlagMasks.ISSUE_TEMPERATURE),\n issueBattery: !!(flags & FlagMasks.ISSUE_BATTERY),\n },\n });\n }\n default:\n return invalidResponseFormat(\n \"getBatteryStatus: unsupported battery status type\",\n );\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "AACA,OAAS,eAAAA,MAAyC,8BAClD,OAAS,cAAAC,MAAkB,6BAE3B,OAAS,8BAAAC,MAAkC,sBAC3C,OAEE,wBAAAC,MACK,mCACP,OAAS,gBAAAC,MAAoB,kCAC7B,OAAS,6BAAAC,MAAiC,wCAMnC,IAAKC,OAIVA,IAAA,mBAAqB,GAArB,qBAIAA,IAAA,gBAAkB,GAAlB,kBAIAA,IAAA,oBAAsB,GAAtB,sBAIAA,IAAA,gBAAkB,GAAlB,kBAIAA,IAAA,cAAgB,GAAhB,gBApBUA,OAAA,IAuBAC,OACVA,IAAA,KAAO,GAAP,OACAA,IAAA,IAAM,GAAN,MACAA,IAAA,GAAK,GAAL,KAHUA,OAAA,IAyCL,MAAMC,CAEb,CACW,KAAO,mBACP,KAET,YAAYC,EAA4B,CACtC,KAAK,KAAOA,CACd,CAEA,SAAgB,CACd,MAAMC,EAAwC,CAC5C,IAAK,IACL,IAAK,GACL,GAAI,EACJ,GAAI,KAAK,KAAK,UAChB,EACA,OAAO,IAAIC,EAAYD,CAAoB,EAAE,MAAM,CACrD,CAEA,cACEE,EACyC,CACzC,GAAI,CAACC,EAAa,kBAAkBD,CAAY,EAC9C,OAAOE,EAAqB,CAC1B,MAAOC,EAA0B,OAAOH,CAAY,CACtD,CAAC,EAEH,MAAMI,EAAS,IAAIC,EAAWL,CAAY,EACpCM,EAAyBC,GAC7BL,EAA+C,CAC7C,MAAO,IAAIM,EAA2BD,CAAO,CAC/C,CAAC,EAEH,OAAQ,KAAK,KAAK,WAAY,CAC5B,IAAK,GAAsC,CACzC,MAAME,EAAaL,EAAO,gBAAgB,EAC1C,OAAIK,IAAe,OACVH,EACL,0DACF,EAEKJ,EAAqB,CAC1B,KAAMO,EAAa,IAAM,GAAKA,CAChC,CAAC,CACH,CACA,IAAK,GAAmC,CACtC,MAAMC,EAAON,EAAO,iBAAiB,EACrC,OAAIM,IAAS,OACJJ,EACL,uDACF,EAEKJ,EAAqB,CAC1B,KAAAQ,CACF,CAAC,CACH,CACA,IAAK,GACL,IAAK,GAAmC,CACtC,MAAMA,EAAON,EAAO,gBAAgB,EACpC,OAAIM,IAAS,OACJJ,EACL,KAAK,KAAK,aAAe,EACrB,4DACA,uDACN,EAEKJ,EAAqB,CAC1B,KAAOQ,GAAQ,IAAO,EACxB,CAAC,CACH,CACA,IAAK,GAAiC,CACpC,MAAMC,EAAQP,EAAO,iBAAiB,EACtC,GAAIO,IAAU,OACZ,OAAOL,EACL,qDACF,EAEF,MAAMM,EAAc,CAAC,EAAED,EAAQ,GACzBE,EAAa,CAACD,GAAe,CAAC,EAAED,EAAQ,GAC9C,OAAOT,EAAqB,CAC1B,KAAM,CACJ,SAAUW,EACN,EACAD,EACE,EACA,EACN,cAAe,CAAC,EAAED,EAAQ,IAC1B,iBAAkB,CAAC,EAAEA,EAAQ,IAC7B,aAAc,CAAC,EAAEA,EAAQ,IAC3B,CACF,CAAC,CACH,CACA,QACE,OAAOL,EACL,mDACF,CACJ,CACF,CACF",
|
|
6
|
+
"names": ["ApduBuilder", "ApduParser", "InvalidResponseFormatError", "CommandResultFactory", "CommandUtils", "GlobalCommandErrorHandler", "BatteryStatusType", "ChargingMode", "GetBatteryStatusCommand", "args", "getBatteryStatusArgs", "ApduBuilder", "apduResponse", "CommandUtils", "CommandResultFactory", "GlobalCommandErrorHandler", "parser", "ApduParser", "invalidResponseFormat", "message", "InvalidResponseFormatError", "percentage", "data", "flags", "chargingUSB", "chargingQi"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{CommandResultFactory as
|
|
1
|
+
import{InvalidResponseFormatError as c}from"../../command/Errors";import{CommandResultFactory as r,isSuccessCommandResult as x}from"../../command/model/CommandResult";import{GlobalCommandErrorHandler as _}from"../../command/utils/GlobalCommandError";import{ApduResponse as n}from"../../device-session/ApduResponse";import{BatteryStatusType as a,ChargingMode as u,GetBatteryStatusCommand as s}from"./GetBatteryStatusCommand";const y=Uint8Array.from([224,16,0,0,0]),g=Uint8Array.from([224,16,0,1,0]),w=Uint8Array.from([224,16,0,2,0]),P=Uint8Array.from([224,16,0,3,0]),h=Uint8Array.from([224,16,0,4,0]),i=Uint8Array.from([55,144,0]),p=Uint8Array.from([101,144,0]),d=Uint8Array.from([15,255,144,0]),T=Uint8Array.from([16,144,0]),S=Uint8Array.from([255,144,0]),m=Uint8Array.from([0,0,0,15,144,0]),R=Uint8Array.from([0,0,0,1,144,0]),l=Uint8Array.from([0,0,0,0,144,0]),E=Uint8Array.from([144,0]),A=Uint8Array.from([103,0]);describe("GetBatteryStatus",()=>{describe("name",()=>{it("should be 'getBatteryStatus'",()=>{const t=new s({statusType:a.BATTERY_PERCENTAGE});expect(t.name).toBe("getBatteryStatus")})}),describe("getApdu",()=>{it("should return the GetBatteryStatus APDU",()=>{expect(new s({statusType:a.BATTERY_PERCENTAGE}).getApdu().getRawApdu()).toStrictEqual(y),expect(new s({statusType:a.BATTERY_VOLTAGE}).getApdu().getRawApdu()).toStrictEqual(g),expect(new s({statusType:a.BATTERY_TEMPERATURE}).getApdu().getRawApdu()).toStrictEqual(w),expect(new s({statusType:a.BATTERY_CURRENT}).getApdu().getRawApdu()).toStrictEqual(P),expect(new s({statusType:a.BATTERY_FLAGS}).getApdu().getRawApdu()).toStrictEqual(h)})}),describe("parseResponse",()=>{it("should parse the response when querying percentage",()=>{const t=new n({statusCode:i.slice(-2),data:i.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({data:55}))}),it("should return -1 when battery percentage is above 100",()=>{const t=new n({statusCode:p.slice(-2),data:p.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({data:-1}))}),it("should parse the response when querying voltage",()=>{const t=new n({statusCode:d.slice(-2),data:d.slice(0,-2)}),e=new s({statusType:a.BATTERY_VOLTAGE}).parseResponse(t);expect(e).toStrictEqual(r({data:4095}))}),it("should parse the response when querying temperature",()=>{const t=new n({statusCode:T.slice(-2),data:T.slice(0,-2)}),e=new s({statusType:a.BATTERY_TEMPERATURE}).parseResponse(t);expect(e).toStrictEqual(r({data:16}))}),it("should parse the response when querying current",()=>{const t=new n({statusCode:S.slice(-2),data:S.slice(0,-2)}),e=new s({statusType:a.BATTERY_CURRENT}).parseResponse(t);expect(e).toStrictEqual(r({data:-1}))}),it("should parse the response when querying flags",()=>{const t=new n({statusCode:m.slice(-2),data:m.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({data:{charging:u.USB,issueCharging:!1,issueTemperature:!1,issueBattery:!1}}))}),it("should parse the response when querying flags with Qi charging",()=>{const t=new n({statusCode:R.slice(-2),data:R.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({data:{charging:u.QI,issueCharging:!1,issueTemperature:!1,issueBattery:!1}}))}),it("should parse the response when querying flags with no charging",()=>{const t=new n({statusCode:l.slice(-2),data:l.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({data:{charging:u.NONE,issueCharging:!1,issueTemperature:!1,issueBattery:!1}}))}),it("should return a handled command error when the status word is not successful",()=>{const t=new n({statusCode:A.slice(-2),data:A.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({error:_.handle(t)}))}),it("should return InvalidResponseFormatError when expected battery data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_PERCENTAGE}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery percentage in response")}))}),it("should return InvalidResponseFormatError when voltage data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_VOLTAGE}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery voltage in response")}))}),it("should return InvalidResponseFormatError when temperature data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_TEMPERATURE}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery temperature in response")}))}),it("should return InvalidResponseFormatError when current data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_CURRENT}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery current in response")}))}),it("should return InvalidResponseFormatError when flags data is missing",()=>{const t=new n({statusCode:E.slice(-2),data:E.slice(0,-2)}),e=new s({statusType:a.BATTERY_FLAGS}).parseResponse(t);expect(e).toStrictEqual(r({error:new c("getBatteryStatus: missing battery flags in response")}))}),it("should return InvalidResponseFormatError when status type is unsupported",()=>{const t=new n({statusCode:i.slice(-2),data:i.slice(0,-2)}),e=new s({statusType:255}).parseResponse(t);expect(x(e)).toBeFalsy(),expect(e).toStrictEqual(r({error:new c("getBatteryStatus: unsupported battery status type")}))})})});
|
|
2
2
|
//# sourceMappingURL=GetBatteryStatusCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/command/os/GetBatteryStatusCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nimport {\n BatteryStatusType,\n ChargingMode,\n GetBatteryStatusCommand,\n} from \"./GetBatteryStatusCommand\";\n\nconst GET_BATTERY_STATUS_APDU_PERCENTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x00, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_VOLTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x01, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_TEMPERATURE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x02, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_CURRENT = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x03, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_FLAGS = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x04, 0x00,\n]);\n\nconst PERCENTAGE_RESPONSE_HEX = Uint8Array.from([0x37, 0x90, 0x00]);\nconst VOLTAGE_RESPONSE_HEX = Uint8Array.from([0x0f, 0xff, 0x90, 0x00]);\nconst TEMPERATURE_RESPONSE_HEX = Uint8Array.from([0x10, 0x90, 0x00]);\nconst FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x0f, 0x90, 0x00,\n]);\nconst FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]);\n\ndescribe(\"GetBatteryStatus\", () => {\n describe(\"name\", () => {\n it(\"should be 'getBatteryStatus'\", () => {\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n expect(command.name).toBe(\"getBatteryStatus\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the GetBatteryStatus APDU\", () => {\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_PERCENTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_VOLTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_TEMPERATURE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_CURRENT);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_FLAGS);\n });\n });\n describe(\"parseResponse\", () => {\n it(\"should parse the response when querying percentage\", () => {\n const PERCENTAGE_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const parsed = command.parseResponse(PERCENTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 55 }));\n });\n it(\"should parse the response when querying voltage\", () => {\n const VOLTAGE_RESPONSE = new ApduResponse({\n statusCode: VOLTAGE_RESPONSE_HEX.slice(-2),\n data: VOLTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n });\n const parsed = command.parseResponse(VOLTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 4095 }));\n });\n it(\"should parse the response when querying temperature\", () => {\n const TEMPERATURE_RESPONSE = new ApduResponse({\n statusCode: TEMPERATURE_RESPONSE_HEX.slice(-2),\n data: TEMPERATURE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n });\n const parsed = command.parseResponse(TEMPERATURE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 16 }));\n });\n it(\"should parse the response when querying flags\", () => {\n const FLAGS_RESPONSE = new ApduResponse({\n statusCode: FLAGS_RESPONSE_HEX.slice(-2),\n data: FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.USB,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should return an error if the response returned unsupported format\", () => {\n const FAILED_RESPONSE = new ApduResponse({\n statusCode: FAILED_RESPONSE_HEX.slice(-2),\n data: FAILED_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const result = command.parseResponse(FAILED_RESPONSE);\n expect(isSuccessCommandResult(result)).toBeFalsy();\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,OACE,
|
|
6
|
-
"names": ["CommandResultFactory", "isSuccessCommandResult", "ApduResponse", "BatteryStatusType", "ChargingMode", "GetBatteryStatusCommand", "GET_BATTERY_STATUS_APDU_PERCENTAGE", "GET_BATTERY_STATUS_APDU_VOLTAGE", "GET_BATTERY_STATUS_APDU_TEMPERATURE", "GET_BATTERY_STATUS_APDU_CURRENT", "GET_BATTERY_STATUS_APDU_FLAGS", "PERCENTAGE_RESPONSE_HEX", "VOLTAGE_RESPONSE_HEX", "TEMPERATURE_RESPONSE_HEX", "FLAGS_RESPONSE_HEX", "FAILED_RESPONSE_HEX", "command", "PERCENTAGE_RESPONSE", "parsed", "VOLTAGE_RESPONSE", "TEMPERATURE_RESPONSE", "FLAGS_RESPONSE", "FAILED_RESPONSE", "result"]
|
|
4
|
+
"sourcesContent": ["import { InvalidResponseFormatError } from \"@api/command/Errors\";\nimport {\n CommandResultFactory,\n isSuccessCommandResult,\n} from \"@api/command/model/CommandResult\";\nimport { GlobalCommandErrorHandler } from \"@api/command/utils/GlobalCommandError\";\nimport { ApduResponse } from \"@api/device-session/ApduResponse\";\n\nimport {\n BatteryStatusType,\n ChargingMode,\n GetBatteryStatusCommand,\n} from \"./GetBatteryStatusCommand\";\n\nconst GET_BATTERY_STATUS_APDU_PERCENTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x00, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_VOLTAGE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x01, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_TEMPERATURE = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x02, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_CURRENT = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x03, 0x00,\n]);\nconst GET_BATTERY_STATUS_APDU_FLAGS = Uint8Array.from([\n 0xe0, 0x10, 0x00, 0x04, 0x00,\n]);\n\nconst PERCENTAGE_RESPONSE_HEX = Uint8Array.from([0x37, 0x90, 0x00]);\nconst PERCENTAGE_OVERFLOW_RESPONSE_HEX = Uint8Array.from([0x65, 0x90, 0x00]);\nconst VOLTAGE_RESPONSE_HEX = Uint8Array.from([0x0f, 0xff, 0x90, 0x00]);\nconst TEMPERATURE_RESPONSE_HEX = Uint8Array.from([0x10, 0x90, 0x00]);\nconst CURRENT_RESPONSE_HEX = Uint8Array.from([0xff, 0x90, 0x00]);\nconst FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x0f, 0x90, 0x00,\n]);\nconst QI_FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x01, 0x90, 0x00,\n]);\nconst NONE_FLAGS_RESPONSE_HEX = Uint8Array.from([\n 0x00, 0x00, 0x00, 0x00, 0x90, 0x00,\n]);\nconst EMPTY_SUCCESS_RESPONSE_HEX = Uint8Array.from([0x90, 0x00]);\nconst FAILED_RESPONSE_HEX = Uint8Array.from([0x67, 0x00]);\n\ndescribe(\"GetBatteryStatus\", () => {\n describe(\"name\", () => {\n it(\"should be 'getBatteryStatus'\", () => {\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n expect(command.name).toBe(\"getBatteryStatus\");\n });\n });\n\n describe(\"getApdu\", () => {\n it(\"should return the GetBatteryStatus APDU\", () => {\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_PERCENTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_VOLTAGE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_TEMPERATURE);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_CURRENT);\n expect(\n new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n })\n .getApdu()\n .getRawApdu(),\n ).toStrictEqual(GET_BATTERY_STATUS_APDU_FLAGS);\n });\n });\n describe(\"parseResponse\", () => {\n it(\"should parse the response when querying percentage\", () => {\n const PERCENTAGE_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const parsed = command.parseResponse(PERCENTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 55 }));\n });\n it(\"should return -1 when battery percentage is above 100\", () => {\n const PERCENTAGE_OVERFLOW_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_OVERFLOW_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_OVERFLOW_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const parsed = command.parseResponse(PERCENTAGE_OVERFLOW_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: -1 }));\n });\n it(\"should parse the response when querying voltage\", () => {\n const VOLTAGE_RESPONSE = new ApduResponse({\n statusCode: VOLTAGE_RESPONSE_HEX.slice(-2),\n data: VOLTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n });\n const parsed = command.parseResponse(VOLTAGE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 4095 }));\n });\n it(\"should parse the response when querying temperature\", () => {\n const TEMPERATURE_RESPONSE = new ApduResponse({\n statusCode: TEMPERATURE_RESPONSE_HEX.slice(-2),\n data: TEMPERATURE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n });\n const parsed = command.parseResponse(TEMPERATURE_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: 16 }));\n });\n it(\"should parse the response when querying current\", () => {\n const CURRENT_RESPONSE = new ApduResponse({\n statusCode: CURRENT_RESPONSE_HEX.slice(-2),\n data: CURRENT_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n });\n const parsed = command.parseResponse(CURRENT_RESPONSE);\n expect(parsed).toStrictEqual(CommandResultFactory({ data: -1 }));\n });\n it(\"should parse the response when querying flags\", () => {\n const FLAGS_RESPONSE = new ApduResponse({\n statusCode: FLAGS_RESPONSE_HEX.slice(-2),\n data: FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.USB,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should parse the response when querying flags with Qi charging\", () => {\n const QI_FLAGS_RESPONSE = new ApduResponse({\n statusCode: QI_FLAGS_RESPONSE_HEX.slice(-2),\n data: QI_FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(QI_FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.QI,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should parse the response when querying flags with no charging\", () => {\n const NONE_FLAGS_RESPONSE = new ApduResponse({\n statusCode: NONE_FLAGS_RESPONSE_HEX.slice(-2),\n data: NONE_FLAGS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const parsed = command.parseResponse(NONE_FLAGS_RESPONSE);\n expect(parsed).toStrictEqual(\n CommandResultFactory({\n data: {\n charging: ChargingMode.NONE,\n issueCharging: false,\n issueTemperature: false,\n issueBattery: false,\n },\n }),\n );\n });\n it(\"should return a handled command error when the status word is not successful\", () => {\n const FAILED_RESPONSE = new ApduResponse({\n statusCode: FAILED_RESPONSE_HEX.slice(-2),\n data: FAILED_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const result = command.parseResponse(FAILED_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: GlobalCommandErrorHandler.handle(FAILED_RESPONSE),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when expected battery data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_PERCENTAGE,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery percentage in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when voltage data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_VOLTAGE,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery voltage in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when temperature data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_TEMPERATURE,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery temperature in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when current data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_CURRENT,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery current in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when flags data is missing\", () => {\n const EMPTY_SUCCESS_RESPONSE = new ApduResponse({\n statusCode: EMPTY_SUCCESS_RESPONSE_HEX.slice(-2),\n data: EMPTY_SUCCESS_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: BatteryStatusType.BATTERY_FLAGS,\n });\n const result = command.parseResponse(EMPTY_SUCCESS_RESPONSE);\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: missing battery flags in response\",\n ),\n }),\n );\n });\n it(\"should return InvalidResponseFormatError when status type is unsupported\", () => {\n const PERCENTAGE_RESPONSE = new ApduResponse({\n statusCode: PERCENTAGE_RESPONSE_HEX.slice(-2),\n data: PERCENTAGE_RESPONSE_HEX.slice(0, -2),\n });\n const command = new GetBatteryStatusCommand({\n statusType: 0xff as BatteryStatusType,\n });\n const result = command.parseResponse(PERCENTAGE_RESPONSE);\n expect(isSuccessCommandResult(result)).toBeFalsy();\n expect(result).toStrictEqual(\n CommandResultFactory({\n error: new InvalidResponseFormatError(\n \"getBatteryStatus: unsupported battery status type\",\n ),\n }),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["InvalidResponseFormatError", "CommandResultFactory", "isSuccessCommandResult", "GlobalCommandErrorHandler", "ApduResponse", "BatteryStatusType", "ChargingMode", "GetBatteryStatusCommand", "GET_BATTERY_STATUS_APDU_PERCENTAGE", "GET_BATTERY_STATUS_APDU_VOLTAGE", "GET_BATTERY_STATUS_APDU_TEMPERATURE", "GET_BATTERY_STATUS_APDU_CURRENT", "GET_BATTERY_STATUS_APDU_FLAGS", "PERCENTAGE_RESPONSE_HEX", "PERCENTAGE_OVERFLOW_RESPONSE_HEX", "VOLTAGE_RESPONSE_HEX", "TEMPERATURE_RESPONSE_HEX", "CURRENT_RESPONSE_HEX", "FLAGS_RESPONSE_HEX", "QI_FLAGS_RESPONSE_HEX", "NONE_FLAGS_RESPONSE_HEX", "EMPTY_SUCCESS_RESPONSE_HEX", "FAILED_RESPONSE_HEX", "command", "PERCENTAGE_RESPONSE", "parsed", "PERCENTAGE_OVERFLOW_RESPONSE", "VOLTAGE_RESPONSE", "TEMPERATURE_RESPONSE", "CURRENT_RESPONSE", "FLAGS_RESPONSE", "QI_FLAGS_RESPONSE", "NONE_FLAGS_RESPONSE", "FAILED_RESPONSE", "result", "EMPTY_SUCCESS_RESPONSE"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Left as p}from"purify-ts";import{CommandResultStatus as n}from"../../command/model/CommandResult";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as f}from"../../../internal/device-session/data/DeviceSessionRefresherConst";import{deviceSessionStubBuilder as v}from"../../../internal/device-session/model/DeviceSession.stub";import{DefaultDeviceSessionService as l}from"../../../internal/device-session/service/DefaultDeviceSessionService";import{DefaultLoggerPublisherService as g}from"../../../internal/logger-publisher/service/DefaultLoggerPublisherService";import{
|
|
1
|
+
import{Left as p}from"purify-ts";import{CommandResultStatus as n}from"../../command/model/CommandResult";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as f}from"../../../internal/device-session/data/DeviceSessionRefresherConst";import{deviceSessionStubBuilder as v}from"../../../internal/device-session/model/DeviceSession.stub";import{DefaultDeviceSessionService as l}from"../../../internal/device-session/service/DefaultDeviceSessionService";import{DefaultLoggerPublisherService as g}from"../../../internal/logger-publisher/service/DefaultLoggerPublisherService";import{HttpManagerApiDataSource as D}from"../../../internal/manager-api/data/HttpManagerApiDataSource";import{DefaultManagerApiService as C}from"../../../internal/manager-api/service/DefaultManagerApiService";import{DefaultSecureChannelDataSource as h}from"../../../internal/secure-channel/data/DefaultSecureChannelDataSource";import{DefaultSecureChannelService as y}from"../../../internal/secure-channel/service/DefaultSecureChannelService";import{SendCommandUseCase as a}from"./SendCommandUseCase";let o,t,i,c,m,u;const S="fakeSessionId";let r={name:"testCommand",getApdu:vi.fn(),parseResponse:vi.fn()};describe("SendCommandUseCase",()=>{beforeEach(()=>{o=new g([],"send-command-use-case"),t=new l(()=>o),c=new D({}),i=new C(c),u=new h({}),m=new y(u),r={name:"testCommand",getApdu:vi.fn(),parseResponse:vi.fn()}}),afterEach(()=>{vi.restoreAllMocks()}),it("should send a command to a connected device",async()=>{const e=v({},()=>o,i,m,f);t.addDeviceSession(e);const s=new a(t,()=>o);vi.spyOn(e,"sendCommand").mockResolvedValue({status:n.Success,data:void 0});const d=await s.execute({sessionId:S,command:r});e.close(),expect(d).toStrictEqual({status:n.Success,data:void 0})}),it("should throw an error if the session is not found",async()=>{const e=new a(t,()=>o);vi.spyOn(t,"getDeviceSessionById").mockReturnValue(p({_tag:"DeviceSessionNotFound"}));const s=e.execute({sessionId:S,command:r});await expect(s).rejects.toMatchObject({_tag:"DeviceSessionNotFound"})})});
|
|
2
2
|
//# sourceMappingURL=SendCommandUseCase.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/command/use-case/SendCommandUseCase.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Left } from \"purify-ts\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { CommandResultStatus } from \"@api/command/model/CommandResult\";\nimport { type DmkConfig } from \"@api/DmkConfig\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { deviceSessionStubBuilder } from \"@internal/device-session/model/DeviceSession.stub\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { type DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport {
|
|
5
|
-
"mappings": "AAAA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,mCAGpC,OAAS,4CAAAC,MAAgD,4DACzD,OAAS,4BAAAC,MAAgC,oDACzC,OAAS,+BAAAC,MAAmC,+DAE5C,OAAS,iCAAAC,MAAqC,mEAC9C,OAAS,
|
|
6
|
-
"names": ["Left", "CommandResultStatus", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "deviceSessionStubBuilder", "DefaultDeviceSessionService", "DefaultLoggerPublisherService", "
|
|
4
|
+
"sourcesContent": ["import { Left } from \"purify-ts\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { CommandResultStatus } from \"@api/command/model/CommandResult\";\nimport { type DmkConfig } from \"@api/DmkConfig\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { deviceSessionStubBuilder } from \"@internal/device-session/model/DeviceSession.stub\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { type DeviceSessionService } from \"@internal/device-session/service/DeviceSessionService\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport { HttpManagerApiDataSource } from \"@internal/manager-api/data/HttpManagerApiDataSource\";\nimport { type ManagerApiDataSource } from \"@internal/manager-api/data/ManagerApiDataSource\";\nimport { DefaultManagerApiService } from \"@internal/manager-api/service/DefaultManagerApiService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { DefaultSecureChannelDataSource } from \"@internal/secure-channel/data/DefaultSecureChannelDataSource\";\nimport { type SecureChannelDataSource } from \"@internal/secure-channel/data/SecureChannelDataSource\";\nimport { DefaultSecureChannelService } from \"@internal/secure-channel/service/DefaultSecureChannelService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { SendCommandUseCase } from \"./SendCommandUseCase\";\n\nlet logger: LoggerPublisherService;\nlet sessionService: DeviceSessionService;\nlet managerApi: ManagerApiService;\nlet managerApiDataSource: ManagerApiDataSource;\nlet secureChannel: SecureChannelService;\nlet secureChannelDataSource: SecureChannelDataSource;\nconst fakeSessionId = \"fakeSessionId\";\nlet command: Command<{ status: string }, void, void> = {\n name: \"testCommand\",\n getApdu: vi.fn(),\n parseResponse: vi.fn(),\n};\n\ndescribe(\"SendCommandUseCase\", () => {\n beforeEach(() => {\n logger = new DefaultLoggerPublisherService([], \"send-command-use-case\");\n sessionService = new DefaultDeviceSessionService(() => logger);\n managerApiDataSource = new HttpManagerApiDataSource({} as DmkConfig);\n managerApi = new DefaultManagerApiService(managerApiDataSource);\n secureChannelDataSource = new DefaultSecureChannelDataSource(\n {} as DmkConfig,\n );\n secureChannel = new DefaultSecureChannelService(secureChannelDataSource);\n command = {\n name: \"testCommand\",\n getApdu: vi.fn(),\n parseResponse: vi.fn(),\n };\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n it(\"should send a command to a connected device\", async () => {\n const deviceSession = deviceSessionStubBuilder(\n {},\n () => logger,\n managerApi,\n secureChannel,\n DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n );\n sessionService.addDeviceSession(deviceSession);\n const useCase = new SendCommandUseCase(sessionService, () => logger);\n\n vi.spyOn(deviceSession, \"sendCommand\").mockResolvedValue({\n status: CommandResultStatus.Success,\n data: undefined,\n });\n\n const response = await useCase.execute<{ status: string }, void, void>({\n sessionId: fakeSessionId,\n command,\n });\n\n deviceSession.close();\n\n expect(response).toStrictEqual({\n status: CommandResultStatus.Success,\n data: undefined,\n });\n });\n\n it(\"should throw an error if the session is not found\", async () => {\n const useCase = new SendCommandUseCase(sessionService, () => logger);\n vi.spyOn(sessionService, \"getDeviceSessionById\").mockReturnValue(\n Left({ _tag: \"DeviceSessionNotFound\" }),\n );\n\n const res = useCase.execute<{ status: string }, void, void>({\n sessionId: fakeSessionId,\n command,\n });\n\n await expect(res).rejects.toMatchObject({ _tag: \"DeviceSessionNotFound\" });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,QAAAA,MAAY,YAGrB,OAAS,uBAAAC,MAA2B,mCAGpC,OAAS,4CAAAC,MAAgD,4DACzD,OAAS,4BAAAC,MAAgC,oDACzC,OAAS,+BAAAC,MAAmC,+DAE5C,OAAS,iCAAAC,MAAqC,mEAC9C,OAAS,4BAAAC,MAAgC,sDAEzC,OAAS,4BAAAC,MAAgC,yDAEzC,OAAS,kCAAAC,MAAsC,+DAE/C,OAAS,+BAAAC,MAAmC,+DAG5C,OAAS,sBAAAC,MAA0B,uBAEnC,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACJ,MAAMC,EAAgB,gBACtB,IAAIC,EAAmD,CACrD,KAAM,cACN,QAAS,GAAG,GAAG,EACf,cAAe,GAAG,GAAG,CACvB,EAEA,SAAS,qBAAsB,IAAM,CACnC,WAAW,IAAM,CACfP,EAAS,IAAIN,EAA8B,CAAC,EAAG,uBAAuB,EACtEO,EAAiB,IAAIR,EAA4B,IAAMO,CAAM,EAC7DG,EAAuB,IAAIR,EAAyB,CAAC,CAAc,EACnEO,EAAa,IAAIN,EAAyBO,CAAoB,EAC9DE,EAA0B,IAAIR,EAC5B,CAAC,CACH,EACAO,EAAgB,IAAIN,EAA4BO,CAAuB,EACvEE,EAAU,CACR,KAAM,cACN,QAAS,GAAG,GAAG,EACf,cAAe,GAAG,GAAG,CACvB,CACF,CAAC,EAED,UAAU,IAAM,CACd,GAAG,gBAAgB,CACrB,CAAC,EAED,GAAG,8CAA+C,SAAY,CAC5D,MAAMC,EAAgBhB,EACpB,CAAC,EACD,IAAMQ,EACNE,EACAE,EACAb,CACF,EACAU,EAAe,iBAAiBO,CAAa,EAC7C,MAAMC,EAAU,IAAIV,EAAmBE,EAAgB,IAAMD,CAAM,EAEnE,GAAG,MAAMQ,EAAe,aAAa,EAAE,kBAAkB,CACvD,OAAQlB,EAAoB,QAC5B,KAAM,MACR,CAAC,EAED,MAAMoB,EAAW,MAAMD,EAAQ,QAAwC,CACrE,UAAWH,EACX,QAAAC,CACF,CAAC,EAEDC,EAAc,MAAM,EAEpB,OAAOE,CAAQ,EAAE,cAAc,CAC7B,OAAQpB,EAAoB,QAC5B,KAAM,MACR,CAAC,CACH,CAAC,EAED,GAAG,oDAAqD,SAAY,CAClE,MAAMmB,EAAU,IAAIV,EAAmBE,EAAgB,IAAMD,CAAM,EACnE,GAAG,MAAMC,EAAgB,sBAAsB,EAAE,gBAC/CZ,EAAK,CAAE,KAAM,uBAAwB,CAAC,CACxC,EAEA,MAAMsB,EAAMF,EAAQ,QAAwC,CAC1D,UAAWH,EACX,QAAAC,CACF,CAAC,EAED,MAAM,OAAOI,CAAG,EAAE,QAAQ,cAAc,CAAE,KAAM,uBAAwB,CAAC,CAC3E,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["Left", "CommandResultStatus", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "deviceSessionStubBuilder", "DefaultDeviceSessionService", "DefaultLoggerPublisherService", "HttpManagerApiDataSource", "DefaultManagerApiService", "DefaultSecureChannelDataSource", "DefaultSecureChannelService", "SendCommandUseCase", "logger", "sessionService", "managerApi", "managerApiDataSource", "secureChannel", "secureChannelDataSource", "fakeSessionId", "command", "deviceSession", "useCase", "response", "res"]
|
|
7
7
|
}
|
package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Left as o,Right as i}from"purify-ts";import{assign as t,fromPromise as l,setup as
|
|
1
|
+
import{Left as o,Right as i}from"purify-ts";import{assign as t,fromPromise as l,setup as k}from"xstate";import{UserInteractionRequired as p}from"../../../device-action/model/UserInteractionRequired";import{UnknownDAError as c}from"../../../device-action/os/Errors";import{OpenAppDeviceAction as u}from"../../../device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{XStateDeviceAction as A}from"../../../device-action/xstate-utils/XStateDeviceAction";import{isSuccessDmkResult as T}from"../../../model/DmkResult";import{callTaskInAppDAStateStep as s}from"./CallTaskInAppDeviceActionTypes";class h extends A{makeStateMachine(a){const{callTask:n}=this.extractDependencies(a);return k({types:{input:{},context:{},output:{}},actors:{callTask:l(n),openAppStateMachine:new u({input:{appName:this.input.appName}}).makeStateMachine(a)},guards:{skipOpenApp:()=>this.input.skipOpenApp,noInternalError:({context:e})=>e._internalState.error===null},actions:{assignErrorFromEvent:t({_internalState:e=>({...e.context._internalState,error:e.event.error})})}}).createMachine({id:"CallTaskInAppDeviceAction",initial:"InitialState",context:({input:e})=>({input:e,intermediateValue:{requiredUserInteraction:p.None,step:s.OPEN_APP},_internalState:{taskResponse:null,error:null}}),states:{InitialState:{always:[{target:"CallTask",guard:"skipOpenApp"},"OpenAppDeviceAction"]},OpenAppDeviceAction:{invoke:{id:"openAppStateMachine",input:{appName:this.input.appName},src:"openAppStateMachine",onSnapshot:{actions:t({intermediateValue:e=>e.event.snapshot.context.intermediateValue})},onDone:{actions:t({_internalState:e=>e.event.output.caseOf({Right:()=>e.context._internalState,Left:r=>({...e.context._internalState,error:r})})}),target:"CheckOpenAppDeviceActionResult"}}},CheckOpenAppDeviceActionResult:{always:[{target:"CallTask",guard:"noInternalError"},"Error"]},CallTask:{entry:t({intermediateValue:{requiredUserInteraction:this.input.requiredUserInteraction,step:s.CALL_TASK}}),exit:t({intermediateValue:{requiredUserInteraction:p.None,step:s.CALL_TASK}}),invoke:{id:"callTask",src:"callTask",input:e=>e.context.input.task,onDone:{target:"CallTaskResultCheck",actions:[t({_internalState:({event:e,context:r})=>T(e.output)?{...r._internalState,taskResponse:e.output.data}:{...r._internalState,error:e.output.error}})]},onError:{target:"Error",actions:"assignErrorFromEvent"}}},CallTaskResultCheck:{always:[{target:"Success",guard:"noInternalError"},"Error"]},Success:{type:"final"},Error:{type:"final"}},output:({context:e})=>e._internalState.taskResponse?i(e._internalState.taskResponse):o(e._internalState.error||new c("No error in final state"))})}extractDependencies(a){return{callTask:n=>n.input(a)}}}export{h as CallTaskInAppDeviceAction};
|
|
2
2
|
//# sourceMappingURL=CallTaskInAppDeviceAction.js.map
|
package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../../src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.ts"],
|
|
4
|
-
"sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport {
|
|
5
|
-
"mappings": "AAAA,OAAS,QAAAA,EAAM,SAAAC,MAAa,YAC5B,OAAS,UAAAC,EAAQ,eAAAC,EAAa,SAAAC,MAAa,
|
|
6
|
-
"names": ["Left", "Right", "assign", "fromPromise", "setup", "
|
|
4
|
+
"sourcesContent": ["import { Left, Right } from \"purify-ts\";\nimport { assign, fromPromise, setup } from \"xstate\";\n\nimport { type InternalApi } from \"@api/device-action/DeviceAction\";\nimport { UserInteractionRequired } from \"@api/device-action/model/UserInteractionRequired\";\nimport { UnknownDAError } from \"@api/device-action/os/Errors\";\nimport { OpenAppDeviceAction } from \"@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction\";\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 { type DmkError } from \"@api/Error\";\nimport { type DmkResult, isSuccessDmkResult } from \"@api/model/DmkResult\";\n\nimport {\n type CallTaskInAppDAError,\n type CallTaskInAppDAInput,\n type CallTaskInAppDAIntermediateValue,\n type CallTaskInAppDAInternalState,\n type CallTaskInAppDAOutput,\n callTaskInAppDAStateStep,\n} from \"./CallTaskInAppDeviceActionTypes\";\n\n/**\n * Tries to open an app on the device, and if it is successful, calls a task\n * in the app.\n * The output will be the result of the task.\n *\n * ```ts\n * input: {\n * appName: string;\n * task: (\n * internalApi: InternalApi,\n * ) => Promise<DmkResult<TaskResponse, TaskError>>;\n * requiredUserInteraction: UserInteraction;\n * }\n * ```\n *\n * Example of usage:\n *\n * ```ts\n * const deviceAction = new CallTaskInAppDeviceAction({\n * input: {\n * appName: \"MyApp\",\n * task: async (internalApi: InternalApi) => internalApi.sendCommand(new MyAppSpecificCommand()),\n * requiredUserInteraction: UserInteractionRequired.None,\n * },\n * });\n * dmk.executeDeviceAction({ sessionId: \"mySessionId\", deviceAction });\n * ```\n */\nexport class CallTaskInAppDeviceAction<\n TaskResponse,\n TaskError extends DmkError,\n UserInteraction extends UserInteractionRequired,\n> extends XStateDeviceAction<\n CallTaskInAppDAOutput<TaskResponse>,\n CallTaskInAppDAInput<TaskResponse, TaskError, UserInteraction>,\n CallTaskInAppDAError<TaskError>,\n CallTaskInAppDAIntermediateValue<UserInteraction>,\n CallTaskInAppDAInternalState<TaskResponse, TaskError>\n> {\n makeStateMachine(\n internalAPI: InternalApi,\n ): DeviceActionStateMachine<\n CallTaskInAppDAOutput<TaskResponse>,\n CallTaskInAppDAInput<TaskResponse, TaskError, UserInteraction>,\n CallTaskInAppDAError<TaskError>,\n CallTaskInAppDAIntermediateValue<UserInteraction>,\n CallTaskInAppDAInternalState<TaskResponse, TaskError>\n > {\n type types = StateMachineTypes<\n CallTaskInAppDAOutput<TaskResponse>,\n CallTaskInAppDAInput<TaskResponse, TaskError, UserInteraction>,\n CallTaskInAppDAError<TaskError>,\n CallTaskInAppDAIntermediateValue<UserInteraction>,\n CallTaskInAppDAInternalState<TaskResponse, TaskError>\n >;\n\n const { callTask } = this.extractDependencies(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 callTask: fromPromise(callTask),\n openAppStateMachine: new OpenAppDeviceAction({\n input: {\n appName: this.input.appName,\n },\n }).makeStateMachine(internalAPI),\n },\n guards: {\n skipOpenApp: () => this.input.skipOpenApp,\n noInternalError: ({ context }) => context._internalState.error === null,\n },\n actions: {\n assignErrorFromEvent: assign({\n _internalState: (_) => ({\n ..._.context._internalState,\n error: _.event[\"error\"], // NOTE: it should never happen, the error is not typed anymore here\n }),\n }),\n },\n }).createMachine({\n id: \"CallTaskInAppDeviceAction\",\n initial: \"InitialState\",\n context: ({ input }) => {\n return {\n input: input,\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: callTaskInAppDAStateStep.OPEN_APP,\n },\n _internalState: {\n taskResponse: null,\n error: null,\n },\n };\n },\n states: {\n InitialState: {\n always: [\n {\n target: \"CallTask\",\n guard: \"skipOpenApp\",\n },\n \"OpenAppDeviceAction\",\n ],\n },\n OpenAppDeviceAction: {\n invoke: {\n id: \"openAppStateMachine\",\n input: {\n appName: this.input.appName,\n },\n src: \"openAppStateMachine\",\n onSnapshot: {\n actions: assign({\n intermediateValue: (_) =>\n _.event.snapshot.context.intermediateValue,\n }),\n },\n onDone: {\n actions: assign({\n _internalState: (_) => {\n return _.event.output.caseOf<\n CallTaskInAppDAInternalState<TaskResponse, TaskError>\n >({\n Right: () => _.context._internalState,\n Left: (error) => ({\n ..._.context._internalState,\n error,\n }),\n });\n },\n }),\n target: \"CheckOpenAppDeviceActionResult\",\n },\n },\n },\n CheckOpenAppDeviceActionResult: {\n always: [\n {\n target: \"CallTask\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n CallTask: {\n entry: assign({\n intermediateValue: {\n requiredUserInteraction: this.input.requiredUserInteraction,\n step: callTaskInAppDAStateStep.CALL_TASK,\n },\n }),\n exit: assign({\n intermediateValue: {\n requiredUserInteraction: UserInteractionRequired.None,\n step: callTaskInAppDAStateStep.CALL_TASK,\n },\n }),\n invoke: {\n id: \"callTask\",\n src: \"callTask\",\n input: (_: { context: types[\"context\"] }) => _.context.input.task,\n onDone: {\n target: \"CallTaskResultCheck\",\n actions: [\n assign({\n _internalState: ({ event, context }) => {\n if (isSuccessDmkResult(event.output)) {\n return {\n ...context._internalState,\n taskResponse: event.output.data,\n };\n }\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 CallTaskResultCheck: {\n always: [\n {\n target: \"Success\",\n guard: \"noInternalError\",\n },\n \"Error\",\n ],\n },\n Success: {\n type: \"final\",\n },\n Error: {\n type: \"final\",\n },\n },\n output: ({ context }) =>\n context._internalState.taskResponse\n ? Right(context._internalState.taskResponse)\n : Left(\n context._internalState.error ||\n new UnknownDAError(\"No error in final state\"),\n ),\n });\n }\n\n extractDependencies(internalApi: InternalApi) {\n return {\n callTask: (_: {\n input: (\n internalApi: InternalApi,\n ) => Promise<DmkResult<TaskResponse, TaskError>>;\n }): Promise<DmkResult<TaskResponse, TaskError>> => _.input(internalApi),\n };\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Left", "Right", "assign", "fromPromise", "setup", "UserInteractionRequired", "UnknownDAError", "OpenAppDeviceAction", "XStateDeviceAction", "isSuccessDmkResult", "callTaskInAppDAStateStep", "CallTaskInAppDeviceAction", "internalAPI", "callTask", "context", "_", "input", "error", "event", "internalApi"]
|
|
7
7
|
}
|
package/lib/esm/src/api/device-action/os/CallTaskInAppDeviceAction/CallTaskInAppDeviceAction.test.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Left as
|
|
1
|
+
import{Left as w,Right as T}from"purify-ts";import{assign as M,createMachine as g}from"xstate";import{ApduBuilder as E}from"../../../apdu/utils/ApduBuilder";import{CommandResultFactory as S}from"../../../command/model/CommandResult";import{makeDeviceActionInternalApiMock as m}from"../../../device-action/__test-utils__/makeInternalApi";import{testDeviceActionStates as y}from"../../../device-action/__test-utils__/testDeviceActionStates";import{DeviceActionStatus as t}from"../../../device-action/model/DeviceActionState";import{UserInteractionRequired as e}from"../../../device-action/model/UserInteractionRequired";import{UnknownDAError as v}from"../../../device-action/os/Errors";import{OpenAppDeviceAction as P}from"../../../device-action/os/OpenAppDeviceAction/OpenAppDeviceAction";import{openAppDAStateStep as C}from"../../../device-action/os/OpenAppDeviceAction/types";import{DmkResultFactory as f}from"../../../model/DmkResult";import{UnknownDeviceExchangeError as I}from"../../../../../src";import{CallTaskInAppDeviceAction as A}from"./CallTaskInAppDeviceAction";import{callTaskInAppDAStateStep as d}from"./CallTaskInAppDeviceActionTypes";vi.mock("@api/device-action/os/OpenAppDeviceAction/OpenAppDeviceAction",async a=>{const i=await a();return{...i,OpenAppDeviceAction:vi.fn(()=>({...i.OpenAppDeviceAction,makeStateMachine:vi.fn()}))}});const l=a=>{P.mockImplementation(()=>({makeStateMachine:vi.fn().mockImplementation(()=>g({initial:"pending",states:{pending:{entry:M({intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp,step:C.GET_DEVICE_STATUS}}),after:{0:"done"}},done:{type:"final"}},output:()=>a?w(a):T(void 0)}))}))};describe("CallTaskInAppDeviceAction",()=>{const a=vi.fn(),i=()=>({callTask:a}),{sendCommand:D}=m(),p={paramString:"aParameter",paramNumber:1234},k={aNumber:5678,aString:"mockedResponseString"};beforeEach(()=>{vi.resetAllMocks()}),describe("without mocking extractDependencies",()=>{it("should call sendCommand on internalApi with the correct parameters",async()=>{l(),D.mockResolvedValue(S({data:void 0}));const o=new A({input:{task:async r=>await r.sendCommand(new c(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});await new Promise((r,n)=>{o._execute(m()).observable.subscribe({error:()=>n(),complete:()=>r(),next:()=>{}})}),expect(D).toHaveBeenCalledWith(new c(p))})}),describe("error cases",()=>{it("should error and output the error if the open app fails",()=>new Promise((o,r)=>{l(new v("Mocked error"));const n=[{status:t.Pending,intermediateValue:{requiredUserInteraction:e.None,step:d.OPEN_APP}},{status:t.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp,step:C.GET_DEVICE_STATUS}},{status:t.Error,error:new v("Mocked error")}];y(new A({input:{task:async s=>await s.sendCommand(new c(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}}),n,m(),{onDone:o,onError:r})})),it("should error and output an error if the call task fails",()=>new Promise((o,r)=>{l(),a.mockResolvedValue(f({error:new I("Mocked error")}));const n=new A({input:{task:async u=>await u.sendCommand(new c(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(n,"extractDependencies").mockImplementation(i);const s=[{status:t.Pending,intermediateValue:{requiredUserInteraction:e.None,step:d.OPEN_APP}},{status:t.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp,step:C.GET_DEVICE_STATUS}},{status:t.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress,step:d.CALL_TASK}},{status:t.Error,error:new I("Mocked error")}];y(n,s,m(),{onDone:o,onError:r})}))}),describe("success cases",()=>{it("should succeed and output the command result if the send command succeeds",()=>new Promise((o,r)=>{l(),a.mockResolvedValue(f({data:k}));const n=new A({input:{task:async u=>await u.sendCommand(new c(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!1}});vi.spyOn(n,"extractDependencies").mockImplementation(i);const s=[{status:t.Pending,intermediateValue:{requiredUserInteraction:e.None,step:d.OPEN_APP}},{status:t.Pending,intermediateValue:{requiredUserInteraction:e.ConfirmOpenApp,step:C.GET_DEVICE_STATUS}},{status:t.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress,step:d.CALL_TASK}},{status:t.Completed,output:k}];y(n,s,m(),{onDone:o,onError:r})})),it("should succeed while skipping OpenApp",()=>new Promise((o,r)=>{l(),a.mockResolvedValue(f({data:k}));const n=new A({input:{task:async u=>await u.sendCommand(new c(p)),appName:"MyApp",requiredUserInteraction:e.VerifyAddress,skipOpenApp:!0}});vi.spyOn(n,"extractDependencies").mockImplementation(i);const s=[{status:t.Pending,intermediateValue:{requiredUserInteraction:e.VerifyAddress,step:d.CALL_TASK}},{status:t.Completed,output:k}];y(n,s,m(),{onDone:o,onError:r})}))})});class c{name="testCommand";params;constructor(i){this.params=i}getApdu(){return new E({cla:0,ins:1,p1:2,p2:3}).add32BitUIntToData(this.params.paramNumber).addAsciiStringToData(this.params.paramString).build()}parseResponse(){return S({data:{aNumber:1,aString:"aString"}})}}
|
|
2
2
|
//# sourceMappingURL=CallTaskInAppDeviceAction.test.js.map
|