@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,149 @@
|
|
1
|
+
import { API_MAPS_COPY_URL, API_MAPS_DEPLOYED_URL, API_MAPS_DEPLOY_URL, API_MAPS_GEOJSON_URL, API_MAPS_MERGE_URL, API_MAPS_URL, API_MAP_ID_URL, } from '../constants/api';
|
2
|
+
import { RocosError, errorCodes } from '../models';
|
3
|
+
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
4
|
+
import { RocosLogger } from '../logger/RocosLogger';
|
5
|
+
import { formatServiceUrl } from '../helpers/formatServiceUrl';
|
6
|
+
/**
|
7
|
+
* Integrations to retrieve data from the linked project in DroneDeploy
|
8
|
+
*/
|
9
|
+
export class MapService extends BaseServiceAbstract {
|
10
|
+
constructor(config) {
|
11
|
+
super(config);
|
12
|
+
this.logger = RocosLogger.getInstance(`MapService(${this.config.url})`);
|
13
|
+
}
|
14
|
+
getStatus() {
|
15
|
+
return true;
|
16
|
+
}
|
17
|
+
getError(e) {
|
18
|
+
return new RocosError(e, errorCodes.MAPS_SERVICE_ERROR);
|
19
|
+
}
|
20
|
+
async list(projectId, callsign) {
|
21
|
+
const resp = await this.callGet(formatServiceUrl(API_MAPS_URL, {
|
22
|
+
url: this.config.url,
|
23
|
+
projectId,
|
24
|
+
}, this.config.insecure), 'Failed to get maps.', callsign ? { callsign } : undefined);
|
25
|
+
return resp.maps;
|
26
|
+
}
|
27
|
+
/** List maps to be deployed to a callsign
|
28
|
+
*
|
29
|
+
* @param projectId
|
30
|
+
* @param callsign
|
31
|
+
*/
|
32
|
+
async listDeployedMaps(projectId, callsign) {
|
33
|
+
const safeCallsign = encodeURIComponent(callsign);
|
34
|
+
const resp = await this.callGet(formatServiceUrl(API_MAPS_DEPLOYED_URL, {
|
35
|
+
url: this.config.url,
|
36
|
+
projectId,
|
37
|
+
callsign: safeCallsign,
|
38
|
+
}, this.config.insecure), 'Failed to get deployed maps.');
|
39
|
+
return resp.maps;
|
40
|
+
}
|
41
|
+
/**
|
42
|
+
* Creates a new map by merging two existing maps
|
43
|
+
* @param projectId Project ID
|
44
|
+
* @param maps Array of two map IDs to merge
|
45
|
+
* @param options Options to create the new map
|
46
|
+
*/
|
47
|
+
async merge(projectId, maps, options) {
|
48
|
+
if (maps.length !== 2)
|
49
|
+
throw new Error('You must provide two maps to merge.');
|
50
|
+
const payload = {
|
51
|
+
projectID: projectId,
|
52
|
+
mapIDLeft: maps[0],
|
53
|
+
mapIDRight: maps[1],
|
54
|
+
name: options.name,
|
55
|
+
description: options.description,
|
56
|
+
callsign: options.callsign,
|
57
|
+
};
|
58
|
+
return this.callPost(formatServiceUrl(API_MAPS_MERGE_URL, {
|
59
|
+
url: this.config.url,
|
60
|
+
projectId,
|
61
|
+
}, this.config.insecure), payload, 'Failed to merge maps.');
|
62
|
+
}
|
63
|
+
/** Returns a map in its canonical form
|
64
|
+
*
|
65
|
+
* @param projectId Project ID
|
66
|
+
* @param mapId Map ID
|
67
|
+
*/
|
68
|
+
async get(projectId, mapId) {
|
69
|
+
return this.callGet(formatServiceUrl(API_MAP_ID_URL, {
|
70
|
+
url: this.config.url,
|
71
|
+
projectId,
|
72
|
+
mapId,
|
73
|
+
}, this.config.insecure), 'Failed to get map.');
|
74
|
+
}
|
75
|
+
/**
|
76
|
+
* Updates a maps metadata
|
77
|
+
* @param projectId Project ID
|
78
|
+
* @param mapId Map ID
|
79
|
+
* @param options New metadata
|
80
|
+
*/
|
81
|
+
async update(projectId, mapId, options) {
|
82
|
+
return this.callPut(formatServiceUrl(API_MAP_ID_URL, {
|
83
|
+
url: this.config.url,
|
84
|
+
projectId,
|
85
|
+
mapId,
|
86
|
+
}, this.config.insecure), options, 'Failed to update map.');
|
87
|
+
}
|
88
|
+
/**
|
89
|
+
* Begins uploading a map from the agent
|
90
|
+
*
|
91
|
+
* @param projectId Project ID
|
92
|
+
* @param mapId Map ID
|
93
|
+
* @param callsign Robot callsign
|
94
|
+
* @param hash Map hash
|
95
|
+
*/
|
96
|
+
async sendToCloud(projectId, mapId, callsign, hash) {
|
97
|
+
return this.callPost(formatServiceUrl(API_MAP_ID_URL, {
|
98
|
+
url: this.config.url,
|
99
|
+
projectId,
|
100
|
+
mapId,
|
101
|
+
}, this.config.insecure), { callsign, hash }, 'Failed to start map upload.');
|
102
|
+
}
|
103
|
+
async delete(projectId, mapId, callsign, hash) {
|
104
|
+
return this.callDelete(formatServiceUrl(API_MAP_ID_URL, {
|
105
|
+
url: this.config.url,
|
106
|
+
projectId,
|
107
|
+
mapId,
|
108
|
+
}, this.config.insecure), 'Failed to delete map.', callsign ? { callsign, hash } : {});
|
109
|
+
}
|
110
|
+
/**
|
111
|
+
* Makes a copy of an uploaded map
|
112
|
+
*
|
113
|
+
* @param projectId Project ID
|
114
|
+
* @param mapId Map ID
|
115
|
+
* @param options Options to create the new map
|
116
|
+
*/
|
117
|
+
async copy(projectId, mapId, options) {
|
118
|
+
return this.callPost(formatServiceUrl(API_MAPS_COPY_URL, {
|
119
|
+
url: this.config.url,
|
120
|
+
projectId,
|
121
|
+
mapId,
|
122
|
+
}, this.config.insecure), options, 'Failed to copy map.');
|
123
|
+
}
|
124
|
+
/** Deploy a map from the cloud to a robot
|
125
|
+
*
|
126
|
+
* @param projectId Project ID
|
127
|
+
* @param mapId Map ID
|
128
|
+
* @param callsign Robot callsign
|
129
|
+
*/
|
130
|
+
async deploy(projectId, mapId, callsign) {
|
131
|
+
return this.callPost(formatServiceUrl(API_MAPS_DEPLOY_URL, {
|
132
|
+
url: this.config.url,
|
133
|
+
projectId,
|
134
|
+
mapId,
|
135
|
+
}, this.config.insecure), { callsign }, 'Failed to deploy map.');
|
136
|
+
}
|
137
|
+
/** Get a GeoJSON representation of a map
|
138
|
+
*
|
139
|
+
* @param projectId Project ID
|
140
|
+
* @param mapId Map ID
|
141
|
+
*/
|
142
|
+
async getGeoJSON(projectId, mapId) {
|
143
|
+
return this.callGet(formatServiceUrl(API_MAPS_GEOJSON_URL, {
|
144
|
+
url: this.config.url,
|
145
|
+
projectId,
|
146
|
+
mapId,
|
147
|
+
}, this.config.insecure), 'Failed to get map GeoJSON.');
|
148
|
+
}
|
149
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
import { Logger } from 'loglevel';
|
2
|
+
import { TimeSyncerService } from './TimeSyncerService';
|
3
|
+
export interface IPlatformTime {
|
4
|
+
now: number;
|
5
|
+
duration: number;
|
6
|
+
}
|
7
|
+
export interface IPlatformTimeMeasurement {
|
8
|
+
clientTimeStampEnd: number;
|
9
|
+
clientTimeStampStart: number;
|
10
|
+
serverTime: IPlatformTime;
|
11
|
+
}
|
12
|
+
export declare class PlatFormTimeService {
|
13
|
+
protected static instance: PlatFormTimeService;
|
14
|
+
protected backoffTimeouts: number[];
|
15
|
+
protected isSyncing: boolean;
|
16
|
+
protected backoffFailCount: number;
|
17
|
+
protected serverTimeOffset: number;
|
18
|
+
protected lastPlatformTimeSyncedAt: number;
|
19
|
+
protected timeSyncerService: TimeSyncerService;
|
20
|
+
protected logger: Logger;
|
21
|
+
protected constructor(timeSyncerService: TimeSyncerService);
|
22
|
+
static getInstance(timeSyncerService?: TimeSyncerService): PlatFormTimeService;
|
23
|
+
get platformTimeOffset(): number;
|
24
|
+
get platformTime(): number;
|
25
|
+
private getClockOffsetBetweenClientAndServer;
|
26
|
+
private getPlatformTime;
|
27
|
+
protected handleServerTimeNotReliable(): void;
|
28
|
+
private backoff;
|
29
|
+
protected isReliableServerTime(platformTimeMeasurements: IPlatformTimeMeasurement[]): boolean;
|
30
|
+
private handleGetServerTimeError;
|
31
|
+
protected calculateOffset(platformTimeMeasurements: IPlatformTimeMeasurement[]): number;
|
32
|
+
private saveOffset;
|
33
|
+
protected removeLongestAndShortest(serverTimeMeasurements: IPlatformTimeMeasurement[]): IPlatformTimeMeasurement[];
|
34
|
+
private getServerTime;
|
35
|
+
}
|
@@ -0,0 +1,156 @@
|
|
1
|
+
import { RocosLogger } from '../logger/RocosLogger';
|
2
|
+
import { standardDeviation } from '../helpers/standardDeviation';
|
3
|
+
const NUMBER_OF_SERVER_TIME_USED_TO_CALIBRATE = 5;
|
4
|
+
const MAX_CLIENT_WAITING_TIME_STANDARD_DEVIATION_ALLOWED = 100; // 100 miliseconds
|
5
|
+
const KEY_GR_PLATFORM_TIME_OFFSET = 'gr_platformTimeOffset';
|
6
|
+
const KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT = 'gr_lastPlatformTimeSyncedAt';
|
7
|
+
const GR_PLATFORM_TIME_TTL = 30 * 60 * 1000; // 30 minutes
|
8
|
+
export class PlatFormTimeService {
|
9
|
+
// Make this a singleton, so that we don't have multi platform time
|
10
|
+
constructor(timeSyncerService) {
|
11
|
+
this.backoffTimeouts = [5 * 1000, 30 * 1000, 60 * 1000, 300 * 1000]; // in miliseconds
|
12
|
+
this.isSyncing = false;
|
13
|
+
this.backoffFailCount = 0;
|
14
|
+
this.serverTimeOffset = 0;
|
15
|
+
this.lastPlatformTimeSyncedAt = 0;
|
16
|
+
this.logger = RocosLogger.getInstance('PlatformTimeService');
|
17
|
+
if (window?.localStorage) {
|
18
|
+
this.lastPlatformTimeSyncedAt = Number(window.localStorage.getItem(KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT)) || 0;
|
19
|
+
this.serverTimeOffset = Number(window.localStorage.getItem(KEY_GR_PLATFORM_TIME_OFFSET)) || 0;
|
20
|
+
}
|
21
|
+
this.timeSyncerService = timeSyncerService;
|
22
|
+
this.logger.debug('stored platform time: ', this.platformTime);
|
23
|
+
setTimeout(() => {
|
24
|
+
void this.getClockOffsetBetweenClientAndServer();
|
25
|
+
}, 2000);
|
26
|
+
}
|
27
|
+
static getInstance(timeSyncerService) {
|
28
|
+
if (!PlatFormTimeService.instance) {
|
29
|
+
if (!timeSyncerService) {
|
30
|
+
throw new Error('platform time service object is not instantiated yet, please pass timeSyncerService to create it');
|
31
|
+
}
|
32
|
+
PlatFormTimeService.instance = new PlatFormTimeService(timeSyncerService);
|
33
|
+
}
|
34
|
+
return PlatFormTimeService.instance;
|
35
|
+
}
|
36
|
+
get platformTimeOffset() {
|
37
|
+
return this.serverTimeOffset;
|
38
|
+
}
|
39
|
+
get platformTime() {
|
40
|
+
const now = Date.now();
|
41
|
+
return now - this.serverTimeOffset;
|
42
|
+
}
|
43
|
+
async getClockOffsetBetweenClientAndServer() {
|
44
|
+
let serverTimeOffsets = [];
|
45
|
+
if (this.isSyncing) {
|
46
|
+
return;
|
47
|
+
}
|
48
|
+
this.isSyncing = true;
|
49
|
+
for (let count = 0; count < NUMBER_OF_SERVER_TIME_USED_TO_CALIBRATE; count++) {
|
50
|
+
try {
|
51
|
+
const platformTime = await this.getPlatformTime();
|
52
|
+
serverTimeOffsets.push(platformTime);
|
53
|
+
}
|
54
|
+
catch (e) {
|
55
|
+
this.handleGetServerTimeError(e);
|
56
|
+
return;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
if (this.isReliableServerTime(serverTimeOffsets)) {
|
60
|
+
serverTimeOffsets = this.removeLongestAndShortest(serverTimeOffsets);
|
61
|
+
const serverTimeOffset = this.calculateOffset(serverTimeOffsets);
|
62
|
+
this.saveOffset(serverTimeOffset);
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
this.handleServerTimeNotReliable();
|
66
|
+
}
|
67
|
+
}
|
68
|
+
async getPlatformTime() {
|
69
|
+
const clientTimeStampStart = Date.now();
|
70
|
+
// exception should be handled by the caller
|
71
|
+
const serverTime = await this.getServerTime();
|
72
|
+
const clientTimeStampEnd = Date.now();
|
73
|
+
return {
|
74
|
+
clientTimeStampEnd,
|
75
|
+
clientTimeStampStart,
|
76
|
+
serverTime,
|
77
|
+
};
|
78
|
+
}
|
79
|
+
handleServerTimeNotReliable() {
|
80
|
+
this.logger.error('not able to get reliable server time, will try again...');
|
81
|
+
this.isSyncing = false;
|
82
|
+
this.backoff();
|
83
|
+
}
|
84
|
+
backoff() {
|
85
|
+
this.backoffFailCount++;
|
86
|
+
this.logger.debug('backoff count: ', this.backoffFailCount);
|
87
|
+
const backoffTimeoutIndex = this.backoffFailCount - 1;
|
88
|
+
let delay;
|
89
|
+
if (backoffTimeoutIndex >= this.backoffTimeouts.length) {
|
90
|
+
// Use the longest delay if backoff failed too many times
|
91
|
+
delay = this.backoffTimeouts[this.backoffTimeouts.length - 1];
|
92
|
+
}
|
93
|
+
else {
|
94
|
+
delay = this.backoffTimeouts[backoffTimeoutIndex];
|
95
|
+
}
|
96
|
+
setTimeout(() => {
|
97
|
+
void this.getClockOffsetBetweenClientAndServer();
|
98
|
+
}, delay);
|
99
|
+
}
|
100
|
+
isReliableServerTime(platformTimeMeasurements) {
|
101
|
+
const stdDeviation = standardDeviation(
|
102
|
+
// get the standardDeviation of the client waiting time
|
103
|
+
platformTimeMeasurements.map((x) => x.clientTimeStampEnd - x.clientTimeStampStart));
|
104
|
+
this.logger.debug('standard deviation', stdDeviation);
|
105
|
+
// We judge server time is reliable only the standard deviation of client waiting time is less
|
106
|
+
// than the threshold
|
107
|
+
return stdDeviation < MAX_CLIENT_WAITING_TIME_STANDARD_DEVIATION_ALLOWED;
|
108
|
+
}
|
109
|
+
handleGetServerTimeError(e) {
|
110
|
+
this.logger.error('Fail to get server time, will try again...', { e });
|
111
|
+
this.isSyncing = false;
|
112
|
+
this.backoff();
|
113
|
+
}
|
114
|
+
calculateOffset(platformTimeMeasurements) {
|
115
|
+
// Timestamp when Received the Response - Time Request Duration / 2 - Timestamp within the Response .
|
116
|
+
let totalServerTimeOffset = 0;
|
117
|
+
const measurementsWithValues = platformTimeMeasurements.filter((x) => !!x?.serverTime);
|
118
|
+
measurementsWithValues.forEach((x) => {
|
119
|
+
// eslint-disable-next-line operator-linebreak
|
120
|
+
totalServerTimeOffset +=
|
121
|
+
// eslint-disable-next-line no-mixed-operators
|
122
|
+
x.clientTimeStampEnd - (x.clientTimeStampEnd - x.clientTimeStampStart) / 2 - x.serverTime.now / 10 ** 6;
|
123
|
+
});
|
124
|
+
// final platformTimeOffset is in miliseconds
|
125
|
+
return Math.round(totalServerTimeOffset / measurementsWithValues.length);
|
126
|
+
}
|
127
|
+
saveOffset(timeOffset) {
|
128
|
+
this.backoffFailCount = 0;
|
129
|
+
this.isSyncing = false;
|
130
|
+
this.serverTimeOffset = timeOffset;
|
131
|
+
this.lastPlatformTimeSyncedAt = Date.now();
|
132
|
+
if (window?.localStorage) {
|
133
|
+
window.localStorage.setItem(KEY_GR_PLATFORM_TIME_OFFSET, String(this.serverTimeOffset));
|
134
|
+
window.localStorage.setItem(KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT, String(this.lastPlatformTimeSyncedAt));
|
135
|
+
}
|
136
|
+
this.logger.debug('calibrated server time offset', timeOffset);
|
137
|
+
// resync the time in 30 minutes
|
138
|
+
setTimeout(() => {
|
139
|
+
void this.getClockOffsetBetweenClientAndServer();
|
140
|
+
}, GR_PLATFORM_TIME_TTL);
|
141
|
+
}
|
142
|
+
removeLongestAndShortest(serverTimeMeasurements) {
|
143
|
+
let result = [];
|
144
|
+
if (serverTimeMeasurements.length > 2) {
|
145
|
+
// remove the server time responses with shortest/longest client waiting duration
|
146
|
+
serverTimeMeasurements.sort((a, b) => {
|
147
|
+
return a.clientTimeStampEnd - a.clientTimeStampStart - (b.clientTimeStampEnd - b.clientTimeStampStart);
|
148
|
+
});
|
149
|
+
result = serverTimeMeasurements.slice(1, serverTimeMeasurements.length - 1);
|
150
|
+
}
|
151
|
+
return result;
|
152
|
+
}
|
153
|
+
getServerTime() {
|
154
|
+
return this.timeSyncerService.getServerTime();
|
155
|
+
}
|
156
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,180 @@
|
|
1
|
+
import { PlatFormTimeService } from "./PlatformTimeService";
|
2
|
+
import { TimeSyncerService } from "./TimeSyncerService";
|
3
|
+
import { standardDeviation } from "../helpers";
|
4
|
+
// Subclass PlatformTimeService so that we can test the protected methods
|
5
|
+
class PlatformtimeServicePublic extends PlatFormTimeService {
|
6
|
+
constructor(timeSyncerService) {
|
7
|
+
super(timeSyncerService);
|
8
|
+
}
|
9
|
+
isReliableServerTime(platformTimeMeasurement) {
|
10
|
+
return super.isReliableServerTime(platformTimeMeasurement);
|
11
|
+
}
|
12
|
+
calculateOffset(platformTimeMeasurement) {
|
13
|
+
return super.calculateOffset(platformTimeMeasurement);
|
14
|
+
}
|
15
|
+
removeLongestAndShortest(platformTimeMeasurement) {
|
16
|
+
return super.removeLongestAndShortest(platformTimeMeasurement);
|
17
|
+
}
|
18
|
+
static getInstance(timeSyncerService) {
|
19
|
+
const instance = super.getInstance(timeSyncerService);
|
20
|
+
return instance;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
describe('platformTimeService', () => {
|
24
|
+
it('should calculate standard deviation correctly', () => {
|
25
|
+
let numbers = [10, 12, 23, 23, 16, 23, 21, 16];
|
26
|
+
let stdDev = standardDeviation(numbers);
|
27
|
+
expect(Math.abs(stdDev - 4.8989794855664)).toBeLessThan(0.000001);
|
28
|
+
numbers = [100, 12, 23, 23, 116, 23, 21, 162];
|
29
|
+
stdDev = standardDeviation(numbers);
|
30
|
+
expect(Math.abs(stdDev - 53.702886328394)).toBeLessThan(0.000001);
|
31
|
+
});
|
32
|
+
it('should be able to tell reliable server time response', () => {
|
33
|
+
jest.useFakeTimers();
|
34
|
+
const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
|
35
|
+
const mock = {
|
36
|
+
clientTimeStampEnd: 100,
|
37
|
+
clientTimeStampStart: 20,
|
38
|
+
serverTime: {
|
39
|
+
now: 0,
|
40
|
+
duration: 0,
|
41
|
+
},
|
42
|
+
};
|
43
|
+
const mocks = [];
|
44
|
+
mocks.push(mock);
|
45
|
+
let isReliableServerTime = p.isReliableServerTime(mocks);
|
46
|
+
expect(isReliableServerTime).toBeTruthy();
|
47
|
+
for (let i = 0; i < 4; i++) {
|
48
|
+
mocks.push({ ...mock });
|
49
|
+
isReliableServerTime = p.isReliableServerTime(mocks);
|
50
|
+
expect(isReliableServerTime).toBeTruthy();
|
51
|
+
}
|
52
|
+
});
|
53
|
+
it('should be able to tell unreliable server time response', () => {
|
54
|
+
jest.useFakeTimers();
|
55
|
+
const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
|
56
|
+
const mock = {
|
57
|
+
clientTimeStampEnd: 100,
|
58
|
+
clientTimeStampStart: 0,
|
59
|
+
serverTime: {
|
60
|
+
now: 0,
|
61
|
+
duration: 0,
|
62
|
+
},
|
63
|
+
};
|
64
|
+
const mocks = [];
|
65
|
+
let isReliableServerTime = false;
|
66
|
+
for (let i = 0; i < 5; i++) {
|
67
|
+
const mockClone = { ...mock };
|
68
|
+
mockClone.clientTimeStampEnd += i * 60;
|
69
|
+
mocks.push(mockClone);
|
70
|
+
}
|
71
|
+
isReliableServerTime = p.isReliableServerTime(mocks);
|
72
|
+
expect(isReliableServerTime).toBeTruthy();
|
73
|
+
for (let i = 0; i < 5; i++) {
|
74
|
+
const mockClone = { ...mock };
|
75
|
+
mockClone.clientTimeStampEnd += i * 70;
|
76
|
+
mocks.push(mockClone);
|
77
|
+
}
|
78
|
+
isReliableServerTime = p.isReliableServerTime(mocks);
|
79
|
+
expect(isReliableServerTime).toBeTruthy();
|
80
|
+
for (let i = 0; i < 5; i++) {
|
81
|
+
const mockClone = { ...mock };
|
82
|
+
mockClone.clientTimeStampEnd += i * 80;
|
83
|
+
mocks.push(mockClone);
|
84
|
+
}
|
85
|
+
isReliableServerTime = p.isReliableServerTime(mocks);
|
86
|
+
// std dev = 113.13708498985
|
87
|
+
expect(isReliableServerTime).toBeFalsy();
|
88
|
+
for (let i = 0; i < 5; i++) {
|
89
|
+
const mockClone = { ...mock };
|
90
|
+
mockClone.clientTimeStampEnd += i * 100;
|
91
|
+
mocks.push(mockClone);
|
92
|
+
}
|
93
|
+
isReliableServerTime = p.isReliableServerTime(mocks);
|
94
|
+
expect(isReliableServerTime).toBeFalsy();
|
95
|
+
});
|
96
|
+
it('should be able to remove shortest and longest correctly', () => {
|
97
|
+
jest.useFakeTimers();
|
98
|
+
const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
|
99
|
+
const mock = {
|
100
|
+
clientTimeStampEnd: 100,
|
101
|
+
clientTimeStampStart: 0,
|
102
|
+
serverTime: {
|
103
|
+
now: 0,
|
104
|
+
duration: 0,
|
105
|
+
},
|
106
|
+
};
|
107
|
+
const mocks = [];
|
108
|
+
let mockClone = { ...mock };
|
109
|
+
mockClone.clientTimeStampEnd = 100;
|
110
|
+
mocks.push(mockClone);
|
111
|
+
mockClone = { ...mock };
|
112
|
+
mockClone.clientTimeStampEnd = 200;
|
113
|
+
mocks.push(mockClone);
|
114
|
+
mockClone = { ...mock };
|
115
|
+
mockClone.clientTimeStampEnd = 500;
|
116
|
+
mocks.push(mockClone);
|
117
|
+
mockClone = { ...mock };
|
118
|
+
mockClone.clientTimeStampEnd = 400;
|
119
|
+
mocks.push(mockClone);
|
120
|
+
mockClone = { ...mock };
|
121
|
+
mockClone.clientTimeStampEnd = 300;
|
122
|
+
mocks.push(mockClone);
|
123
|
+
const platformTimeMeasurement = p.removeLongestAndShortest(mocks);
|
124
|
+
platformTimeMeasurement.forEach((p) => {
|
125
|
+
expect(p.clientTimeStampEnd).not.toEqual(100);
|
126
|
+
expect(p.clientTimeStampEnd).not.toEqual(500);
|
127
|
+
});
|
128
|
+
});
|
129
|
+
it('should be able to calculate the offset correctly', () => {
|
130
|
+
jest.useFakeTimers();
|
131
|
+
const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
|
132
|
+
const mock = {
|
133
|
+
clientTimeStampEnd: 100,
|
134
|
+
clientTimeStampStart: 0,
|
135
|
+
serverTime: {
|
136
|
+
now: 0,
|
137
|
+
duration: 0,
|
138
|
+
},
|
139
|
+
};
|
140
|
+
const mocks = [];
|
141
|
+
let mockClone = { ...mock };
|
142
|
+
mockClone.clientTimeStampEnd = 200;
|
143
|
+
mocks.push(mockClone);
|
144
|
+
mockClone = { ...mock };
|
145
|
+
mockClone.clientTimeStampEnd = 500;
|
146
|
+
mocks.push(mockClone);
|
147
|
+
mockClone = { ...mock };
|
148
|
+
mockClone.clientTimeStampEnd = 400;
|
149
|
+
mocks.push(mockClone);
|
150
|
+
const offset = p.calculateOffset(mocks);
|
151
|
+
// (200-(200)/2 + 500 - (500)/2 + 400 - (400)/2)/3 = 183.333333333, round to 183
|
152
|
+
expect(offset).toEqual(183);
|
153
|
+
});
|
154
|
+
it('should be able to filter where service time is not provided', () => {
|
155
|
+
jest.useFakeTimers();
|
156
|
+
const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
|
157
|
+
const mock = {
|
158
|
+
clientTimeStampEnd: 100,
|
159
|
+
clientTimeStampStart: 0,
|
160
|
+
serverTime: {
|
161
|
+
now: 0,
|
162
|
+
duration: 0,
|
163
|
+
},
|
164
|
+
};
|
165
|
+
const mocks = [];
|
166
|
+
let mockClone = { ...mock };
|
167
|
+
mockClone.clientTimeStampEnd = 200;
|
168
|
+
mockClone.serverTime = undefined;
|
169
|
+
mocks.push(mockClone);
|
170
|
+
mockClone = { ...mock };
|
171
|
+
mockClone.clientTimeStampEnd = 500;
|
172
|
+
mocks.push(mockClone);
|
173
|
+
mockClone = { ...mock };
|
174
|
+
mockClone.clientTimeStampEnd = 400;
|
175
|
+
mocks.push(mockClone);
|
176
|
+
const offset = p.calculateOffset(mocks);
|
177
|
+
// (500 - (500)/2 + 400 - (400)/2)/2 = 225
|
178
|
+
expect(offset).toEqual(225);
|
179
|
+
});
|
180
|
+
});
|