@dronedeploy/rocos-js-sdk 0.0.1 → 1.0.0-alpha-2
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/IRocosSDK.d.ts +55 -0
- package/IRocosSDK.js +2 -0
- package/README.md +108 -0
- package/RocosSDK.d.ts +138 -0
- package/RocosSDK.js +292 -0
- package/api/StreamRegister.d.ts +13 -0
- package/api/StreamRegister.js +69 -0
- package/api/atoms/StreamHeartbeat.d.ts +27 -0
- package/api/atoms/StreamHeartbeat.js +111 -0
- package/api/streams/caller/CallerStream.d.ts +13 -0
- package/api/streams/caller/CallerStream.js +77 -0
- package/api/streams/caller/CallerStreamAbstract.d.ts +23 -0
- package/api/streams/caller/CallerStreamAbstract.js +87 -0
- package/api/streams/caller/CallerStreamNode.d.ts +13 -0
- package/api/streams/caller/CallerStreamNode.js +115 -0
- package/api/streams/command/CommandStream.d.ts +10 -0
- package/api/streams/command/CommandStream.js +66 -0
- package/api/streams/command/CommandStreamAbstract.d.ts +20 -0
- package/api/streams/command/CommandStreamAbstract.js +63 -0
- package/api/streams/command/CommandStreamNode.d.ts +10 -0
- package/api/streams/command/CommandStreamNode.js +69 -0
- package/api/streams/control/ControlStream.d.ts +12 -0
- package/api/streams/control/ControlStream.js +75 -0
- package/api/streams/control/ControlStreamAbstract.d.ts +25 -0
- package/api/streams/control/ControlStreamAbstract.js +111 -0
- package/api/streams/control/ControlStreamNode.d.ts +12 -0
- package/api/streams/control/ControlStreamNode.js +73 -0
- package/api/streams/fileAccessor/FileAccessorStream.d.ts +8 -0
- package/api/streams/fileAccessor/FileAccessorStream.js +59 -0
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.d.ts +21 -0
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.js +62 -0
- package/api/streams/fileAccessor/FileAccessorStreamNode.d.ts +8 -0
- package/api/streams/fileAccessor/FileAccessorStreamNode.js +66 -0
- package/api/streams/search/SearchStream.d.ts +13 -0
- package/api/streams/search/SearchStream.js +96 -0
- package/api/streams/search/SearchStreamAbstract.d.ts +25 -0
- package/api/streams/search/SearchStreamAbstract.js +72 -0
- package/api/streams/search/SearchStreamNode.d.ts +13 -0
- package/api/streams/search/SearchStreamNode.js +118 -0
- package/api/streams/telemetry/TelemetryStream.d.ts +17 -0
- package/api/streams/telemetry/TelemetryStream.js +97 -0
- package/api/streams/telemetry/TelemetryStreamAbstract.d.ts +59 -0
- package/api/streams/telemetry/TelemetryStreamAbstract.js +402 -0
- package/api/streams/telemetry/TelemetryStreamNode.d.ts +21 -0
- package/api/streams/telemetry/TelemetryStreamNode.js +175 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.d.ts +39 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.js +84 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.d.ts +29 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.js +65 -0
- package/constants/api.d.ts +126 -0
- package/constants/api.js +126 -0
- package/constants/auth.d.ts +2 -0
- package/constants/auth.js +2 -0
- package/constants/grpc.d.ts +5 -0
- package/constants/grpc.js +5 -0
- package/constants/identifier.d.ts +6 -0
- package/constants/identifier.js +6 -0
- package/constants/timezones.d.ts +2 -0
- package/constants/timezones.js +427 -0
- package/grpc/conker_pb.client.d.ts +78 -0
- package/grpc/conker_pb.client.js +55 -0
- package/grpc/conker_pb.d.ts +141 -0
- package/grpc/conker_pb.grpc-client.d.ts +81 -0
- package/grpc/conker_pb.grpc-client.js +58 -0
- package/grpc/conker_pb.js +104 -0
- package/grpc/filagree_pb.client.d.ts +68 -0
- package/grpc/filagree_pb.client.js +48 -0
- package/grpc/filagree_pb.d.ts +404 -0
- package/grpc/filagree_pb.grpc-client.d.ts +69 -0
- package/grpc/filagree_pb.grpc-client.js +51 -0
- package/grpc/filagree_pb.js +329 -0
- package/grpc/google/protobuf/descriptor_pb.d.ts +1798 -0
- package/grpc/google/protobuf/descriptor_pb.js +2378 -0
- package/grpc/google/protobuf/empty_pb.d.ts +23 -0
- package/grpc/google/protobuf/empty_pb.js +47 -0
- package/grpc/pigeon_pb.client.d.ts +96 -0
- package/grpc/pigeon_pb.client.js +72 -0
- package/grpc/pigeon_pb.d.ts +207 -0
- package/grpc/pigeon_pb.grpc-client.d.ts +98 -0
- package/grpc/pigeon_pb.grpc-client.js +68 -0
- package/grpc/pigeon_pb.js +144 -0
- package/grpc/rambo.uri.v1_pb.d.ts +73 -0
- package/grpc/rambo.uri.v1_pb.js +48 -0
- package/grpc/rambo.v1_pb.client.d.ts +66 -0
- package/grpc/rambo.v1_pb.client.js +48 -0
- package/grpc/rambo.v1_pb.d.ts +392 -0
- package/grpc/rambo.v1_pb.grpc-client.d.ts +56 -0
- package/grpc/rambo.v1_pb.grpc-client.js +44 -0
- package/grpc/rambo.v1_pb.js +272 -0
- package/grpc/serviette.uri.v1_pb.d.ts +89 -0
- package/grpc/serviette.uri.v1_pb.js +62 -0
- package/grpc/serviette.v1_pb.client.d.ts +225 -0
- package/grpc/serviette.v1_pb.client.js +174 -0
- package/grpc/serviette.v1_pb.d.ts +827 -0
- package/grpc/serviette.v1_pb.grpc-client.d.ts +215 -0
- package/grpc/serviette.v1_pb.grpc-client.js +162 -0
- package/grpc/serviette.v1_pb.js +553 -0
- package/grpc/slowlane_pb.client.d.ts +61 -0
- package/grpc/slowlane_pb.client.js +41 -0
- package/grpc/slowlane_pb.d.ts +303 -0
- package/grpc/slowlane_pb.grpc-client.d.ts +64 -0
- package/grpc/slowlane_pb.grpc-client.js +44 -0
- package/grpc/slowlane_pb.js +185 -0
- package/grpc/teletubby_pb.client.d.ts +145 -0
- package/grpc/teletubby_pb.client.js +104 -0
- package/grpc/teletubby_pb.d.ts +634 -0
- package/grpc/teletubby_pb.grpc-client.d.ts +152 -0
- package/grpc/teletubby_pb.grpc-client.js +100 -0
- package/grpc/teletubby_pb.js +1264 -0
- package/helpers/arrayRemove.d.ts +1 -0
- package/helpers/arrayRemove.js +3 -0
- package/helpers/arrayUnique.d.ts +1 -0
- package/helpers/arrayUnique.js +3 -0
- package/helpers/average.d.ts +1 -0
- package/helpers/average.js +6 -0
- package/helpers/cleanObject.d.ts +1 -0
- package/helpers/cleanObject.js +18 -0
- package/helpers/cleanObject.spec.d.ts +1 -0
- package/helpers/cleanObject.spec.js +53 -0
- package/helpers/enviroment.d.ts +8 -0
- package/helpers/enviroment.js +13 -0
- package/helpers/flattenCallsignsLookup.d.ts +2 -0
- package/helpers/flattenCallsignsLookup.js +6 -0
- package/helpers/flattenObject.d.ts +1 -0
- package/helpers/flattenObject.js +13 -0
- package/helpers/flattenObject.spec.d.ts +1 -0
- package/helpers/flattenObject.spec.js +29 -0
- package/helpers/flattenOneOf.d.ts +67 -0
- package/helpers/flattenOneOf.js +29 -0
- package/helpers/flattenOneOf.spec.d.ts +1 -0
- package/helpers/flattenOneOf.spec.js +157 -0
- package/helpers/formatServiceUrl.d.ts +1 -0
- package/helpers/formatServiceUrl.js +7 -0
- package/helpers/formatServiceUrl.spec.d.ts +1 -0
- package/helpers/formatServiceUrl.spec.js +16 -0
- package/helpers/generateUUID.d.ts +1 -0
- package/helpers/generateUUID.js +4 -0
- package/helpers/getSubscriptionsDifference.d.ts +10 -0
- package/helpers/getSubscriptionsDifference.js +35 -0
- package/helpers/getUniqueConfigKey.d.ts +7 -0
- package/helpers/getUniqueConfigKey.js +14 -0
- package/helpers/getUniqueId.d.ts +9 -0
- package/helpers/getUniqueId.js +11 -0
- package/helpers/getUnixTimeMs.d.ts +1 -0
- package/helpers/getUnixTimeMs.js +4 -0
- package/helpers/index.d.ts +3 -0
- package/helpers/index.js +3 -0
- package/helpers/nanosecondToMillisecond.d.ts +1 -0
- package/helpers/nanosecondToMillisecond.js +6 -0
- package/helpers/randomString.d.ts +1 -0
- package/helpers/randomString.js +3 -0
- package/helpers/standardDeviation.d.ts +1 -0
- package/helpers/standardDeviation.js +12 -0
- package/helpers/standardDeviation.spec.d.ts +1 -0
- package/helpers/standardDeviation.spec.js +11 -0
- package/helpers/stringToUint8Array.d.ts +1 -0
- package/helpers/stringToUint8Array.js +10 -0
- package/helpers/uint8ArrayToString.d.ts +1 -0
- package/helpers/uint8ArrayToString.js +10 -0
- package/index.d.ts +7 -0
- package/index.js +7 -0
- package/logger/RocosLogger.d.ts +7 -0
- package/logger/RocosLogger.js +37 -0
- package/models/CallsignStatus.d.ts +6 -0
- package/models/CallsignStatus.js +7 -0
- package/models/ExportDataQuery.d.ts +8 -0
- package/models/ExportDataQuery.js +13 -0
- package/models/ExternalProject.d.ts +6 -0
- package/models/ExternalProject.js +2 -0
- package/models/IBaseService.d.ts +4 -0
- package/models/IBaseService.js +1 -0
- package/models/IConfigGroup.d.ts +5 -0
- package/models/IConfigGroup.js +1 -0
- package/models/IDebugLevel.d.ts +2 -0
- package/models/IDebugLevel.js +1 -0
- package/models/IExportDataQuery.d.ts +9 -0
- package/models/IExportDataQuery.js +1 -0
- package/models/IFunctionConfig.d.ts +8 -0
- package/models/IFunctionConfig.js +1 -0
- package/models/IInvitation.d.ts +6 -0
- package/models/IInvitation.js +1 -0
- package/models/IInvitationExists.d.ts +4 -0
- package/models/IInvitationExists.js +1 -0
- package/models/IOperation.d.ts +6 -0
- package/models/IOperation.js +1 -0
- package/models/IPersonalAccessToken.d.ts +16 -0
- package/models/IPersonalAccessToken.js +1 -0
- package/models/IProject.d.ts +4 -0
- package/models/IProject.js +1 -0
- package/models/IProjectApplication.d.ts +6 -0
- package/models/IProjectApplication.js +1 -0
- package/models/IRobot.d.ts +18 -0
- package/models/IRobot.js +1 -0
- package/models/IRobotConfig.d.ts +8 -0
- package/models/IRobotConfig.js +1 -0
- package/models/IRobotPlugin.d.ts +3 -0
- package/models/IRobotPlugin.js +1 -0
- package/models/IRobotSettings.d.ts +28 -0
- package/models/IRobotSettings.js +1 -0
- package/models/IRobotTemplate.d.ts +10 -0
- package/models/IRobotTemplate.js +1 -0
- package/models/IRocosSDKConfig.d.ts +19 -0
- package/models/IRocosSDKConfig.js +1 -0
- package/models/ISource.d.ts +8 -0
- package/models/ISource.js +1 -0
- package/models/IStream.d.ts +9 -0
- package/models/IStream.js +1 -0
- package/models/IStreamConfig.d.ts +9 -0
- package/models/IStreamConfig.js +1 -0
- package/models/IStreamOptions.d.ts +7 -0
- package/models/IStreamOptions.js +1 -0
- package/models/IStreamSource.d.ts +8 -0
- package/models/IStreamSource.js +1 -0
- package/models/ISubscriberStatus.d.ts +5 -0
- package/models/ISubscriberStatus.js +1 -0
- package/models/ITelemetryStreamConfig.d.ts +7 -0
- package/models/ITelemetryStreamConfig.js +1 -0
- package/models/IToken.d.ts +9 -0
- package/models/IToken.js +1 -0
- package/models/IWidget.d.ts +25 -0
- package/models/IWidget.js +1 -0
- package/models/IWidgetLineGroup.d.ts +8 -0
- package/models/IWidgetLineGroup.js +1 -0
- package/models/ResponseLevelEnum.d.ts +10 -0
- package/models/ResponseLevelEnum.js +11 -0
- package/models/Robot.d.ts +20 -0
- package/models/Robot.js +8 -0
- package/models/RobotConfig.d.ts +10 -0
- package/models/RobotConfig.js +5 -0
- package/models/RobotPlugin.d.ts +5 -0
- package/models/RobotPlugin.js +5 -0
- package/models/RobotTemplate.d.ts +12 -0
- package/models/RobotTemplate.js +25 -0
- package/models/RocosError.d.ts +30 -0
- package/models/RocosError.js +39 -0
- package/models/ServiceEnum.d.ts +26 -0
- package/models/ServiceEnum.js +27 -0
- package/models/Stream.d.ts +10 -0
- package/models/Stream.js +11 -0
- package/models/StreamOptions.d.ts +9 -0
- package/models/StreamOptions.js +33 -0
- package/models/StreamSource.d.ts +10 -0
- package/models/StreamSource.js +11 -0
- package/models/SubscriberStatusEnum.d.ts +6 -0
- package/models/SubscriberStatusEnum.js +7 -0
- package/models/Token.d.ts +40 -0
- package/models/Token.js +78 -0
- package/models/Token.spec.d.ts +1 -0
- package/models/Token.spec.js +108 -0
- package/models/Widget.d.ts +27 -0
- package/models/Widget.js +12 -0
- package/models/WidgetLineGroup.d.ts +10 -0
- package/models/WidgetLineGroup.js +5 -0
- package/models/asset-storage/AssetModelItem.d.ts +29 -0
- package/models/asset-storage/AssetModelItem.js +1 -0
- package/models/caller/IRocosCallerMessageChunk.d.ts +10 -0
- package/models/caller/IRocosCallerMessageChunk.js +1 -0
- package/models/caller/IRocosCallerMessageChunks.d.ts +4 -0
- package/models/caller/IRocosCallerMessageChunks.js +1 -0
- package/models/caller/IRocosCallerMessageHeartbeat.d.ts +3 -0
- package/models/caller/IRocosCallerMessageHeartbeat.js +1 -0
- package/models/caller/IRocosCallerMessageResponse.d.ts +10 -0
- package/models/caller/IRocosCallerMessageResponse.js +1 -0
- package/models/caller/IRocosCallerMessageResponseAck.d.ts +16 -0
- package/models/caller/IRocosCallerMessageResponseAck.js +13 -0
- package/models/caller/IRocosCallerMessageResponseResult.d.ts +15 -0
- package/models/caller/IRocosCallerMessageResponseResult.js +12 -0
- package/models/caller/IRocosCallerMessageResponseReturn.d.ts +8 -0
- package/models/caller/IRocosCallerMessageResponseReturn.js +1 -0
- package/models/caller/IRocosCallerMessageResponseUid.d.ts +10 -0
- package/models/caller/IRocosCallerMessageResponseUid.js +7 -0
- package/models/caller/IRocosCallerMessageResponses.d.ts +4 -0
- package/models/caller/IRocosCallerMessageResponses.js +1 -0
- package/models/caller/RocosCallerResultStatus.d.ts +11 -0
- package/models/caller/RocosCallerResultStatus.js +12 -0
- package/models/caller/RocosResponseLevel.d.ts +6 -0
- package/models/caller/RocosResponseLevel.js +7 -0
- package/models/caller/index.d.ts +10 -0
- package/models/caller/index.js +10 -0
- package/models/callsigns/CallsignsEnums.d.ts +13 -0
- package/models/callsigns/CallsignsEnums.js +17 -0
- package/models/callsigns/CallsignsLookup.d.ts +8 -0
- package/models/callsigns/CallsignsLookup.js +28 -0
- package/models/callsigns/CallsignsQuery.d.ts +9 -0
- package/models/callsigns/CallsignsQuery.js +14 -0
- package/models/callsigns/CallsignsQueryPredicate.d.ts +9 -0
- package/models/callsigns/CallsignsQueryPredicate.js +15 -0
- package/models/command/IRocosCommandMessageHeartbeat.d.ts +1 -0
- package/models/command/IRocosCommandMessageHeartbeat.js +1 -0
- package/models/command/IRocosCommandMessageResponse.d.ts +55 -0
- package/models/command/IRocosCommandMessageResponse.js +29 -0
- package/models/command/RocosCommandResultStatus.d.ts +11 -0
- package/models/command/RocosCommandResultStatus.js +12 -0
- package/models/command/index.d.ts +4 -0
- package/models/command/index.js +4 -0
- package/models/file/FileEnums.d.ts +30 -0
- package/models/file/FileEnums.js +33 -0
- package/models/index.d.ts +75 -0
- package/models/index.js +75 -0
- package/models/integrations/Overlay.d.ts +49 -0
- package/models/integrations/Overlay.js +1 -0
- package/models/integrations/Plan.d.ts +324 -0
- package/models/integrations/Plan.js +1 -0
- package/models/maps/Map.d.ts +13 -0
- package/models/maps/Map.js +1 -0
- package/models/message/IRocosCallerMessage.d.ts +8 -0
- package/models/message/IRocosCallerMessage.js +1 -0
- package/models/message/IRocosChangeMessage.d.ts +6 -0
- package/models/message/IRocosChangeMessage.js +1 -0
- package/models/message/IRocosCommandMessage.d.ts +6 -0
- package/models/message/IRocosCommandMessage.js +1 -0
- package/models/message/IRocosControlMessage.d.ts +7 -0
- package/models/message/IRocosControlMessage.js +1 -0
- package/models/message/IRocosOpResultMessage.d.ts +6 -0
- package/models/message/IRocosOpResultMessage.js +1 -0
- package/models/message/IRocosSearchMessage.d.ts +5 -0
- package/models/message/IRocosSearchMessage.js +1 -0
- package/models/message/IRocosSearchRowMessage.d.ts +9 -0
- package/models/message/IRocosSearchRowMessage.js +1 -0
- package/models/message/IRocosSearchStatusMessage.d.ts +4 -0
- package/models/message/IRocosSearchStatusMessage.js +1 -0
- package/models/message/IRocosTelemetryMessage.d.ts +23 -0
- package/models/message/IRocosTelemetryMessage.js +1 -0
- package/models/message/IStreamStatusMessage.d.ts +5 -0
- package/models/message/IStreamStatusMessage.js +1 -0
- package/models/message/RocosCallerMessage.d.ts +10 -0
- package/models/message/RocosCallerMessage.js +32 -0
- package/models/message/RocosCommandMessage.d.ts +9 -0
- package/models/message/RocosCommandMessage.js +13 -0
- package/models/message/RocosControlMessage.d.ts +11 -0
- package/models/message/RocosControlMessage.js +14 -0
- package/models/message/RocosOpResultMessage.d.ts +10 -0
- package/models/message/RocosOpResultMessage.js +18 -0
- package/models/message/RocosSearchMessage.d.ts +9 -0
- package/models/message/RocosSearchMessage.js +24 -0
- package/models/message/RocosSearchRowMessage.d.ts +13 -0
- package/models/message/RocosSearchRowMessage.js +16 -0
- package/models/message/RocosTelemetryMessage.d.ts +10 -0
- package/models/message/RocosTelemetryMessage.js +63 -0
- package/models/message/index.d.ts +17 -0
- package/models/message/index.js +17 -0
- package/models/params/ICallerParams.d.ts +16 -0
- package/models/params/ICallerParams.js +1 -0
- package/models/params/ICommandParams.d.ts +9 -0
- package/models/params/ICommandParams.js +1 -0
- package/models/params/IControlParams.d.ts +8 -0
- package/models/params/IControlParams.js +1 -0
- package/models/params/IFileAccessorParams.d.ts +11 -0
- package/models/params/IFileAccessorParams.js +1 -0
- package/models/params/ISearchParams.d.ts +10 -0
- package/models/params/ISearchParams.js +1 -0
- package/models/params/ITelemetryParams.d.ts +18 -0
- package/models/params/ITelemetryParams.js +1 -0
- package/models/params/IWebRTCSignallingParams.d.ts +21 -0
- package/models/params/IWebRTCSignallingParams.js +1 -0
- package/models/projects/ProjectUser.d.ts +6 -0
- package/models/projects/ProjectUser.js +1 -0
- package/models/schedule/IScheduleAction.d.ts +13 -0
- package/models/schedule/IScheduleAction.js +6 -0
- package/models/schedule/IScheduleInfo.d.ts +11 -0
- package/models/schedule/IScheduleInfo.js +1 -0
- package/models/schedule/IScheduleJob.d.ts +12 -0
- package/models/schedule/IScheduleJob.js +1 -0
- package/models/search/SearchQueryFilter.d.ts +5 -0
- package/models/search/SearchQueryFilter.js +5 -0
- package/models/search/SearchStreamQuery.d.ts +15 -0
- package/models/search/SearchStreamQuery.js +6 -0
- package/models/stream/IBaseStream.d.ts +8 -0
- package/models/stream/IBaseStream.js +1 -0
- package/models/stream/ICallerStream.d.ts +8 -0
- package/models/stream/ICallerStream.js +1 -0
- package/models/stream/ICommandStream.d.ts +7 -0
- package/models/stream/ICommandStream.js +1 -0
- package/models/stream/IControlStream.d.ts +9 -0
- package/models/stream/IControlStream.js +1 -0
- package/models/stream/IFileAccessorStream.d.ts +9 -0
- package/models/stream/IFileAccessorStream.js +1 -0
- package/models/stream/ISearchStream.d.ts +11 -0
- package/models/stream/ISearchStream.js +1 -0
- package/models/stream/ITelemetryStream.d.ts +10 -0
- package/models/stream/ITelemetryStream.js +1 -0
- package/models/stream/IWebRTCSignallingStream.d.ts +76 -0
- package/models/stream/IWebRTCSignallingStream.js +1 -0
- package/models/types.d.ts +5 -0
- package/models/types.js +1 -0
- package/node/RocosSDKNode.d.ts +42 -0
- package/node/RocosSDKNode.js +143 -0
- package/node/index.d.ts +7 -0
- package/node/index.js +7 -0
- package/package.json +22 -6
- package/services/AssetStorageService.d.ts +99 -0
- package/services/AssetStorageService.js +158 -0
- package/services/AuthService.d.ts +93 -0
- package/services/AuthService.js +235 -0
- package/services/AuthService.spec.d.ts +1 -0
- package/services/AuthService.spec.js +163 -0
- package/services/BaseServiceAbstract.d.ts +36 -0
- package/services/BaseServiceAbstract.js +101 -0
- package/services/BaseStreamService.d.ts +18 -0
- package/services/BaseStreamService.js +47 -0
- package/services/CallerService.d.ts +10 -0
- package/services/CallerService.js +53 -0
- package/services/CallerServiceNode.d.ts +6 -0
- package/services/CallerServiceNode.js +7 -0
- package/services/CommandService.d.ts +9 -0
- package/services/CommandService.js +38 -0
- package/services/CommandServiceNode.d.ts +6 -0
- package/services/CommandServiceNode.js +7 -0
- package/services/ConfigGroupService.d.ts +89 -0
- package/services/ConfigGroupService.js +153 -0
- package/services/ControlService.d.ts +11 -0
- package/services/ControlService.js +57 -0
- package/services/ControlServiceNode.d.ts +6 -0
- package/services/ControlServiceNode.js +7 -0
- package/services/DashboardService.d.ts +97 -0
- package/services/DashboardService.js +142 -0
- package/services/EventService.d.ts +53 -0
- package/services/EventService.js +85 -0
- package/services/FileAccessorService.d.ts +11 -0
- package/services/FileAccessorService.js +37 -0
- package/services/FileAccessorServiceNode.d.ts +6 -0
- package/services/FileAccessorServiceNode.js +7 -0
- package/services/FunctionService.d.ts +68 -0
- package/services/FunctionService.js +99 -0
- package/services/IntegrationService.d.ts +48 -0
- package/services/IntegrationService.js +72 -0
- package/services/MapService.d.ts +109 -0
- package/services/MapService.js +149 -0
- package/services/PlatformTimeService.d.ts +35 -0
- package/services/PlatformTimeService.js +156 -0
- package/services/PlatformTimeService.spec.d.ts +1 -0
- package/services/PlatformTimeService.spec.js +180 -0
- package/services/ProfileService.d.ts +244 -0
- package/services/ProfileService.js +362 -0
- package/services/ProjectService.d.ts +110 -0
- package/services/ProjectService.js +160 -0
- package/services/RobotService.d.ts +278 -0
- package/services/RobotService.js +460 -0
- package/services/ScheduleService.d.ts +22 -0
- package/services/ScheduleService.js +36 -0
- package/services/SearchService.d.ts +12 -0
- package/services/SearchService.js +58 -0
- package/services/SearchServiceNode.d.ts +6 -0
- package/services/SearchServiceNode.js +7 -0
- package/services/SpotProvisioningService.d.ts +14 -0
- package/services/SpotProvisioningService.js +43 -0
- package/services/SpotProvisioningServiceNode.d.ts +15 -0
- package/services/SpotProvisioningServiceNode.js +43 -0
- package/services/StreamService.d.ts +98 -0
- package/services/StreamService.js +142 -0
- package/services/TelemetryService.d.ts +40 -0
- package/services/TelemetryService.js +142 -0
- package/services/TelemetryService.spec.d.ts +1 -0
- package/services/TelemetryService.spec.js +37 -0
- package/services/TelemetryServiceNode.d.ts +6 -0
- package/services/TelemetryServiceNode.js +7 -0
- package/services/TimeSyncerService.d.ts +13 -0
- package/services/TimeSyncerService.js +23 -0
- package/services/UserService.d.ts +200 -0
- package/services/UserService.js +315 -0
- package/services/WebRTCSignallingService.d.ts +22 -0
- package/services/WebRTCSignallingService.js +78 -0
- package/services/WorkflowService.d.ts +71 -0
- package/services/WorkflowService.js +118 -0
- package/services/index.d.ts +26 -0
- package/services/index.js +26 -0
- package/store/RocosStore.d.ts +31 -0
- package/store/RocosStore.js +47 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
import { RocosError, errorCodes } from '../models';
|
2
|
+
import { API_SPOTTY_URL } from '../constants/api';
|
3
|
+
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
4
|
+
import { RocosLogger } from '../logger/RocosLogger';
|
5
|
+
import { RocosStore } from '../store/RocosStore';
|
6
|
+
import { formatServiceUrl } from '../helpers/formatServiceUrl';
|
7
|
+
export class SpotProvisioningServiceNode extends BaseServiceAbstract {
|
8
|
+
constructor(config) {
|
9
|
+
super(config);
|
10
|
+
this.logger = RocosLogger.getInstance(`SpotService(${this.config.url})`);
|
11
|
+
}
|
12
|
+
getStatus() {
|
13
|
+
return true;
|
14
|
+
}
|
15
|
+
getError(e) {
|
16
|
+
return new RocosError(e, errorCodes.SPOT_SERVICE_ERROR);
|
17
|
+
}
|
18
|
+
async getSpotCoreImage(projectId, profileId, robot, tag = 'stable', patMetadata, timezone) {
|
19
|
+
const userService = RocosStore.getSDKInstance(this.config).getUserService();
|
20
|
+
const pat = await userService.createPAT({
|
21
|
+
name: `Spot provisioning token for ${robot.callsign}`,
|
22
|
+
projectId,
|
23
|
+
scope: ['provisioning'],
|
24
|
+
robotDefinitionId: profileId,
|
25
|
+
metaData: {
|
26
|
+
defaultRobotDefinitionId: profileId,
|
27
|
+
singleUse: true,
|
28
|
+
...patMetadata,
|
29
|
+
},
|
30
|
+
ttlDays: 90,
|
31
|
+
});
|
32
|
+
return this.callPost(formatServiceUrl(API_SPOTTY_URL, { url: this.config.url }, this.config.insecure), {
|
33
|
+
pat: pat.pat,
|
34
|
+
callsign: robot.callsign,
|
35
|
+
robotName: robot.name,
|
36
|
+
project: projectId,
|
37
|
+
agentImageTag: tag,
|
38
|
+
timezone,
|
39
|
+
}, 'Failed to get image.', {
|
40
|
+
responseType: 'stream',
|
41
|
+
});
|
42
|
+
}
|
43
|
+
}
|
@@ -0,0 +1,98 @@
|
|
1
|
+
import { RocosError } from '../models/RocosError';
|
2
|
+
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
3
|
+
import { IBaseService } from '../models/IBaseService';
|
4
|
+
import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
|
5
|
+
import { ISource } from '../models/ISource';
|
6
|
+
import { IStream } from '../models/IStream';
|
7
|
+
import { IStreamSource } from '../models/IStreamSource';
|
8
|
+
export declare class StreamService extends BaseServiceAbstract implements IBaseService {
|
9
|
+
constructor(config: IRocosSDKConfig);
|
10
|
+
protected getError(e: Error): RocosError;
|
11
|
+
getStatus(): boolean;
|
12
|
+
/**
|
13
|
+
* Create a new stream.
|
14
|
+
*
|
15
|
+
* @param projectId - Project Id
|
16
|
+
* @param stream - Stream object
|
17
|
+
*/
|
18
|
+
create(projectId: string, stream: IStream): Promise<any>;
|
19
|
+
/**
|
20
|
+
* Get streams list by project id.
|
21
|
+
*/
|
22
|
+
list(projectId: string): Promise<IStream[]>;
|
23
|
+
/**
|
24
|
+
* Get stream information by project id and stream id.
|
25
|
+
*
|
26
|
+
* @param projectId - Project Id
|
27
|
+
* @param streamId - Stream Id
|
28
|
+
*/
|
29
|
+
info(projectId: string, streamId: string): Promise<IStream>;
|
30
|
+
/**
|
31
|
+
* Add new data to the stream
|
32
|
+
*
|
33
|
+
* @param projectId - Project Id
|
34
|
+
* @param streamId - Stream Id
|
35
|
+
* @param sources - Payload {@link IStreamSource[]}
|
36
|
+
*/
|
37
|
+
addData(projectId: string, streamId: string, sources: IStreamSource[]): Promise<any>;
|
38
|
+
/**
|
39
|
+
* Get sources for stream.
|
40
|
+
*/
|
41
|
+
sources(): Promise<ISource[]>;
|
42
|
+
/**
|
43
|
+
* Get source info
|
44
|
+
*
|
45
|
+
* @param sourceId - Source Id
|
46
|
+
*/
|
47
|
+
sourceInfo(sourceId: string): Promise<ISource>;
|
48
|
+
/**
|
49
|
+
* Get streams list of robot
|
50
|
+
*
|
51
|
+
* @param projectId - Project Id
|
52
|
+
* @param callsign - Robot's Callsign
|
53
|
+
*/
|
54
|
+
streamsForRobot(projectId: string, callsign: string): Promise<IStream[]>;
|
55
|
+
/**
|
56
|
+
* Bind robot with stream
|
57
|
+
*
|
58
|
+
* @param projectId - Project Id
|
59
|
+
* @param streamId - Steam Id
|
60
|
+
* @param callsigns - The Robots' callsigns which should bind with stream
|
61
|
+
*/
|
62
|
+
bindRobot(projectId: string, streamId: string, callsigns: string[]): Promise<any>;
|
63
|
+
/**
|
64
|
+
* Unbind robot with stream
|
65
|
+
*
|
66
|
+
* @param projectId - Project Id
|
67
|
+
* @param streamId - Steam Id
|
68
|
+
* @param callsigns - The Robots' callsigns which should unbind with stream
|
69
|
+
*/
|
70
|
+
unbindRobot(projectId: string, streamId: string, callsigns: string[]): Promise<any>;
|
71
|
+
/**
|
72
|
+
* Remove streams by list
|
73
|
+
*
|
74
|
+
* @param projectId - Project Id
|
75
|
+
* @param streamIds - Stream Ids
|
76
|
+
*/
|
77
|
+
removeStreams(projectId: string, streamIds: string[]): Promise<any>;
|
78
|
+
/**
|
79
|
+
* Remove stream data by dataIds list
|
80
|
+
*
|
81
|
+
* @param projectId - Project Id
|
82
|
+
* @param streamId - Stream Id
|
83
|
+
* @param dataIds - Data Ids, e.g. {sourceId: string, dataId: string}
|
84
|
+
*/
|
85
|
+
removeStreamData(projectId: string, streamId: string, dataIds: any[]): Promise<any>;
|
86
|
+
/**
|
87
|
+
* Remove stream data by ids list
|
88
|
+
*
|
89
|
+
* @param projectId - Project Id
|
90
|
+
* @param streamId - Stream Id
|
91
|
+
* @param ids - ids list (string[])
|
92
|
+
*/
|
93
|
+
removeStreamDataByIds(projectId: string, streamId: string, ids: string[]): Promise<any>;
|
94
|
+
/**
|
95
|
+
* Get stream data exporter templates list
|
96
|
+
*/
|
97
|
+
dataExporterTemplates(): Promise<any>;
|
98
|
+
}
|
@@ -0,0 +1,142 @@
|
|
1
|
+
import { API_PROJECT_CALLSIGN_STREAM_URL, API_PROJECT_STREAM_CALLSIGN_URL, API_PROJECT_STREAM_DATA_URL, API_PROJECT_STREAM_ID_URL, API_PROJECT_STREAM_URL, API_SOURCE_ID_URL, API_SOURCE_URL, API_TEMPLATE_EXPORTER_URL, } from '../constants/api';
|
2
|
+
import { RocosError, errorCodes } from '../models/RocosError';
|
3
|
+
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
4
|
+
import { RocosLogger } from '../logger/RocosLogger';
|
5
|
+
import { Stream } from '../models/Stream';
|
6
|
+
import { StreamSource } from '../models/StreamSource';
|
7
|
+
import { cleanObject } from '../helpers/cleanObject';
|
8
|
+
import { formatServiceUrl } from '../helpers/formatServiceUrl';
|
9
|
+
export class StreamService extends BaseServiceAbstract {
|
10
|
+
constructor(config) {
|
11
|
+
super(config);
|
12
|
+
this.logger = RocosLogger.getInstance(`StreamService(${this.config.url})`);
|
13
|
+
}
|
14
|
+
getError(e) {
|
15
|
+
return new RocosError(e, errorCodes.STREAM_SERVICE_ERROR);
|
16
|
+
}
|
17
|
+
getStatus() {
|
18
|
+
return true;
|
19
|
+
}
|
20
|
+
/**
|
21
|
+
* Create a new stream.
|
22
|
+
*
|
23
|
+
* @param projectId - Project Id
|
24
|
+
* @param stream - Stream object
|
25
|
+
*/
|
26
|
+
// TODO: map the response object
|
27
|
+
async create(projectId, stream) {
|
28
|
+
return this.callPost(formatServiceUrl(API_PROJECT_STREAM_URL, { url: this.config.url, projectId }, this.config.insecure), cleanObject(new Stream(stream)), `Failed to create stream for ${projectId}.`);
|
29
|
+
}
|
30
|
+
/**
|
31
|
+
* Get streams list by project id.
|
32
|
+
*/
|
33
|
+
async list(projectId) {
|
34
|
+
const data = await this.callGet(formatServiceUrl(API_PROJECT_STREAM_URL, { url: this.config.url, projectId }, this.config.insecure), `Failed to get streams for ${projectId}.`);
|
35
|
+
return data.map((stream) => cleanObject(new Stream(stream)));
|
36
|
+
}
|
37
|
+
/**
|
38
|
+
* Get stream information by project id and stream id.
|
39
|
+
*
|
40
|
+
* @param projectId - Project Id
|
41
|
+
* @param streamId - Stream Id
|
42
|
+
*/
|
43
|
+
async info(projectId, streamId) {
|
44
|
+
const data = await this.callGet(formatServiceUrl(API_PROJECT_STREAM_ID_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to get stream for ${projectId}, streamId ${streamId}.`);
|
45
|
+
return cleanObject(new Stream(data));
|
46
|
+
}
|
47
|
+
/**
|
48
|
+
* Add new data to the stream
|
49
|
+
*
|
50
|
+
* @param projectId - Project Id
|
51
|
+
* @param streamId - Stream Id
|
52
|
+
* @param sources - Payload {@link IStreamSource[]}
|
53
|
+
*/
|
54
|
+
// TODO: map the response object
|
55
|
+
async addData(projectId, streamId, sources) {
|
56
|
+
return this.callPut(formatServiceUrl(API_PROJECT_STREAM_DATA_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), { data: sources.map((source) => cleanObject(new StreamSource(source))) }, `Failed add data to stream for ${projectId}, streamId ${streamId}.`);
|
57
|
+
}
|
58
|
+
/**
|
59
|
+
* Get sources for stream.
|
60
|
+
*/
|
61
|
+
async sources() {
|
62
|
+
return this.callGet(formatServiceUrl(API_SOURCE_URL, { url: this.config.url }, this.config.insecure), 'Failed to get sources for stream.');
|
63
|
+
}
|
64
|
+
/**
|
65
|
+
* Get source info
|
66
|
+
*
|
67
|
+
* @param sourceId - Source Id
|
68
|
+
*/
|
69
|
+
async sourceInfo(sourceId) {
|
70
|
+
return this.callGet(formatServiceUrl(API_SOURCE_ID_URL, { url: this.config.url, sourceId }, this.config.insecure), `Failed add et source info for ${sourceId}.`);
|
71
|
+
}
|
72
|
+
/**
|
73
|
+
* Get streams list of robot
|
74
|
+
*
|
75
|
+
* @param projectId - Project Id
|
76
|
+
* @param callsign - Robot's Callsign
|
77
|
+
*/
|
78
|
+
async streamsForRobot(projectId, callsign) {
|
79
|
+
return this.callGet(formatServiceUrl(API_PROJECT_CALLSIGN_STREAM_URL, { url: this.config.url, projectId, callsign }, this.config.insecure), `Failed get streams for ${projectId}, callsign ${callsign}.`);
|
80
|
+
}
|
81
|
+
/**
|
82
|
+
* Bind robot with stream
|
83
|
+
*
|
84
|
+
* @param projectId - Project Id
|
85
|
+
* @param streamId - Steam Id
|
86
|
+
* @param callsigns - The Robots' callsigns which should bind with stream
|
87
|
+
*/
|
88
|
+
// TODO: map the response object
|
89
|
+
async bindRobot(projectId, streamId, callsigns) {
|
90
|
+
return this.callPut(formatServiceUrl(API_PROJECT_STREAM_CALLSIGN_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), callsigns, `Failed to bind robot with stream for ${projectId}, streamId ${streamId}.`);
|
91
|
+
}
|
92
|
+
/**
|
93
|
+
* Unbind robot with stream
|
94
|
+
*
|
95
|
+
* @param projectId - Project Id
|
96
|
+
* @param streamId - Steam Id
|
97
|
+
* @param callsigns - The Robots' callsigns which should unbind with stream
|
98
|
+
*/
|
99
|
+
// TODO: map the response object
|
100
|
+
async unbindRobot(projectId, streamId, callsigns) {
|
101
|
+
return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_CALLSIGN_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to unbind robot with stream for ${projectId}, streamId ${streamId}.`, callsigns);
|
102
|
+
}
|
103
|
+
/**
|
104
|
+
* Remove streams by list
|
105
|
+
*
|
106
|
+
* @param projectId - Project Id
|
107
|
+
* @param streamIds - Stream Ids
|
108
|
+
*/
|
109
|
+
// TODO: map the response object
|
110
|
+
async removeStreams(projectId, streamIds) {
|
111
|
+
return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_URL, { url: this.config.url, projectId }, this.config.insecure), `Failed to remove stream for ${projectId}.`, streamIds);
|
112
|
+
}
|
113
|
+
/**
|
114
|
+
* Remove stream data by dataIds list
|
115
|
+
*
|
116
|
+
* @param projectId - Project Id
|
117
|
+
* @param streamId - Stream Id
|
118
|
+
* @param dataIds - Data Ids, e.g. {sourceId: string, dataId: string}
|
119
|
+
*/
|
120
|
+
// TODO: map the response object
|
121
|
+
async removeStreamData(projectId, streamId, dataIds) {
|
122
|
+
return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_DATA_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to remove streams for ${projectId}, streamId ${streamId}.`, dataIds);
|
123
|
+
}
|
124
|
+
/**
|
125
|
+
* Remove stream data by ids list
|
126
|
+
*
|
127
|
+
* @param projectId - Project Id
|
128
|
+
* @param streamId - Stream Id
|
129
|
+
* @param ids - ids list (string[])
|
130
|
+
*/
|
131
|
+
// TODO: map the response object
|
132
|
+
async removeStreamDataByIds(projectId, streamId, ids) {
|
133
|
+
return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_DATA_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to remove streams for ${projectId}, streamId ${streamId}.`, ids);
|
134
|
+
}
|
135
|
+
/**
|
136
|
+
* Get stream data exporter templates list
|
137
|
+
*/
|
138
|
+
// TODO: map the response object
|
139
|
+
async dataExporterTemplates() {
|
140
|
+
return this.callGet(formatServiceUrl(API_TEMPLATE_EXPORTER_URL, { url: this.config.url }, this.config.insecure), 'Failed to get data exporters.');
|
141
|
+
}
|
142
|
+
}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
import { Observable } from 'rxjs';
|
2
|
+
import { CallsignStatus, IRocosSDKConfig, IRocosTelemetryMessage, IStreamStatusMessage, ITelemetryStream, ITelemetryStreamConfig, ITelemetrySubscriptionParams, ITelemetrySubscriptions } from '../models';
|
3
|
+
import { BaseStreamService } from './BaseStreamService';
|
4
|
+
export declare class TelemetryService extends BaseStreamService<ITelemetryStream, ITelemetryStreamConfig> {
|
5
|
+
private statusSubscription;
|
6
|
+
private changeStream$;
|
7
|
+
private streamStatusSubject$;
|
8
|
+
constructor(config: IRocosSDKConfig);
|
9
|
+
/**
|
10
|
+
* The main method for subscribing to telemetry messages
|
11
|
+
*
|
12
|
+
* @param params - Subscription params
|
13
|
+
*
|
14
|
+
* @returns An Observable that outputs telemetry messages
|
15
|
+
*/
|
16
|
+
subscribe(params: ITelemetrySubscriptionParams): Observable<IRocosTelemetryMessage>;
|
17
|
+
/**
|
18
|
+
* A method to keep track of the current subscriptions
|
19
|
+
*
|
20
|
+
* @returns An Observable that outputs subscription changes
|
21
|
+
*/
|
22
|
+
getSubscriptionChanges(): Observable<ITelemetrySubscriptions>;
|
23
|
+
/**
|
24
|
+
* A method to keep track of the stream status
|
25
|
+
*
|
26
|
+
* @returns An Observable that outputs stream status
|
27
|
+
*/
|
28
|
+
getStatusChanges(): Observable<IStreamStatusMessage>;
|
29
|
+
/**
|
30
|
+
* Subscribes to the heartbeat telemetry and checks we receive one at least every 5s
|
31
|
+
* @param projectId
|
32
|
+
* @param callsign
|
33
|
+
* @param heartbeatTimeoutMs optionally override the deadline for heartbeats (in ms). Default 5000ms
|
34
|
+
* @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
|
35
|
+
*/
|
36
|
+
getRobotStatusChanges(projectId: string, callsign: string, heartbeatTimeoutMs?: number, intervalMs?: number): Observable<CallsignStatus>;
|
37
|
+
protected initStream(stream: ITelemetryStream): Promise<void>;
|
38
|
+
private createStream;
|
39
|
+
protected getStream(config: ITelemetryStreamConfig): ITelemetryStream;
|
40
|
+
}
|
@@ -0,0 +1,142 @@
|
|
1
|
+
import { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, from, interval, map, mergeAll, of, startWith, } from 'rxjs';
|
2
|
+
import { CallsignsLookup, CallsignsLookupType, CallsignStatus, errorCodes, RocosError, SubscriberStatusEnum, } from '../models';
|
3
|
+
import { filter, finalize } from 'rxjs/operators';
|
4
|
+
import { BaseStreamService } from './BaseStreamService';
|
5
|
+
import { IDENTIFIER_NAME_TELEMETRY } from '../constants/identifier';
|
6
|
+
import { RocosStore } from '../store/RocosStore';
|
7
|
+
import { TelemetryStream } from '../api/streams/telemetry/TelemetryStream';
|
8
|
+
import { arrayUnique } from '../helpers/arrayUnique';
|
9
|
+
import { getUniqueId } from '../helpers/getUniqueId';
|
10
|
+
const HEARTBEAT_SOURCE = '/rocos/agent/telemetry/heartbeat';
|
11
|
+
const HEARTBEAT_TIMEOUT = 5000; // if no heartbeat within 5 seconds then the robot is considered dead
|
12
|
+
export class TelemetryService extends BaseStreamService {
|
13
|
+
constructor(config) {
|
14
|
+
super('TelemetryService', config);
|
15
|
+
this.changeStream$ = new BehaviorSubject(new Map());
|
16
|
+
RocosStore.getChangeSubject()
|
17
|
+
.pipe(filter((message) => {
|
18
|
+
return message.type === 'telemetry-subscription' && message.url === this.config.url;
|
19
|
+
}))
|
20
|
+
.subscribe((msg) => {
|
21
|
+
this.changeStream$.next(msg.data);
|
22
|
+
});
|
23
|
+
this.streamStatusSubject$ = new BehaviorSubject({
|
24
|
+
scope: 'default',
|
25
|
+
status: SubscriberStatusEnum.STOPPED,
|
26
|
+
});
|
27
|
+
}
|
28
|
+
/**
|
29
|
+
* The main method for subscribing to telemetry messages
|
30
|
+
*
|
31
|
+
* @param params - Subscription params
|
32
|
+
*
|
33
|
+
* @returns An Observable that outputs telemetry messages
|
34
|
+
*/
|
35
|
+
subscribe(params) {
|
36
|
+
const sources = arrayUnique(params.sources).map((item) => item.trim()) ?? [];
|
37
|
+
if (!params?.callsigns && params?.query) {
|
38
|
+
this.logger.error('Error: params need to contain either callsigns or query', params);
|
39
|
+
throw new RocosError('Params need to contain either callsigns or query.', errorCodes.TELEMETRY_SERVICE_ERROR);
|
40
|
+
}
|
41
|
+
let callsignsLookup = new CallsignsLookup([]);
|
42
|
+
if (params?.callsigns) {
|
43
|
+
this.logger.info('subscribe with callsigns', params);
|
44
|
+
callsignsLookup = new CallsignsLookup(params.callsigns);
|
45
|
+
}
|
46
|
+
else if (params?.query) {
|
47
|
+
this.logger.info('subscribe with query', params);
|
48
|
+
callsignsLookup = new CallsignsLookup(params.query);
|
49
|
+
}
|
50
|
+
const scope = params.scope ?? 'default';
|
51
|
+
const callsigns = callsignsLookup.lookupValue;
|
52
|
+
const subscriptionParams = {
|
53
|
+
uniqueId: getUniqueId(params.projectId, callsignsLookup, sources, scope),
|
54
|
+
callsigns: callsignsLookup?.lookupType === CallsignsLookupType.List ? callsignsLookup.lookupValue : [],
|
55
|
+
sources,
|
56
|
+
};
|
57
|
+
const stream = this.createStream(params.projectId, callsignsLookup, sources, scope).then((stream) => {
|
58
|
+
stream.addSubscription(subscriptionParams);
|
59
|
+
if (!this.statusSubscription) {
|
60
|
+
this.statusSubscription = stream.statusStream$.subscribe((msg) => {
|
61
|
+
this.status = msg === SubscriberStatusEnum.STOPPED || msg === SubscriberStatusEnum.ALIVE;
|
62
|
+
this.status$.next(msg);
|
63
|
+
});
|
64
|
+
}
|
65
|
+
return from(stream.messageStream$).pipe(finalize(() => stream?.removeSubscription(subscriptionParams, params.terminateReceiverGroupOnUnsubscribe)));
|
66
|
+
});
|
67
|
+
return from(stream).pipe(mergeAll(), filter((message) => {
|
68
|
+
return callsigns.includes(message.callsign) && sources.includes(message.source);
|
69
|
+
}));
|
70
|
+
}
|
71
|
+
/**
|
72
|
+
* A method to keep track of the current subscriptions
|
73
|
+
*
|
74
|
+
* @returns An Observable that outputs subscription changes
|
75
|
+
*/
|
76
|
+
getSubscriptionChanges() {
|
77
|
+
return this.changeStream$.asObservable();
|
78
|
+
}
|
79
|
+
/**
|
80
|
+
* A method to keep track of the stream status
|
81
|
+
*
|
82
|
+
* @returns An Observable that outputs stream status
|
83
|
+
*/
|
84
|
+
getStatusChanges() {
|
85
|
+
return this.streamStatusSubject$.asObservable();
|
86
|
+
}
|
87
|
+
/**
|
88
|
+
* Subscribes to the heartbeat telemetry and checks we receive one at least every 5s
|
89
|
+
* @param projectId
|
90
|
+
* @param callsign
|
91
|
+
* @param heartbeatTimeoutMs optionally override the deadline for heartbeats (in ms). Default 5000ms
|
92
|
+
* @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
|
93
|
+
*/
|
94
|
+
getRobotStatusChanges(projectId, callsign, heartbeatTimeoutMs = HEARTBEAT_TIMEOUT, intervalMs = 2000) {
|
95
|
+
const startedAt = Date.now();
|
96
|
+
const heartbeatTime$ = this.subscribe({
|
97
|
+
projectId,
|
98
|
+
sources: [HEARTBEAT_SOURCE],
|
99
|
+
callsigns: [callsign],
|
100
|
+
}).pipe(map(() => Date.now()));
|
101
|
+
return combineLatest([heartbeatTime$.pipe(startWith(startedAt)), interval(intervalMs)]).pipe(map(([lastHeartbeat, _]) => {
|
102
|
+
const now = Date.now();
|
103
|
+
// If we haven't received a heartbeat, but we've only just started
|
104
|
+
if (lastHeartbeat === startedAt && now - startedAt <= heartbeatTimeoutMs) {
|
105
|
+
return CallsignStatus.UNKNOWN;
|
106
|
+
}
|
107
|
+
if (now - lastHeartbeat > heartbeatTimeoutMs) {
|
108
|
+
return CallsignStatus.OFFLINE;
|
109
|
+
}
|
110
|
+
return CallsignStatus.ONLINE;
|
111
|
+
}), startWith(CallsignStatus.UNKNOWN), distinctUntilChanged(), catchError(() => of(CallsignStatus.ERROR)));
|
112
|
+
}
|
113
|
+
async initStream(stream) {
|
114
|
+
await super.initStream(stream);
|
115
|
+
stream.init();
|
116
|
+
}
|
117
|
+
async createStream(projectId, callsignsLookup, sources, scope) {
|
118
|
+
const newStream = await this.createStreamFromConfig(IDENTIFIER_NAME_TELEMETRY, {
|
119
|
+
url: this.config.url,
|
120
|
+
projectId,
|
121
|
+
callsignsLookup,
|
122
|
+
sources,
|
123
|
+
token: this.config.token,
|
124
|
+
scope: scope ?? 'default',
|
125
|
+
options: this.config.options,
|
126
|
+
port: this.config.port,
|
127
|
+
insecure: this.config.insecure,
|
128
|
+
});
|
129
|
+
if (!newStream.isNew) {
|
130
|
+
newStream.stream.statusStream$.subscribe((msg) => {
|
131
|
+
this.streamStatusSubject$.next({
|
132
|
+
scope,
|
133
|
+
status: msg,
|
134
|
+
});
|
135
|
+
});
|
136
|
+
}
|
137
|
+
return newStream.stream;
|
138
|
+
}
|
139
|
+
getStream(config) {
|
140
|
+
return new TelemetryStream(config);
|
141
|
+
}
|
142
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { TelemetryService } from './TelemetryService';
|
2
|
+
import { delay, from, lastValueFrom, NEVER, take, throwError } from 'rxjs';
|
3
|
+
import { CallsignStatus } from '../models';
|
4
|
+
describe('TelemetryService', () => {
|
5
|
+
describe('getRobotStatusChanges', () => {
|
6
|
+
it('should emit unknown to begin with', async () => {
|
7
|
+
const service = new TelemetryService({ url: '', token: '' });
|
8
|
+
// Mock 5 heartbeat messages
|
9
|
+
jest.spyOn(service, 'subscribe').mockReturnValue(NEVER);
|
10
|
+
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign').pipe(take(1)));
|
11
|
+
expect(lastValue).toEqual(CallsignStatus.UNKNOWN);
|
12
|
+
});
|
13
|
+
it('should emit online if the robot emits a heartbeat', async () => {
|
14
|
+
const service = new TelemetryService({ url: '', token: '' });
|
15
|
+
// Mock 5 heartbeat messages
|
16
|
+
jest
|
17
|
+
.spyOn(service, 'subscribe')
|
18
|
+
.mockReturnValue(from([0, 1, 2, 3, 4]).pipe(delay(100)));
|
19
|
+
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 1000, 10).pipe(take(2)));
|
20
|
+
expect(lastValue).toEqual(CallsignStatus.ONLINE);
|
21
|
+
}, 10000);
|
22
|
+
it('should emit offline if the robot never emits', async () => {
|
23
|
+
const service = new TelemetryService({ url: '', token: '' });
|
24
|
+
// Mock 5 heartbeat messages
|
25
|
+
jest.spyOn(service, 'subscribe').mockReturnValue(NEVER);
|
26
|
+
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 100, 10).pipe(take(2)));
|
27
|
+
expect(lastValue).toEqual(CallsignStatus.OFFLINE);
|
28
|
+
});
|
29
|
+
it('should emit an error if the telemetry errors', async () => {
|
30
|
+
const service = new TelemetryService({ url: '', token: '' });
|
31
|
+
// Mock 5 heartbeat messages
|
32
|
+
jest.spyOn(service, 'subscribe').mockReturnValue(throwError(() => new Error('test')));
|
33
|
+
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 100, 10).pipe(take(2)));
|
34
|
+
expect(lastValue).toEqual(CallsignStatus.ERROR);
|
35
|
+
});
|
36
|
+
});
|
37
|
+
});
|
@@ -0,0 +1,6 @@
|
|
1
|
+
import { ITelemetryStream } from '../models/stream/ITelemetryStream';
|
2
|
+
import { ITelemetryStreamConfig } from '../models/ITelemetryStreamConfig';
|
3
|
+
import { TelemetryService } from './TelemetryService';
|
4
|
+
export declare class TelemetryServiceNode extends TelemetryService {
|
5
|
+
protected getStream(config: ITelemetryStreamConfig): ITelemetryStream;
|
6
|
+
}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import { TelemetryService } from './TelemetryService';
|
2
|
+
import { TelemetryStreamNode } from '../api/streams/telemetry/TelemetryStreamNode';
|
3
|
+
export class TelemetryServiceNode extends TelemetryService {
|
4
|
+
getStream(config) {
|
5
|
+
return new TelemetryStreamNode(config);
|
6
|
+
}
|
7
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import { RocosError } from '../models/RocosError';
|
2
|
+
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
3
|
+
import { IBaseService } from '../models/IBaseService';
|
4
|
+
import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
|
5
|
+
export declare class TimeSyncerService extends BaseServiceAbstract implements IBaseService {
|
6
|
+
constructor(config: IRocosSDKConfig);
|
7
|
+
protected getError(e: Error): RocosError;
|
8
|
+
getStatus(): boolean;
|
9
|
+
/**
|
10
|
+
* Get Server Time
|
11
|
+
*/
|
12
|
+
getServerTime(): Promise<any>;
|
13
|
+
}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { RocosError, errorCodes } from '../models/RocosError';
|
2
|
+
import { API_SERVER_TIME_URL } from '../constants/api';
|
3
|
+
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
4
|
+
import { RocosLogger } from '../logger/RocosLogger';
|
5
|
+
import { formatServiceUrl } from '../helpers/formatServiceUrl';
|
6
|
+
export class TimeSyncerService extends BaseServiceAbstract {
|
7
|
+
constructor(config) {
|
8
|
+
super(config);
|
9
|
+
this.logger = RocosLogger.getInstance(`TimeSyncerService(${this.config.url})`);
|
10
|
+
}
|
11
|
+
getError(e) {
|
12
|
+
return new RocosError(e, errorCodes.TIME_SYNCER_SERVICE_ERROR);
|
13
|
+
}
|
14
|
+
getStatus() {
|
15
|
+
return true;
|
16
|
+
}
|
17
|
+
/**
|
18
|
+
* Get Server Time
|
19
|
+
*/
|
20
|
+
getServerTime() {
|
21
|
+
return this.callGet(formatServiceUrl(API_SERVER_TIME_URL, { url: this.config.url }, this.config.insecure), 'Failed to get server time.');
|
22
|
+
}
|
23
|
+
}
|