@ledgerhq/device-management-kit 0.0.0-wrong-error-when-in-experimental-provider-20251021162636 → 0.0.0-z-intent-queue-7-20251204111630
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 +45 -40
- package/lib/cjs/src/api/DeviceManagementKit.js +1 -1
- package/lib/cjs/src/api/DeviceManagementKit.js.map +2 -2
- package/lib/cjs/src/api/DeviceManagementKit.test.js +1 -1
- package/lib/cjs/src/api/DeviceManagementKit.test.js.map +2 -2
- package/lib/cjs/src/api/command/Command.js +1 -1
- package/lib/cjs/src/api/command/Command.js.map +1 -1
- 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 +1 -1
- package/lib/cjs/src/api/command/os/CloseAppCommand.js +1 -1
- package/lib/cjs/src/api/command/os/CloseAppCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/CloseAppCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/CloseAppCommand.test.js.map +2 -2
- package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.js +1 -1
- package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/GetAppAndVersionCommand.test.js.map +2 -2
- package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js +1 -1
- package/lib/cjs/src/api/command/os/GetBatteryStatusCommand.js.map +2 -2
- 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/os/GetCustomImageSizeCommand.js +1 -1
- package/lib/cjs/src/api/command/os/GetCustomImageSizeCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/GetCustomImageSizeCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/GetCustomImageSizeCommand.test.js.map +2 -2
- package/lib/cjs/src/api/command/os/GetOsVersionCommand.js +1 -1
- package/lib/cjs/src/api/command/os/GetOsVersionCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/GetOsVersionCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/GetOsVersionCommand.test.js.map +2 -2
- package/lib/cjs/src/api/command/os/ListAppsCommand.js +1 -1
- package/lib/cjs/src/api/command/os/ListAppsCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/ListAppsCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/ListAppsCommand.test.js.map +2 -2
- package/lib/cjs/src/api/command/os/ListLanguagePackCommand.js +1 -1
- package/lib/cjs/src/api/command/os/ListLanguagePackCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/ListLanguagePackCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/ListLanguagePackCommand.test.js.map +2 -2
- package/lib/cjs/src/api/command/os/LoadCertificateCommand.js +1 -1
- package/lib/cjs/src/api/command/os/LoadCertificateCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/LoadCertificateCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/LoadCertificateCommand.test.js.map +3 -3
- package/lib/cjs/src/api/command/os/OpenAppCommand.js +1 -1
- package/lib/cjs/src/api/command/os/OpenAppCommand.js.map +2 -2
- package/lib/cjs/src/api/command/os/OpenAppCommand.test.js +1 -1
- package/lib/cjs/src/api/command/os/OpenAppCommand.test.js.map +2 -2
- 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 +2 -2
- package/lib/cjs/src/api/device-action/DeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/DeviceAction.js.map +1 -1
- package/lib/cjs/src/api/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/cjs/src/api/device-action/__test-utils__/makeInternalApi.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 +2 -2
- package/lib/cjs/src/api/device-action/os/Errors.js +1 -1
- package/lib/cjs/src/api/device-action/os/Errors.js.map +3 -3
- 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 +2 -2
- 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 +1 -1
- package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/types.js +1 -1
- package/lib/cjs/src/api/device-action/os/InstallOrUpdateApps/types.js.map +1 -1
- package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js +1 -1
- package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/types.js +1 -1
- package/lib/cjs/src/api/device-action/os/OpenAppWithDependencies/types.js.map +1 -1
- package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +1 -1
- package/lib/cjs/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +2 -2
- package/lib/cjs/src/api/device-action/task/BuildAppsInstallPlanTask.js +1 -1
- package/lib/cjs/src/api/device-action/task/BuildAppsInstallPlanTask.js.map +2 -2
- package/lib/cjs/src/api/device-action/task/BuildAppsInstallPlanTask.test.js +1 -1
- package/lib/cjs/src/api/device-action/task/BuildAppsInstallPlanTask.test.js.map +2 -2
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js +1 -1
- package/lib/cjs/src/api/device-action/task/GetFirmwareMetadataTask.js.map +2 -2
- 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 +2 -2
- package/lib/cjs/src/api/index.js +1 -1
- package/lib/cjs/src/api/index.js.map +2 -2
- package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.js +1 -1
- package/lib/cjs/src/api/logger-subscriber/service/ConsoleLogger.js.map +3 -3
- package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +1 -1
- package/lib/cjs/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +2 -2
- package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js +1 -1
- package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/secure-channel/device-action/GenuineCheck/types.js.map +1 -1
- package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js +1 -1
- package/lib/cjs/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/secure-channel/device-action/InstallApp/types.js.map +1 -1
- package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js +1 -1
- package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/types.js +1 -1
- package/lib/cjs/src/api/secure-channel/device-action/ListInstalledApps/types.js.map +2 -2
- package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js +1 -1
- package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js.map +2 -2
- package/lib/cjs/src/api/secure-channel/device-action/UninstallApp/types.js.map +1 -1
- package/lib/cjs/src/api/secure-channel/task/ConnectToSecureChannelTask.js +1 -1
- package/lib/cjs/src/api/secure-channel/task/ConnectToSecureChannelTask.js.map +3 -3
- package/lib/cjs/src/api/secure-channel/task/ConnectToSecureChannelTask.test.js +1 -1
- package/lib/cjs/src/api/secure-channel/task/ConnectToSecureChannelTask.test.js.map +3 -3
- package/lib/cjs/src/api/secure-channel/task/types.js +1 -1
- package/lib/cjs/src/api/secure-channel/task/types.js.map +2 -2
- package/lib/cjs/src/api/secure-channel/utils.js +1 -1
- package/lib/cjs/src/api/secure-channel/utils.js.map +3 -3
- package/lib/cjs/src/api/secure-channel/utils.test.js +1 -1
- package/lib/cjs/src/api/secure-channel/utils.test.js.map +3 -3
- package/lib/cjs/src/api/transport/model/ConnectedDevice.js +1 -1
- package/lib/cjs/src/api/transport/model/ConnectedDevice.js.map +3 -3
- package/lib/cjs/src/api/transport/model/Errors.js +1 -1
- package/lib/cjs/src/api/transport/model/Errors.js.map +3 -3
- package/lib/cjs/src/api/transport/model/TransportConnectedDevice.js +1 -1
- package/lib/cjs/src/api/transport/model/TransportConnectedDevice.js.map +3 -3
- package/lib/cjs/src/internal/crypto/CryptoService.js +2 -0
- package/lib/cjs/src/internal/crypto/CryptoService.js.map +7 -0
- package/lib/cjs/src/internal/crypto/NobleCryptoService.js +2 -0
- package/lib/cjs/src/internal/crypto/NobleCryptoService.js.map +7 -0
- package/lib/cjs/src/internal/crypto/NobleCryptoService.test.js +2 -0
- package/lib/cjs/src/internal/crypto/NobleCryptoService.test.js.map +7 -0
- package/lib/cjs/src/internal/device-session/di/deviceSessionModule.js +1 -1
- package/lib/cjs/src/internal/device-session/di/deviceSessionModule.js.map +3 -3
- package/lib/cjs/src/internal/device-session/di/deviceSessionTypes.js +1 -1
- package/lib/cjs/src/internal/device-session/di/deviceSessionTypes.js.map +2 -2
- package/lib/cjs/src/internal/device-session/model/DeviceSession.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSession.js.map +3 -3
- package/lib/cjs/src/internal/device-session/model/DeviceSession.test.js +2 -0
- package/lib/cjs/src/internal/device-session/model/DeviceSession.test.js.map +7 -0
- package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSessionEventDispatcher.js.map +2 -2
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.js.map +3 -3
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +2 -2
- package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.js.map +3 -3
- package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js +1 -1
- package/lib/cjs/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +2 -2
- package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.js +1 -1
- package/lib/cjs/src/internal/device-session/service/DefaultDeviceSessionService.js.map +3 -3
- 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/service/DeviceSessionService.js +1 -1
- package/lib/cjs/src/internal/device-session/service/DeviceSessionService.js.map +1 -1
- package/lib/cjs/src/internal/device-session/service/IntentQueueService.js +2 -0
- package/lib/cjs/src/internal/device-session/service/IntentQueueService.js.map +7 -0
- package/lib/cjs/src/internal/device-session/service/IntentQueueService.test.js +2 -0
- package/lib/cjs/src/internal/device-session/service/IntentQueueService.test.js.map +7 -0
- package/lib/cjs/src/internal/device-session/use-case/UnsafeBypassIntentQueueUseCase.js +2 -0
- package/lib/cjs/src/internal/device-session/use-case/UnsafeBypassIntentQueueUseCase.js.map +7 -0
- package/lib/cjs/src/internal/discovery/di/discoveryModule.js +1 -1
- package/lib/cjs/src/internal/discovery/di/discoveryModule.js.map +3 -3
- package/lib/cjs/src/internal/discovery/di/discoveryModule.test.js +1 -1
- package/lib/cjs/src/internal/discovery/di/discoveryModule.test.js.map +3 -3
- package/lib/cjs/src/internal/discovery/di/discoveryTypes.js +1 -1
- package/lib/cjs/src/internal/discovery/di/discoveryTypes.js.map +2 -2
- package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
- package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
- package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.test.js +1 -1
- package/lib/cjs/src/internal/discovery/use-case/ConnectUseCase.test.js.map +3 -3
- package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.js +1 -1
- package/lib/cjs/src/internal/discovery/use-case/DisconnectUseCase.js.map +3 -3
- package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.js +2 -0
- package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.js.map +7 -0
- package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.test.js +2 -0
- package/lib/cjs/src/internal/discovery/use-case/ReconnectUseCase.test.js.map +7 -0
- package/lib/cjs/src/internal/manager-api/data/ManagerApiDataSource.js.map +1 -1
- package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js +1 -1
- package/lib/cjs/src/internal/send/use-case/SendApduUseCase.test.js.map +3 -3
- package/lib/esm/package.json +45 -40
- package/lib/esm/src/api/DeviceManagementKit.js +1 -1
- package/lib/esm/src/api/DeviceManagementKit.js.map +2 -2
- package/lib/esm/src/api/DeviceManagementKit.test.js +1 -1
- package/lib/esm/src/api/DeviceManagementKit.test.js.map +2 -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 +1 -1
- package/lib/esm/src/api/command/os/CloseAppCommand.js +1 -1
- package/lib/esm/src/api/command/os/CloseAppCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/CloseAppCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/CloseAppCommand.test.js.map +2 -2
- package/lib/esm/src/api/command/os/GetAppAndVersionCommand.js +1 -1
- package/lib/esm/src/api/command/os/GetAppAndVersionCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/GetAppAndVersionCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/GetAppAndVersionCommand.test.js.map +2 -2
- package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js +1 -1
- package/lib/esm/src/api/command/os/GetBatteryStatusCommand.js.map +2 -2
- 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/os/GetCustomImageSizeCommand.js +1 -1
- package/lib/esm/src/api/command/os/GetCustomImageSizeCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/GetCustomImageSizeCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/GetCustomImageSizeCommand.test.js.map +2 -2
- package/lib/esm/src/api/command/os/GetOsVersionCommand.js +1 -1
- package/lib/esm/src/api/command/os/GetOsVersionCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/GetOsVersionCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/GetOsVersionCommand.test.js.map +2 -2
- package/lib/esm/src/api/command/os/ListAppsCommand.js +1 -1
- package/lib/esm/src/api/command/os/ListAppsCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/ListAppsCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/ListAppsCommand.test.js.map +2 -2
- package/lib/esm/src/api/command/os/ListLanguagePackCommand.js +1 -1
- package/lib/esm/src/api/command/os/ListLanguagePackCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/ListLanguagePackCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/ListLanguagePackCommand.test.js.map +2 -2
- package/lib/esm/src/api/command/os/LoadCertificateCommand.js +1 -1
- package/lib/esm/src/api/command/os/LoadCertificateCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/LoadCertificateCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/LoadCertificateCommand.test.js.map +3 -3
- package/lib/esm/src/api/command/os/OpenAppCommand.js +1 -1
- package/lib/esm/src/api/command/os/OpenAppCommand.js.map +2 -2
- package/lib/esm/src/api/command/os/OpenAppCommand.test.js +1 -1
- package/lib/esm/src/api/command/os/OpenAppCommand.test.js.map +2 -2
- 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 +2 -2
- package/lib/esm/src/api/device-action/__test-utils__/makeInternalApi.js +1 -1
- package/lib/esm/src/api/device-action/__test-utils__/makeInternalApi.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 +2 -2
- package/lib/esm/src/api/device-action/os/Errors.js +1 -1
- package/lib/esm/src/api/device-action/os/Errors.js.map +3 -3
- 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 +2 -2
- package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js +1 -1
- package/lib/esm/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.js.map +2 -2
- package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js +1 -1
- package/lib/esm/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.js.map +2 -2
- package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js +1 -1
- package/lib/esm/src/api/device-action/os/SendCommandInAppDeviceAction/SendCommandInAppDeviceAction.test.js.map +2 -2
- package/lib/esm/src/api/device-action/task/BuildAppsInstallPlanTask.js +1 -1
- package/lib/esm/src/api/device-action/task/BuildAppsInstallPlanTask.js.map +3 -3
- package/lib/esm/src/api/device-action/task/BuildAppsInstallPlanTask.test.js +1 -1
- package/lib/esm/src/api/device-action/task/BuildAppsInstallPlanTask.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/index.js +1 -1
- package/lib/esm/src/api/index.js.map +3 -3
- package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.js +1 -1
- package/lib/esm/src/api/logger-subscriber/service/ConsoleLogger.js.map +3 -3
- package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js +1 -1
- package/lib/esm/src/api/logger-subscriber/service/WebLogsExporterLogger.test.js.map +3 -3
- package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js +1 -1
- package/lib/esm/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.js.map +2 -2
- package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js +1 -1
- package/lib/esm/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.js.map +2 -2
- package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js +1 -1
- package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.js.map +2 -2
- package/lib/esm/src/api/secure-channel/device-action/ListInstalledApps/types.js.map +2 -2
- package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js +1 -1
- package/lib/esm/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.js.map +2 -2
- package/lib/esm/src/api/secure-channel/task/ConnectToSecureChannelTask.js +1 -1
- package/lib/esm/src/api/secure-channel/task/ConnectToSecureChannelTask.js.map +3 -3
- package/lib/esm/src/api/secure-channel/task/ConnectToSecureChannelTask.test.js +1 -1
- package/lib/esm/src/api/secure-channel/task/ConnectToSecureChannelTask.test.js.map +3 -3
- package/lib/esm/src/api/secure-channel/task/types.js +1 -1
- package/lib/esm/src/api/secure-channel/task/types.js.map +2 -2
- package/lib/esm/src/api/secure-channel/utils.js +1 -1
- package/lib/esm/src/api/secure-channel/utils.js.map +3 -3
- package/lib/esm/src/api/secure-channel/utils.test.js +1 -1
- package/lib/esm/src/api/secure-channel/utils.test.js.map +3 -3
- package/lib/esm/src/api/transport/model/ConnectedDevice.js +1 -1
- package/lib/esm/src/api/transport/model/ConnectedDevice.js.map +3 -3
- package/lib/esm/src/api/transport/model/Errors.js +1 -1
- package/lib/esm/src/api/transport/model/Errors.js.map +3 -3
- package/lib/esm/src/api/transport/model/TransportConnectedDevice.js +1 -1
- package/lib/esm/src/api/transport/model/TransportConnectedDevice.js.map +3 -3
- package/lib/esm/src/internal/crypto/CryptoService.js +1 -0
- package/lib/esm/src/internal/crypto/CryptoService.js.map +7 -0
- package/lib/esm/src/internal/crypto/NobleCryptoService.js +2 -0
- package/lib/esm/src/internal/crypto/NobleCryptoService.js.map +7 -0
- package/lib/esm/src/internal/crypto/NobleCryptoService.test.js +2 -0
- package/lib/esm/src/internal/crypto/NobleCryptoService.test.js.map +7 -0
- package/lib/esm/src/internal/device-session/di/deviceSessionModule.js +1 -1
- package/lib/esm/src/internal/device-session/di/deviceSessionModule.js.map +3 -3
- package/lib/esm/src/internal/device-session/di/deviceSessionTypes.js +1 -1
- package/lib/esm/src/internal/device-session/di/deviceSessionTypes.js.map +2 -2
- package/lib/esm/src/internal/device-session/model/DeviceSession.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSession.js.map +3 -3
- package/lib/esm/src/internal/device-session/model/DeviceSession.test.js +2 -0
- package/lib/esm/src/internal/device-session/model/DeviceSession.test.js.map +7 -0
- package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSessionEventDispatcher.js.map +2 -2
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.js.map +3 -3
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSessionRefresher.test.js.map +2 -2
- package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.js.map +3 -3
- package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js +1 -1
- package/lib/esm/src/internal/device-session/model/DeviceSessionStateHandler.test.js.map +2 -2
- package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.js +1 -1
- package/lib/esm/src/internal/device-session/service/DefaultDeviceSessionService.js.map +3 -3
- 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/service/IntentQueueService.js +2 -0
- package/lib/esm/src/internal/device-session/service/IntentQueueService.js.map +7 -0
- package/lib/esm/src/internal/device-session/service/IntentQueueService.test.js +2 -0
- package/lib/esm/src/internal/device-session/service/IntentQueueService.test.js.map +7 -0
- package/lib/esm/src/internal/device-session/use-case/UnsafeBypassIntentQueueUseCase.js +2 -0
- package/lib/esm/src/internal/device-session/use-case/UnsafeBypassIntentQueueUseCase.js.map +7 -0
- package/lib/esm/src/internal/discovery/di/discoveryModule.js +1 -1
- package/lib/esm/src/internal/discovery/di/discoveryModule.js.map +3 -3
- package/lib/esm/src/internal/discovery/di/discoveryModule.test.js +1 -1
- package/lib/esm/src/internal/discovery/di/discoveryModule.test.js.map +3 -3
- package/lib/esm/src/internal/discovery/di/discoveryTypes.js +1 -1
- package/lib/esm/src/internal/discovery/di/discoveryTypes.js.map +2 -2
- package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js +1 -1
- package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.js.map +3 -3
- package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.test.js +1 -1
- package/lib/esm/src/internal/discovery/use-case/ConnectUseCase.test.js.map +3 -3
- package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.js +1 -1
- package/lib/esm/src/internal/discovery/use-case/DisconnectUseCase.js.map +3 -3
- package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.js +2 -0
- package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.js.map +7 -0
- package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.test.js +2 -0
- package/lib/esm/src/internal/discovery/use-case/ReconnectUseCase.test.js.map +7 -0
- package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js +1 -1
- package/lib/esm/src/internal/send/use-case/SendApduUseCase.test.js.map +3 -3
- package/lib/types/src/api/DeviceManagementKit.d.ts +22 -0
- package/lib/types/src/api/DeviceManagementKit.d.ts.map +1 -1
- package/lib/types/src/api/command/Command.d.ts +4 -0
- package/lib/types/src/api/command/Command.d.ts.map +1 -1
- package/lib/types/src/api/command/Errors.d.ts +2 -2
- package/lib/types/src/api/command/Errors.d.ts.map +1 -1
- package/lib/types/src/api/command/model/CommandResult.d.ts +3 -3
- package/lib/types/src/api/command/model/CommandResult.d.ts.map +1 -1
- package/lib/types/src/api/command/os/CloseAppCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/CloseAppCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/GetAppAndVersionCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/GetAppAndVersionCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/GetBatteryStatusCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/GetCustomImageSizeCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/GetCustomImageSizeCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/GetOsVersionCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/GetOsVersionCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/ListAppsCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/ListAppsCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/ListLanguagePackCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/ListLanguagePackCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/LoadCertificateCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/LoadCertificateCommand.d.ts.map +1 -1
- package/lib/types/src/api/command/os/OpenAppCommand.d.ts +1 -0
- package/lib/types/src/api/command/os/OpenAppCommand.d.ts.map +1 -1
- package/lib/types/src/api/device-action/DeviceAction.d.ts +0 -1
- package/lib/types/src/api/device-action/DeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/device-action/__test-utils__/makeInternalApi.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/Errors.d.ts +5 -0
- package/lib/types/src/api/device-action/os/Errors.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 +1 -0
- package/lib/types/src/api/device-action/os/GetDeviceMetadata/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/InstallOrUpdateApps/InstallOrUpdateAppsDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/InstallOrUpdateApps/types.d.ts +3 -2
- package/lib/types/src/api/device-action/os/InstallOrUpdateApps/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/OpenAppWithDependencies/OpenAppWithDependenciesDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/device-action/os/OpenAppWithDependencies/types.d.ts +1 -0
- package/lib/types/src/api/device-action/os/OpenAppWithDependencies/types.d.ts.map +1 -1
- package/lib/types/src/api/device-action/task/BuildAppsInstallPlanTask.d.ts +2 -2
- package/lib/types/src/api/device-action/task/BuildAppsInstallPlanTask.d.ts.map +1 -1
- package/lib/types/src/api/index.d.ts +1 -1
- package/lib/types/src/api/index.d.ts.map +1 -1
- package/lib/types/src/api/logger-subscriber/service/ConsoleLogger.d.ts +1 -0
- package/lib/types/src/api/logger-subscriber/service/ConsoleLogger.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/GenuineCheck/GenuineCheckDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/GenuineCheck/types.d.ts +1 -0
- package/lib/types/src/api/secure-channel/device-action/GenuineCheck/types.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/InstallApp/InstallAppDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/InstallApp/types.d.ts +1 -0
- package/lib/types/src/api/secure-channel/device-action/InstallApp/types.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/ListInstalledAppsDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/types.d.ts +1 -0
- package/lib/types/src/api/secure-channel/device-action/ListInstalledApps/types.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/UninstallApp/UninstallAppDeviceAction.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/device-action/UninstallApp/types.d.ts +1 -0
- package/lib/types/src/api/secure-channel/device-action/UninstallApp/types.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/task/ConnectToSecureChannelTask.d.ts +4 -0
- package/lib/types/src/api/secure-channel/task/ConnectToSecureChannelTask.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/task/types.d.ts +7 -0
- package/lib/types/src/api/secure-channel/task/types.d.ts.map +1 -1
- package/lib/types/src/api/secure-channel/utils.d.ts +18 -1
- package/lib/types/src/api/secure-channel/utils.d.ts.map +1 -1
- package/lib/types/src/api/transport/model/ConnectedDevice.d.ts +3 -2
- package/lib/types/src/api/transport/model/ConnectedDevice.d.ts.map +1 -1
- package/lib/types/src/api/transport/model/Errors.d.ts +5 -0
- package/lib/types/src/api/transport/model/Errors.d.ts.map +1 -1
- package/lib/types/src/api/transport/model/TransportConnectedDevice.d.ts +3 -1
- package/lib/types/src/api/transport/model/TransportConnectedDevice.d.ts.map +1 -1
- package/lib/types/src/internal/crypto/CryptoService.d.ts +12 -0
- package/lib/types/src/internal/crypto/CryptoService.d.ts.map +1 -0
- package/lib/types/src/internal/crypto/NobleCryptoService.d.ts +8 -0
- package/lib/types/src/internal/crypto/NobleCryptoService.d.ts.map +1 -0
- package/lib/types/src/internal/crypto/NobleCryptoService.test.d.ts +2 -0
- package/lib/types/src/internal/crypto/NobleCryptoService.test.d.ts.map +1 -0
- package/lib/types/src/internal/device-session/di/deviceSessionModule.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/di/deviceSessionTypes.d.ts +1 -0
- package/lib/types/src/internal/device-session/di/deviceSessionTypes.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/model/DeviceSession.d.ts +12 -2
- package/lib/types/src/internal/device-session/model/DeviceSession.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/model/DeviceSession.test.d.ts +2 -0
- package/lib/types/src/internal/device-session/model/DeviceSession.test.d.ts.map +1 -0
- package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.d.ts +3 -1
- package/lib/types/src/internal/device-session/model/DeviceSessionEventDispatcher.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts +0 -1
- package/lib/types/src/internal/device-session/model/DeviceSessionRefresher.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.d.ts +1 -0
- package/lib/types/src/internal/device-session/model/DeviceSessionStateHandler.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/service/DefaultDeviceSessionService.d.ts +7 -5
- package/lib/types/src/internal/device-session/service/DefaultDeviceSessionService.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/service/DeviceSessionService.d.ts +28 -1
- package/lib/types/src/internal/device-session/service/DeviceSessionService.d.ts.map +1 -1
- package/lib/types/src/internal/device-session/service/IntentQueueService.d.ts +101 -0
- package/lib/types/src/internal/device-session/service/IntentQueueService.d.ts.map +1 -0
- package/lib/types/src/internal/device-session/service/IntentQueueService.test.d.ts +2 -0
- package/lib/types/src/internal/device-session/service/IntentQueueService.test.d.ts.map +1 -0
- package/lib/types/src/internal/device-session/use-case/UnsafeBypassIntentQueueUseCase.d.ts +19 -0
- package/lib/types/src/internal/device-session/use-case/UnsafeBypassIntentQueueUseCase.d.ts.map +1 -0
- package/lib/types/src/internal/discovery/di/discoveryModule.d.ts.map +1 -1
- package/lib/types/src/internal/discovery/di/discoveryTypes.d.ts +1 -0
- package/lib/types/src/internal/discovery/di/discoveryTypes.d.ts.map +1 -1
- package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts +3 -2
- package/lib/types/src/internal/discovery/use-case/ConnectUseCase.d.ts.map +1 -1
- package/lib/types/src/internal/discovery/use-case/DisconnectUseCase.d.ts.map +1 -1
- package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.d.ts +32 -0
- package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.d.ts.map +1 -0
- package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.test.d.ts +2 -0
- package/lib/types/src/internal/discovery/use-case/ReconnectUseCase.test.d.ts.map +1 -0
- package/lib/types/src/internal/manager-api/data/ManagerApiDataSource.d.ts +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +33 -28
- package/lib/cjs/src/internal/device-session/service/MutexService.js +0 -2
- package/lib/cjs/src/internal/device-session/service/MutexService.js.map +0 -7
- package/lib/cjs/src/internal/device-session/service/MutexService.test.js +0 -2
- package/lib/cjs/src/internal/device-session/service/MutexService.test.js.map +0 -7
- package/lib/esm/src/internal/device-session/service/MutexService.js +0 -2
- package/lib/esm/src/internal/device-session/service/MutexService.js.map +0 -7
- package/lib/esm/src/internal/device-session/service/MutexService.test.js +0 -2
- package/lib/esm/src/internal/device-session/service/MutexService.test.js.map +0 -7
- package/lib/types/src/internal/device-session/service/MutexService.d.ts +0 -6
- package/lib/types/src/internal/device-session/service/MutexService.d.ts.map +0 -1
- package/lib/types/src/internal/device-session/service/MutexService.test.d.ts +0 -2
- package/lib/types/src/internal/device-session/service/MutexService.test.d.ts.map +0 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/transport/model/Errors.ts"],
|
|
4
|
-
"sourcesContent": ["import { type DmkError } from \"@api/Error\";\n\nexport type ConnectError =\n | UnknownDeviceError\n | OpeningConnectionError\n | DeviceAlreadyConnectedError;\n\nexport class GeneralDmkError implements DmkError {\n _tag = \"GeneralDmkError\";\n originalError?: unknown;\n constructor(err?: unknown) {\n if (err instanceof Error) {\n this.originalError = err;\n } else if (err !== undefined) {\n this.originalError = new Error(String(err));\n }\n }\n}\n\nexport class DeviceAlreadyConnectedError extends GeneralDmkError {\n override readonly _tag = \"DeviceAlreadyDiscoveredError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotRecognizedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotRecognizedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoAccessibleDeviceError extends GeneralDmkError {\n override readonly _tag = \"NoAccessibleDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class OpeningConnectionError extends GeneralDmkError {\n override _tag = \"ConnectionOpeningError\";\n constructor(err?: unknown) {\n super(err);\n }\n}\n\nexport class UnknownDeviceError extends GeneralDmkError {\n override readonly _tag = \"UnknownDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportNotSupportedError extends GeneralDmkError {\n override readonly _tag = \"TransportNotSupportedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\nexport class SendApduConcurrencyError extends GeneralDmkError {\n override readonly _tag = \"SendApduConcurrencyError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class SendApduTimeoutError extends GeneralDmkError {\n override readonly _tag = \"SendApduTimeoutError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class SendApduEmptyResponseError extends GeneralDmkError {\n override readonly _tag = \"SendApduEmptyResponseError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DisconnectError extends GeneralDmkError {\n override readonly _tag = \"DisconnectError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class ReconnectionFailedError extends GeneralDmkError {\n override readonly _tag = \"ReconnectionFailedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotInitializedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotInitializedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportsProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportsProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportAlreadyExistsError extends GeneralDmkError {\n override readonly _tag = \"TransportAlreadyExistsError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceDisconnectedWhileSendingError extends GeneralDmkError {\n override readonly _tag = \"DeviceDisconnectedWhileSendingError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class AlreadySendingApduError extends GeneralDmkError {\n override readonly _tag = \"AlreadySendingApduError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceDisconnectedBeforeSendingApdu extends GeneralDmkError {\n override readonly _tag = \"DeviceDisconnectedBeforeSendingApdu\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n"],
|
|
5
|
-
"mappings": "AAOO,MAAMA,CAAoC,CAC/C,KAAO,kBACP,cACA,YAAYC,EAAe,CACrBA,aAAe,MACjB,KAAK,cAAgBA,EACZA,IAAQ,SACjB,KAAK,cAAgB,IAAI,MAAM,OAAOA,CAAG,CAAC,EAE9C,CACF,CAEO,MAAMC,UAAoCF,CAAgB,CAE/D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,8BAI3B,CAEO,MAAME,UAAiCH,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMG,UAAgCJ,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMI,UAA+BL,CAAgB,CACjD,KAAO,yBAChB,YAAYC,EAAe,CACzB,MAAMA,CAAG,CACX,CACF,CAEO,MAAMK,UAA2BN,CAAgB,CAEtD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,oBAI3B,CAEO,MAAMM,UAAmCP,CAAgB,CAE9D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,4BAI3B,CACO,MAAMO,UAAiCR,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMQ,UAA6BT,CAAgB,CAExD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,sBAI3B,CAEO,MAAMS,
|
|
6
|
-
"names": ["GeneralDmkError", "err", "DeviceAlreadyConnectedError", "DeviceNotRecognizedError", "NoAccessibleDeviceError", "OpeningConnectionError", "UnknownDeviceError", "TransportNotSupportedError", "SendApduConcurrencyError", "SendApduTimeoutError", "SendApduEmptyResponseError", "DisconnectError", "ReconnectionFailedError", "DeviceNotInitializedError", "NoTransportsProvidedError", "TransportAlreadyExistsError", "DeviceDisconnectedWhileSendingError", "AlreadySendingApduError", "DeviceDisconnectedBeforeSendingApdu", "NoTransportProvidedError"]
|
|
4
|
+
"sourcesContent": ["import { type DmkError } from \"@api/Error\";\n\nexport type ConnectError =\n | UnknownDeviceError\n | OpeningConnectionError\n | DeviceAlreadyConnectedError;\n\nexport class GeneralDmkError implements DmkError {\n _tag = \"GeneralDmkError\";\n originalError?: unknown;\n constructor(err?: unknown) {\n if (err instanceof Error) {\n this.originalError = err;\n } else if (err !== undefined) {\n this.originalError = new Error(String(err));\n }\n }\n}\n\nexport class DeviceAlreadyConnectedError extends GeneralDmkError {\n override readonly _tag = \"DeviceAlreadyDiscoveredError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotRecognizedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotRecognizedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoAccessibleDeviceError extends GeneralDmkError {\n override readonly _tag = \"NoAccessibleDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class OpeningConnectionError extends GeneralDmkError {\n override _tag = \"ConnectionOpeningError\";\n constructor(err?: unknown) {\n super(err);\n }\n}\n\nexport class UnknownDeviceError extends GeneralDmkError {\n override readonly _tag = \"UnknownDeviceError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportNotSupportedError extends GeneralDmkError {\n override readonly _tag = \"TransportNotSupportedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\nexport class SendApduConcurrencyError extends GeneralDmkError {\n override readonly _tag = \"SendApduConcurrencyError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class SendApduTimeoutError extends GeneralDmkError {\n override readonly _tag = \"SendApduTimeoutError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class SendCommandTimeoutError extends GeneralDmkError {\n override readonly _tag = \"SendCommandTimeoutError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class SendApduEmptyResponseError extends GeneralDmkError {\n override readonly _tag = \"SendApduEmptyResponseError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DisconnectError extends GeneralDmkError {\n override readonly _tag = \"DisconnectError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class ReconnectionFailedError extends GeneralDmkError {\n override readonly _tag = \"ReconnectionFailedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceNotInitializedError extends GeneralDmkError {\n override readonly _tag = \"DeviceNotInitializedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportsProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportsProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class TransportAlreadyExistsError extends GeneralDmkError {\n override readonly _tag = \"TransportAlreadyExistsError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceDisconnectedWhileSendingError extends GeneralDmkError {\n override readonly _tag = \"DeviceDisconnectedWhileSendingError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class AlreadySendingApduError extends GeneralDmkError {\n override readonly _tag = \"AlreadySendingApduError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class DeviceDisconnectedBeforeSendingApdu extends GeneralDmkError {\n override readonly _tag = \"DeviceDisconnectedBeforeSendingApdu\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class NoTransportProvidedError extends GeneralDmkError {\n override readonly _tag = \"NoTransportProvidedError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAOO,MAAMA,CAAoC,CAC/C,KAAO,kBACP,cACA,YAAYC,EAAe,CACrBA,aAAe,MACjB,KAAK,cAAgBA,EACZA,IAAQ,SACjB,KAAK,cAAgB,IAAI,MAAM,OAAOA,CAAG,CAAC,EAE9C,CACF,CAEO,MAAMC,UAAoCF,CAAgB,CAE/D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,8BAI3B,CAEO,MAAME,UAAiCH,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMG,UAAgCJ,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMI,UAA+BL,CAAgB,CACjD,KAAO,yBAChB,YAAYC,EAAe,CACzB,MAAMA,CAAG,CACX,CACF,CAEO,MAAMK,UAA2BN,CAAgB,CAEtD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,oBAI3B,CAEO,MAAMM,UAAmCP,CAAgB,CAE9D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,4BAI3B,CACO,MAAMO,UAAiCR,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B,CAEO,MAAMQ,UAA6BT,CAAgB,CAExD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,sBAI3B,CAEO,MAAMS,UAAgCV,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMU,UAAmCX,CAAgB,CAE9D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,4BAI3B,CAEO,MAAMW,UAAwBZ,CAAgB,CAEnD,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,iBAI3B,CAEO,MAAMY,UAAgCb,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMa,UAAkCd,CAAgB,CAE7D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,2BAI3B,CAEO,MAAMc,UAAkCf,CAAgB,CAE7D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,2BAI3B,CAEO,MAAMe,UAAoChB,CAAgB,CAE/D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,6BAI3B,CAEO,MAAMgB,UAA4CjB,CAAgB,CAEvE,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,qCAI3B,CAEO,MAAMiB,UAAgClB,CAAgB,CAE3D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,yBAI3B,CAEO,MAAMkB,UAA4CnB,CAAgB,CAEvE,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,qCAI3B,CAEO,MAAMmB,UAAiCpB,CAAgB,CAE5D,YAAqBC,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,0BAI3B",
|
|
6
|
+
"names": ["GeneralDmkError", "err", "DeviceAlreadyConnectedError", "DeviceNotRecognizedError", "NoAccessibleDeviceError", "OpeningConnectionError", "UnknownDeviceError", "TransportNotSupportedError", "SendApduConcurrencyError", "SendApduTimeoutError", "SendCommandTimeoutError", "SendApduEmptyResponseError", "DisconnectError", "ReconnectionFailedError", "DeviceNotInitializedError", "NoTransportsProvidedError", "TransportAlreadyExistsError", "DeviceDisconnectedWhileSendingError", "AlreadySendingApduError", "DeviceDisconnectedBeforeSendingApdu", "NoTransportProvidedError"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
class
|
|
1
|
+
class d{id;deviceModel;sendApdu;type;transport;name;constructor({id:e,deviceModel:t,type:n,transport:r,sendApdu:o,name:p}){this.id=e,this.deviceModel=t,this.sendApdu=o,this.type=n,this.transport=r,this.name=p}}export{d as TransportConnectedDevice};
|
|
2
2
|
//# sourceMappingURL=TransportConnectedDevice.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/api/transport/model/TransportConnectedDevice.ts"],
|
|
4
|
-
"sourcesContent": ["import { type DeviceId } from \"@api/device/DeviceModel\";\nimport { type TransportDeviceModel } from \"@api/device-model/model/DeviceModel\";\nimport { type ConnectionType } from \"@api/discovery/ConnectionType\";\nimport { type SendApduFnType } from \"@api/transport/model/DeviceConnection\";\nimport { type TransportIdentifier } from \"@api/transport/model/TransportIdentifier\";\n\n/**\n * The internal connected device.\n */\nexport type ConnectedDeviceConstructorArgs = {\n id: DeviceId;\n deviceModel: TransportDeviceModel;\n type: ConnectionType;\n transport: TransportIdentifier;\n sendApdu: SendApduFnType;\n};\n\nexport class TransportConnectedDevice {\n public readonly id: DeviceId;\n public readonly deviceModel: TransportDeviceModel;\n public readonly sendApdu: SendApduFnType;\n public readonly type: ConnectionType;\n public readonly transport: TransportIdentifier;\n\n constructor({\n id,\n deviceModel,\n type,\n transport,\n sendApdu,\n }: ConnectedDeviceConstructorArgs) {\n this.id = id;\n this.deviceModel = deviceModel;\n this.sendApdu = sendApdu;\n this.type = type;\n this.transport = transport;\n }\n}\n"],
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["TransportConnectedDevice", "id", "deviceModel", "type", "transport", "sendApdu"]
|
|
4
|
+
"sourcesContent": ["import { type DeviceId } from \"@api/device/DeviceModel\";\nimport { type TransportDeviceModel } from \"@api/device-model/model/DeviceModel\";\nimport { type ConnectionType } from \"@api/discovery/ConnectionType\";\nimport { type SendApduFnType } from \"@api/transport/model/DeviceConnection\";\nimport { type TransportIdentifier } from \"@api/transport/model/TransportIdentifier\";\n\n/**\n * The internal connected device.\n */\nexport type ConnectedDeviceConstructorArgs = {\n id: DeviceId;\n deviceModel: TransportDeviceModel;\n type: ConnectionType;\n transport: TransportIdentifier;\n sendApdu: SendApduFnType;\n name?: string;\n};\n\nexport class TransportConnectedDevice {\n public readonly id: DeviceId;\n public readonly deviceModel: TransportDeviceModel;\n public readonly sendApdu: SendApduFnType;\n public readonly type: ConnectionType;\n public readonly transport: TransportIdentifier;\n public readonly name?: string;\n\n constructor({\n id,\n deviceModel,\n type,\n transport,\n sendApdu,\n name,\n }: ConnectedDeviceConstructorArgs) {\n this.id = id;\n this.deviceModel = deviceModel;\n this.sendApdu = sendApdu;\n this.type = type;\n this.transport = transport;\n this.name = name;\n }\n}\n"],
|
|
5
|
+
"mappings": "AAkBO,MAAMA,CAAyB,CACpB,GACA,YACA,SACA,KACA,UACA,KAEhB,YAAY,CACV,GAAAC,EACA,YAAAC,EACA,KAAAC,EACA,UAAAC,EACA,SAAAC,EACA,KAAAC,CACF,EAAmC,CACjC,KAAK,GAAKL,EACV,KAAK,YAAcC,EACnB,KAAK,SAAWG,EAChB,KAAK,KAAOF,EACZ,KAAK,UAAYC,EACjB,KAAK,KAAOE,CACd,CACF",
|
|
6
|
+
"names": ["TransportConnectedDevice", "id", "deviceModel", "type", "transport", "sendApdu", "name"]
|
|
7
7
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=CryptoService.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/crypto/NobleCryptoService.ts"],
|
|
4
|
+
"sourcesContent": ["import { sha3_256 } from \"@noble/hashes/sha3\";\n\nimport { type CryptoService } from \"./CryptoService\";\n\n/**\n * Noble implementation of the crypto service\n */\nexport class NobleCryptoService implements CryptoService {\n sha3_256(data: Uint8Array): Uint8Array {\n return sha3_256(data);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,YAAAA,MAAgB,qBAOlB,MAAMC,CAA4C,CACvD,SAASC,EAA8B,CACrC,OAAOF,EAASE,CAAI,CACtB,CACF",
|
|
6
|
+
"names": ["sha3_256", "NobleCryptoService", "data"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{NobleCryptoService as c}from"./NobleCryptoService";describe("NobleCryptoService",()=>{let x;beforeEach(()=>{x=new c}),describe("sha3_256",()=>{it("should compute SHA3-256 hash",()=>{const e=new Uint8Array([1,2,3,4]),r=x.sha3_256(e);expect(r).toStrictEqual(new Uint8Array([150,109,189,203,208,224,52,143,170,28,203,206,90,98,184,231,59,13,8,149,93,102,109,184,34,67,179,3,217,189,149,2]))})})});
|
|
2
|
+
//# sourceMappingURL=NobleCryptoService.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/internal/crypto/NobleCryptoService.test.ts"],
|
|
4
|
+
"sourcesContent": ["import { NobleCryptoService } from \"./NobleCryptoService\";\n\ndescribe(\"NobleCryptoService\", () => {\n let cryptoService: NobleCryptoService;\n\n beforeEach(() => {\n cryptoService = new NobleCryptoService();\n });\n\n describe(\"sha3_256\", () => {\n it(\"should compute SHA3-256 hash\", () => {\n const input = new Uint8Array([0x01, 0x02, 0x03, 0x04]);\n const hash = cryptoService.sha3_256(input);\n\n expect(hash).toStrictEqual(\n new Uint8Array([\n 0x96, 0x6d, 0xbd, 0xcb, 0xd0, 0xe0, 0x34, 0x8f, 0xaa, 0x1c, 0xcb,\n 0xce, 0x5a, 0x62, 0xb8, 0xe7, 0x3b, 0x0d, 0x08, 0x95, 0x5d, 0x66,\n 0x6d, 0xb8, 0x22, 0x43, 0xb3, 0x03, 0xd9, 0xbd, 0x95, 0x02,\n ]),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,sBAAAA,MAA0B,uBAEnC,SAAS,qBAAsB,IAAM,CACnC,IAAIC,EAEJ,WAAW,IAAM,CACfA,EAAgB,IAAID,CACtB,CAAC,EAED,SAAS,WAAY,IAAM,CACzB,GAAG,+BAAgC,IAAM,CACvC,MAAME,EAAQ,IAAI,WAAW,CAAC,EAAM,EAAM,EAAM,CAAI,CAAC,EAC/CC,EAAOF,EAAc,SAASC,CAAK,EAEzC,OAAOC,CAAI,EAAE,cACX,IAAI,WAAW,CACb,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,GAAM,IAC5D,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,GAAM,EAAM,IAAM,GAAM,IAC5D,IAAM,IAAM,GAAM,GAAM,IAAM,EAAM,IAAM,IAAM,IAAM,CACxD,CAAC,CACH,CACF,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["NobleCryptoService", "cryptoService", "input", "hash"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ContainerModule as
|
|
1
|
+
import{ContainerModule as p}from"inversify";import{DisableDeviceSessionRefresherUseCase as u}from"../../../api/device-session/use-case/DisableDeviceSessionRefresher";import{DefaultApduReceiverService as S}from"../../device-session/service/DefaultApduReceiverService";import{DefaultApduSenderService as v}from"../../device-session/service/DefaultApduSenderService";import{DefaultDeviceSessionService as m}from"../../device-session/service/DefaultDeviceSessionService";import{CloseSessionsUseCase as f}from"../../device-session/use-case/CloseSessionsUseCase";import{GetDeviceSessionStateUseCase as g}from"../../device-session/use-case/GetDeviceSessionStateUseCase";import{UnsafeBypassIntentQueueUseCase as l}from"../../device-session/use-case/UnsafeBypassIntentQueueUseCase";import{loggerTypes as a}from"../../logger-publisher/di/loggerTypes";import{StubUseCase as c}from"../../../../src/di.stub";import{deviceSessionTypes as e}from"./deviceSessionTypes";const b=({stub:n}={stub:!1})=>new p(({bind:r,rebindSync:o})=>{r(e.ApduSenderServiceFactory).toFactory(s=>{const t=s.get(a.LoggerPublisherServiceFactory);return i=>new v(i,t)}),r(e.ApduReceiverServiceFactory).toFactory(s=>{const t=s.get(a.LoggerPublisherServiceFactory);return(i={})=>new S(i,t)}),r(e.DeviceSessionService).to(m).inSingletonScope(),r(e.GetDeviceSessionStateUseCase).to(g),r(e.CloseSessionsUseCase).to(f),r(e.DisableDeviceSessionRefresherUseCase).to(u),r(e.UnsafeBypassIntentQueueUseCase).to(l),n&&(o(e.GetDeviceSessionStateUseCase).to(c),o(e.DisableDeviceSessionRefresherUseCase).to(c),o(e.UnsafeBypassIntentQueueUseCase).to(c))});export{b as deviceSessionModuleFactory};
|
|
2
2
|
//# sourceMappingURL=deviceSessionModule.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/device-session/di/deviceSessionModule.ts"],
|
|
4
|
-
"sourcesContent": ["import { ContainerModule, type Factory } from \"inversify\";\n\nimport { type ApduReceiverService } from \"@api/device-session/service/ApduReceiverService\";\nimport { type ApduReceiverConstructorArgs } from \"@api/device-session/service/ApduReceiverService\";\nimport { type ApduSenderService } from \"@api/device-session/service/ApduSenderService\";\nimport { type ApduSenderServiceConstructorArgs } from \"@api/device-session/service/ApduSenderService\";\nimport { DisableDeviceSessionRefresherUseCase } from \"@api/device-session/use-case/DisableDeviceSessionRefresher\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DefaultApduReceiverService } from \"@internal/device-session/service/DefaultApduReceiverService\";\nimport { DefaultApduSenderService } from \"@internal/device-session/service/DefaultApduSenderService\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { CloseSessionsUseCase } from \"@internal/device-session/use-case/CloseSessionsUseCase\";\nimport { GetDeviceSessionStateUseCase } from \"@internal/device-session/use-case/GetDeviceSessionStateUseCase\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { deviceSessionTypes } from \"./deviceSessionTypes\";\n\nexport type DeviceSessionModuleArgs = Partial<{\n stub: boolean;\n}>;\n\nexport const deviceSessionModuleFactory = (\n { stub }: DeviceSessionModuleArgs = { stub: false },\n) =>\n new ContainerModule(({ bind, rebindSync }) => {\n bind<Factory<ApduSenderService>>(\n deviceSessionTypes.ApduSenderServiceFactory,\n ).toFactory((context) => {\n const logger = context.get<(name: string) => LoggerPublisherService>(\n loggerTypes.LoggerPublisherServiceFactory,\n );\n\n return (args: ApduSenderServiceConstructorArgs) => {\n return new DefaultApduSenderService(args, logger);\n };\n });\n\n bind<Factory<ApduReceiverService>>(\n deviceSessionTypes.ApduReceiverServiceFactory,\n ).toFactory((context) => {\n const logger = context.get<(name: string) => LoggerPublisherService>(\n loggerTypes.LoggerPublisherServiceFactory,\n );\n\n return (args: ApduReceiverConstructorArgs = {}) => {\n return new DefaultApduReceiverService(args, logger);\n };\n });\n\n bind(deviceSessionTypes.DeviceSessionService)\n .to(DefaultDeviceSessionService)\n .inSingletonScope();\n\n bind(deviceSessionTypes.GetDeviceSessionStateUseCase).to(\n GetDeviceSessionStateUseCase,\n );\n bind(deviceSessionTypes.CloseSessionsUseCase).to(CloseSessionsUseCase);\n bind(deviceSessionTypes.DisableDeviceSessionRefresherUseCase).to(\n DisableDeviceSessionRefresherUseCase,\n );\n\n if (stub) {\n rebindSync(deviceSessionTypes.GetDeviceSessionStateUseCase).to(\n StubUseCase,\n );\n rebindSync(deviceSessionTypes.DisableDeviceSessionRefresherUseCase).to(\n StubUseCase,\n );\n }\n });\n"],
|
|
5
|
-
"mappings": "AAAA,OAAS,mBAAAA,MAAqC,YAM9C,OAAS,wCAAAC,MAA4C,6DAErD,OAAS,8BAAAC,MAAkC,8DAC3C,OAAS,4BAAAC,MAAgC,4DACzC,OAAS,+BAAAC,MAAmC,+DAC5C,OAAS,wBAAAC,MAA4B,yDACrC,OAAS,gCAAAC,MAAoC,iEAC7C,OAAS,eAAAC,MAAmB,4CAC5B,OAAS,eAAAC,MAAmB,oBAE5B,OAAS,sBAAAC,MAA0B,uBAM5B,MAAMC,EAA6B,CACxC,CAAE,KAAAC,CAAK,EAA6B,CAAE,KAAM,EAAM,IAElD,
|
|
6
|
-
"names": ["ContainerModule", "DisableDeviceSessionRefresherUseCase", "DefaultApduReceiverService", "DefaultApduSenderService", "DefaultDeviceSessionService", "CloseSessionsUseCase", "GetDeviceSessionStateUseCase", "loggerTypes", "StubUseCase", "deviceSessionTypes", "deviceSessionModuleFactory", "stub", "bind", "rebindSync", "context", "logger", "args"]
|
|
4
|
+
"sourcesContent": ["import { ContainerModule, type Factory } from \"inversify\";\n\nimport { type ApduReceiverService } from \"@api/device-session/service/ApduReceiverService\";\nimport { type ApduReceiverConstructorArgs } from \"@api/device-session/service/ApduReceiverService\";\nimport { type ApduSenderService } from \"@api/device-session/service/ApduSenderService\";\nimport { type ApduSenderServiceConstructorArgs } from \"@api/device-session/service/ApduSenderService\";\nimport { DisableDeviceSessionRefresherUseCase } from \"@api/device-session/use-case/DisableDeviceSessionRefresher\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { DefaultApduReceiverService } from \"@internal/device-session/service/DefaultApduReceiverService\";\nimport { DefaultApduSenderService } from \"@internal/device-session/service/DefaultApduSenderService\";\nimport { DefaultDeviceSessionService } from \"@internal/device-session/service/DefaultDeviceSessionService\";\nimport { CloseSessionsUseCase } from \"@internal/device-session/use-case/CloseSessionsUseCase\";\nimport { GetDeviceSessionStateUseCase } from \"@internal/device-session/use-case/GetDeviceSessionStateUseCase\";\nimport { UnsafeBypassIntentQueueUseCase } from \"@internal/device-session/use-case/UnsafeBypassIntentQueueUseCase\";\nimport { loggerTypes } from \"@internal/logger-publisher/di/loggerTypes\";\nimport { StubUseCase } from \"@root/src/di.stub\";\n\nimport { deviceSessionTypes } from \"./deviceSessionTypes\";\n\nexport type DeviceSessionModuleArgs = Partial<{\n stub: boolean;\n}>;\n\nexport const deviceSessionModuleFactory = (\n { stub }: DeviceSessionModuleArgs = { stub: false },\n) =>\n new ContainerModule(({ bind, rebindSync }) => {\n bind<Factory<ApduSenderService>>(\n deviceSessionTypes.ApduSenderServiceFactory,\n ).toFactory((context) => {\n const logger = context.get<(name: string) => LoggerPublisherService>(\n loggerTypes.LoggerPublisherServiceFactory,\n );\n\n return (args: ApduSenderServiceConstructorArgs) => {\n return new DefaultApduSenderService(args, logger);\n };\n });\n\n bind<Factory<ApduReceiverService>>(\n deviceSessionTypes.ApduReceiverServiceFactory,\n ).toFactory((context) => {\n const logger = context.get<(name: string) => LoggerPublisherService>(\n loggerTypes.LoggerPublisherServiceFactory,\n );\n\n return (args: ApduReceiverConstructorArgs = {}) => {\n return new DefaultApduReceiverService(args, logger);\n };\n });\n\n bind(deviceSessionTypes.DeviceSessionService)\n .to(DefaultDeviceSessionService)\n .inSingletonScope();\n\n bind(deviceSessionTypes.GetDeviceSessionStateUseCase).to(\n GetDeviceSessionStateUseCase,\n );\n bind(deviceSessionTypes.CloseSessionsUseCase).to(CloseSessionsUseCase);\n bind(deviceSessionTypes.DisableDeviceSessionRefresherUseCase).to(\n DisableDeviceSessionRefresherUseCase,\n );\n bind(deviceSessionTypes.UnsafeBypassIntentQueueUseCase).to(\n UnsafeBypassIntentQueueUseCase,\n );\n\n if (stub) {\n rebindSync(deviceSessionTypes.GetDeviceSessionStateUseCase).to(\n StubUseCase,\n );\n rebindSync(deviceSessionTypes.DisableDeviceSessionRefresherUseCase).to(\n StubUseCase,\n );\n rebindSync(deviceSessionTypes.UnsafeBypassIntentQueueUseCase).to(\n StubUseCase,\n );\n }\n });\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,mBAAAA,MAAqC,YAM9C,OAAS,wCAAAC,MAA4C,6DAErD,OAAS,8BAAAC,MAAkC,8DAC3C,OAAS,4BAAAC,MAAgC,4DACzC,OAAS,+BAAAC,MAAmC,+DAC5C,OAAS,wBAAAC,MAA4B,yDACrC,OAAS,gCAAAC,MAAoC,iEAC7C,OAAS,kCAAAC,MAAsC,mEAC/C,OAAS,eAAAC,MAAmB,4CAC5B,OAAS,eAAAC,MAAmB,oBAE5B,OAAS,sBAAAC,MAA0B,uBAM5B,MAAMC,EAA6B,CACxC,CAAE,KAAAC,CAAK,EAA6B,CAAE,KAAM,EAAM,IAElD,IAAIZ,EAAgB,CAAC,CAAE,KAAAa,EAAM,WAAAC,CAAW,IAAM,CAC5CD,EACEH,EAAmB,wBACrB,EAAE,UAAWK,GAAY,CACvB,MAAMC,EAASD,EAAQ,IACrBP,EAAY,6BACd,EAEA,OAAQS,GACC,IAAId,EAAyBc,EAAMD,CAAM,CAEpD,CAAC,EAEDH,EACEH,EAAmB,0BACrB,EAAE,UAAWK,GAAY,CACvB,MAAMC,EAASD,EAAQ,IACrBP,EAAY,6BACd,EAEA,MAAO,CAACS,EAAoC,CAAC,IACpC,IAAIf,EAA2Be,EAAMD,CAAM,CAEtD,CAAC,EAEDH,EAAKH,EAAmB,oBAAoB,EACzC,GAAGN,CAA2B,EAC9B,iBAAiB,EAEpBS,EAAKH,EAAmB,4BAA4B,EAAE,GACpDJ,CACF,EACAO,EAAKH,EAAmB,oBAAoB,EAAE,GAAGL,CAAoB,EACrEQ,EAAKH,EAAmB,oCAAoC,EAAE,GAC5DT,CACF,EACAY,EAAKH,EAAmB,8BAA8B,EAAE,GACtDH,CACF,EAEIK,IACFE,EAAWJ,EAAmB,4BAA4B,EAAE,GAC1DD,CACF,EACAK,EAAWJ,EAAmB,oCAAoC,EAAE,GAClED,CACF,EACAK,EAAWJ,EAAmB,8BAA8B,EAAE,GAC5DD,CACF,EAEJ,CAAC",
|
|
6
|
+
"names": ["ContainerModule", "DisableDeviceSessionRefresherUseCase", "DefaultApduReceiverService", "DefaultApduSenderService", "DefaultDeviceSessionService", "CloseSessionsUseCase", "GetDeviceSessionStateUseCase", "UnsafeBypassIntentQueueUseCase", "loggerTypes", "StubUseCase", "deviceSessionTypes", "deviceSessionModuleFactory", "stub", "bind", "rebindSync", "context", "logger", "args"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const e={ApduSenderServiceFactory:Symbol.for("ApduSenderServiceFactory"),ApduReceiverServiceFactory:Symbol.for("ApduReceiverServiceFactory"),DeviceSessionService:Symbol.for("DeviceSessionService"),GetDeviceSessionStateUseCase:Symbol.for("GetDeviceSessionStateUseCase"),DisableDeviceSessionRefresherUseCase:Symbol.for("DisableDeviceSessionRefresherUseCase"),CloseSessionsUseCase:Symbol.for("CloseSessionsUseCase")};export{e as deviceSessionTypes};
|
|
1
|
+
const e={ApduSenderServiceFactory:Symbol.for("ApduSenderServiceFactory"),ApduReceiverServiceFactory:Symbol.for("ApduReceiverServiceFactory"),DeviceSessionService:Symbol.for("DeviceSessionService"),GetDeviceSessionStateUseCase:Symbol.for("GetDeviceSessionStateUseCase"),DisableDeviceSessionRefresherUseCase:Symbol.for("DisableDeviceSessionRefresherUseCase"),CloseSessionsUseCase:Symbol.for("CloseSessionsUseCase"),UnsafeBypassIntentQueueUseCase:Symbol.for("UnsafeBypassIntentQueueUseCase")};export{e as deviceSessionTypes};
|
|
2
2
|
//# sourceMappingURL=deviceSessionTypes.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/device-session/di/deviceSessionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["export const deviceSessionTypes = {\n ApduSenderServiceFactory: Symbol.for(\"ApduSenderServiceFactory\"),\n ApduReceiverServiceFactory: Symbol.for(\"ApduReceiverServiceFactory\"),\n DeviceSessionService: Symbol.for(\"DeviceSessionService\"),\n GetDeviceSessionStateUseCase: Symbol.for(\"GetDeviceSessionStateUseCase\"),\n DisableDeviceSessionRefresherUseCase: Symbol.for(\n \"DisableDeviceSessionRefresherUseCase\",\n ),\n CloseSessionsUseCase: Symbol.for(\"CloseSessionsUseCase\"),\n};\n"],
|
|
5
|
-
"mappings": "AAAO,MAAMA,EAAqB,CAChC,yBAA0B,OAAO,IAAI,0BAA0B,EAC/D,2BAA4B,OAAO,IAAI,4BAA4B,EACnE,qBAAsB,OAAO,IAAI,sBAAsB,EACvD,6BAA8B,OAAO,IAAI,8BAA8B,EACvE,qCAAsC,OAAO,IAC3C,sCACF,EACA,qBAAsB,OAAO,IAAI,sBAAsB,
|
|
4
|
+
"sourcesContent": ["export const deviceSessionTypes = {\n ApduSenderServiceFactory: Symbol.for(\"ApduSenderServiceFactory\"),\n ApduReceiverServiceFactory: Symbol.for(\"ApduReceiverServiceFactory\"),\n DeviceSessionService: Symbol.for(\"DeviceSessionService\"),\n GetDeviceSessionStateUseCase: Symbol.for(\"GetDeviceSessionStateUseCase\"),\n DisableDeviceSessionRefresherUseCase: Symbol.for(\n \"DisableDeviceSessionRefresherUseCase\",\n ),\n CloseSessionsUseCase: Symbol.for(\"CloseSessionsUseCase\"),\n UnsafeBypassIntentQueueUseCase: Symbol.for(\"UnsafeBypassIntentQueueUseCase\"),\n};\n"],
|
|
5
|
+
"mappings": "AAAO,MAAMA,EAAqB,CAChC,yBAA0B,OAAO,IAAI,0BAA0B,EAC/D,2BAA4B,OAAO,IAAI,4BAA4B,EACnE,qBAAsB,OAAO,IAAI,sBAAsB,EACvD,6BAA8B,OAAO,IAAI,8BAA8B,EACvE,qCAAsC,OAAO,IAC3C,sCACF,EACA,qBAAsB,OAAO,IAAI,sBAAsB,EACvD,+BAAgC,OAAO,IAAI,gCAAgC,CAC7E",
|
|
6
6
|
"names": ["deviceSessionTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{BehaviorSubject as v}from"rxjs";import{v4 as
|
|
1
|
+
import{BehaviorSubject as m,from as p,lastValueFrom as v,timeout as l}from"rxjs";import{v4 as S}from"uuid";import{CommandUtils as D}from"../../../api/command/utils/CommandUtils";import{DeviceStatus as h}from"../../../api/device/DeviceStatus";import{DeviceSessionStateType as _}from"../../../api/device-session/DeviceSessionState";import{SendApduTimeoutError as f,SendCommandTimeoutError as g}from"../../../api/transport/model/Errors";import{bufferToHexaString as c}from"../../../api/utils/HexaString";import{DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS as E}from"../../device-session/data/DeviceSessionRefresherConst";import{IntentQueueService as b}from"../../device-session/service/IntentQueueService";import{RefresherService as A}from"../../device-session/service/RefresherService";import{DevicePinger as C}from"./DevicePinger";import{DeviceSessionEventDispatcher as R,SessionEvents as u}from"./DeviceSessionEventDispatcher";import{DeviceSessionRefresher as I}from"./DeviceSessionRefresher";import{DeviceSessionStateHandler as y}from"./DeviceSessionStateHandler";class H{_id;_connectedDevice;_deviceState;_managerApiService;_secureChannelService;_logger;_refresherOptions;_pinger;_deviceSessionRefresher;_refresherService;_intentQueueService;_sessionEventDispatcher=new R;_bypassIntentQueue=!1;constructor({connectedDevice:e,id:t=S()},i,s,n,r,a=o=>new b(i,o)){this._id=t,this._connectedDevice=e,this._logger=i("device-session"),this._managerApiService=s,this._intentQueueService=a(this._sessionEventDispatcher),this._secureChannelService=n,this._refresherOptions={...E,...r},this._deviceState=new m({sessionStateType:_.Connected,deviceStatus:h.CONNECTED,deviceModelId:this._connectedDevice.deviceModel.id}),this._pinger=new C(i,e,this._sessionEventDispatcher,(o,d)=>this.sendCommand(o,d)),this._deviceSessionRefresher=new I(i,this._refresherOptions,this._sessionEventDispatcher,this._connectedDevice),new y(i,this._sessionEventDispatcher,this._connectedDevice,this._deviceState,o=>this.setDeviceSessionState(o)),this._refresherService=new A(i,{start:()=>this._deviceSessionRefresher.restartRefresher(),stop:()=>this._deviceSessionRefresher.stopRefresher()})}async initialiseSession(){try{this._refresherOptions.isRefresherDisabled?await this._pinger.ping():this._deviceSessionRefresher.startRefresher()}catch(e){throw this._logger.error("Error while initialising session",{data:{error:e}}),e}}get id(){return this._id}get connectedDevice(){return this._connectedDevice}get state(){return this._deviceState.asObservable()}getDeviceSessionState(){return this._deviceState.getValue()}setDeviceSessionState(e){this._deviceState.next(e)}sendApdu(e,t={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){return this._bypassIntentQueue?this._unsafeInternalSendApdu(e,t):this._internalSendApdu(e,t)}_internalSendApdu(e,t){const i=t.abortTimeout,s=Date.now(),{observable:n,cancel:r}=this._intentQueueService.enqueue({type:"send-apdu",execute:()=>p((async()=>{const o=Date.now()-s;return await this._unsafeInternalSendApdu(e,{isPolling:t.isPolling,triggersDisconnection:t.triggersDisconnection,abortTimeout:i?i-o:void 0})})())}),a=i?n.pipe(l({each:i,with:()=>{throw r(),new f}})):n;return v(a)}async _unsafeInternalSendApdu(e,t={isPolling:!1,triggersDisconnection:!1,abortTimeout:void 0}){return this._logger.debug(`[exchange] => ${c(e,!1)}`),(await this._connectedDevice.sendApdu(e,t.triggersDisconnection,t.abortTimeout)).ifRight(s=>{this._logger.debug(`[exchange] <= ${c(s.data,!1)}${c(s.statusCode,!1)}`),D.isLockedDeviceResponse(s)?this._sessionEventDispatcher.dispatch({eventName:u.DEVICE_STATE_UPDATE_LOCKED}):this._sessionEventDispatcher.dispatch({eventName:u.DEVICE_STATE_UPDATE_CONNECTED})}).ifLeft(()=>{this._sessionEventDispatcher.dispatch({eventName:u.DEVICE_STATE_UPDATE_UNKNOWN})})}sendCommand(e,t){return this._logger.debug(`[sendCommand] ${e.name}`),this._bypassIntentQueue?this._unsafeInternalSendCommand(e,t):this._internalSendCommand(e,t)}_internalSendCommand(e,t){const i=Date.now(),{observable:s,cancel:n}=this._intentQueueService.enqueue({type:"send-command",execute:()=>p((async()=>{const a=Date.now()-i;return await this._unsafeInternalSendCommand(e,t?t-a:void 0)})())}),r=t?s.pipe(l({each:t,with:()=>{throw n(),new g}})):s;return v(r)}async _unsafeInternalSendCommand(e,t){const i=e.getApdu();return(await this._unsafeInternalSendApdu(i.getRawApdu(),{isPolling:!1,triggersDisconnection:e.triggersDisconnection??!1,abortTimeout:t})).caseOf({Left:n=>{throw this._logger.error("[sendCommand] error",{data:{err:n}}),n},Right:n=>{const r=e.parseResponse(n,this._connectedDevice.deviceModel.id);return this._logger.debug("[sendCommand] result",{data:{result:r}}),r}})}executeDeviceAction(e){return this._bypassIntentQueue?this._unsafeInternalExecuteDeviceAction(e):this._internalExecuteDeviceAction(e)}_internalExecuteDeviceAction(e){let t;const{observable:i,cancel:s}=this._intentQueueService.enqueue({type:"device-action",execute:()=>{const{observable:n,cancel:r}=this._unsafeInternalExecuteDeviceAction(e);return t=r,n}});return{observable:i,cancel:()=>{t?.(),s()}}}_unsafeInternalExecuteDeviceAction(e){const{observable:t,cancel:i}=e._execute({sendApdu:async s=>this._unsafeInternalSendApdu(s),sendCommand:async s=>this._unsafeInternalSendCommand(s),getDeviceModel:()=>this._connectedDevice.deviceModel,getDeviceSessionState:()=>this._deviceState.getValue(),getDeviceSessionStateObservable:()=>this.state,setDeviceSessionState:s=>(this.setDeviceSessionState(s),this._deviceState.getValue()),getManagerApiService:()=>this._managerApiService,getSecureChannelService:()=>this._secureChannelService});return{observable:t,cancel:i}}close(){this._updateDeviceStatus(h.NOT_CONNECTED),this._deviceState.complete(),this._deviceSessionRefresher.stopRefresher(),this._pinger.unsubscribe()}disableRefresher(e){return this._refresherService.disableRefresher(e)}_unsafeBypassIntentQueue(e){this._bypassIntentQueue=e}_updateDeviceStatus(e){const t=this._deviceState.getValue();this._deviceState.next({...t,deviceStatus:e})}}export{H as DeviceSession};
|
|
2
2
|
//# sourceMappingURL=DeviceSession.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/device-session/model/DeviceSession.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Either } from \"purify-ts\";\nimport { BehaviorSubject, type Observable } from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { type CommandResult } from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceSessionId } from \"@api/device-session/types\";\nimport { type DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { MutexService } from \"@internal/device-session/service/MutexService\";\nimport { RefresherService } from \"@internal/device-session/service/RefresherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { DevicePinger } from \"./DevicePinger\";\nimport {\n DeviceSessionEventDispatcher,\n SessionEvents,\n} from \"./DeviceSessionEventDispatcher\";\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\nimport { DeviceSessionStateHandler } from \"./DeviceSessionStateHandler\";\n\nexport type SessionConstructorArgs = {\n connectedDevice: TransportConnectedDevice;\n id?: DeviceSessionId;\n};\n\nexport type DeviceSessionRefresherOptions = {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n};\n\ntype SendApduOptions = {\n isPolling?: boolean;\n triggersDisconnection?: boolean;\n abortTimeout?: number;\n};\n\n/**\n * Represents a session with a device.\n */\nexport class DeviceSession {\n private readonly _id: DeviceSessionId;\n private readonly _connectedDevice: TransportConnectedDevice;\n private readonly _deviceState: BehaviorSubject<DeviceSessionState>;\n private readonly _managerApiService: ManagerApiService;\n private readonly _secureChannelService: SecureChannelService;\n private readonly _logger: LoggerPublisherService;\n private readonly _refresherOptions: DeviceSessionRefresherOptions;\n private _pinger: DevicePinger;\n private _deviceSessionRefresher: DeviceSessionRefresher;\n private readonly _refresherService: RefresherService;\n private _commandMutex = new MutexService();\n private _sessionEventDispatcher = new DeviceSessionEventDispatcher();\n\n constructor(\n { connectedDevice, id = uuidv4() }: SessionConstructorArgs,\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n managerApiService: ManagerApiService,\n secureChannelService: SecureChannelService,\n deviceSessionRefresherOptions: DeviceSessionRefresherOptions | undefined,\n ) {\n this._id = id;\n this._connectedDevice = connectedDevice;\n this._logger = loggerModuleFactory(\"device-session\");\n this._managerApiService = managerApiService;\n this._secureChannelService = secureChannelService;\n this._refresherOptions = {\n ...DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n ...deviceSessionRefresherOptions,\n };\n this._deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: this._connectedDevice.deviceModel.id,\n });\n\n this._pinger = new DevicePinger(\n loggerModuleFactory,\n connectedDevice,\n this._sessionEventDispatcher,\n (command, abortTimeout) => this.sendCommand(command, abortTimeout),\n );\n this._deviceSessionRefresher = new DeviceSessionRefresher(\n loggerModuleFactory,\n this._refresherOptions,\n this._sessionEventDispatcher,\n this._connectedDevice,\n );\n new DeviceSessionStateHandler(\n loggerModuleFactory,\n this._sessionEventDispatcher,\n this._connectedDevice,\n this._deviceState,\n (state) => this.setDeviceSessionState(state),\n );\n\n this._refresherService = new RefresherService(loggerModuleFactory, {\n start: () => this._deviceSessionRefresher.restartRefresher(),\n stop: () => this._deviceSessionRefresher.stopRefresher(),\n });\n }\n\n public async initialiseSession(): Promise<void> {\n try {\n await this._pinger.ping();\n } catch (error) {\n this._logger.error(\"Error while initialising session\", {\n data: { error },\n });\n throw error;\n } finally {\n if (!this._refresherOptions.isRefresherDisabled) {\n this._deviceSessionRefresher.startRefresher();\n }\n }\n }\n\n public get id(): DeviceSessionId {\n return this._id;\n }\n\n public get connectedDevice(): TransportConnectedDevice {\n return this._connectedDevice;\n }\n\n public get state(): Observable<DeviceSessionState> {\n return this._deviceState.asObservable();\n }\n\n public getDeviceSessionState(): DeviceSessionState {\n return this._deviceState.getValue();\n }\n\n public setDeviceSessionState(state: DeviceSessionState): void {\n this._deviceState.next(state);\n }\n\n public async sendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions = {\n isPolling: false,\n triggersDisconnection: false,\n abortTimeout: undefined,\n },\n ): Promise<Either<DmkError, ApduResponse>> {\n const release = await this._commandMutex.lock();\n\n try {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n });\n const result = await this._connectedDevice.sendApdu(\n rawApdu,\n options.triggersDisconnection,\n options.abortTimeout,\n );\n\n result\n .ifRight((response: ApduResponse) => {\n if (CommandUtils.isLockedDeviceResponse(response)) {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_LOCKED,\n });\n } else {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n }\n })\n .ifLeft(() => {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n });\n return result;\n } finally {\n release();\n }\n }\n\n public async sendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n abortTimeout?: number,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n const apdu = command.getApdu();\n\n const response = await this.sendApdu(apdu.getRawApdu(), {\n isPolling: false,\n triggersDisconnection: command.triggersDisconnection ?? false,\n abortTimeout,\n });\n\n return response.caseOf({\n Left: (err) => {\n throw err;\n },\n Right: (r) =>\n command.parseResponse(r, this._connectedDevice.deviceModel.id),\n });\n }\n\n public executeDeviceAction<\n Output,\n Input,\n E extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, E, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, E, IntermediateValue> {\n const { observable, cancel } = deviceAction._execute({\n sendApdu: async (apdu: Uint8Array) => this.sendApdu(apdu),\n sendCommand: async <Response, ErrorStatusCodes, Args>(\n command: Command<Response, ErrorStatusCodes, Args>,\n abortTimeout?: number,\n ) => this.sendCommand(command, abortTimeout),\n getDeviceModel: () => this._connectedDevice.deviceModel,\n getDeviceSessionState: () => this._deviceState.getValue(),\n getDeviceSessionStateObservable: () => this.state,\n setDeviceSessionState: (state: DeviceSessionState) => {\n this.setDeviceSessionState(state);\n return this._deviceState.getValue();\n },\n disableRefresher: (blockerId: string) =>\n this._refresherService.disableRefresher(blockerId),\n getManagerApiService: () => this._managerApiService,\n getSecureChannelService: () => this._secureChannelService,\n });\n return { observable, cancel };\n }\n\n public close(): void {\n this._updateDeviceStatus(DeviceStatus.NOT_CONNECTED);\n this._deviceState.complete();\n this._deviceSessionRefresher.stopRefresher();\n }\n\n public disableRefresher(id: string): () => void {\n return this._refresherService.disableRefresher(id);\n }\n\n private _updateDeviceStatus(deviceStatus: DeviceStatus): void {\n const state = this._deviceState.getValue();\n this._deviceState.next({ ...state, deviceStatus });\n }\n}\n"],
|
|
5
|
-
"mappings": "AACA,
|
|
6
|
-
"names": ["BehaviorSubject", "uuidv4", "CommandUtils", "DeviceStatus", "DeviceSessionStateType", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "
|
|
4
|
+
"sourcesContent": ["import { type Either } from \"purify-ts\";\nimport {\n BehaviorSubject,\n from,\n lastValueFrom,\n type Observable,\n timeout,\n} from \"rxjs\";\nimport { v4 as uuidv4 } from \"uuid\";\n\nimport { type Command } from \"@api/command/Command\";\nimport { type CommandResult } from \"@api/command/model/CommandResult\";\nimport { CommandUtils } from \"@api/command/utils/CommandUtils\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport {\n type DeviceAction,\n type DeviceActionIntermediateValue,\n type ExecuteDeviceActionReturnType,\n} from \"@api/device-action/DeviceAction\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport {\n type DeviceSessionState,\n DeviceSessionStateType,\n} from \"@api/device-session/DeviceSessionState\";\nimport { type DeviceSessionId } from \"@api/device-session/types\";\nimport { type DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport {\n SendApduTimeoutError,\n SendCommandTimeoutError,\n} from \"@api/transport/model/Errors\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { bufferToHexaString } from \"@api/utils/HexaString\";\nimport { DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS } from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport { IntentQueueService } from \"@internal/device-session/service/IntentQueueService\";\nimport { RefresherService } from \"@internal/device-session/service/RefresherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport { DevicePinger } from \"./DevicePinger\";\nimport {\n DeviceSessionEventDispatcher,\n SessionEvents,\n} from \"./DeviceSessionEventDispatcher\";\nimport { DeviceSessionRefresher } from \"./DeviceSessionRefresher\";\nimport { DeviceSessionStateHandler } from \"./DeviceSessionStateHandler\";\n\nexport type SessionConstructorArgs = {\n connectedDevice: TransportConnectedDevice;\n id?: DeviceSessionId;\n};\n\nexport type DeviceSessionRefresherOptions = {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n};\n\ntype SendApduOptions = {\n isPolling?: boolean;\n triggersDisconnection?: boolean;\n abortTimeout?: number;\n};\n\n/**\n * Represents a session with a device.\n */\nexport class DeviceSession {\n private readonly _id: DeviceSessionId;\n private readonly _connectedDevice: TransportConnectedDevice;\n private readonly _deviceState: BehaviorSubject<DeviceSessionState>;\n private readonly _managerApiService: ManagerApiService;\n private readonly _secureChannelService: SecureChannelService;\n private readonly _logger: LoggerPublisherService;\n private readonly _refresherOptions: DeviceSessionRefresherOptions;\n private _pinger: DevicePinger;\n private _deviceSessionRefresher: DeviceSessionRefresher;\n private readonly _refresherService: RefresherService;\n private readonly _intentQueueService: IntentQueueService;\n private _sessionEventDispatcher = new DeviceSessionEventDispatcher();\n private _bypassIntentQueue: boolean = false;\n\n constructor(\n { connectedDevice, id = uuidv4() }: SessionConstructorArgs,\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n managerApiService: ManagerApiService,\n secureChannelService: SecureChannelService,\n deviceSessionRefresherOptions: DeviceSessionRefresherOptions | undefined,\n intentQueueServiceFactory: (\n sessionEventDispatcher: DeviceSessionEventDispatcher,\n ) => IntentQueueService = (sessionEventDispatcher) =>\n new IntentQueueService(loggerModuleFactory, sessionEventDispatcher),\n ) {\n this._id = id;\n this._connectedDevice = connectedDevice;\n this._logger = loggerModuleFactory(\"device-session\");\n this._managerApiService = managerApiService;\n this._intentQueueService = intentQueueServiceFactory(\n this._sessionEventDispatcher,\n );\n this._secureChannelService = secureChannelService;\n this._refresherOptions = {\n ...DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS,\n ...deviceSessionRefresherOptions,\n };\n this._deviceState = new BehaviorSubject<DeviceSessionState>({\n sessionStateType: DeviceSessionStateType.Connected,\n deviceStatus: DeviceStatus.CONNECTED,\n deviceModelId: this._connectedDevice.deviceModel.id,\n });\n\n this._pinger = new DevicePinger(\n loggerModuleFactory,\n connectedDevice,\n this._sessionEventDispatcher,\n (command, abortTimeout) => this.sendCommand(command, abortTimeout),\n );\n this._deviceSessionRefresher = new DeviceSessionRefresher(\n loggerModuleFactory,\n this._refresherOptions,\n this._sessionEventDispatcher,\n this._connectedDevice,\n );\n new DeviceSessionStateHandler(\n loggerModuleFactory,\n this._sessionEventDispatcher,\n this._connectedDevice,\n this._deviceState,\n (state) => this.setDeviceSessionState(state),\n );\n\n this._refresherService = new RefresherService(loggerModuleFactory, {\n start: () => this._deviceSessionRefresher.restartRefresher(),\n stop: () => this._deviceSessionRefresher.stopRefresher(),\n });\n }\n\n public async initialiseSession(): Promise<void> {\n try {\n if (this._refresherOptions.isRefresherDisabled) await this._pinger.ping();\n else this._deviceSessionRefresher.startRefresher();\n } catch (error) {\n this._logger.error(\"Error while initialising session\", {\n data: { error },\n });\n throw error;\n }\n }\n\n public get id(): DeviceSessionId {\n return this._id;\n }\n\n public get connectedDevice(): TransportConnectedDevice {\n return this._connectedDevice;\n }\n\n public get state(): Observable<DeviceSessionState> {\n return this._deviceState.asObservable();\n }\n\n public getDeviceSessionState(): DeviceSessionState {\n return this._deviceState.getValue();\n }\n\n public setDeviceSessionState(state: DeviceSessionState): void {\n this._deviceState.next(state);\n }\n\n public sendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions = {\n isPolling: false,\n triggersDisconnection: false,\n abortTimeout: undefined,\n },\n ): Promise<Either<DmkError, ApduResponse>> {\n // Bypass intent queue if flag is set\n if (this._bypassIntentQueue) {\n return this._unsafeInternalSendApdu(rawApdu, options);\n }\n return this._internalSendApdu(rawApdu, options);\n }\n\n private _internalSendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions,\n ): Promise<Either<DmkError, ApduResponse>> {\n const abortTimeout = options.abortTimeout;\n const beforeQueuedTimestamp = Date.now();\n const { observable, cancel } = this._intentQueueService.enqueue({\n type: \"send-apdu\",\n execute: () =>\n from(\n (async () => {\n const elapsedTime = Date.now() - beforeQueuedTimestamp;\n const result = await this._unsafeInternalSendApdu(rawApdu, {\n isPolling: options.isPolling,\n triggersDisconnection: options.triggersDisconnection,\n // Subtract the elapsed time to account for the time spent in the queue\n // to sync both observable and transport timeout\n abortTimeout: abortTimeout\n ? abortTimeout - elapsedTime\n : undefined,\n });\n return result;\n })(),\n ),\n });\n\n const timeoutObservable = abortTimeout\n ? observable.pipe(\n timeout({\n each: abortTimeout,\n with: () => {\n cancel();\n throw new SendApduTimeoutError();\n },\n }),\n )\n : observable;\n\n return lastValueFrom(timeoutObservable);\n }\n\n private async _unsafeInternalSendApdu(\n rawApdu: Uint8Array,\n options: SendApduOptions = {\n isPolling: false,\n triggersDisconnection: false,\n abortTimeout: undefined,\n },\n ): Promise<Either<DmkError, ApduResponse>> {\n this._logger.debug(`[exchange] => ${bufferToHexaString(rawApdu, false)}`);\n const result = await this._connectedDevice.sendApdu(\n rawApdu,\n options.triggersDisconnection,\n options.abortTimeout,\n );\n\n return result\n .ifRight((response: ApduResponse) => {\n this._logger.debug(\n `[exchange] <= ${bufferToHexaString(response.data, false)}${bufferToHexaString(response.statusCode, false)}`,\n );\n if (CommandUtils.isLockedDeviceResponse(response)) {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_LOCKED,\n });\n } else {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_CONNECTED,\n });\n }\n })\n .ifLeft(() => {\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.DEVICE_STATE_UPDATE_UNKNOWN,\n });\n });\n }\n\n public sendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n abortTimeout?: number,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n this._logger.debug(`[sendCommand] ${command.name}`);\n\n // Bypass intent queue if flag is set\n if (this._bypassIntentQueue) {\n return this._unsafeInternalSendCommand(command, abortTimeout);\n }\n return this._internalSendCommand(command, abortTimeout);\n }\n\n private _internalSendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n abortTimeout?: number,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n const beforeQueuedTimestamp = Date.now();\n const { observable, cancel } = this._intentQueueService.enqueue({\n type: \"send-command\",\n execute: () =>\n from(\n (async () => {\n const elapsedTime = Date.now() - beforeQueuedTimestamp;\n const result = await this._unsafeInternalSendCommand(\n command,\n // Subtract the elapsed time to account for the time spent in the queue\n // to sync both observable and transport timeout\n abortTimeout ? abortTimeout - elapsedTime : undefined,\n );\n return result;\n })(),\n ),\n });\n\n const timeoutObservable = abortTimeout\n ? observable.pipe(\n timeout({\n each: abortTimeout,\n with: () => {\n cancel();\n throw new SendCommandTimeoutError();\n },\n }),\n )\n : observable;\n\n return lastValueFrom(timeoutObservable);\n }\n\n private async _unsafeInternalSendCommand<Response, Args, ErrorStatusCodes>(\n command: Command<Response, Args, ErrorStatusCodes>,\n abortTimeout?: number,\n ): Promise<CommandResult<Response, ErrorStatusCodes>> {\n const apdu = command.getApdu();\n\n const response = await this._unsafeInternalSendApdu(apdu.getRawApdu(), {\n isPolling: false,\n triggersDisconnection: command.triggersDisconnection ?? false,\n abortTimeout,\n });\n\n return response.caseOf({\n Left: (err) => {\n this._logger.error(\"[sendCommand] error\", { data: { err } });\n throw err;\n },\n Right: (r) => {\n const result = command.parseResponse(\n r,\n this._connectedDevice.deviceModel.id,\n );\n this._logger.debug(\"[sendCommand] result\", { data: { result } });\n return result;\n },\n });\n }\n\n public executeDeviceAction<\n Output,\n Input,\n E extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, E, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, E, IntermediateValue> {\n // Bypass intent queue if flag is set\n if (this._bypassIntentQueue) {\n return this._unsafeInternalExecuteDeviceAction(deviceAction);\n }\n return this._internalExecuteDeviceAction(deviceAction);\n }\n\n private _internalExecuteDeviceAction<\n Output,\n Input,\n E extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, E, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, E, IntermediateValue> {\n let deviceActionCancel: (() => void) | undefined;\n\n const { observable: o, cancel: queueCancel } =\n this._intentQueueService.enqueue({\n type: \"device-action\",\n execute: () => {\n const { observable, cancel } =\n this._unsafeInternalExecuteDeviceAction(deviceAction);\n deviceActionCancel = cancel;\n return observable;\n },\n });\n\n return {\n observable: o,\n cancel: () => {\n deviceActionCancel?.();\n queueCancel();\n },\n };\n }\n\n private _unsafeInternalExecuteDeviceAction<\n Output,\n Input,\n E extends DmkError,\n IntermediateValue extends DeviceActionIntermediateValue,\n >(\n deviceAction: DeviceAction<Output, Input, E, IntermediateValue>,\n ): ExecuteDeviceActionReturnType<Output, E, IntermediateValue> {\n const { observable, cancel } = deviceAction._execute({\n sendApdu: async (apdu: Uint8Array) => this._unsafeInternalSendApdu(apdu), // note: there is no timeout handled at this stage\n sendCommand: async <Response, ErrorStatusCodes, Args>(\n command: Command<Response, ErrorStatusCodes, Args>,\n ) => this._unsafeInternalSendCommand(command), // note: there is no timeout handled at this stage\n getDeviceModel: () => this._connectedDevice.deviceModel,\n getDeviceSessionState: () => this._deviceState.getValue(),\n getDeviceSessionStateObservable: () => this.state,\n setDeviceSessionState: (state: DeviceSessionState) => {\n this.setDeviceSessionState(state);\n return this._deviceState.getValue();\n },\n getManagerApiService: () => this._managerApiService,\n getSecureChannelService: () => this._secureChannelService,\n });\n\n return {\n observable,\n cancel,\n };\n }\n\n public close(): void {\n this._updateDeviceStatus(DeviceStatus.NOT_CONNECTED);\n this._deviceState.complete();\n this._deviceSessionRefresher.stopRefresher();\n this._pinger.unsubscribe();\n }\n\n public disableRefresher(id: string): () => void {\n return this._refresherService.disableRefresher(id);\n }\n\n public _unsafeBypassIntentQueue(bypass: boolean): void {\n this._bypassIntentQueue = bypass;\n }\n\n private _updateDeviceStatus(deviceStatus: DeviceStatus): void {\n const state = this._deviceState.getValue();\n this._deviceState.next({ ...state, deviceStatus });\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["BehaviorSubject", "from", "lastValueFrom", "timeout", "uuidv4", "CommandUtils", "DeviceStatus", "DeviceSessionStateType", "SendApduTimeoutError", "SendCommandTimeoutError", "bufferToHexaString", "DEVICE_SESSION_REFRESHER_DEFAULT_OPTIONS", "IntentQueueService", "RefresherService", "DevicePinger", "DeviceSessionEventDispatcher", "SessionEvents", "DeviceSessionRefresher", "DeviceSessionStateHandler", "DeviceSession", "connectedDevice", "id", "loggerModuleFactory", "managerApiService", "secureChannelService", "deviceSessionRefresherOptions", "intentQueueServiceFactory", "sessionEventDispatcher", "command", "abortTimeout", "state", "error", "rawApdu", "options", "beforeQueuedTimestamp", "observable", "cancel", "elapsedTime", "timeoutObservable", "response", "apdu", "err", "r", "result", "deviceAction", "deviceActionCancel", "o", "queueCancel", "bypass", "deviceStatus"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Left as C,Right as g}from"purify-ts";import{of as b,Subject as x,throwError as A}from"rxjs";import{delay as f,take as T}from"rxjs/operators";import{CommandResultStatus as w}from"../../../api/command/model/CommandResult";import{DeviceStatus as S}from"../../../api/device/DeviceStatus";import{DeviceSessionStateType as h}from"../../../api/device-session/DeviceSessionState";import{connectedDeviceStubBuilder as R}from"../../../api/transport/model/TransportConnectedDevice.stub";import{DefaultLoggerPublisherService as E}from"../../logger-publisher/service/DefaultLoggerPublisherService";import{DeviceSession as v}from"./DeviceSession";describe("DeviceSession",()=>{let e,k,a,u,d,o,l,p;const r=R();beforeEach(()=>{k=new E([],"device-session-test"),a=vi.fn(()=>k),u={getAppList:vi.fn(),getAppsByHash:vi.fn(),getCurrentFirmware:vi.fn(),getLatestFirmware:vi.fn()},d={genuineCheck:vi.fn(),listInstalledApps:vi.fn(),updateMcu:vi.fn(),updateFirmware:vi.fn(),installApp:vi.fn(),uninstallApp:vi.fn()},o={enqueue:vi.fn().mockReturnValue({observable:b(null).pipe(f(1)),cancel:vi.fn()})},l=()=>o,p={isRefresherDisabled:!0}}),afterEach(()=>{e?.close(),vi.restoreAllMocks()}),describe("constructor",()=>{it("should create a device session with default id",()=>{e=new v({connectedDevice:r},a,u,d,p,l),expect(e).toBeDefined(),expect(e.id).toBeDefined(),expect(e.connectedDevice).toBe(r)}),it("should create a device session with custom id",()=>{const t="custom-session-id";e=new v({connectedDevice:r,id:t},a,u,d,p,l),expect(e.id).toBe(t)})}),describe("initialiseSession",()=>{it("should successfully initialize session",()=>{e=new v({connectedDevice:r},a,u,d,{isRefresherDisabled:!1,pollingInterval:1e3},l);const t=vi.spyOn(e._deviceSessionRefresher,"startRefresher");e.initialiseSession(),expect(t).toHaveBeenCalled()})}),describe("getters",()=>{beforeEach(()=>{e=new v({connectedDevice:r,id:"test-id"},a,u,d,p,l)}),it("should return session id",()=>{expect(e.id).toBe("test-id")}),it("should return connected device",()=>{expect(e.connectedDevice).toBe(r)}),it("should return state as observable",async()=>{const t=e.state;await new Promise(s=>{t.pipe(T(1)).subscribe(n=>{expect(n.sessionStateType).toBe(h.Connected),expect(n.deviceStatus).toBe(S.CONNECTED),s()})})})}),describe("getDeviceSessionState and setDeviceSessionState",()=>{beforeEach(()=>{e=new v({connectedDevice:r},a,u,d,p,l)}),it("should get current device session state",()=>{const t=e.getDeviceSessionState();expect(t.sessionStateType).toBe(h.Connected),expect(t.deviceStatus).toBe(S.CONNECTED)}),it("should set device session state",async()=>{const t={sessionStateType:h.ReadyWithoutSecureChannel,deviceStatus:S.LOCKED,deviceModelId:r.deviceModel.id,currentApp:{name:"Test",version:"1.0.0"},installedApps:[],isSecureConnectionAllowed:!1};await new Promise(s=>{let n=!1;const c=e.state.subscribe(i=>{i.sessionStateType===h.ReadyWithoutSecureChannel?(expect(i).toMatchObject({sessionStateType:h.ReadyWithoutSecureChannel,deviceStatus:S.LOCKED,deviceModelId:r.deviceModel.id}),c.unsubscribe(),s()):n||(n=!0)});e.setDeviceSessionState(t)})})}),describe("sendApdu",()=>{let t,s;beforeEach(()=>{t=new Uint8Array([224,1,0,0]),s={data:new Uint8Array([1,2]),statusCode:new Uint8Array([144,0])},e=new v({connectedDevice:r},a,u,d,p,l)}),it("should successfully send APDU",async()=>{const n=b(g(s)).pipe(f(1));o.enqueue.mockReturnValue({observable:n,cancel:vi.fn()});const c=await e.sendApdu(t);expect(o.enqueue).toHaveBeenCalledWith({type:"send-apdu",execute:expect.any(Function)}),expect(c.isRight()).toBe(!0),c.ifRight(i=>{expect(i).toEqual(s)})}),it("should handle APDU send error",async()=>{const n={_tag:"SendApduError"},c=b(C(n)).pipe(f(1));o.enqueue.mockReturnValue({observable:c,cancel:vi.fn()});const i=await e.sendApdu(t);expect(i.isLeft()).toBe(!0),i.ifLeft(m=>{expect(m).toEqual(n)})}),it("should handle APDU timeout",async()=>{const n=vi.fn(),c=new x;o.enqueue.mockReturnValue({observable:c.asObservable(),cancel:n}),vi.useFakeTimers();const i=e.sendApdu(t,{abortTimeout:1e3});vi.advanceTimersByTime(1100);let m;try{await i}catch(y){m=y}vi.useRealTimers(),expect(m).toBeDefined(),expect(o.enqueue).toHaveBeenCalled()})}),describe("sendCommand",()=>{let t,s;beforeEach(()=>{s={status:w.Success,data:{test:"data"}},t={getApdu:vi.fn().mockReturnValue({getRawApdu:()=>new Uint8Array([224,1,0,0])}),parseResponse:vi.fn().mockReturnValue(s),triggersDisconnection:!1},e=new v({connectedDevice:r},a,u,d,p,l)}),it("should successfully send command",async()=>{const n=b(s).pipe(f(1));o.enqueue.mockReturnValue({observable:n,cancel:vi.fn()});const c=await e.sendCommand(t);expect(o.enqueue).toHaveBeenCalledWith({type:"send-command",execute:expect.any(Function)}),expect(c).toEqual(s)}),it("should handle command timeout",async()=>{const n=vi.fn(),c=new x;o.enqueue.mockReturnValue({observable:c.asObservable(),cancel:n}),vi.useFakeTimers();const i=e.sendCommand(t,1e3);vi.advanceTimersByTime(1100);try{await i}catch{}vi.useRealTimers(),expect(o.enqueue).toHaveBeenCalled()}),it("should handle command error",async()=>{const n=new Error("Command failed"),c=A(()=>n);o.enqueue.mockReturnValue({observable:c,cancel:vi.fn()}),await expect(e.sendCommand(t)).rejects.toThrow("Command failed")})}),describe("executeDeviceAction",()=>{let t;beforeEach(()=>{const s=b({intermediateValue:"test",requiredUserInteraction:"SignTransaction"}).pipe(f(1));t={_execute:vi.fn().mockReturnValue({observable:s})},e=new v({connectedDevice:r},a,u,d,p,l)}),it("should execute device action",async()=>{const s=b({intermediateValue:"test",requiredUserInteraction:"SignTransaction"}).pipe(f(1)),n=vi.fn();o.enqueue.mockReturnValue({observable:s,cancel:n});const{observable:c,cancel:i}=e.executeDeviceAction(t);expect(o.enqueue).toHaveBeenCalledWith({type:"device-action",execute:expect.any(Function)}),expect(c).toBeDefined(),expect(i).toBeTypeOf("function");const m=[];await new Promise(y=>{c.subscribe({next:D=>m.push(D),complete:()=>y()})}),expect(m).toEqual([{intermediateValue:"test",requiredUserInteraction:"SignTransaction"}]),i(),expect(n).toHaveBeenCalled()}),it("should provide correct internal API to device action",()=>{const s=b({intermediateValue:"test",requiredUserInteraction:"SignTransaction"}).pipe(f(1));o.enqueue.mockImplementation(n=>(n.execute(),{observable:s,cancel:vi.fn()})),e.executeDeviceAction(t),expect(t._execute).toHaveBeenCalledWith({sendApdu:expect.any(Function),sendCommand:expect.any(Function),getDeviceModel:expect.any(Function),getDeviceSessionState:expect.any(Function),getDeviceSessionStateObservable:expect.any(Function),setDeviceSessionState:expect.any(Function),getManagerApiService:expect.any(Function),getSecureChannelService:expect.any(Function)})}),it("should allow cancelling device action",()=>{const s=vi.fn(),n=new x;o.enqueue.mockReturnValue({observable:n.asObservable(),cancel:s});const{cancel:c}=e.executeDeviceAction(t);c(),expect(s).toHaveBeenCalled()})}),describe("close",()=>{it("should close the session and update device status",()=>{e=new v({connectedDevice:r},a,u,d,p,l);let t=!1;e.state.subscribe({complete:()=>{t=!0}}),e.close();const s=e.getDeviceSessionState();expect(s.deviceStatus).toBe(S.NOT_CONNECTED),expect(t).toBe(!0)})})});
|
|
2
|
+
//# sourceMappingURL=DeviceSession.test.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/internal/device-session/model/DeviceSession.test.ts"],
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport { Left, Right } from \"purify-ts\";\nimport { of, Subject, throwError } from \"rxjs\";\nimport { delay, take } from \"rxjs/operators\";\nimport { type Mocked } from \"vitest\";\n\nimport { type Command } from \"@api/command/Command\";\nimport {\n type CommandResult,\n CommandResultStatus,\n} from \"@api/command/model/CommandResult\";\nimport { DeviceStatus } from \"@api/device/DeviceStatus\";\nimport { type DeviceAction } from \"@api/device-action/DeviceAction\";\nimport { type ApduResponse } from \"@api/device-session/ApduResponse\";\nimport { DeviceSessionStateType } from \"@api/device-session/DeviceSessionState\";\nimport { type DmkError } from \"@api/Error\";\nimport { type LoggerPublisherService } from \"@api/logger-publisher/service/LoggerPublisherService\";\nimport { connectedDeviceStubBuilder } from \"@api/transport/model/TransportConnectedDevice.stub\";\nimport { type IntentQueueService } from \"@internal/device-session/service/IntentQueueService\";\nimport { DefaultLoggerPublisherService } from \"@internal/logger-publisher/service/DefaultLoggerPublisherService\";\nimport { type ManagerApiService } from \"@internal/manager-api/service/ManagerApiService\";\nimport { type SecureChannelService } from \"@internal/secure-channel/service/SecureChannelService\";\n\nimport {\n DeviceSession,\n type DeviceSessionRefresherOptions,\n} from \"./DeviceSession\";\n\ndescribe(\"DeviceSession\", () => {\n let deviceSession: DeviceSession;\n let mockLogger: LoggerPublisherService;\n let mockLoggerFactory: ReturnType<typeof vi.fn>;\n let mockManagerApi: Mocked<ManagerApiService>;\n let mockSecureChannel: Mocked<SecureChannelService>;\n let mockIntentQueueService: Mocked<IntentQueueService>;\n let mockIntentQueueServiceFactory: () => IntentQueueService;\n let refresherOptions: DeviceSessionRefresherOptions;\n const mockConnectedDevice = connectedDeviceStubBuilder();\n\n beforeEach(() => {\n // Setup logger\n mockLogger = new DefaultLoggerPublisherService([], \"device-session-test\");\n mockLoggerFactory = vi.fn(() => mockLogger);\n\n // Setup mocks\n mockManagerApi = {\n getAppList: vi.fn(),\n getAppsByHash: vi.fn(),\n getCurrentFirmware: vi.fn(),\n getLatestFirmware: vi.fn(),\n } as unknown as Mocked<ManagerApiService>;\n\n mockSecureChannel = {\n genuineCheck: vi.fn(),\n listInstalledApps: vi.fn(),\n updateMcu: vi.fn(),\n updateFirmware: vi.fn(),\n installApp: vi.fn(),\n uninstallApp: vi.fn(),\n } as unknown as Mocked<SecureChannelService>;\n\n // Setup intent queue service with default mock\n mockIntentQueueService = {\n enqueue: vi.fn().mockReturnValue({\n observable: of(null).pipe(delay(1)),\n cancel: vi.fn(),\n }),\n } as unknown as Mocked<IntentQueueService>;\n\n mockIntentQueueServiceFactory = () => mockIntentQueueService;\n\n refresherOptions = {\n isRefresherDisabled: true,\n };\n });\n\n afterEach(() => {\n deviceSession?.close();\n vi.restoreAllMocks();\n });\n\n describe(\"constructor\", () => {\n it(\"should create a device session with default id\", () => {\n // when\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n\n // then\n expect(deviceSession).toBeDefined();\n expect(deviceSession.id).toBeDefined();\n expect(deviceSession.connectedDevice).toBe(mockConnectedDevice);\n });\n\n it(\"should create a device session with custom id\", () => {\n // given\n const customId = \"custom-session-id\";\n\n // when\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice, id: customId },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n\n // then\n expect(deviceSession.id).toBe(customId);\n });\n });\n\n describe(\"initialiseSession\", () => {\n it(\"should successfully initialize session\", () => {\n // given\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n { isRefresherDisabled: false, pollingInterval: 1000 },\n mockIntentQueueServiceFactory,\n );\n\n const mockRefresherStartSpy = vi.spyOn(\n deviceSession[\"_deviceSessionRefresher\"],\n \"startRefresher\",\n );\n\n // when\n deviceSession.initialiseSession();\n\n // then\n expect(mockRefresherStartSpy).toHaveBeenCalled();\n });\n });\n\n describe(\"getters\", () => {\n beforeEach(() => {\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice, id: \"test-id\" },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n });\n\n it(\"should return session id\", () => {\n expect(deviceSession.id).toBe(\"test-id\");\n });\n\n it(\"should return connected device\", () => {\n expect(deviceSession.connectedDevice).toBe(mockConnectedDevice);\n });\n\n it(\"should return state as observable\", async () => {\n const stateObservable = deviceSession.state;\n\n await new Promise<void>((resolve) => {\n stateObservable.pipe(take(1)).subscribe((state) => {\n expect(state.sessionStateType).toBe(DeviceSessionStateType.Connected);\n expect(state.deviceStatus).toBe(DeviceStatus.CONNECTED);\n resolve();\n });\n });\n });\n });\n\n describe(\"getDeviceSessionState and setDeviceSessionState\", () => {\n beforeEach(() => {\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n });\n\n it(\"should get current device session state\", () => {\n // when\n const state = deviceSession.getDeviceSessionState();\n\n // then\n expect(state.sessionStateType).toBe(DeviceSessionStateType.Connected);\n expect(state.deviceStatus).toBe(DeviceStatus.CONNECTED);\n });\n\n it(\"should set device session state\", async () => {\n // given\n const newState = {\n sessionStateType: DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.LOCKED,\n deviceModelId: mockConnectedDevice.deviceModel.id,\n currentApp: { name: \"Test\", version: \"1.0.0\" },\n installedApps: [],\n isSecureConnectionAllowed: false,\n };\n\n // when\n await new Promise<void>((resolve) => {\n let subscriptionStarted = false;\n const subscription = deviceSession.state.subscribe((state) => {\n if (\n state.sessionStateType ===\n DeviceSessionStateType.ReadyWithoutSecureChannel\n ) {\n expect(state).toMatchObject({\n sessionStateType:\n DeviceSessionStateType.ReadyWithoutSecureChannel,\n deviceStatus: DeviceStatus.LOCKED,\n deviceModelId: mockConnectedDevice.deviceModel.id,\n });\n subscription.unsubscribe();\n resolve();\n } else if (!subscriptionStarted) {\n subscriptionStarted = true;\n }\n });\n\n deviceSession.setDeviceSessionState(newState);\n });\n });\n });\n\n describe(\"sendApdu\", () => {\n let mockApdu: Uint8Array;\n let mockResponse: ApduResponse;\n\n beforeEach(() => {\n mockApdu = new Uint8Array([0xe0, 0x01, 0x00, 0x00]);\n mockResponse = {\n data: new Uint8Array([0x01, 0x02]),\n statusCode: new Uint8Array([0x90, 0x00]),\n };\n\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n });\n\n it(\"should successfully send APDU\", async () => {\n // given\n const mockObservable = of(Right(mockResponse)).pipe(delay(1));\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: mockObservable,\n cancel: vi.fn(),\n });\n\n // when\n const result = await deviceSession.sendApdu(mockApdu);\n\n // then\n expect(mockIntentQueueService.enqueue).toHaveBeenCalledWith({\n type: \"send-apdu\",\n execute: expect.any(Function),\n });\n expect(result.isRight()).toBe(true);\n result.ifRight((response) => {\n expect(response).toEqual(mockResponse);\n });\n });\n\n it(\"should handle APDU send error\", async () => {\n // given\n const error = { _tag: \"SendApduError\" } as DmkError;\n const mockObservable = of(Left(error)).pipe(delay(1));\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: mockObservable,\n cancel: vi.fn(),\n });\n\n // when\n const result = await deviceSession.sendApdu(mockApdu);\n\n // then\n expect(result.isLeft()).toBe(true);\n result.ifLeft((err) => {\n expect(err).toEqual(error);\n });\n });\n\n it(\"should handle APDU timeout\", async () => {\n // given\n const mockCancel = vi.fn();\n const subject = new Subject();\n\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: subject.asObservable(),\n cancel: mockCancel,\n });\n\n vi.useFakeTimers();\n\n // when\n const sendPromise = deviceSession.sendApdu(mockApdu, {\n abortTimeout: 1000,\n });\n\n // Advance timers to trigger timeout\n vi.advanceTimersByTime(1100);\n\n let caughtError: Error | undefined;\n try {\n await sendPromise;\n } catch (error) {\n caughtError = error as Error;\n }\n\n vi.useRealTimers();\n\n // then\n expect(caughtError).toBeDefined();\n expect(mockIntentQueueService.enqueue).toHaveBeenCalled();\n });\n });\n\n describe(\"sendCommand\", () => {\n type TestData = { test: string };\n type TestArgs = Record<string, never>;\n type TestErrorCodes = number;\n\n let mockCommand: Mocked<Command<TestData, TestArgs, TestErrorCodes>>;\n let mockCommandResult: CommandResult<TestData, TestErrorCodes>;\n\n beforeEach(() => {\n mockCommandResult = {\n status: CommandResultStatus.Success,\n data: { test: \"data\" },\n };\n\n mockCommand = {\n getApdu: vi.fn().mockReturnValue({\n getRawApdu: () => new Uint8Array([0xe0, 0x01, 0x00, 0x00]),\n }),\n parseResponse: vi.fn().mockReturnValue(mockCommandResult),\n triggersDisconnection: false,\n } as unknown as Mocked<Command<TestData, TestArgs, TestErrorCodes>>;\n\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n });\n\n it(\"should successfully send command\", async () => {\n // given\n const mockObservable = of(mockCommandResult).pipe(delay(1));\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: mockObservable,\n cancel: vi.fn(),\n });\n\n // when\n const result = await deviceSession.sendCommand(mockCommand);\n\n // then\n expect(mockIntentQueueService.enqueue).toHaveBeenCalledWith({\n type: \"send-command\",\n execute: expect.any(Function),\n });\n expect(result).toEqual(mockCommandResult);\n });\n\n it(\"should handle command timeout\", async () => {\n // given\n const mockCancel = vi.fn();\n const subject = new Subject();\n\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: subject.asObservable(),\n cancel: mockCancel,\n });\n\n vi.useFakeTimers();\n\n // when\n const commandPromise = deviceSession.sendCommand(mockCommand, 1000);\n\n // Advance timers to trigger timeout\n vi.advanceTimersByTime(1100);\n\n try {\n await commandPromise;\n } catch {\n // Expected to timeout\n }\n\n vi.useRealTimers();\n\n // then\n expect(mockIntentQueueService.enqueue).toHaveBeenCalled();\n });\n\n it(\"should handle command error\", async () => {\n // given\n const error = new Error(\"Command failed\");\n const mockObservable = throwError(() => error);\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: mockObservable,\n cancel: vi.fn(),\n });\n\n // when/then\n await expect(deviceSession.sendCommand(mockCommand)).rejects.toThrow(\n \"Command failed\",\n );\n });\n });\n\n describe(\"executeDeviceAction\", () => {\n type TestOutput = { result: string };\n type TestInput = { input: string };\n type TestError = DmkError;\n type TestIntermediateValue = {\n intermediateValue: string;\n requiredUserInteraction:\n | \"UnlockDevice\"\n | \"ConfirmOpenApp\"\n | \"ConfirmCloseApp\"\n | \"AllowListAccess\"\n | \"AllowSecureChannelConnection\"\n | \"AllowedDataRecording\"\n | \"SignTransaction\";\n };\n\n let mockDeviceAction: Mocked<\n DeviceAction<TestOutput, TestInput, TestError, TestIntermediateValue>\n >;\n\n beforeEach(() => {\n const mockActionObservable = of({\n intermediateValue: \"test\",\n requiredUserInteraction: \"SignTransaction\" as const,\n }).pipe(delay(1));\n\n mockDeviceAction = {\n _execute: vi.fn().mockReturnValue({\n observable: mockActionObservable,\n }),\n } as unknown as Mocked<\n DeviceAction<TestOutput, TestInput, TestError, TestIntermediateValue>\n >;\n\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n });\n\n it(\"should execute device action\", async () => {\n // given\n const mockActionObservable = of({\n intermediateValue: \"test\",\n requiredUserInteraction: \"SignTransaction\" as const,\n }).pipe(delay(1));\n const mockCancel = vi.fn();\n\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: mockActionObservable,\n cancel: mockCancel,\n });\n\n // when\n const { observable, cancel } =\n deviceSession.executeDeviceAction(mockDeviceAction);\n\n // then\n expect(mockIntentQueueService.enqueue).toHaveBeenCalledWith({\n type: \"device-action\",\n execute: expect.any(Function),\n });\n expect(observable).toBeDefined();\n expect(cancel).toBeTypeOf(\"function\");\n\n // Verify observable emits values\n const values: unknown[] = [];\n await new Promise<void>((resolve) => {\n observable.subscribe({\n next: (value) => values.push(value),\n complete: () => resolve(),\n });\n });\n\n expect(values).toEqual([\n {\n intermediateValue: \"test\",\n requiredUserInteraction: \"SignTransaction\",\n },\n ]);\n\n // Verify cancel is called\n cancel();\n expect(mockCancel).toHaveBeenCalled();\n });\n\n it(\"should provide correct internal API to device action\", () => {\n // given\n const mockActionObservable = of({\n intermediateValue: \"test\",\n requiredUserInteraction: \"SignTransaction\" as const,\n }).pipe(delay(1));\n\n mockIntentQueueService.enqueue.mockImplementation((intent) => {\n // Execute the device action to verify the internal API\n void intent.execute();\n\n return {\n observable: mockActionObservable,\n cancel: vi.fn(),\n };\n });\n\n // when\n deviceSession.executeDeviceAction(mockDeviceAction);\n\n // then\n expect(mockDeviceAction._execute).toHaveBeenCalledWith({\n sendApdu: expect.any(Function),\n sendCommand: expect.any(Function),\n getDeviceModel: expect.any(Function),\n getDeviceSessionState: expect.any(Function),\n getDeviceSessionStateObservable: expect.any(Function),\n setDeviceSessionState: expect.any(Function),\n getManagerApiService: expect.any(Function),\n getSecureChannelService: expect.any(Function),\n });\n });\n\n it(\"should allow cancelling device action\", () => {\n // given\n const mockCancel = vi.fn();\n const subject = new Subject();\n\n mockIntentQueueService.enqueue.mockReturnValue({\n observable: subject.asObservable(),\n cancel: mockCancel,\n });\n\n // when\n const { cancel } = deviceSession.executeDeviceAction(mockDeviceAction);\n cancel();\n\n // then\n expect(mockCancel).toHaveBeenCalled();\n });\n });\n\n describe(\"close\", () => {\n it(\"should close the session and update device status\", () => {\n // given\n deviceSession = new DeviceSession(\n { connectedDevice: mockConnectedDevice },\n mockLoggerFactory,\n mockManagerApi,\n mockSecureChannel,\n refresherOptions,\n mockIntentQueueServiceFactory,\n );\n\n let isComplete = false;\n deviceSession.state.subscribe({\n complete: () => {\n isComplete = true;\n },\n });\n\n // when\n deviceSession.close();\n\n // then\n const state = deviceSession.getDeviceSessionState();\n expect(state.deviceStatus).toBe(DeviceStatus.NOT_CONNECTED);\n expect(isComplete).toBe(true);\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Left", "Right", "of", "Subject", "throwError", "delay", "take", "CommandResultStatus", "DeviceStatus", "DeviceSessionStateType", "connectedDeviceStubBuilder", "DefaultLoggerPublisherService", "DeviceSession", "deviceSession", "mockLogger", "mockLoggerFactory", "mockManagerApi", "mockSecureChannel", "mockIntentQueueService", "mockIntentQueueServiceFactory", "refresherOptions", "mockConnectedDevice", "customId", "mockRefresherStartSpy", "stateObservable", "resolve", "state", "newState", "subscriptionStarted", "subscription", "mockApdu", "mockResponse", "mockObservable", "result", "response", "error", "err", "mockCancel", "subject", "sendPromise", "caughtError", "mockCommand", "mockCommandResult", "commandPromise", "mockDeviceAction", "mockActionObservable", "observable", "cancel", "values", "value", "intent", "isComplete"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Subject as n}from"rxjs";var t=(
|
|
1
|
+
import{Subject as n}from"rxjs";var t=(E=>(E.NEW_STATE="NEW_STATE",E.REFRESH_NEEDED="REFRESH_NEEDED",E.COMMAND_SUCCEEDED="COMMAND_SUCCEEDED",E.DEVICE_STATE_UPDATE_BUSY="DEVICE_STATE_UPDATE_BUSY",E.DEVICE_STATE_UPDATE_LOCKED="DEVICE_STATE_UPDATE_LOCKED",E.DEVICE_STATE_UPDATE_CONNECTED="DEVICE_STATE_UPDATE_CONNECTED",E.DEVICE_STATE_UPDATE_UNKNOWN="DEVICE_STATE_UPDATE_UNKNOWN",E))(t||{});class T{_eventEmitter=new n;listen(){return this._eventEmitter.asObservable()}dispatch(e){this._eventEmitter.next(e)}}export{T as DeviceSessionEventDispatcher,t as SessionEvents};
|
|
2
2
|
//# sourceMappingURL=DeviceSessionEventDispatcher.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/device-session/model/DeviceSessionEventDispatcher.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Observable, Subject } from \"rxjs\";\n\nimport { type GetAppAndVersionResponse } from \"@api/index\";\nimport { type CommandResult } from \"@api/types\";\n\nexport enum SessionEvents {\n NEW_STATE = \"NEW_STATE\",\n REFRESH_NEEDED = \"REFRESH_NEEDED\",\n COMMAND_SUCCEEDED = \"COMMAND_SUCCEEDED\",\n DEVICE_STATE_UPDATE_BUSY = \"DEVICE_STATE_UPDATE_BUSY\",\n DEVICE_STATE_UPDATE_LOCKED = \"DEVICE_STATE_UPDATE_LOCKED\",\n DEVICE_STATE_UPDATE_CONNECTED = \"DEVICE_STATE_UPDATE_CONNECTED\",\n}\n\ninterface SessionEventPayloads {\n [SessionEvents.NEW_STATE]: undefined;\n [SessionEvents.REFRESH_NEEDED]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_BUSY]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_LOCKED]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_CONNECTED]: undefined;\n [SessionEvents.COMMAND_SUCCEEDED]: CommandResult<GetAppAndVersionResponse>;\n}\n\nexport type NewEvent = {\n [K in SessionEvents]: SessionEventPayloads[K] extends undefined\n ? { eventName: K; eventData?: undefined }\n : { eventName: K; eventData: SessionEventPayloads[K] };\n}[SessionEvents];\n\nexport class DeviceSessionEventDispatcher {\n private _eventEmitter: Subject<NewEvent> = new Subject();\n\n public listen(): Observable<NewEvent> {\n return this._eventEmitter.asObservable();\n }\n\n public dispatch(event: NewEvent): void {\n this._eventEmitter.next(event);\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAA0B,WAAAA,MAAe,OAKlC,IAAKC,OACVA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,kBAAoB,oBACpBA,EAAA,yBAA2B,2BAC3BA,EAAA,2BAA6B,6BAC7BA,EAAA,8BAAgC,
|
|
4
|
+
"sourcesContent": ["import { type Observable, Subject } from \"rxjs\";\n\nimport { type GetAppAndVersionResponse } from \"@api/index\";\nimport { type CommandResult } from \"@api/types\";\n\nexport enum SessionEvents {\n NEW_STATE = \"NEW_STATE\",\n REFRESH_NEEDED = \"REFRESH_NEEDED\",\n COMMAND_SUCCEEDED = \"COMMAND_SUCCEEDED\",\n DEVICE_STATE_UPDATE_BUSY = \"DEVICE_STATE_UPDATE_BUSY\",\n DEVICE_STATE_UPDATE_LOCKED = \"DEVICE_STATE_UPDATE_LOCKED\",\n DEVICE_STATE_UPDATE_CONNECTED = \"DEVICE_STATE_UPDATE_CONNECTED\",\n DEVICE_STATE_UPDATE_UNKNOWN = \"DEVICE_STATE_UPDATE_UNKNOWN\",\n}\n\ninterface SessionEventPayloads {\n [SessionEvents.NEW_STATE]: undefined;\n [SessionEvents.REFRESH_NEEDED]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_BUSY]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_LOCKED]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_CONNECTED]: undefined;\n [SessionEvents.DEVICE_STATE_UPDATE_UNKNOWN]: undefined;\n [SessionEvents.COMMAND_SUCCEEDED]: CommandResult<GetAppAndVersionResponse>;\n}\n\nexport type NewEvent = {\n [K in SessionEvents]: SessionEventPayloads[K] extends undefined\n ? { eventName: K; eventData?: undefined }\n : { eventName: K; eventData: SessionEventPayloads[K] };\n}[SessionEvents];\n\nexport class DeviceSessionEventDispatcher {\n private _eventEmitter: Subject<NewEvent> = new Subject();\n\n public listen(): Observable<NewEvent> {\n return this._eventEmitter.asObservable();\n }\n\n public dispatch(event: NewEvent): void {\n this._eventEmitter.next(event);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAA0B,WAAAA,MAAe,OAKlC,IAAKC,OACVA,EAAA,UAAY,YACZA,EAAA,eAAiB,iBACjBA,EAAA,kBAAoB,oBACpBA,EAAA,yBAA2B,2BAC3BA,EAAA,2BAA6B,6BAC7BA,EAAA,8BAAgC,gCAChCA,EAAA,4BAA8B,8BAPpBA,OAAA,IA0BL,MAAMC,CAA6B,CAChC,cAAmC,IAAIF,EAExC,QAA+B,CACpC,OAAO,KAAK,cAAc,aAAa,CACzC,CAEO,SAASG,EAAuB,CACrC,KAAK,cAAc,KAAKA,CAAK,CAC/B,CACF",
|
|
6
6
|
"names": ["Subject", "SessionEvents", "DeviceSessionEventDispatcher", "event"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{timer as
|
|
1
|
+
import{distinctUntilChanged as c,filter as o,map as l,startWith as a,tap as h,timer as f,withLatestFrom as v}from"rxjs";import{DeviceModelId as _}from"../../../api/device/DeviceModel";import{DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL as n,DEVICE_SESSION_REFRESHER_POLLING_INTERVAL as p}from"../../device-session/data/DeviceSessionRefresherConst";import{SessionEvents as t}from"../../device-session/model/DeviceSessionEventDispatcher";class D{constructor(s,r,e,i){this._sessionEventDispatcher=e;this._refresherOptions=r,this._logger=s("device-session-refresher"),this._connectedDeviceID=i.deviceModel.id}_refresherSubscription;_refresherOptions;_logger;_connectedDeviceID;startRefresher(){if(this._refresherOptions.isRefresherDisabled||this._refresherSubscription)return;const s=this.getValidPollingInterval(this._refresherOptions,this._logger)*2,r=this._sessionEventDispatcher.listen().pipe(o(e=>e.eventName===t.DEVICE_STATE_UPDATE_BUSY||e.eventName===t.NEW_STATE),l(e=>e.eventName===t.DEVICE_STATE_UPDATE_BUSY),a(!1),c());this._refresherSubscription=f(0,s).pipe(v(r),h(([e,i])=>{i&&this._logger.debug("Refresh skipped: device is busy")}),o(([e,i])=>!i),h(()=>this._sessionEventDispatcher.dispatch({eventName:t.REFRESH_NEEDED}))).subscribe(),this._logger.info("Refresher started.")}stopRefresher(){this._refresherSubscription&&(this._refresherSubscription.unsubscribe(),this._refresherSubscription=void 0,this._logger.info("Refresher stopped."))}restartRefresher(){this.stopRefresher(),this.startRefresher(),this._logger.info("Refresher restarted.")}getValidPollingInterval=(s,r)=>{const{pollingInterval:e}=s;switch(this._connectedDeviceID){case _.NANO_S:{const i=p*2;return e!==void 0&&e<i?(r.warn(`Polling interval of ${e} is too low, setting to minimum as ${i}`),i):e??i}default:return e!==void 0&&e<n?(r.warn(`Polling interval of ${e} is too low, setting to minimum as ${n}`),n):e??p}}}export{D as DeviceSessionRefresher};
|
|
2
2
|
//# sourceMappingURL=DeviceSessionRefresher.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/device-session/model/DeviceSessionRefresher.ts"],
|
|
4
|
-
"sourcesContent": ["import {
|
|
5
|
-
"mappings": "AAAA,
|
|
6
|
-
"names": ["timer", "DeviceModelId", "DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL", "DEVICE_SESSION_REFRESHER_POLLING_INTERVAL", "SessionEvents", "DeviceSessionRefresher", "loggerModuleFactory", "refresherOptions", "_sessionEventDispatcher", "connectedDevice", "pollingInterval", "logger", "defaultNanoPollingInterval"]
|
|
4
|
+
"sourcesContent": ["import {\n distinctUntilChanged,\n filter,\n map,\n startWith,\n type Subscription,\n tap,\n timer,\n withLatestFrom,\n} from \"rxjs\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport { type LoggerPublisherService } from \"@api/types\";\nimport {\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL,\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL,\n} from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport {\n type DeviceSessionEventDispatcher,\n SessionEvents,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nexport interface DeviceSessionRefresherOptions {\n isRefresherDisabled: boolean;\n pollingInterval?: number;\n}\n\nexport class DeviceSessionRefresher {\n private _refresherSubscription!: Subscription | undefined;\n private _refresherOptions: DeviceSessionRefresherOptions;\n private readonly _logger: LoggerPublisherService;\n private _connectedDeviceID: DeviceModelId;\n\n constructor(\n loggerModuleFactory: (tag: string) => LoggerPublisherService,\n refresherOptions: DeviceSessionRefresherOptions,\n private _sessionEventDispatcher: DeviceSessionEventDispatcher,\n connectedDevice: TransportConnectedDevice,\n ) {\n this._refresherOptions = refresherOptions;\n this._logger = loggerModuleFactory(\"device-session-refresher\");\n this._connectedDeviceID = connectedDevice.deviceModel.id;\n }\n\n public startRefresher(): void {\n if (this._refresherOptions.isRefresherDisabled) return;\n if (this._refresherSubscription) return;\n\n const pollingInterval =\n this.getValidPollingInterval(this._refresherOptions, this._logger) * 2;\n\n const isBusy$ = this._sessionEventDispatcher.listen().pipe(\n filter(\n (event) =>\n event.eventName === SessionEvents.DEVICE_STATE_UPDATE_BUSY ||\n event.eventName === SessionEvents.NEW_STATE,\n ),\n map(\n (event) => event.eventName === SessionEvents.DEVICE_STATE_UPDATE_BUSY,\n ),\n startWith(false),\n distinctUntilChanged(),\n );\n\n this._refresherSubscription = timer(0, pollingInterval)\n .pipe(\n withLatestFrom(isBusy$),\n tap(([_, isBusy]) => {\n if (isBusy) {\n this._logger.debug(\"Refresh skipped: device is busy\");\n }\n }),\n filter(([_, isBusy]) => !isBusy),\n tap(() =>\n this._sessionEventDispatcher.dispatch({\n eventName: SessionEvents.REFRESH_NEEDED,\n }),\n ),\n )\n .subscribe();\n\n this._logger.info(\"Refresher started.\");\n }\n\n public stopRefresher(): void {\n if (this._refresherSubscription) {\n this._refresherSubscription.unsubscribe();\n this._refresherSubscription = undefined;\n this._logger.info(\"Refresher stopped.\");\n }\n }\n\n public restartRefresher(): void {\n this.stopRefresher();\n this.startRefresher();\n this._logger.info(\"Refresher restarted.\");\n }\n\n private getValidPollingInterval = (\n refresherOptions: DeviceSessionRefresherOptions,\n logger: LoggerPublisherService,\n ): number => {\n const { pollingInterval } = refresherOptions;\n switch (this._connectedDeviceID) {\n case DeviceModelId.NANO_S: {\n const defaultNanoPollingInterval =\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL * 2;\n if (\n pollingInterval !== undefined &&\n pollingInterval < defaultNanoPollingInterval\n ) {\n logger.warn(\n `Polling interval of ${pollingInterval} is too low, setting to minimum as ${defaultNanoPollingInterval}`,\n );\n return defaultNanoPollingInterval;\n }\n return pollingInterval ?? defaultNanoPollingInterval;\n }\n default:\n if (\n pollingInterval !== undefined &&\n pollingInterval < DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL\n ) {\n logger.warn(\n `Polling interval of ${pollingInterval} is too low, setting to minimum as ${DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL}`,\n );\n return DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL;\n }\n\n return pollingInterval ?? DEVICE_SESSION_REFRESHER_POLLING_INTERVAL;\n }\n };\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OACE,wBAAAA,EACA,UAAAC,EACA,OAAAC,EACA,aAAAC,EAEA,OAAAC,EACA,SAAAC,EACA,kBAAAC,MACK,OAEP,OAAS,iBAAAC,MAAqB,0BAG9B,OACE,qDAAAC,EACA,6CAAAC,MACK,4DACP,OAEE,iBAAAC,MACK,8DAOA,MAAMC,CAAuB,CAMlC,YACEC,EACAC,EACQC,EACRC,EACA,CAFQ,6BAAAD,EAGR,KAAK,kBAAoBD,EACzB,KAAK,QAAUD,EAAoB,0BAA0B,EAC7D,KAAK,mBAAqBG,EAAgB,YAAY,EACxD,CAdQ,uBACA,kBACS,QACT,mBAaD,gBAAuB,CAE5B,GADI,KAAK,kBAAkB,qBACvB,KAAK,uBAAwB,OAEjC,MAAMC,EACJ,KAAK,wBAAwB,KAAK,kBAAmB,KAAK,OAAO,EAAI,EAEjEC,EAAU,KAAK,wBAAwB,OAAO,EAAE,KACpDhB,EACGiB,GACCA,EAAM,YAAcR,EAAc,0BAClCQ,EAAM,YAAcR,EAAc,SACtC,EACAR,EACGgB,GAAUA,EAAM,YAAcR,EAAc,wBAC/C,EACAP,EAAU,EAAK,EACfH,EAAqB,CACvB,EAEA,KAAK,uBAAyBK,EAAM,EAAGW,CAAe,EACnD,KACCV,EAAeW,CAAO,EACtBb,EAAI,CAAC,CAACe,EAAGC,CAAM,IAAM,CACfA,GACF,KAAK,QAAQ,MAAM,iCAAiC,CAExD,CAAC,EACDnB,EAAO,CAAC,CAACkB,EAAGC,CAAM,IAAM,CAACA,CAAM,EAC/BhB,EAAI,IACF,KAAK,wBAAwB,SAAS,CACpC,UAAWM,EAAc,cAC3B,CAAC,CACH,CACF,EACC,UAAU,EAEb,KAAK,QAAQ,KAAK,oBAAoB,CACxC,CAEO,eAAsB,CACvB,KAAK,yBACP,KAAK,uBAAuB,YAAY,EACxC,KAAK,uBAAyB,OAC9B,KAAK,QAAQ,KAAK,oBAAoB,EAE1C,CAEO,kBAAyB,CAC9B,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,QAAQ,KAAK,sBAAsB,CAC1C,CAEQ,wBAA0B,CAChCG,EACAQ,IACW,CACX,KAAM,CAAE,gBAAAL,CAAgB,EAAIH,EAC5B,OAAQ,KAAK,mBAAoB,CAC/B,KAAKN,EAAc,OAAQ,CACzB,MAAMe,EACJb,EAA4C,EAC9C,OACEO,IAAoB,QACpBA,EAAkBM,GAElBD,EAAO,KACL,uBAAuBL,CAAe,sCAAsCM,CAA0B,EACxG,EACOA,GAEFN,GAAmBM,CAC5B,CACA,QACE,OACEN,IAAoB,QACpBA,EAAkBR,GAElBa,EAAO,KACL,uBAAuBL,CAAe,sCAAsCR,CAAiD,EAC/H,EACOA,GAGFQ,GAAmBP,CAC9B,CACF,CACF",
|
|
6
|
+
"names": ["distinctUntilChanged", "filter", "map", "startWith", "tap", "timer", "withLatestFrom", "DeviceModelId", "DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL", "DEVICE_SESSION_REFRESHER_POLLING_INTERVAL", "SessionEvents", "DeviceSessionRefresher", "loggerModuleFactory", "refresherOptions", "_sessionEventDispatcher", "connectedDevice", "pollingInterval", "isBusy$", "event", "_", "isBusy", "logger", "defaultNanoPollingInterval"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Subject as
|
|
1
|
+
import{Subject as D}from"rxjs";import{afterEach as E,beforeEach as S,describe as w,expect as n,it as l,vi as r}from"vitest";import{DeviceModelId as m}from"../../../api/device/DeviceModel";import{DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL as d,DEVICE_SESSION_REFRESHER_POLLING_INTERVAL as T}from"../../device-session/data/DeviceSessionRefresherConst";import{SessionEvents as h}from"../../device-session/model/DeviceSessionEventDispatcher";import{DeviceSessionRefresher as c}from"./DeviceSessionRefresher";w("DeviceSessionRefresher",()=>{let p,s,o;const v={deviceModel:{id:m.FLEX}},R={deviceModel:{id:m.NANO_S}},a=r.fn(()=>o);let e;S(()=>{r.useFakeTimers(),p=new D,s={listen:()=>p.asObservable(),dispatch:r.fn()},o={info:r.fn(),warn:r.fn(),error:r.fn(),debug:r.fn(),subscribers:[]}}),E(()=>{e?.stopRefresher(),r.useRealTimers(),r.restoreAllMocks()}),l("should not start refresher if disabled",()=>{const t={isRefresherDisabled:!0,pollingInterval:1e3};e=new c(a,t,s,v),e.startRefresher(),r.advanceTimersByTime(2e3),n(s.dispatch).not.toHaveBeenCalled()}),l("should warn and use minimum polling interval for default device when provided interval is too low",()=>{const t=d-100,i={isRefresherDisabled:!1,pollingInterval:t};e=new c(a,i,s,v),e.startRefresher();const f=`Polling interval of ${t} is too low, setting to minimum as ${d}`;n(o.warn).toHaveBeenCalledWith(f)}),l("should warn and use minimum polling interval for NANO_S device when provided interval is too low",()=>{const t=T*2,i=t-100,f={isRefresherDisabled:!1,pollingInterval:i};e=new c(a,f,s,R),e.startRefresher();const u=`Polling interval of ${i} is too low, setting to minimum as ${t}`;n(o.warn).toHaveBeenCalledWith(u)}),l("should not warn when provided polling interval is valid for default device",()=>{const i={isRefresherDisabled:!1,pollingInterval:d+100};e=new c(a,i,s,v),e.startRefresher(),n(o.warn).not.toHaveBeenCalled()}),l("should dispatch refresh event on timer ticks",()=>{const t=d+100,i={isRefresherDisabled:!1,pollingInterval:t};e=new c(a,i,s,v),e.startRefresher(),p.next({eventName:h.NEW_STATE});const f=t*2;r.advanceTimersByTime(f*3),n(s.dispatch.mock.calls.length).toBe(4),n(s.dispatch.mock.calls[0][0]).toEqual({eventName:h.REFRESH_NEEDED})}),l("should stop refresher",()=>{const t={isRefresherDisabled:!1,pollingInterval:1e3};e=new c(a,t,s,v),e.startRefresher(),s.dispatch.mockClear(),e.stopRefresher(),r.advanceTimersByTime(2e3),n(s.dispatch).not.toHaveBeenCalled(),n(o.info).toHaveBeenCalledWith("Refresher stopped.")}),l("should restart refresher",()=>{const t={isRefresherDisabled:!1,pollingInterval:1e3};e=new c(a,t,s,v),e.startRefresher(),s.dispatch.mockClear(),r.clearAllTimers(),e.restartRefresher(),n(o.info).toHaveBeenCalledWith("Refresher stopped."),n(o.info).toHaveBeenCalledWith("Refresher restarted."),p.next({eventName:h.NEW_STATE}),r.advanceTimersByTime(2e3),n(s.dispatch.mock.calls.length).toBeGreaterThan(0)})});
|
|
2
2
|
//# sourceMappingURL=DeviceSessionRefresher.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/internal/device-session/model/DeviceSessionRefresher.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Subject } from \"rxjs\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport type { LoggerPublisherService } from \"@api/types\";\nimport {\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL,\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL,\n} from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport type {\n DeviceSessionEventDispatcher,\n NewEvent,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\nimport { SessionEvents } from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nimport {\n DeviceSessionRefresher,\n type DeviceSessionRefresherOptions,\n} from \"./DeviceSessionRefresher\";\n\ndescribe(\"DeviceSessionRefresher\", () => {\n let subject: Subject<NewEvent>;\n let mockSessionEventDispatcher: DeviceSessionEventDispatcher;\n let mockLogger: LoggerPublisherService & {\n info: ReturnType<typeof vi.fn>;\n warn: ReturnType<typeof vi.fn>;\n error: ReturnType<typeof vi.fn>;\n debug: ReturnType<typeof vi.fn>;\n subscribers?: unknown[];\n };\n\n const stubDefaultDevice = {\n deviceModel: {\n id: DeviceModelId.FLEX,\n },\n } as TransportConnectedDevice;\n\n const stubNanoSDevice = {\n deviceModel: {\n id: DeviceModelId.NANO_S,\n },\n } as TransportConnectedDevice;\n\n const mockedLoggerModuleFactory = vi.fn(() => mockLogger);\n let refresher: DeviceSessionRefresher;\n\n beforeEach(() => {\n vi.useFakeTimers();\n subject = new Subject<NewEvent>();\n mockSessionEventDispatcher = {\n listen: () => subject.asObservable(),\n dispatch: vi.fn(),\n } as unknown as DeviceSessionEventDispatcher;\n mockLogger = {\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n debug: vi.fn(),\n subscribers: [],\n };\n });\n\n afterEach(() => {\n refresher?.
|
|
5
|
-
"mappings": "AAAA,OAAS,WAAAA,MAAe,OACxB,OAAS,aAAAC,EAAW,cAAAC,EAAY,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,EAAI,MAAAC,MAAU,SAEhE,OAAS,iBAAAC,MAAqB,0BAG9B,OACE,qDAAAC,EACA,6CAAAC,MACK,4DAKP,OAAS,iBAAAC,MAAqB,8DAE9B,OACE,0BAAAC,MAEK,2BAEPR,EAAS,yBAA0B,IAAM,CACvC,IAAIS,EACAC,EACAC,EAQJ,MAAMC,EAAoB,CACxB,YAAa,CACX,GAAIR,EAAc,IACpB,CACF,EAEMS,EAAkB,CACtB,YAAa,CACX,GAAIT,EAAc,MACpB,CACF,EAEMU,EAA4BX,EAAG,GAAG,IAAMQ,CAAU,EACxD,IAAII,EAEJhB,EAAW,IAAM,CACfI,EAAG,cAAc,EACjBM,EAAU,IAAIZ,EACda,EAA6B,CAC3B,OAAQ,IAAMD,EAAQ,aAAa,EACnC,SAAUN,EAAG,GAAG,CAClB,EACAQ,EAAa,CACX,KAAMR,EAAG,GAAG,EACZ,KAAMA,EAAG,GAAG,EACZ,MAAOA,EAAG,GAAG,EACb,MAAOA,EAAG,GAAG,EACb,YAAa,CAAC,CAChB,CACF,CAAC,EAEDL,EAAU,IAAM,CACdiB,GAAW,
|
|
4
|
+
"sourcesContent": ["import { Subject } from \"rxjs\";\nimport { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { DeviceModelId } from \"@api/device/DeviceModel\";\nimport { type TransportConnectedDevice } from \"@api/transport/model/TransportConnectedDevice\";\nimport type { LoggerPublisherService } from \"@api/types\";\nimport {\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL,\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL,\n} from \"@internal/device-session/data/DeviceSessionRefresherConst\";\nimport type {\n DeviceSessionEventDispatcher,\n NewEvent,\n} from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\nimport { SessionEvents } from \"@internal/device-session/model/DeviceSessionEventDispatcher\";\n\nimport {\n DeviceSessionRefresher,\n type DeviceSessionRefresherOptions,\n} from \"./DeviceSessionRefresher\";\n\ndescribe(\"DeviceSessionRefresher\", () => {\n let subject: Subject<NewEvent>;\n let mockSessionEventDispatcher: DeviceSessionEventDispatcher;\n let mockLogger: LoggerPublisherService & {\n info: ReturnType<typeof vi.fn>;\n warn: ReturnType<typeof vi.fn>;\n error: ReturnType<typeof vi.fn>;\n debug: ReturnType<typeof vi.fn>;\n subscribers?: unknown[];\n };\n\n const stubDefaultDevice = {\n deviceModel: {\n id: DeviceModelId.FLEX,\n },\n } as TransportConnectedDevice;\n\n const stubNanoSDevice = {\n deviceModel: {\n id: DeviceModelId.NANO_S,\n },\n } as TransportConnectedDevice;\n\n const mockedLoggerModuleFactory = vi.fn(() => mockLogger);\n let refresher: DeviceSessionRefresher;\n\n beforeEach(() => {\n vi.useFakeTimers();\n subject = new Subject<NewEvent>();\n mockSessionEventDispatcher = {\n listen: () => subject.asObservable(),\n dispatch: vi.fn(),\n } as unknown as DeviceSessionEventDispatcher;\n mockLogger = {\n info: vi.fn(),\n warn: vi.fn(),\n error: vi.fn(),\n debug: vi.fn(),\n subscribers: [],\n };\n });\n\n afterEach(() => {\n refresher?.stopRefresher();\n vi.useRealTimers();\n vi.restoreAllMocks();\n });\n\n it(\"should not start refresher if disabled\", () => {\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: true,\n pollingInterval: 1000,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n vi.advanceTimersByTime(2000);\n\n expect(mockSessionEventDispatcher.dispatch).not.toHaveBeenCalled();\n });\n\n it(\"should warn and use minimum polling interval for default device when provided interval is too low\", () => {\n const lowInterval = DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL - 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: lowInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n\n const expectedMessage = `Polling interval of ${lowInterval} is too low, setting to minimum as ${DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL}`;\n expect(mockLogger.warn).toHaveBeenCalledWith(expectedMessage);\n });\n\n it(\"should warn and use minimum polling interval for NANO_S device when provided interval is too low\", () => {\n const defaultNanoPollingInterval =\n DEVICE_SESSION_REFRESHER_POLLING_INTERVAL * 2;\n const lowInterval = defaultNanoPollingInterval - 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: lowInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubNanoSDevice,\n );\n refresher.startRefresher();\n\n const expectedMessage = `Polling interval of ${lowInterval} is too low, setting to minimum as ${defaultNanoPollingInterval}`;\n expect(mockLogger.warn).toHaveBeenCalledWith(expectedMessage);\n });\n\n it(\"should not warn when provided polling interval is valid for default device\", () => {\n const validInterval =\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL + 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: validInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n\n expect(mockLogger.warn).not.toHaveBeenCalled();\n });\n\n it(\"should dispatch refresh event on timer ticks\", () => {\n const validInterval =\n DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL + 100;\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: validInterval,\n };\n\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n\n // Trigger NEW_STATE event to start the refresher timer\n subject.next({ eventName: SessionEvents.NEW_STATE });\n\n const timerInterval = validInterval * 2;\n\n vi.advanceTimersByTime(timerInterval * 3);\n\n expect(\n (mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>).mock\n .calls.length,\n ).toBe(4);\n expect(\n (mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>).mock\n .calls[0]![0],\n ).toEqual({\n eventName: SessionEvents.REFRESH_NEEDED,\n });\n });\n\n it(\"should stop refresher\", () => {\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: 1000,\n };\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n (\n mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>\n ).mockClear();\n\n refresher.stopRefresher();\n vi.advanceTimersByTime(2000);\n\n expect(mockSessionEventDispatcher.dispatch).not.toHaveBeenCalled();\n expect(mockLogger.info).toHaveBeenCalledWith(\"Refresher stopped.\");\n });\n\n it(\"should restart refresher\", () => {\n const options: DeviceSessionRefresherOptions = {\n isRefresherDisabled: false,\n pollingInterval: 1000,\n };\n refresher = new DeviceSessionRefresher(\n mockedLoggerModuleFactory,\n options,\n mockSessionEventDispatcher,\n stubDefaultDevice,\n );\n refresher.startRefresher();\n (\n mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>\n ).mockClear();\n vi.clearAllTimers();\n\n refresher.restartRefresher();\n expect(mockLogger.info).toHaveBeenCalledWith(\"Refresher stopped.\");\n expect(mockLogger.info).toHaveBeenCalledWith(\"Refresher restarted.\");\n\n // Trigger NEW_STATE event to start the refresher timer\n subject.next({ eventName: SessionEvents.NEW_STATE });\n\n vi.advanceTimersByTime(2000);\n expect(\n (mockSessionEventDispatcher.dispatch as ReturnType<typeof vi.fn>).mock\n .calls.length,\n ).toBeGreaterThan(0);\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["Subject", "afterEach", "beforeEach", "describe", "expect", "it", "vi", "DeviceModelId", "DEVICE_SESSION_REFRESHER_MINIMUM_POLLING_INTERVAL", "DEVICE_SESSION_REFRESHER_POLLING_INTERVAL", "SessionEvents", "DeviceSessionRefresher", "subject", "mockSessionEventDispatcher", "mockLogger", "stubDefaultDevice", "stubNanoSDevice", "mockedLoggerModuleFactory", "refresher", "options", "lowInterval", "expectedMessage", "defaultNanoPollingInterval", "validInterval", "timerInterval"]
|
|
7
7
|
}
|