@dronedeploy/rocos-js-sdk 2.6.1 → 3.0.0-alpha.20
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 +3 -26
- package/IRocosSDK.js +1 -5
- package/README.md +18 -0
- package/RocosSDK.d.ts +6 -1
- package/RocosSDK.js +103 -95
- package/api/StreamRegister.d.ts +1 -1
- package/api/StreamRegister.js +23 -12
- package/api/atoms/StreamHeartbeat.js +3 -7
- package/api/streams/caller/CallerStream.d.ts +6 -6
- package/api/streams/caller/CallerStream.js +41 -49
- package/api/streams/caller/CallerStreamAbstract.d.ts +6 -11
- package/api/streams/caller/CallerStreamAbstract.js +55 -67
- package/api/streams/caller/CallerStreamNode.d.ts +6 -6
- package/api/streams/caller/CallerStreamNode.js +48 -61
- package/api/streams/command/CommandStream.d.ts +2 -4
- package/api/streams/command/CommandStream.js +28 -30
- package/api/streams/command/CommandStreamAbstract.d.ts +4 -8
- package/api/streams/command/CommandStreamAbstract.js +33 -42
- package/api/streams/command/CommandStreamNode.d.ts +2 -4
- package/api/streams/command/CommandStreamNode.js +16 -40
- package/api/streams/control/ControlStream.d.ts +4 -6
- package/api/streams/control/ControlStream.js +30 -36
- package/api/streams/control/ControlStreamAbstract.d.ts +6 -9
- package/api/streams/control/ControlStreamAbstract.js +57 -54
- package/api/streams/control/ControlStreamNode.d.ts +3 -5
- package/api/streams/control/ControlStreamNode.js +19 -44
- package/api/streams/fileAccessor/FileAccessorStream.d.ts +2 -4
- package/api/streams/fileAccessor/FileAccessorStream.js +42 -57
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.d.ts +4 -9
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.js +28 -48
- package/api/streams/fileAccessor/FileAccessorStreamNode.d.ts +1 -3
- package/api/streams/fileAccessor/FileAccessorStreamNode.js +23 -53
- package/api/streams/search/SearchStream.d.ts +2 -5
- package/api/streams/search/SearchStream.js +50 -74
- package/api/streams/search/SearchStreamAbstract.d.ts +4 -9
- package/api/streams/search/SearchStreamAbstract.js +33 -35
- package/api/streams/search/SearchStreamNode.d.ts +2 -5
- package/api/streams/search/SearchStreamNode.js +23 -48
- package/api/streams/telemetry/TelemetryStream.d.ts +4 -4
- package/api/streams/telemetry/TelemetryStream.js +49 -78
- package/api/streams/telemetry/TelemetryStreamAbstract.d.ts +8 -11
- package/api/streams/telemetry/TelemetryStreamAbstract.js +126 -145
- package/api/streams/telemetry/TelemetryStreamNode.d.ts +5 -5
- package/api/streams/telemetry/TelemetryStreamNode.js +44 -64
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.d.ts +5 -10
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.js +37 -20
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.d.ts +10 -13
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.js +37 -37
- package/constants/api.d.ts +14 -5
- package/constants/api.js +130 -126
- package/constants/auth.d.ts +2 -0
- package/constants/auth.js +2 -0
- package/constants/grpc.js +5 -8
- package/constants/identifier.js +6 -9
- package/constants/timezones.d.ts +1 -1
- package/constants/timezones.js +1 -4
- 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.js +2 -6
- package/helpers/arrayUnique.js +2 -6
- package/helpers/average.js +2 -7
- package/helpers/callerMessageHelpers.d.ts +14 -0
- package/helpers/callerMessageHelpers.js +86 -0
- package/helpers/cleanObject.js +17 -19
- package/helpers/cleanObject.spec.d.ts +1 -0
- package/helpers/cleanObject.spec.js +53 -0
- package/helpers/enviroment.js +4 -11
- package/helpers/flattenCallsignsLookup.d.ts +1 -1
- package/helpers/flattenCallsignsLookup.js +1 -5
- package/helpers/flattenObject.js +1 -5
- 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.js +1 -5
- package/helpers/formatServiceUrl.spec.d.ts +1 -0
- package/helpers/formatServiceUrl.spec.js +16 -0
- package/helpers/generateUUID.js +3 -7
- package/helpers/getSubscriptionsDifference.d.ts +3 -3
- package/helpers/getSubscriptionsDifference.js +6 -10
- package/helpers/getURLSearchParams.d.ts +2 -0
- package/helpers/getURLSearchParams.js +9 -0
- package/helpers/getURLSearchParams.spec.d.ts +1 -0
- package/helpers/getURLSearchParams.spec.js +19 -0
- package/helpers/getUniqueConfigKey.js +1 -6
- package/helpers/getUniqueId.js +3 -7
- package/helpers/getUnixTimeMs.js +1 -5
- package/helpers/index.d.ts +3 -1
- package/helpers/index.js +5 -15
- package/helpers/nanosecondToMillisecond.d.ts +1 -1
- package/helpers/nanosecondToMillisecond.js +11 -6
- package/helpers/nanosecondToMillisecond.spec.d.ts +1 -0
- package/helpers/nanosecondToMillisecond.spec.js +20 -0
- package/helpers/randomString.js +1 -5
- package/helpers/standardDeviation.js +4 -8
- package/helpers/standardDeviation.spec.d.ts +1 -0
- package/helpers/standardDeviation.spec.js +11 -0
- package/helpers/stringToUint8Array.js +3 -7
- package/helpers/uint8ArrayToString.js +3 -8
- package/helpers/websandbox/connection.d.ts +67 -0
- package/helpers/websandbox/connection.js +133 -0
- package/helpers/websandbox/frame/frame.d.ts +12 -0
- package/helpers/websandbox/frame/frame.js +22 -0
- package/helpers/websandbox/frame/frame.source.d.ts +2 -0
- package/helpers/websandbox/frame/frame.source.js +5 -0
- package/helpers/websandbox/frame/index.d.ts +2 -0
- package/helpers/websandbox/frame/index.js +2 -0
- package/helpers/websandbox/frame/worker/index.d.ts +2 -0
- package/helpers/websandbox/frame/worker/index.js +2 -0
- package/helpers/websandbox/frame/worker/manager.d.ts +11 -0
- package/helpers/websandbox/frame/worker/manager.js +67 -0
- package/helpers/websandbox/frame/worker/manager.spec.d.ts +4 -0
- package/helpers/websandbox/frame/worker/manager.spec.js +127 -0
- package/helpers/websandbox/frame/worker/types.d.ts +11 -0
- package/helpers/websandbox/frame/worker/types.js +1 -0
- package/helpers/websandbox/frame/worker/worker.d.ts +1 -0
- package/helpers/websandbox/frame/worker/worker.js +74 -0
- package/helpers/websandbox/frame/worker/worker.source.d.ts +2 -0
- package/helpers/websandbox/frame/worker/worker.source.js +4 -0
- package/helpers/websandbox/index.d.ts +2 -0
- package/helpers/websandbox/index.js +2 -0
- package/helpers/websandbox/sandbox.d.ts +57 -0
- package/helpers/websandbox/sandbox.js +175 -0
- package/helpers/websandbox/types.d.ts +13 -0
- package/helpers/websandbox/types.js +1 -0
- package/index.js +7 -19
- package/logger/RocosLogger.js +18 -44
- package/models/CallsignStatus.d.ts +6 -0
- package/models/CallsignStatus.js +7 -0
- package/models/ExportDataQuery.js +1 -5
- package/models/ExternalProject.js +1 -5
- package/models/IBaseService.d.ts +1 -0
- package/models/IBaseService.js +1 -2
- package/models/IConfigGroup.js +1 -2
- package/models/IDebugLevel.d.ts +1 -1
- package/models/IDebugLevel.js +1 -2
- package/models/IExportDataQuery.js +1 -2
- package/models/IFunctionConfig.js +1 -2
- package/models/IInvitation.d.ts +1 -1
- package/models/IInvitation.js +1 -2
- package/models/IInvitationExists.js +1 -2
- package/models/IOperation.js +1 -2
- package/models/IPersonalAccessToken.js +1 -2
- package/models/IProject.js +1 -2
- package/models/IProjectApplication.js +1 -2
- package/models/IRobot.d.ts +1 -0
- package/models/IRobot.js +1 -2
- package/models/IRobotConfig.js +1 -2
- package/models/IRobotPlugin.js +1 -2
- package/models/IRobotSettings.d.ts +28 -0
- package/models/IRobotSettings.js +1 -0
- package/models/IRobotTemplate.js +1 -2
- package/models/IRocosSDKConfig.d.ts +3 -9
- package/models/IRocosSDKConfig.js +1 -2
- package/models/ISource.js +1 -2
- package/models/IStream.js +1 -2
- package/models/IStreamConfig.js +1 -2
- package/models/IStreamOptions.js +1 -2
- package/models/IStreamSource.js +1 -2
- package/models/ISubscriberStatus.js +1 -2
- package/models/ITelemetryStreamConfig.js +1 -2
- package/models/IToken.d.ts +7 -3
- package/models/IToken.js +1 -2
- package/models/IWidget.js +1 -2
- package/models/IWidgetLineGroup.js +1 -2
- package/models/ResponseLevelEnum.d.ts +4 -0
- package/models/ResponseLevelEnum.js +6 -5
- package/models/Robot.d.ts +1 -0
- package/models/Robot.js +1 -5
- package/models/RobotConfig.js +1 -5
- package/models/RobotPlugin.js +1 -5
- package/models/RobotTemplate.js +9 -14
- package/models/RocosError.d.ts +1 -0
- package/models/RocosError.js +3 -6
- package/models/ServiceEnum.d.ts +2 -1
- package/models/ServiceEnum.js +3 -5
- package/models/Stream.js +4 -8
- package/models/StreamOptions.js +1 -5
- package/models/StreamSource.js +3 -7
- package/models/SubscriberStatusEnum.js +2 -5
- package/models/Token.d.ts +36 -4
- package/models/Token.js +74 -11
- package/models/Token.spec.d.ts +1 -0
- package/models/Token.spec.js +108 -0
- package/models/Widget.js +4 -8
- package/models/WidgetLineGroup.js +1 -5
- package/models/asset-storage/AssetModelItem.d.ts +3 -0
- package/models/asset-storage/AssetModelItem.js +1 -2
- package/models/caller/IRocosCallerMessageChunk.d.ts +8 -2
- package/models/caller/IRocosCallerMessageChunk.js +1 -2
- package/models/caller/IRocosCallerMessageChunks.d.ts +2 -3
- package/models/caller/IRocosCallerMessageChunks.js +1 -2
- package/models/caller/IRocosCallerMessageHeartbeat.d.ts +3 -2
- package/models/caller/IRocosCallerMessageHeartbeat.js +1 -2
- package/models/caller/IRocosCallerMessageResponse.d.ts +3 -2
- package/models/caller/IRocosCallerMessageResponse.js +1 -2
- package/models/caller/IRocosCallerMessageResponseAck.d.ts +16 -2
- package/models/caller/IRocosCallerMessageResponseAck.js +13 -2
- package/models/caller/IRocosCallerMessageResponseResult.d.ts +15 -2
- package/models/caller/IRocosCallerMessageResponseResult.js +12 -2
- package/models/caller/IRocosCallerMessageResponseReturn.d.ts +8 -0
- package/models/caller/IRocosCallerMessageResponseReturn.js +1 -0
- package/models/caller/IRocosCallerMessageResponseUid.d.ts +10 -2
- package/models/caller/IRocosCallerMessageResponseUid.js +7 -2
- package/models/caller/IRocosCallerMessageResponses.d.ts +2 -3
- package/models/caller/IRocosCallerMessageResponses.js +1 -2
- package/models/caller/RocosCallerResultStatus.d.ts +11 -1
- package/models/caller/RocosCallerResultStatus.js +12 -5
- package/models/caller/RocosResponseLevel.d.ts +6 -0
- package/models/caller/RocosResponseLevel.js +7 -0
- package/models/caller/index.d.ts +11 -0
- package/models/caller/index.js +11 -0
- package/models/callsigns/CallsignsEnums.d.ts +3 -3
- package/models/callsigns/CallsignsEnums.js +11 -14
- package/models/callsigns/CallsignsLookup.js +10 -15
- package/models/callsigns/CallsignsQuery.js +1 -5
- package/models/callsigns/CallsignsQueryPredicate.js +1 -5
- package/models/command/IRocosCommandMessageHeartbeat.d.ts +1 -2
- package/models/command/IRocosCommandMessageHeartbeat.js +1 -2
- package/models/command/IRocosCommandMessageResponse.d.ts +55 -2
- package/models/command/IRocosCommandMessageResponse.js +29 -2
- package/models/command/RocosCommandResultStatus.d.ts +11 -1
- package/models/command/RocosCommandResultStatus.js +12 -5
- package/models/command/index.d.ts +4 -0
- package/models/command/index.js +4 -0
- package/models/file/FileEnums.d.ts +4 -4
- package/models/file/FileEnums.js +9 -12
- package/models/index.d.ts +6 -31
- package/models/index.js +76 -113
- package/models/integrations/Overlay.js +1 -2
- package/models/integrations/Plan.js +1 -2
- package/models/maps/Map.d.ts +2 -3
- package/models/maps/Map.js +1 -2
- package/models/maps/Panorama.d.ts +36 -0
- package/models/maps/Panorama.js +1 -0
- package/models/message/IRocosCallerMessage.js +1 -2
- package/models/message/IRocosChangeMessage.js +1 -2
- package/models/message/IRocosCommandMessage.js +1 -2
- package/models/message/IRocosControlMessage.js +1 -2
- package/models/message/IRocosOpResultMessage.d.ts +2 -2
- package/models/message/IRocosOpResultMessage.js +1 -2
- package/models/message/IRocosSearchMessage.js +1 -2
- package/models/message/IRocosSearchRowMessage.js +1 -2
- package/models/message/IRocosSearchStatusMessage.js +1 -2
- package/models/message/IRocosTelemetryMessage.d.ts +12 -7
- package/models/message/IRocosTelemetryMessage.js +1 -2
- package/models/message/IStreamStatusMessage.js +1 -2
- package/models/message/RocosCallerMessage.d.ts +2 -4
- package/models/message/RocosCallerMessage.js +24 -15
- package/models/message/RocosCommandMessage.d.ts +2 -3
- package/models/message/RocosCommandMessage.js +5 -8
- package/models/message/RocosControlMessage.d.ts +1 -1
- package/models/message/RocosControlMessage.js +6 -10
- package/models/message/RocosOpResultMessage.d.ts +3 -2
- package/models/message/RocosOpResultMessage.js +6 -10
- package/models/message/RocosSearchMessage.d.ts +1 -1
- package/models/message/RocosSearchMessage.js +5 -9
- package/models/message/RocosSearchRowMessage.d.ts +1 -1
- package/models/message/RocosSearchRowMessage.js +8 -12
- package/models/message/RocosTelemetryMessage.d.ts +9 -23
- package/models/message/RocosTelemetryMessage.js +51 -93
- package/models/message/index.d.ts +17 -0
- package/models/message/index.js +17 -0
- package/models/params/ICallerParams.d.ts +12 -1
- package/models/params/ICallerParams.js +1 -2
- package/models/params/ICommandParams.js +1 -2
- package/models/params/IControlParams.d.ts +1 -1
- package/models/params/IControlParams.js +1 -2
- package/models/params/IFileAccessorParams.js +1 -2
- package/models/params/ISearchParams.js +1 -2
- package/models/params/ITelemetryParams.d.ts +1 -1
- package/models/params/ITelemetryParams.js +1 -2
- package/models/params/IWebRTCSignallingParams.js +1 -2
- package/models/projects/ProjectUser.js +1 -2
- package/models/schedule/IScheduleAction.d.ts +1 -1
- package/models/schedule/IScheduleAction.js +2 -5
- package/models/schedule/IScheduleInfo.js +1 -2
- package/models/schedule/IScheduleJob.js +1 -2
- package/models/search/SearchQueryFilter.js +1 -5
- package/models/search/SearchStreamQuery.js +1 -5
- package/models/stream/IBaseStream.js +1 -2
- package/models/stream/ICallerStream.js +1 -2
- package/models/stream/ICommandStream.js +1 -2
- package/models/stream/IControlStream.js +1 -2
- package/models/stream/IFileAccessorStream.d.ts +1 -2
- package/models/stream/IFileAccessorStream.js +1 -2
- package/models/stream/ISearchStream.js +1 -2
- package/models/stream/ITelemetryStream.js +1 -2
- package/models/stream/IWebRTCSignallingStream.d.ts +51 -16
- package/models/stream/IWebRTCSignallingStream.js +1 -7
- package/models/types.d.ts +5 -5
- package/models/types.js +1 -2
- package/models/workflow/Workflow.d.ts +36 -0
- package/models/workflow/Workflow.js +1 -0
- package/node/RocosSDKNode.d.ts +6 -1
- package/node/RocosSDKNode.js +82 -80
- package/node/index.js +7 -19
- package/package.json +10 -11
- package/services/AssetStorageService.d.ts +23 -1
- package/services/AssetStorageService.js +53 -24
- package/services/AuthService.d.ts +59 -27
- package/services/AuthService.js +167 -86
- package/services/AuthService.spec.d.ts +1 -0
- package/services/AuthService.spec.js +163 -0
- package/services/BaseServiceAbstract.d.ts +11 -13
- package/services/BaseServiceAbstract.js +18 -24
- package/services/BaseStreamService.d.ts +18 -0
- package/services/BaseStreamService.js +47 -0
- package/services/CallerService.d.ts +37 -17
- package/services/CallerService.js +86 -65
- package/services/CallerService.spec.d.ts +1 -0
- package/services/CallerService.spec.js +227 -0
- package/services/CallerServiceNode.js +4 -8
- package/services/CommandService.d.ts +5 -17
- package/services/CommandService.js +19 -62
- package/services/CommandServiceNode.js +4 -8
- package/services/ConfigGroupService.js +17 -21
- package/services/ControlService.d.ts +5 -17
- package/services/ControlService.js +22 -65
- package/services/ControlServiceNode.js +4 -8
- package/services/DashboardService.js +20 -24
- package/services/EvaluatorService.d.ts +11 -0
- package/services/EvaluatorService.js +28 -0
- package/services/EventService.js +13 -17
- package/services/FileAccessorService.d.ts +4 -18
- package/services/FileAccessorService.js +14 -62
- package/services/FileAccessorServiceNode.js +4 -8
- package/services/FunctionService.js +17 -21
- package/services/IntegrationService.js +14 -19
- package/services/MapService.d.ts +71 -25
- package/services/MapService.js +113 -40
- package/services/PlatformTimeService.js +8 -12
- package/services/PlatformTimeService.spec.d.ts +1 -0
- package/services/PlatformTimeService.spec.js +180 -0
- package/services/ProfileService.js +36 -40
- package/services/ProjectService.js +23 -27
- package/services/RobotService.d.ts +2 -6
- package/services/RobotService.js +48 -55
- package/services/ScheduleService.js +10 -14
- package/services/SearchService.d.ts +4 -17
- package/services/SearchService.js +24 -59
- package/services/SearchServiceNode.js +4 -8
- package/services/SpotProvisioningService.d.ts +1 -1
- package/services/SpotProvisioningService.js +16 -16
- package/services/SpotProvisioningServiceNode.d.ts +1 -1
- package/services/SpotProvisioningServiceNode.js +16 -16
- package/services/StreamService.js +26 -30
- package/services/TelemetryService.d.ts +15 -17
- package/services/TelemetryService.js +103 -93
- package/services/TelemetryService.spec.d.ts +1 -0
- package/services/TelemetryService.spec.js +37 -0
- package/services/TelemetryServiceNode.js +4 -8
- package/services/TimeSyncerService.js +9 -13
- package/services/UserService.js +37 -41
- package/services/WebRTCSignallingService.d.ts +4 -4
- package/services/WebRTCSignallingService.js +24 -27
- package/services/WorkflowService.d.ts +25 -29
- package/services/WorkflowService.js +39 -75
- package/services/index.d.ts +1 -0
- package/services/index.js +27 -38
- package/store/RocosStore.js +9 -15
- package/demo/angular/.editorconfig +0 -16
- package/demo/angular/.eslintignore +0 -4
- package/demo/angular/.eslintrc.json +0 -50
- package/demo/angular/README.md +0 -36
- package/demo/angular/angular.json +0 -132
- package/demo/angular/karma.conf.js +0 -44
- package/demo/angular/package.json +0 -41
- package/demo/angular/src/app/app.component.css +0 -0
- package/demo/angular/src/app/app.component.html +0 -9
- package/demo/angular/src/app/app.component.ts +0 -10
- package/demo/angular/src/app/app.module.ts +0 -38
- package/demo/angular/src/app/components/assets/assets.component.css +0 -0
- package/demo/angular/src/app/components/assets/assets.component.html +0 -29
- package/demo/angular/src/app/components/assets/assets.component.ts +0 -107
- package/demo/angular/src/app/components/auth/auth.component.css +0 -0
- package/demo/angular/src/app/components/auth/auth.component.html +0 -27
- package/demo/angular/src/app/components/auth/auth.component.ts +0 -33
- package/demo/angular/src/app/components/caller/caller.component.css +0 -0
- package/demo/angular/src/app/components/caller/caller.component.html +0 -22
- package/demo/angular/src/app/components/caller/caller.component.ts +0 -61
- package/demo/angular/src/app/components/command/command.component.css +0 -0
- package/demo/angular/src/app/components/command/command.component.html +0 -22
- package/demo/angular/src/app/components/command/command.component.ts +0 -60
- package/demo/angular/src/app/components/integrations/integrations.component.ts +0 -43
- package/demo/angular/src/app/components/robots/robots.component.css +0 -0
- package/demo/angular/src/app/components/robots/robots.component.html +0 -13
- package/demo/angular/src/app/components/robots/robots.component.ts +0 -26
- package/demo/angular/src/app/components/sdk/sdk.component.css +0 -0
- package/demo/angular/src/app/components/sdk/sdk.component.html +0 -43
- package/demo/angular/src/app/components/sdk/sdk.component.ts +0 -50
- package/demo/angular/src/app/components/subscription/subscription.component.css +0 -0
- package/demo/angular/src/app/components/subscription/subscription.component.html +0 -6
- package/demo/angular/src/app/components/subscription/subscription.component.ts +0 -40
- package/demo/angular/src/app/components/telemetry/telemetry.component.css +0 -0
- package/demo/angular/src/app/components/telemetry/telemetry.component.html +0 -19
- package/demo/angular/src/app/components/telemetry/telemetry.component.ts +0 -61
- package/demo/angular/src/app/components/token/token.component.css +0 -0
- package/demo/angular/src/app/components/token/token.component.html +0 -10
- package/demo/angular/src/app/components/token/token.component.ts +0 -18
- package/demo/angular/src/app/components/video/p2pvideo/index.ts +0 -646
- package/demo/angular/src/app/components/video/video-source.ts +0 -315
- package/demo/angular/src/app/components/video/video.component.css +0 -6
- package/demo/angular/src/app/components/video/video.component.html +0 -54
- package/demo/angular/src/app/components/video/video.component.ts +0 -151
- package/demo/angular/src/app/services/sdk.service.ts +0 -193
- package/demo/angular/src/assets/.gitkeep +0 -0
- package/demo/angular/src/assets/HKGrotesk-Bold.otf +0 -0
- package/demo/angular/src/assets/HKGrotesk-Regular.otf +0 -0
- package/demo/angular/src/assets/logo.svg +0 -16
- package/demo/angular/src/environments/environment.prod.ts +0 -3
- package/demo/angular/src/environments/environment.ts +0 -16
- package/demo/angular/src/favicon.ico +0 -0
- package/demo/angular/src/index.html +0 -15
- package/demo/angular/src/main.ts +0 -7
- package/demo/angular/src/polyfills.ts +0 -53
- package/demo/angular/src/styles.css +0 -198
- package/demo/angular/tsconfig.app.json +0 -15
- package/demo/angular/tsconfig.json +0 -39
- package/demo/html/README.md +0 -8
- package/demo/html/assets/HKGrotesk-Bold.otf +0 -0
- package/demo/html/assets/HKGrotesk-Regular.otf +0 -0
- package/demo/html/assets/logo.svg +0 -16
- package/demo/html/favicon.ico +0 -0
- package/demo/html/index.html +0 -416
- package/demo/html/rocos-js-sdk.js +0 -3
- package/demo/html/rocos-js-sdk.js.LICENSE.txt +0 -8
- package/demo/html/rocos-js-sdk.js.map +0 -1
- package/demo/html/styles.css +0 -190
- package/demo/node/README.md +0 -17
- package/demo/node/index.js +0 -134
- package/demo/node/package.json +0 -8
- package/demo/react/.env +0 -1
- package/demo/react/.env.dist +0 -1
- package/demo/react/.eslintrc.json +0 -46
- package/demo/react/README.md +0 -65
- package/demo/react/package.json +0 -60
- package/demo/react/public/favicon.ico +0 -0
- package/demo/react/public/index.html +0 -43
- package/demo/react/public/logo192.png +0 -0
- package/demo/react/public/logo512.png +0 -0
- package/demo/react/public/manifest.json +0 -25
- package/demo/react/public/robots.txt +0 -3
- package/demo/react/src/App.css +0 -190
- package/demo/react/src/App.tsx +0 -31
- package/demo/react/src/actions/index.ts +0 -8
- package/demo/react/src/actions/sdkActions.ts +0 -62
- package/demo/react/src/assets/HKGrotesk-Bold.otf +0 -0
- package/demo/react/src/assets/HKGrotesk-Regular.otf +0 -0
- package/demo/react/src/assets/logo.svg +0 -16
- package/demo/react/src/components/AuthForm.tsx +0 -76
- package/demo/react/src/components/CallerBox.tsx +0 -53
- package/demo/react/src/components/CallerForm.tsx +0 -98
- package/demo/react/src/components/CommandBox.tsx +0 -47
- package/demo/react/src/components/CommandForm.tsx +0 -98
- package/demo/react/src/components/RobotsForm.tsx +0 -51
- package/demo/react/src/components/SubscriptionBox.tsx +0 -55
- package/demo/react/src/components/TelemetryForm.tsx +0 -98
- package/demo/react/src/components/TokenForm.tsx +0 -39
- package/demo/react/src/config.json +0 -14
- package/demo/react/src/controllers/RocosSDKController.ts +0 -48
- package/demo/react/src/helpers/deepEqual.ts +0 -27
- package/demo/react/src/hooks/useInput.ts +0 -29
- package/demo/react/src/index.css +0 -11
- package/demo/react/src/index.tsx +0 -26
- package/demo/react/src/react-app-env.d.ts +0 -1
- package/demo/react/src/reducers/sdkReducer.ts +0 -133
- package/demo/react/src/reportWebVitals.ts +0 -15
- package/demo/react/src/selectors/sdkSelector.ts +0 -11
- package/demo/react/src/setupTests.ts +0 -5
- package/demo/react/src/store.ts +0 -14
- package/demo/react/tsconfig.json +0 -26
- package/demo/sdk-sizer/dist/sdk-sizer/3rdpartylicenses.txt +0 -975
- package/demo/sdk-sizer/dist/sdk-sizer/favicon.ico +0 -0
- package/demo/sdk-sizer/dist/sdk-sizer/index.html +0 -12
- package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js +0 -2
- package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js.map +0 -1
- package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js +0 -2
- package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js.map +0 -1
- package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js +0 -2
- package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js.map +0 -1
- package/demo/sdk-sizer/dist/sdk-sizer/stats.json +0 -1
- package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css +0 -2
- package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css.map +0 -1
- package/grpc/file-accessor/filagree_grpc_pb.d.ts +0 -41
- package/grpc/file-accessor/filagree_grpc_pb.js +0 -121
- package/grpc/file-accessor/filagree_pb.d.ts +0 -339
- package/grpc/file-accessor/filagree_pb.js +0 -2261
- package/grpc/file-accessor/filagree_pb_service.d.ts +0 -115
- package/grpc/file-accessor/filagree_pb_service.js +0 -257
- package/grpc/rambo/rambo.v1_grpc_pb.d.ts +0 -39
- package/grpc/rambo/rambo.v1_grpc_pb.js +0 -73
- package/grpc/rambo/rambo.v1_pb.d.ts +0 -365
- package/grpc/rambo/rambo.v1_pb.js +0 -2469
- package/grpc/rambo/rambo.v1_pb_service.d.ts +0 -76
- package/grpc/rambo/rambo.v1_pb_service.js +0 -138
- package/grpc/rambo/uri.v1_grpc_pb.d.ts +0 -1
- package/grpc/rambo/uri.v1_grpc_pb.js +0 -1
- package/grpc/rambo/uri.v1_pb.d.ts +0 -80
- package/grpc/rambo/uri.v1_pb.js +0 -563
- package/grpc/rambo/uri.v1_pb_service.d.ts +0 -3
- package/grpc/rambo/uri.v1_pb_service.js +0 -3
- package/grpc/robot-control/conker_grpc_pb.d.ts +0 -46
- package/grpc/robot-control/conker_grpc_pb.js +0 -143
- package/grpc/robot-control/conker_pb.d.ts +0 -168
- package/grpc/robot-control/conker_pb.js +0 -1287
- package/grpc/robot-control/conker_pb_service.d.ts +0 -126
- package/grpc/robot-control/conker_pb_service.js +0 -301
- package/grpc/serviette/common.v1_grpc_pb.d.ts +0 -1
- package/grpc/serviette/common.v1_grpc_pb.js +0 -1
- package/grpc/serviette/common.v1_pb.d.ts +0 -8
- package/grpc/serviette/common.v1_pb.js +0 -45
- package/grpc/serviette/common.v1_pb_service.d.ts +0 -3
- package/grpc/serviette/common.v1_pb_service.js +0 -3
- package/grpc/serviette/serviette.v1_grpc_pb.d.ts +0 -137
- package/grpc/serviette/serviette.v1_grpc_pb.js +0 -331
- package/grpc/serviette/serviette.v1_pb.d.ts +0 -884
- package/grpc/serviette/serviette.v1_pb.js +0 -6363
- package/grpc/serviette/serviette.v1_pb_service.d.ts +0 -278
- package/grpc/serviette/serviette.v1_pb_service.js +0 -699
- package/grpc/serviette/uri.v1_grpc_pb.d.ts +0 -1
- package/grpc/serviette/uri.v1_grpc_pb.js +0 -1
- package/grpc/serviette/uri.v1_pb.d.ts +0 -102
- package/grpc/serviette/uri.v1_pb.js +0 -741
- package/grpc/serviette/uri.v1_pb_service.d.ts +0 -3
- package/grpc/serviette/uri.v1_pb_service.js +0 -3
- package/grpc/slowlane/slowlane_grpc_pb.d.ts +0 -38
- package/grpc/slowlane/slowlane_grpc_pb.js +0 -132
- package/grpc/slowlane/slowlane_pb.d.ts +0 -373
- package/grpc/slowlane/slowlane_pb.js +0 -2908
- package/grpc/slowlane/slowlane_pb_service.d.ts +0 -112
- package/grpc/slowlane/slowlane_pb_service.js +0 -189
- package/grpc/teletubby/teletubby_grpc_pb.d.ts +0 -73
- package/grpc/teletubby/teletubby_grpc_pb.js +0 -231
- package/grpc/teletubby/teletubby_pb.d.ts +0 -647
- package/grpc/teletubby/teletubby_pb.js +0 -4786
- package/grpc/teletubby/teletubby_pb_service.d.ts +0 -193
- package/grpc/teletubby/teletubby_pb_service.js +0 -436
- package/grpc/video/pigeon_grpc_pb.d.ts +0 -59
- package/grpc/video/pigeon_grpc_pb.js +0 -180
- package/grpc/video/pigeon_pb.d.ts +0 -237
- package/grpc/video/pigeon_pb.js +0 -1775
- package/grpc/video/pigeon_pb_service.d.ts +0 -152
- package/grpc/video/pigeon_pb_service.js +0 -292
- package/models/ISignupParams.d.ts +0 -8
- package/models/ISignupParams.js +0 -2
- package/utils/axisangle.d.ts +0 -18
- package/utils/axisangle.js +0 -48
- package/utils/eulerangles.d.ts +0 -22
- package/utils/eulerangles.js +0 -133
- package/utils/helperfunctions.d.ts +0 -5
- package/utils/helperfunctions.js +0 -50
- package/utils/localtransform.d.ts +0 -17
- package/utils/localtransform.js +0 -50
- package/utils/localtransformtree.d.ts +0 -17
- package/utils/localtransformtree.js +0 -88
- package/utils/misc.d.ts +0 -17
- package/utils/misc.js +0 -23
- package/utils/positionvector.d.ts +0 -13
- package/utils/positionvector.js +0 -79
- package/utils/quaternion.d.ts +0 -20
- package/utils/quaternion.js +0 -62
- package/utils/rotationmatrix.d.ts +0 -23
- package/utils/rotationmatrix.js +0 -262
- package/utils/transformationmatrix.d.ts +0 -12
- package/utils/transformationmatrix.js +0 -123
- package/utils/vector3.d.ts +0 -11
- package/utils/vector3.js +0 -61
package/services/MapService.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IBaseService, IRocosSDKConfig, Map, RocosError } from '../models';
|
|
2
2
|
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
|
3
|
+
import { Observation } from '../models/maps/Panorama';
|
|
3
4
|
/**
|
|
4
5
|
* Integrations to retrieve data from the linked project in DroneDeploy
|
|
5
6
|
*/
|
|
@@ -17,24 +18,17 @@ export declare class MapService extends BaseServiceAbstract implements IBaseServ
|
|
|
17
18
|
/**
|
|
18
19
|
* List maps from the robot and the cloud
|
|
19
20
|
*
|
|
20
|
-
* if onlyRobot is true, only the maps from the robot will be returned
|
|
21
|
-
*
|
|
22
21
|
* @param projectId Project ID
|
|
23
22
|
* @param callsign Robot callsign
|
|
24
|
-
* @param options Options to filter the maps
|
|
25
23
|
* @returns All maps in the cloud
|
|
26
24
|
*/
|
|
27
|
-
list(projectId: string, callsign: string
|
|
28
|
-
|
|
29
|
-
}): Promise<Map[]>;
|
|
30
|
-
/**
|
|
31
|
-
* Creates a new DB for the project if it's missing
|
|
32
|
-
*
|
|
33
|
-
* has no effect if the DB already exists
|
|
25
|
+
list(projectId: string, callsign: string): Promise<Map[]>;
|
|
26
|
+
/** List maps to be deployed to a callsign
|
|
34
27
|
*
|
|
35
|
-
* @param projectId
|
|
28
|
+
* @param projectId
|
|
29
|
+
* @param callsign
|
|
36
30
|
*/
|
|
37
|
-
|
|
31
|
+
listDeployedMaps(projectId: string, callsign: string): Promise<Map[]>;
|
|
38
32
|
/**
|
|
39
33
|
* Creates a new map by merging two existing maps
|
|
40
34
|
* @param projectId Project ID
|
|
@@ -46,6 +40,12 @@ export declare class MapService extends BaseServiceAbstract implements IBaseServ
|
|
|
46
40
|
description?: string;
|
|
47
41
|
callsign: string;
|
|
48
42
|
}): Promise<void>;
|
|
43
|
+
/** Returns a map in its canonical form
|
|
44
|
+
*
|
|
45
|
+
* @param projectId Project ID
|
|
46
|
+
* @param mapId Map ID
|
|
47
|
+
*/
|
|
48
|
+
get(projectId: string, mapId: string): Promise<Map>;
|
|
49
49
|
/**
|
|
50
50
|
* Updates a maps metadata
|
|
51
51
|
* @param projectId Project ID
|
|
@@ -53,44 +53,90 @@ export declare class MapService extends BaseServiceAbstract implements IBaseServ
|
|
|
53
53
|
* @param options New metadata
|
|
54
54
|
*/
|
|
55
55
|
update(projectId: string, mapId: string, options: {
|
|
56
|
-
name: string;
|
|
57
56
|
description?: string;
|
|
58
57
|
callsign?: string;
|
|
59
58
|
}): Promise<void>;
|
|
60
59
|
/**
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* @see copyFromCloud
|
|
60
|
+
* Begins uploading a map from the agent
|
|
64
61
|
*
|
|
65
62
|
* @param projectId Project ID
|
|
66
63
|
* @param mapId Map ID
|
|
67
64
|
* @param callsign Robot callsign
|
|
65
|
+
* @param hash Map hash
|
|
68
66
|
*/
|
|
69
|
-
|
|
67
|
+
sendToCloud(projectId: string, mapId: string, callsign: string, hash: string): Promise<void>;
|
|
70
68
|
/**
|
|
71
|
-
* Deletes a map from the cloud
|
|
69
|
+
* Deletes a map from the cloud and all agents
|
|
72
70
|
* @param projectId
|
|
73
71
|
* @param mapId
|
|
74
72
|
*/
|
|
75
73
|
delete(projectId: string, mapId: string): Promise<void>;
|
|
76
74
|
/**
|
|
77
|
-
* Deletes a map from
|
|
75
|
+
* Deletes a map from a single agent.
|
|
76
|
+
*
|
|
77
|
+
* If the callsign does not have the map deployed, any local copy of the map will be deleted.
|
|
78
|
+
*
|
|
78
79
|
* @param projectId
|
|
79
80
|
* @param mapId
|
|
80
81
|
* @param callsign
|
|
82
|
+
* @param hash
|
|
81
83
|
*/
|
|
82
|
-
delete(projectId: string, mapId: string, callsign: string): Promise<void>;
|
|
84
|
+
delete(projectId: string, mapId: string, callsign: string, hash: string): Promise<void>;
|
|
83
85
|
/**
|
|
84
|
-
* Makes a copy of
|
|
85
|
-
*
|
|
86
|
-
* @see copyFromRobot
|
|
86
|
+
* Makes a copy of an uploaded map
|
|
87
87
|
*
|
|
88
88
|
* @param projectId Project ID
|
|
89
89
|
* @param mapId Map ID
|
|
90
90
|
* @param options Options to create the new map
|
|
91
91
|
*/
|
|
92
|
-
|
|
93
|
-
name: string;
|
|
92
|
+
copy(projectId: string, mapId: string, options: {
|
|
94
93
|
description?: string;
|
|
95
94
|
}): Promise<void>;
|
|
95
|
+
/** Deploy a map from the cloud to a robot
|
|
96
|
+
*
|
|
97
|
+
* @param projectId Project ID
|
|
98
|
+
* @param mapId Map ID
|
|
99
|
+
* @param callsign Robot callsign
|
|
100
|
+
*/
|
|
101
|
+
deploy(projectId: string, mapId: string, callsign: string): Promise<void>;
|
|
102
|
+
/** Get a GeoJSON representation of a map
|
|
103
|
+
*
|
|
104
|
+
* @param projectId Project ID
|
|
105
|
+
* @param mapId Map ID
|
|
106
|
+
* @param frameId Frame ID (optional)
|
|
107
|
+
*/
|
|
108
|
+
getGeoJSON(projectId: string, mapId: string, frameId?: string): Promise<unknown>;
|
|
109
|
+
/**
|
|
110
|
+
* Returns a Promise that resolves to an array of Observation objects for the given panorama ID.
|
|
111
|
+
*
|
|
112
|
+
* @param projectId The ID of the project the panorama belongs to.
|
|
113
|
+
* @param panoramaId The ID of the panorama to retrieve observations for.
|
|
114
|
+
* @returns A Promise that resolves to an array of Observation objects.
|
|
115
|
+
*/
|
|
116
|
+
listObservations(projectId: string, panoramaId: string): Promise<Observation[]>;
|
|
117
|
+
/**
|
|
118
|
+
* Creates new observations on a panorama.
|
|
119
|
+
*
|
|
120
|
+
* @param projectId The ID of the project the panorama belongs to.
|
|
121
|
+
* @param panoramaId The ID of the panorama to create observations for.
|
|
122
|
+
* @param observations An array of Observation objects to create.
|
|
123
|
+
* @returns A Promise that resolves when the observations have been created.
|
|
124
|
+
*/
|
|
125
|
+
createObservations(projectId: string, panoramaId: string, observations: Observation[]): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* Gets observations for a project.
|
|
128
|
+
*
|
|
129
|
+
* @param projectId The ID of the project the observations belongs to.
|
|
130
|
+
* @param key (optional) Filters on a key defined on the observation
|
|
131
|
+
* @param frameID (optional) Transforms on a seed frame
|
|
132
|
+
* @returns A list of observations
|
|
133
|
+
*/
|
|
134
|
+
getObservations(projectId: string, key?: string, frameID?: string): Promise<Observation[]>;
|
|
135
|
+
/**
|
|
136
|
+
* Lists available keys for all observations in a project.
|
|
137
|
+
*
|
|
138
|
+
* @param projectId The ID of the project the observations belongs to.
|
|
139
|
+
* @returns A list of observations
|
|
140
|
+
*/
|
|
141
|
+
getObservationsKeys(projectId: string): Promise<string[]>;
|
|
96
142
|
}
|
package/services/MapService.js
CHANGED
|
@@ -1,45 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const BaseServiceAbstract_1 = require("./BaseServiceAbstract");
|
|
7
|
-
const RocosLogger_1 = require("../logger/RocosLogger");
|
|
8
|
-
const formatServiceUrl_1 = require("../helpers/formatServiceUrl");
|
|
1
|
+
import { API_MAPS_COPY_URL, API_MAPS_DEPLOYED_URL, API_MAPS_DEPLOY_URL, API_MAPS_GEOJSON_URL, API_MAPS_MERGE_URL, API_MAPS_PANORAMA_OBSERVATIONS_URL, API_MAPS_URL, API_MAP_ID_URL, API_OBSERVATIONS_URL, API_OBSERVATION_KEYS_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';
|
|
9
6
|
/**
|
|
10
7
|
* Integrations to retrieve data from the linked project in DroneDeploy
|
|
11
8
|
*/
|
|
12
|
-
class MapService extends
|
|
9
|
+
export class MapService extends BaseServiceAbstract {
|
|
13
10
|
constructor(config) {
|
|
14
11
|
super(config);
|
|
15
|
-
this.logger =
|
|
12
|
+
this.logger = RocosLogger.getInstance(`MapService(${this.config.url})`);
|
|
16
13
|
}
|
|
17
14
|
getStatus() {
|
|
18
15
|
return true;
|
|
19
16
|
}
|
|
20
17
|
getError(e) {
|
|
21
|
-
return new
|
|
18
|
+
return new RocosError(e, errorCodes.MAPS_SERVICE_ERROR);
|
|
22
19
|
}
|
|
23
|
-
async list(projectId, callsign
|
|
24
|
-
|
|
25
|
-
const resp = await this.callGet(formatServiceUrl_1.formatServiceUrl(api_1.API_MAPS_URL, {
|
|
20
|
+
async list(projectId, callsign) {
|
|
21
|
+
const resp = await this.callGet(formatServiceUrl(API_MAPS_URL, {
|
|
26
22
|
url: this.config.url,
|
|
27
23
|
projectId,
|
|
28
|
-
}, this.config.insecure), 'Failed to get maps.', callsign ? { callsign
|
|
24
|
+
}, this.config.insecure), 'Failed to get maps.', callsign ? { callsign } : undefined);
|
|
29
25
|
return resp.maps;
|
|
30
26
|
}
|
|
31
|
-
/**
|
|
32
|
-
* Creates a new DB for the project if it's missing
|
|
33
|
-
*
|
|
34
|
-
* has no effect if the DB already exists
|
|
27
|
+
/** List maps to be deployed to a callsign
|
|
35
28
|
*
|
|
36
|
-
* @param projectId
|
|
29
|
+
* @param projectId
|
|
30
|
+
* @param callsign
|
|
37
31
|
*/
|
|
38
|
-
async
|
|
39
|
-
|
|
32
|
+
async listDeployedMaps(projectId, callsign) {
|
|
33
|
+
const safeCallsign = encodeURIComponent(callsign);
|
|
34
|
+
const resp = await this.callGet(formatServiceUrl(API_MAPS_DEPLOYED_URL, {
|
|
40
35
|
url: this.config.url,
|
|
41
36
|
projectId,
|
|
42
|
-
|
|
37
|
+
callsign: safeCallsign,
|
|
38
|
+
}, this.config.insecure), 'Failed to get deployed maps.');
|
|
39
|
+
return resp.maps;
|
|
43
40
|
}
|
|
44
41
|
/**
|
|
45
42
|
* Creates a new map by merging two existing maps
|
|
@@ -58,11 +55,23 @@ class MapService extends BaseServiceAbstract_1.BaseServiceAbstract {
|
|
|
58
55
|
description: options.description,
|
|
59
56
|
callsign: options.callsign,
|
|
60
57
|
};
|
|
61
|
-
return this.callPost(
|
|
58
|
+
return this.callPost(formatServiceUrl(API_MAPS_MERGE_URL, {
|
|
62
59
|
url: this.config.url,
|
|
63
60
|
projectId,
|
|
64
61
|
}, this.config.insecure), payload, 'Failed to merge maps.');
|
|
65
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
|
+
}
|
|
66
75
|
/**
|
|
67
76
|
* Updates a maps metadata
|
|
68
77
|
* @param projectId Project ID
|
|
@@ -70,50 +79,114 @@ class MapService extends BaseServiceAbstract_1.BaseServiceAbstract {
|
|
|
70
79
|
* @param options New metadata
|
|
71
80
|
*/
|
|
72
81
|
async update(projectId, mapId, options) {
|
|
73
|
-
return this.callPut(
|
|
82
|
+
return this.callPut(formatServiceUrl(API_MAP_ID_URL, {
|
|
74
83
|
url: this.config.url,
|
|
75
84
|
projectId,
|
|
76
85
|
mapId,
|
|
77
86
|
}, this.config.insecure), options, 'Failed to update map.');
|
|
78
87
|
}
|
|
79
88
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
* @see copyFromCloud
|
|
89
|
+
* Begins uploading a map from the agent
|
|
83
90
|
*
|
|
84
91
|
* @param projectId Project ID
|
|
85
92
|
* @param mapId Map ID
|
|
86
93
|
* @param callsign Robot callsign
|
|
94
|
+
* @param hash Map hash
|
|
87
95
|
*/
|
|
88
|
-
async
|
|
89
|
-
return this.callPost(
|
|
96
|
+
async sendToCloud(projectId, mapId, callsign, hash) {
|
|
97
|
+
return this.callPost(formatServiceUrl(API_MAP_ID_URL, {
|
|
90
98
|
url: this.config.url,
|
|
91
99
|
projectId,
|
|
92
100
|
mapId,
|
|
93
|
-
}, this.config.insecure), { callsign }, 'Failed to
|
|
101
|
+
}, this.config.insecure), { callsign, hash }, 'Failed to start map upload.');
|
|
94
102
|
}
|
|
95
|
-
async delete(projectId, mapId, callsign) {
|
|
96
|
-
return this.callDelete(
|
|
103
|
+
async delete(projectId, mapId, callsign, hash) {
|
|
104
|
+
return this.callDelete(formatServiceUrl(API_MAP_ID_URL, {
|
|
97
105
|
url: this.config.url,
|
|
98
106
|
projectId,
|
|
99
107
|
mapId,
|
|
100
|
-
}, this.config.insecure), 'Failed to delete map.', callsign ? { callsign } : {});
|
|
108
|
+
}, this.config.insecure), 'Failed to delete map.', callsign ? { callsign, hash } : {});
|
|
101
109
|
}
|
|
102
110
|
/**
|
|
103
|
-
* Makes a copy of
|
|
104
|
-
*
|
|
105
|
-
* @see copyFromRobot
|
|
111
|
+
* Makes a copy of an uploaded map
|
|
106
112
|
*
|
|
107
113
|
* @param projectId Project ID
|
|
108
114
|
* @param mapId Map ID
|
|
109
115
|
* @param options Options to create the new map
|
|
110
116
|
*/
|
|
111
|
-
async
|
|
112
|
-
return this.callPost(
|
|
117
|
+
async copy(projectId, mapId, options) {
|
|
118
|
+
return this.callPost(formatServiceUrl(API_MAPS_COPY_URL, {
|
|
113
119
|
url: this.config.url,
|
|
114
120
|
projectId,
|
|
115
121
|
mapId,
|
|
116
122
|
}, this.config.insecure), options, 'Failed to copy map.');
|
|
117
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
|
+
* @param frameId Frame ID (optional)
|
|
142
|
+
*/
|
|
143
|
+
async getGeoJSON(projectId, mapId, frameId) {
|
|
144
|
+
const params = {
|
|
145
|
+
url: this.config.url,
|
|
146
|
+
projectId,
|
|
147
|
+
mapId,
|
|
148
|
+
};
|
|
149
|
+
return this.callGet(formatServiceUrl(API_MAPS_GEOJSON_URL, params, this.config.insecure), 'Failed to get map GeoJSON.', frameId ? { frameID: frameId } : undefined);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Returns a Promise that resolves to an array of Observation objects for the given panorama ID.
|
|
153
|
+
*
|
|
154
|
+
* @param projectId The ID of the project the panorama belongs to.
|
|
155
|
+
* @param panoramaId The ID of the panorama to retrieve observations for.
|
|
156
|
+
* @returns A Promise that resolves to an array of Observation objects.
|
|
157
|
+
*/
|
|
158
|
+
listObservations(projectId, panoramaId) {
|
|
159
|
+
return this.callGet(formatServiceUrl(API_MAPS_PANORAMA_OBSERVATIONS_URL, { url: this.config.url, projectId, panoramaId }, this.config.insecure), 'Failed to list observations.');
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Creates new observations on a panorama.
|
|
163
|
+
*
|
|
164
|
+
* @param projectId The ID of the project the panorama belongs to.
|
|
165
|
+
* @param panoramaId The ID of the panorama to create observations for.
|
|
166
|
+
* @param observations An array of Observation objects to create.
|
|
167
|
+
* @returns A Promise that resolves when the observations have been created.
|
|
168
|
+
*/
|
|
169
|
+
createObservations(projectId, panoramaId, observations) {
|
|
170
|
+
return this.callPut(formatServiceUrl(API_MAPS_PANORAMA_OBSERVATIONS_URL, { url: this.config.url, projectId, panoramaId }, this.config.insecure), observations, 'Failed to update observations.');
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Gets observations for a project.
|
|
174
|
+
*
|
|
175
|
+
* @param projectId The ID of the project the observations belongs to.
|
|
176
|
+
* @param key (optional) Filters on a key defined on the observation
|
|
177
|
+
* @param frameID (optional) Transforms on a seed frame
|
|
178
|
+
* @returns A list of observations
|
|
179
|
+
*/
|
|
180
|
+
getObservations(projectId, key = '', frameID = '') {
|
|
181
|
+
return this.callGet(formatServiceUrl(API_OBSERVATIONS_URL, { url: this.config.url, projectId }, this.config.insecure), 'Failed to get observations.', { key, frameID });
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Lists available keys for all observations in a project.
|
|
185
|
+
*
|
|
186
|
+
* @param projectId The ID of the project the observations belongs to.
|
|
187
|
+
* @returns A list of observations
|
|
188
|
+
*/
|
|
189
|
+
getObservationsKeys(projectId) {
|
|
190
|
+
return this.callGet(formatServiceUrl(API_OBSERVATION_KEYS_URL, { url: this.config.url, projectId }, this.config.insecure), 'Failed to get observation keys.');
|
|
191
|
+
}
|
|
118
192
|
}
|
|
119
|
-
exports.MapService = MapService;
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.PlatFormTimeService = void 0;
|
|
4
|
-
const RocosLogger_1 = require("../logger/RocosLogger");
|
|
5
|
-
const standardDeviation_1 = require("../helpers/standardDeviation");
|
|
1
|
+
import { RocosLogger } from '../logger/RocosLogger';
|
|
2
|
+
import { standardDeviation } from '../helpers/standardDeviation';
|
|
6
3
|
const NUMBER_OF_SERVER_TIME_USED_TO_CALIBRATE = 5;
|
|
7
4
|
const MAX_CLIENT_WAITING_TIME_STANDARD_DEVIATION_ALLOWED = 100; // 100 miliseconds
|
|
8
5
|
const KEY_GR_PLATFORM_TIME_OFFSET = 'gr_platformTimeOffset';
|
|
9
6
|
const KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT = 'gr_lastPlatformTimeSyncedAt';
|
|
10
7
|
const GR_PLATFORM_TIME_TTL = 30 * 60 * 1000; // 30 minutes
|
|
11
|
-
class PlatFormTimeService {
|
|
8
|
+
export class PlatFormTimeService {
|
|
12
9
|
// Make this a singleton, so that we don't have multi platform time
|
|
13
10
|
constructor(timeSyncerService) {
|
|
14
11
|
this.backoffTimeouts = [5 * 1000, 30 * 1000, 60 * 1000, 300 * 1000]; // in miliseconds
|
|
@@ -16,8 +13,8 @@ class PlatFormTimeService {
|
|
|
16
13
|
this.backoffFailCount = 0;
|
|
17
14
|
this.serverTimeOffset = 0;
|
|
18
15
|
this.lastPlatformTimeSyncedAt = 0;
|
|
19
|
-
this.logger =
|
|
20
|
-
if (window
|
|
16
|
+
this.logger = RocosLogger.getInstance('PlatformTimeService');
|
|
17
|
+
if (window?.localStorage) {
|
|
21
18
|
this.lastPlatformTimeSyncedAt = Number(window.localStorage.getItem(KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT)) || 0;
|
|
22
19
|
this.serverTimeOffset = Number(window.localStorage.getItem(KEY_GR_PLATFORM_TIME_OFFSET)) || 0;
|
|
23
20
|
}
|
|
@@ -101,7 +98,7 @@ class PlatFormTimeService {
|
|
|
101
98
|
}, delay);
|
|
102
99
|
}
|
|
103
100
|
isReliableServerTime(platformTimeMeasurements) {
|
|
104
|
-
const stdDeviation =
|
|
101
|
+
const stdDeviation = standardDeviation(
|
|
105
102
|
// get the standardDeviation of the client waiting time
|
|
106
103
|
platformTimeMeasurements.map((x) => x.clientTimeStampEnd - x.clientTimeStampStart));
|
|
107
104
|
this.logger.debug('standard deviation', stdDeviation);
|
|
@@ -117,7 +114,7 @@ class PlatFormTimeService {
|
|
|
117
114
|
calculateOffset(platformTimeMeasurements) {
|
|
118
115
|
// Timestamp when Received the Response - Time Request Duration / 2 - Timestamp within the Response .
|
|
119
116
|
let totalServerTimeOffset = 0;
|
|
120
|
-
const measurementsWithValues = platformTimeMeasurements.filter((x) => !!
|
|
117
|
+
const measurementsWithValues = platformTimeMeasurements.filter((x) => !!x?.serverTime);
|
|
121
118
|
measurementsWithValues.forEach((x) => {
|
|
122
119
|
// eslint-disable-next-line operator-linebreak
|
|
123
120
|
totalServerTimeOffset +=
|
|
@@ -132,7 +129,7 @@ class PlatFormTimeService {
|
|
|
132
129
|
this.isSyncing = false;
|
|
133
130
|
this.serverTimeOffset = timeOffset;
|
|
134
131
|
this.lastPlatformTimeSyncedAt = Date.now();
|
|
135
|
-
if (window
|
|
132
|
+
if (window?.localStorage) {
|
|
136
133
|
window.localStorage.setItem(KEY_GR_PLATFORM_TIME_OFFSET, String(this.serverTimeOffset));
|
|
137
134
|
window.localStorage.setItem(KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT, String(this.lastPlatformTimeSyncedAt));
|
|
138
135
|
}
|
|
@@ -157,4 +154,3 @@ class PlatFormTimeService {
|
|
|
157
154
|
return this.timeSyncerService.getServerTime();
|
|
158
155
|
}
|
|
159
156
|
}
|
|
160
|
-
exports.PlatFormTimeService = PlatFormTimeService;
|
|
@@ -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
|
+
});
|