@dronedeploy/rocos-js-sdk 1.0.0-alpha-2 → 2.6.1
Sign up to get free protection for your applications and to get access to all the features.
- package/IRocosSDK.js +5 -1
- package/README.md +0 -18
- package/RocosSDK.js +95 -93
- package/api/StreamRegister.d.ts +1 -1
- package/api/StreamRegister.js +12 -23
- package/api/atoms/StreamHeartbeat.js +7 -3
- package/api/streams/caller/CallerStream.d.ts +6 -6
- package/api/streams/caller/CallerStream.js +49 -41
- package/api/streams/caller/CallerStreamAbstract.d.ts +11 -6
- package/api/streams/caller/CallerStreamAbstract.js +67 -55
- package/api/streams/caller/CallerStreamNode.d.ts +6 -6
- package/api/streams/caller/CallerStreamNode.js +61 -48
- package/api/streams/command/CommandStream.d.ts +4 -2
- package/api/streams/command/CommandStream.js +30 -28
- package/api/streams/command/CommandStreamAbstract.d.ts +8 -4
- package/api/streams/command/CommandStreamAbstract.js +42 -33
- package/api/streams/command/CommandStreamNode.d.ts +4 -2
- package/api/streams/command/CommandStreamNode.js +40 -16
- package/api/streams/control/ControlStream.d.ts +6 -4
- package/api/streams/control/ControlStream.js +36 -30
- package/api/streams/control/ControlStreamAbstract.d.ts +9 -6
- package/api/streams/control/ControlStreamAbstract.js +54 -57
- package/api/streams/control/ControlStreamNode.d.ts +5 -3
- package/api/streams/control/ControlStreamNode.js +44 -19
- package/api/streams/fileAccessor/FileAccessorStream.d.ts +4 -2
- package/api/streams/fileAccessor/FileAccessorStream.js +57 -42
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.d.ts +9 -4
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.js +48 -28
- package/api/streams/fileAccessor/FileAccessorStreamNode.d.ts +3 -1
- package/api/streams/fileAccessor/FileAccessorStreamNode.js +53 -23
- package/api/streams/search/SearchStream.d.ts +5 -2
- package/api/streams/search/SearchStream.js +74 -50
- package/api/streams/search/SearchStreamAbstract.d.ts +9 -4
- package/api/streams/search/SearchStreamAbstract.js +35 -33
- package/api/streams/search/SearchStreamNode.d.ts +5 -2
- package/api/streams/search/SearchStreamNode.js +48 -23
- package/api/streams/telemetry/TelemetryStream.d.ts +4 -4
- package/api/streams/telemetry/TelemetryStream.js +78 -49
- package/api/streams/telemetry/TelemetryStreamAbstract.d.ts +11 -8
- package/api/streams/telemetry/TelemetryStreamAbstract.js +145 -126
- package/api/streams/telemetry/TelemetryStreamNode.d.ts +5 -5
- package/api/streams/telemetry/TelemetryStreamNode.js +64 -44
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.d.ts +10 -5
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.js +20 -37
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.d.ts +13 -10
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.js +37 -37
- package/constants/api.d.ts +1 -6
- package/constants/api.js +126 -126
- package/constants/grpc.js +8 -5
- package/constants/identifier.js +9 -6
- package/constants/timezones.d.ts +1 -1
- package/constants/timezones.js +4 -1
- package/demo/angular/.editorconfig +16 -0
- package/demo/angular/.eslintignore +4 -0
- package/demo/angular/.eslintrc.json +50 -0
- package/demo/angular/README.md +36 -0
- package/demo/angular/angular.json +132 -0
- package/demo/angular/karma.conf.js +44 -0
- package/demo/angular/package.json +41 -0
- package/demo/angular/src/app/app.component.css +0 -0
- package/demo/angular/src/app/app.component.html +9 -0
- package/demo/angular/src/app/app.component.ts +10 -0
- package/demo/angular/src/app/app.module.ts +38 -0
- package/demo/angular/src/app/components/assets/assets.component.css +0 -0
- package/demo/angular/src/app/components/assets/assets.component.html +29 -0
- package/demo/angular/src/app/components/assets/assets.component.ts +107 -0
- package/demo/angular/src/app/components/auth/auth.component.css +0 -0
- package/demo/angular/src/app/components/auth/auth.component.html +27 -0
- package/demo/angular/src/app/components/auth/auth.component.ts +33 -0
- package/demo/angular/src/app/components/caller/caller.component.css +0 -0
- package/demo/angular/src/app/components/caller/caller.component.html +22 -0
- package/demo/angular/src/app/components/caller/caller.component.ts +61 -0
- package/demo/angular/src/app/components/command/command.component.css +0 -0
- package/demo/angular/src/app/components/command/command.component.html +22 -0
- package/demo/angular/src/app/components/command/command.component.ts +60 -0
- package/demo/angular/src/app/components/integrations/integrations.component.ts +43 -0
- package/demo/angular/src/app/components/robots/robots.component.css +0 -0
- package/demo/angular/src/app/components/robots/robots.component.html +13 -0
- package/demo/angular/src/app/components/robots/robots.component.ts +26 -0
- package/demo/angular/src/app/components/sdk/sdk.component.css +0 -0
- package/demo/angular/src/app/components/sdk/sdk.component.html +43 -0
- package/demo/angular/src/app/components/sdk/sdk.component.ts +50 -0
- package/demo/angular/src/app/components/subscription/subscription.component.css +0 -0
- package/demo/angular/src/app/components/subscription/subscription.component.html +6 -0
- package/demo/angular/src/app/components/subscription/subscription.component.ts +40 -0
- package/demo/angular/src/app/components/telemetry/telemetry.component.css +0 -0
- package/demo/angular/src/app/components/telemetry/telemetry.component.html +19 -0
- package/demo/angular/src/app/components/telemetry/telemetry.component.ts +61 -0
- package/demo/angular/src/app/components/token/token.component.css +0 -0
- package/demo/angular/src/app/components/token/token.component.html +10 -0
- package/demo/angular/src/app/components/token/token.component.ts +18 -0
- package/demo/angular/src/app/components/video/p2pvideo/index.ts +646 -0
- package/demo/angular/src/app/components/video/video-source.ts +315 -0
- package/demo/angular/src/app/components/video/video.component.css +6 -0
- package/demo/angular/src/app/components/video/video.component.html +54 -0
- package/demo/angular/src/app/components/video/video.component.ts +151 -0
- package/demo/angular/src/app/services/sdk.service.ts +193 -0
- 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 +16 -0
- package/demo/angular/src/environments/environment.prod.ts +3 -0
- package/demo/angular/src/environments/environment.ts +16 -0
- package/demo/angular/src/favicon.ico +0 -0
- package/demo/angular/src/index.html +15 -0
- package/demo/angular/src/main.ts +7 -0
- package/demo/angular/src/polyfills.ts +53 -0
- package/demo/angular/src/styles.css +198 -0
- package/demo/angular/tsconfig.app.json +15 -0
- package/demo/angular/tsconfig.json +39 -0
- package/demo/html/README.md +8 -0
- package/demo/html/assets/HKGrotesk-Bold.otf +0 -0
- package/demo/html/assets/HKGrotesk-Regular.otf +0 -0
- package/demo/html/assets/logo.svg +16 -0
- package/demo/html/favicon.ico +0 -0
- package/demo/html/index.html +416 -0
- package/demo/html/rocos-js-sdk.js +3 -0
- package/demo/html/rocos-js-sdk.js.LICENSE.txt +8 -0
- package/demo/html/rocos-js-sdk.js.map +1 -0
- package/demo/html/styles.css +190 -0
- package/demo/node/README.md +17 -0
- package/demo/node/index.js +134 -0
- package/demo/node/package.json +8 -0
- package/demo/react/.env +1 -0
- package/demo/react/.env.dist +1 -0
- package/demo/react/.eslintrc.json +46 -0
- package/demo/react/README.md +65 -0
- package/demo/react/package.json +60 -0
- package/demo/react/public/favicon.ico +0 -0
- package/demo/react/public/index.html +43 -0
- package/demo/react/public/logo192.png +0 -0
- package/demo/react/public/logo512.png +0 -0
- package/demo/react/public/manifest.json +25 -0
- package/demo/react/public/robots.txt +3 -0
- package/demo/react/src/App.css +190 -0
- package/demo/react/src/App.tsx +31 -0
- package/demo/react/src/actions/index.ts +8 -0
- package/demo/react/src/actions/sdkActions.ts +62 -0
- 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 +16 -0
- package/demo/react/src/components/AuthForm.tsx +76 -0
- package/demo/react/src/components/CallerBox.tsx +53 -0
- package/demo/react/src/components/CallerForm.tsx +98 -0
- package/demo/react/src/components/CommandBox.tsx +47 -0
- package/demo/react/src/components/CommandForm.tsx +98 -0
- package/demo/react/src/components/RobotsForm.tsx +51 -0
- package/demo/react/src/components/SubscriptionBox.tsx +55 -0
- package/demo/react/src/components/TelemetryForm.tsx +98 -0
- package/demo/react/src/components/TokenForm.tsx +39 -0
- package/demo/react/src/config.json +14 -0
- package/demo/react/src/controllers/RocosSDKController.ts +48 -0
- package/demo/react/src/helpers/deepEqual.ts +27 -0
- package/demo/react/src/hooks/useInput.ts +29 -0
- package/demo/react/src/index.css +11 -0
- package/demo/react/src/index.tsx +26 -0
- package/demo/react/src/react-app-env.d.ts +1 -0
- package/demo/react/src/reducers/sdkReducer.ts +133 -0
- package/demo/react/src/reportWebVitals.ts +15 -0
- package/demo/react/src/selectors/sdkSelector.ts +11 -0
- package/demo/react/src/setupTests.ts +5 -0
- package/demo/react/src/store.ts +14 -0
- package/demo/react/tsconfig.json +26 -0
- package/demo/sdk-sizer/dist/sdk-sizer/3rdpartylicenses.txt +975 -0
- package/demo/sdk-sizer/dist/sdk-sizer/favicon.ico +0 -0
- package/demo/sdk-sizer/dist/sdk-sizer/index.html +12 -0
- package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js +2 -0
- package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js.map +1 -0
- package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js +2 -0
- package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js.map +1 -0
- package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js +2 -0
- package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js.map +1 -0
- package/demo/sdk-sizer/dist/sdk-sizer/stats.json +1 -0
- package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css +2 -0
- package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css.map +1 -0
- package/grpc/file-accessor/filagree_grpc_pb.d.ts +41 -0
- package/grpc/file-accessor/filagree_grpc_pb.js +121 -0
- package/grpc/file-accessor/filagree_pb.d.ts +339 -0
- package/grpc/file-accessor/filagree_pb.js +2261 -0
- package/grpc/file-accessor/filagree_pb_service.d.ts +115 -0
- package/grpc/file-accessor/filagree_pb_service.js +257 -0
- package/grpc/rambo/rambo.v1_grpc_pb.d.ts +39 -0
- package/grpc/rambo/rambo.v1_grpc_pb.js +73 -0
- package/grpc/rambo/rambo.v1_pb.d.ts +365 -0
- package/grpc/rambo/rambo.v1_pb.js +2469 -0
- package/grpc/rambo/rambo.v1_pb_service.d.ts +76 -0
- package/grpc/rambo/rambo.v1_pb_service.js +138 -0
- package/grpc/rambo/uri.v1_grpc_pb.d.ts +1 -0
- package/grpc/rambo/uri.v1_grpc_pb.js +1 -0
- package/grpc/rambo/uri.v1_pb.d.ts +80 -0
- package/grpc/rambo/uri.v1_pb.js +563 -0
- package/grpc/rambo/uri.v1_pb_service.d.ts +3 -0
- package/grpc/rambo/uri.v1_pb_service.js +3 -0
- package/grpc/robot-control/conker_grpc_pb.d.ts +46 -0
- package/grpc/robot-control/conker_grpc_pb.js +143 -0
- package/grpc/robot-control/conker_pb.d.ts +168 -0
- package/grpc/robot-control/conker_pb.js +1287 -0
- package/grpc/robot-control/conker_pb_service.d.ts +126 -0
- package/grpc/robot-control/conker_pb_service.js +301 -0
- package/grpc/serviette/common.v1_grpc_pb.d.ts +1 -0
- package/grpc/serviette/common.v1_grpc_pb.js +1 -0
- package/grpc/serviette/common.v1_pb.d.ts +8 -0
- package/grpc/serviette/common.v1_pb.js +45 -0
- package/grpc/serviette/common.v1_pb_service.d.ts +3 -0
- package/grpc/serviette/common.v1_pb_service.js +3 -0
- package/grpc/serviette/serviette.v1_grpc_pb.d.ts +137 -0
- package/grpc/serviette/serviette.v1_grpc_pb.js +331 -0
- package/grpc/serviette/serviette.v1_pb.d.ts +884 -0
- package/grpc/serviette/serviette.v1_pb.js +6363 -0
- package/grpc/serviette/serviette.v1_pb_service.d.ts +278 -0
- package/grpc/serviette/serviette.v1_pb_service.js +699 -0
- package/grpc/serviette/uri.v1_grpc_pb.d.ts +1 -0
- package/grpc/serviette/uri.v1_grpc_pb.js +1 -0
- package/grpc/serviette/uri.v1_pb.d.ts +102 -0
- package/grpc/serviette/uri.v1_pb.js +741 -0
- package/grpc/serviette/uri.v1_pb_service.d.ts +3 -0
- package/grpc/serviette/uri.v1_pb_service.js +3 -0
- package/grpc/slowlane/slowlane_grpc_pb.d.ts +38 -0
- package/grpc/slowlane/slowlane_grpc_pb.js +132 -0
- package/grpc/slowlane/slowlane_pb.d.ts +373 -0
- package/grpc/slowlane/slowlane_pb.js +2908 -0
- package/grpc/slowlane/slowlane_pb_service.d.ts +112 -0
- package/grpc/slowlane/slowlane_pb_service.js +189 -0
- package/grpc/teletubby/teletubby_grpc_pb.d.ts +73 -0
- package/grpc/teletubby/teletubby_grpc_pb.js +231 -0
- package/grpc/teletubby/teletubby_pb.d.ts +647 -0
- package/grpc/teletubby/teletubby_pb.js +4786 -0
- package/grpc/teletubby/teletubby_pb_service.d.ts +193 -0
- package/grpc/teletubby/teletubby_pb_service.js +436 -0
- package/grpc/video/pigeon_grpc_pb.d.ts +59 -0
- package/grpc/video/pigeon_grpc_pb.js +180 -0
- package/grpc/video/pigeon_pb.d.ts +237 -0
- package/grpc/video/pigeon_pb.js +1775 -0
- package/grpc/video/pigeon_pb_service.d.ts +152 -0
- package/grpc/video/pigeon_pb_service.js +292 -0
- package/helpers/arrayRemove.js +6 -2
- package/helpers/arrayUnique.js +6 -2
- package/helpers/average.js +7 -2
- package/helpers/cleanObject.js +19 -17
- package/helpers/enviroment.js +11 -4
- package/helpers/flattenCallsignsLookup.d.ts +1 -1
- package/helpers/flattenCallsignsLookup.js +5 -1
- package/helpers/flattenObject.js +5 -1
- package/helpers/formatServiceUrl.js +5 -1
- package/helpers/generateUUID.js +7 -3
- package/helpers/getSubscriptionsDifference.d.ts +3 -3
- package/helpers/getSubscriptionsDifference.js +10 -6
- package/helpers/getUniqueConfigKey.js +6 -1
- package/helpers/getUniqueId.js +7 -3
- package/helpers/getUnixTimeMs.js +5 -1
- package/helpers/index.d.ts +1 -1
- package/helpers/index.js +15 -3
- package/helpers/nanosecondToMillisecond.d.ts +1 -1
- package/helpers/nanosecondToMillisecond.js +6 -5
- package/helpers/randomString.js +5 -1
- package/helpers/standardDeviation.js +8 -4
- package/helpers/stringToUint8Array.js +7 -3
- package/helpers/uint8ArrayToString.js +8 -3
- package/index.js +19 -7
- package/logger/RocosLogger.js +44 -18
- package/models/ExportDataQuery.js +5 -1
- package/models/ExternalProject.js +5 -1
- package/models/IBaseService.d.ts +0 -1
- package/models/IBaseService.js +2 -1
- package/models/IConfigGroup.js +2 -1
- package/models/IDebugLevel.d.ts +1 -1
- package/models/IDebugLevel.js +2 -1
- package/models/IExportDataQuery.js +2 -1
- package/models/IFunctionConfig.js +2 -1
- package/models/IInvitation.d.ts +1 -1
- package/models/IInvitation.js +2 -1
- package/models/IInvitationExists.js +2 -1
- package/models/IOperation.js +2 -1
- package/models/IPersonalAccessToken.js +2 -1
- package/models/IProject.js +2 -1
- package/models/IProjectApplication.js +2 -1
- package/models/IRobot.d.ts +0 -1
- package/models/IRobot.js +2 -1
- package/models/IRobotConfig.js +2 -1
- package/models/IRobotPlugin.js +2 -1
- package/models/IRobotTemplate.js +2 -1
- package/models/IRocosSDKConfig.d.ts +9 -3
- package/models/IRocosSDKConfig.js +2 -1
- package/models/ISignupParams.d.ts +8 -0
- package/models/ISignupParams.js +2 -0
- package/models/ISource.js +2 -1
- package/models/IStream.js +2 -1
- package/models/IStreamConfig.js +2 -1
- package/models/IStreamOptions.js +2 -1
- package/models/IStreamSource.js +2 -1
- package/models/ISubscriberStatus.js +2 -1
- package/models/ITelemetryStreamConfig.js +2 -1
- package/models/IToken.d.ts +3 -7
- package/models/IToken.js +2 -1
- package/models/IWidget.js +2 -1
- package/models/IWidgetLineGroup.js +2 -1
- package/models/ResponseLevelEnum.d.ts +0 -4
- package/models/ResponseLevelEnum.js +5 -6
- package/models/Robot.d.ts +0 -1
- package/models/Robot.js +5 -1
- package/models/RobotConfig.js +5 -1
- package/models/RobotPlugin.js +5 -1
- package/models/RobotTemplate.js +14 -9
- package/models/RocosError.js +6 -2
- package/models/ServiceEnum.js +5 -2
- package/models/Stream.js +8 -4
- package/models/StreamOptions.js +5 -1
- package/models/StreamSource.js +7 -3
- package/models/SubscriberStatusEnum.js +5 -2
- package/models/Token.d.ts +4 -36
- package/models/Token.js +11 -74
- package/models/Widget.js +8 -4
- package/models/WidgetLineGroup.js +5 -1
- package/models/asset-storage/AssetModelItem.js +2 -1
- package/models/caller/IRocosCallerMessageChunk.d.ts +2 -3
- package/models/caller/IRocosCallerMessageChunk.js +2 -1
- package/models/caller/IRocosCallerMessageChunks.d.ts +3 -2
- package/models/caller/IRocosCallerMessageChunks.js +2 -1
- package/models/caller/IRocosCallerMessageHeartbeat.d.ts +2 -3
- package/models/caller/IRocosCallerMessageHeartbeat.js +2 -1
- package/models/caller/IRocosCallerMessageResponse.d.ts +2 -3
- package/models/caller/IRocosCallerMessageResponse.js +2 -1
- package/models/caller/IRocosCallerMessageResponseAck.d.ts +2 -16
- package/models/caller/IRocosCallerMessageResponseAck.js +2 -13
- package/models/caller/IRocosCallerMessageResponseResult.d.ts +2 -15
- package/models/caller/IRocosCallerMessageResponseResult.js +2 -12
- package/models/caller/IRocosCallerMessageResponseUid.d.ts +2 -10
- package/models/caller/IRocosCallerMessageResponseUid.js +2 -7
- package/models/caller/IRocosCallerMessageResponses.d.ts +3 -2
- package/models/caller/IRocosCallerMessageResponses.js +2 -1
- package/models/caller/RocosCallerResultStatus.d.ts +1 -11
- package/models/caller/RocosCallerResultStatus.js +5 -12
- package/models/callsigns/CallsignsEnums.d.ts +3 -3
- package/models/callsigns/CallsignsEnums.js +14 -11
- package/models/callsigns/CallsignsLookup.js +15 -10
- package/models/callsigns/CallsignsQuery.js +5 -1
- package/models/callsigns/CallsignsQueryPredicate.js +5 -1
- package/models/command/IRocosCommandMessageHeartbeat.d.ts +2 -1
- package/models/command/IRocosCommandMessageHeartbeat.js +2 -1
- package/models/command/IRocosCommandMessageResponse.d.ts +2 -55
- package/models/command/IRocosCommandMessageResponse.js +2 -29
- package/models/command/RocosCommandResultStatus.d.ts +1 -11
- package/models/command/RocosCommandResultStatus.js +5 -12
- package/models/file/FileEnums.d.ts +4 -4
- package/models/file/FileEnums.js +12 -9
- package/models/index.d.ts +31 -5
- package/models/index.js +113 -75
- package/models/integrations/Overlay.js +2 -1
- package/models/integrations/Plan.js +2 -1
- package/models/maps/Map.d.ts +0 -1
- package/models/maps/Map.js +2 -1
- package/models/message/IRocosCallerMessage.js +2 -1
- package/models/message/IRocosChangeMessage.js +2 -1
- package/models/message/IRocosCommandMessage.js +2 -1
- package/models/message/IRocosControlMessage.js +2 -1
- package/models/message/IRocosOpResultMessage.d.ts +2 -2
- package/models/message/IRocosOpResultMessage.js +2 -1
- package/models/message/IRocosSearchMessage.js +2 -1
- package/models/message/IRocosSearchRowMessage.js +2 -1
- package/models/message/IRocosSearchStatusMessage.js +2 -1
- package/models/message/IRocosTelemetryMessage.d.ts +7 -12
- package/models/message/IRocosTelemetryMessage.js +2 -1
- package/models/message/IStreamStatusMessage.js +2 -1
- package/models/message/RocosCallerMessage.d.ts +4 -2
- package/models/message/RocosCallerMessage.js +15 -24
- package/models/message/RocosCommandMessage.d.ts +3 -2
- package/models/message/RocosCommandMessage.js +8 -5
- package/models/message/RocosControlMessage.d.ts +1 -1
- package/models/message/RocosControlMessage.js +10 -6
- package/models/message/RocosOpResultMessage.d.ts +2 -3
- package/models/message/RocosOpResultMessage.js +10 -6
- package/models/message/RocosSearchMessage.d.ts +1 -1
- package/models/message/RocosSearchMessage.js +9 -5
- package/models/message/RocosSearchRowMessage.d.ts +1 -1
- package/models/message/RocosSearchRowMessage.js +12 -8
- package/models/message/RocosTelemetryMessage.d.ts +23 -9
- package/models/message/RocosTelemetryMessage.js +93 -51
- package/models/params/ICallerParams.d.ts +1 -2
- package/models/params/ICallerParams.js +2 -1
- package/models/params/ICommandParams.js +2 -1
- package/models/params/IControlParams.d.ts +1 -1
- package/models/params/IControlParams.js +2 -1
- package/models/params/IFileAccessorParams.js +2 -1
- package/models/params/ISearchParams.js +2 -1
- package/models/params/ITelemetryParams.d.ts +1 -1
- package/models/params/ITelemetryParams.js +2 -1
- package/models/params/IWebRTCSignallingParams.js +2 -1
- package/models/projects/ProjectUser.js +2 -1
- package/models/schedule/IScheduleAction.d.ts +1 -1
- package/models/schedule/IScheduleAction.js +5 -2
- package/models/schedule/IScheduleInfo.js +2 -1
- package/models/schedule/IScheduleJob.js +2 -1
- package/models/search/SearchQueryFilter.js +5 -1
- package/models/search/SearchStreamQuery.js +5 -1
- package/models/stream/IBaseStream.js +2 -1
- package/models/stream/ICallerStream.js +2 -1
- package/models/stream/ICommandStream.js +2 -1
- package/models/stream/IControlStream.js +2 -1
- package/models/stream/IFileAccessorStream.d.ts +2 -1
- package/models/stream/IFileAccessorStream.js +2 -1
- package/models/stream/ISearchStream.js +2 -1
- package/models/stream/ITelemetryStream.js +2 -1
- package/models/stream/IWebRTCSignallingStream.d.ts +16 -51
- package/models/stream/IWebRTCSignallingStream.js +7 -1
- package/models/types.d.ts +5 -5
- package/models/types.js +2 -1
- package/node/RocosSDKNode.js +80 -75
- package/node/index.js +19 -7
- package/package.json +9 -6
- package/services/AssetStorageService.d.ts +0 -7
- package/services/AssetStorageService.js +24 -29
- package/services/AuthService.d.ts +27 -59
- package/services/AuthService.js +86 -167
- package/services/BaseServiceAbstract.d.ts +13 -11
- package/services/BaseServiceAbstract.js +19 -17
- package/services/CallerService.d.ts +17 -5
- package/services/CallerService.js +65 -22
- package/services/CallerServiceNode.js +8 -4
- package/services/CommandService.d.ts +17 -5
- package/services/CommandService.js +62 -19
- package/services/CommandServiceNode.js +8 -4
- package/services/ConfigGroupService.js +21 -17
- package/services/ControlService.d.ts +17 -5
- package/services/ControlService.js +65 -22
- package/services/ControlServiceNode.js +8 -4
- package/services/DashboardService.js +24 -20
- package/services/EventService.js +17 -13
- package/services/FileAccessorService.d.ts +18 -4
- package/services/FileAccessorService.js +62 -14
- package/services/FileAccessorServiceNode.js +8 -4
- package/services/FunctionService.js +21 -17
- package/services/IntegrationService.js +19 -14
- package/services/MapService.d.ts +23 -36
- package/services/MapService.js +40 -70
- package/services/PlatformTimeService.js +12 -8
- package/services/ProfileService.js +40 -36
- package/services/ProjectService.js +27 -23
- package/services/RobotService.d.ts +6 -2
- package/services/RobotService.js +55 -48
- package/services/ScheduleService.js +14 -10
- package/services/SearchService.d.ts +17 -4
- package/services/SearchService.js +59 -24
- package/services/SearchServiceNode.js +8 -4
- 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 +30 -26
- package/services/TelemetryService.d.ts +17 -14
- package/services/TelemetryService.js +93 -91
- package/services/TelemetryServiceNode.js +8 -4
- package/services/TimeSyncerService.js +13 -9
- package/services/UserService.js +41 -37
- package/services/WebRTCSignallingService.d.ts +4 -4
- package/services/WebRTCSignallingService.js +27 -24
- package/services/WorkflowService.js +20 -16
- package/services/index.js +38 -26
- package/store/RocosStore.js +15 -9
- package/utils/axisangle.d.ts +18 -0
- package/utils/axisangle.js +48 -0
- package/utils/eulerangles.d.ts +22 -0
- package/utils/eulerangles.js +133 -0
- package/utils/helperfunctions.d.ts +5 -0
- package/utils/helperfunctions.js +50 -0
- package/utils/localtransform.d.ts +17 -0
- package/utils/localtransform.js +50 -0
- package/utils/localtransformtree.d.ts +17 -0
- package/utils/localtransformtree.js +88 -0
- package/utils/misc.d.ts +17 -0
- package/utils/misc.js +23 -0
- package/utils/positionvector.d.ts +13 -0
- package/utils/positionvector.js +79 -0
- package/utils/quaternion.d.ts +20 -0
- package/utils/quaternion.js +62 -0
- package/utils/rotationmatrix.d.ts +23 -0
- package/utils/rotationmatrix.js +262 -0
- package/utils/transformationmatrix.d.ts +12 -0
- package/utils/transformationmatrix.js +123 -0
- package/utils/vector3.d.ts +11 -0
- package/utils/vector3.js +61 -0
- package/constants/auth.d.ts +0 -2
- package/constants/auth.js +0 -2
- package/grpc/conker_pb.client.d.ts +0 -78
- package/grpc/conker_pb.client.js +0 -55
- package/grpc/conker_pb.d.ts +0 -141
- package/grpc/conker_pb.grpc-client.d.ts +0 -81
- package/grpc/conker_pb.grpc-client.js +0 -58
- package/grpc/conker_pb.js +0 -104
- package/grpc/filagree_pb.client.d.ts +0 -68
- package/grpc/filagree_pb.client.js +0 -48
- package/grpc/filagree_pb.d.ts +0 -404
- package/grpc/filagree_pb.grpc-client.d.ts +0 -69
- package/grpc/filagree_pb.grpc-client.js +0 -51
- package/grpc/filagree_pb.js +0 -329
- package/grpc/google/protobuf/descriptor_pb.d.ts +0 -1798
- package/grpc/google/protobuf/descriptor_pb.js +0 -2378
- package/grpc/google/protobuf/empty_pb.d.ts +0 -23
- package/grpc/google/protobuf/empty_pb.js +0 -47
- package/grpc/pigeon_pb.client.d.ts +0 -96
- package/grpc/pigeon_pb.client.js +0 -72
- package/grpc/pigeon_pb.d.ts +0 -207
- package/grpc/pigeon_pb.grpc-client.d.ts +0 -98
- package/grpc/pigeon_pb.grpc-client.js +0 -68
- package/grpc/pigeon_pb.js +0 -144
- package/grpc/rambo.uri.v1_pb.d.ts +0 -73
- package/grpc/rambo.uri.v1_pb.js +0 -48
- package/grpc/rambo.v1_pb.client.d.ts +0 -66
- package/grpc/rambo.v1_pb.client.js +0 -48
- package/grpc/rambo.v1_pb.d.ts +0 -392
- package/grpc/rambo.v1_pb.grpc-client.d.ts +0 -56
- package/grpc/rambo.v1_pb.grpc-client.js +0 -44
- package/grpc/rambo.v1_pb.js +0 -272
- package/grpc/serviette.uri.v1_pb.d.ts +0 -89
- package/grpc/serviette.uri.v1_pb.js +0 -62
- package/grpc/serviette.v1_pb.client.d.ts +0 -225
- package/grpc/serviette.v1_pb.client.js +0 -174
- package/grpc/serviette.v1_pb.d.ts +0 -827
- package/grpc/serviette.v1_pb.grpc-client.d.ts +0 -215
- package/grpc/serviette.v1_pb.grpc-client.js +0 -162
- package/grpc/serviette.v1_pb.js +0 -553
- package/grpc/slowlane_pb.client.d.ts +0 -61
- package/grpc/slowlane_pb.client.js +0 -41
- package/grpc/slowlane_pb.d.ts +0 -303
- package/grpc/slowlane_pb.grpc-client.d.ts +0 -64
- package/grpc/slowlane_pb.grpc-client.js +0 -44
- package/grpc/slowlane_pb.js +0 -185
- package/grpc/teletubby_pb.client.d.ts +0 -145
- package/grpc/teletubby_pb.client.js +0 -104
- package/grpc/teletubby_pb.d.ts +0 -634
- package/grpc/teletubby_pb.grpc-client.d.ts +0 -152
- package/grpc/teletubby_pb.grpc-client.js +0 -100
- package/grpc/teletubby_pb.js +0 -1264
- package/helpers/cleanObject.spec.d.ts +0 -1
- package/helpers/cleanObject.spec.js +0 -53
- package/helpers/flattenObject.spec.d.ts +0 -1
- package/helpers/flattenObject.spec.js +0 -29
- package/helpers/flattenOneOf.d.ts +0 -67
- package/helpers/flattenOneOf.js +0 -29
- package/helpers/flattenOneOf.spec.d.ts +0 -1
- package/helpers/flattenOneOf.spec.js +0 -157
- package/helpers/formatServiceUrl.spec.d.ts +0 -1
- package/helpers/formatServiceUrl.spec.js +0 -16
- package/helpers/standardDeviation.spec.d.ts +0 -1
- package/helpers/standardDeviation.spec.js +0 -11
- package/models/CallsignStatus.d.ts +0 -6
- package/models/CallsignStatus.js +0 -7
- package/models/IRobotSettings.d.ts +0 -28
- package/models/IRobotSettings.js +0 -1
- package/models/Token.spec.d.ts +0 -1
- package/models/Token.spec.js +0 -108
- package/models/caller/IRocosCallerMessageResponseReturn.d.ts +0 -8
- package/models/caller/IRocosCallerMessageResponseReturn.js +0 -1
- package/models/caller/RocosResponseLevel.d.ts +0 -6
- package/models/caller/RocosResponseLevel.js +0 -7
- package/models/caller/index.d.ts +0 -10
- package/models/caller/index.js +0 -10
- package/models/command/index.d.ts +0 -4
- package/models/command/index.js +0 -4
- package/models/message/index.d.ts +0 -17
- package/models/message/index.js +0 -17
- package/services/AuthService.spec.d.ts +0 -1
- package/services/AuthService.spec.js +0 -163
- package/services/BaseStreamService.d.ts +0 -18
- package/services/BaseStreamService.js +0 -47
- package/services/PlatformTimeService.spec.d.ts +0 -1
- package/services/PlatformTimeService.spec.js +0 -180
- package/services/TelemetryService.spec.d.ts +0 -1
- package/services/TelemetryService.spec.js +0 -37
@@ -1,163 +0,0 @@
|
|
1
|
-
import { issuer } from '../constants/auth';
|
2
|
-
import { AuthService } from './AuthService';
|
3
|
-
import { Token } from '../models';
|
4
|
-
describe('authService', () => {
|
5
|
-
const baseDate = new Date(2021, 0, 1, 0, 0, 0, 0);
|
6
|
-
beforeEach(() => {
|
7
|
-
jest.useFakeTimers();
|
8
|
-
jest.setSystemTime(baseDate);
|
9
|
-
});
|
10
|
-
const expiredDate = new Date(baseDate.getTime() - 1000 * 60 * 5); // 5 minutes ago
|
11
|
-
const almostExpiredDate = new Date(baseDate.getTime() + 1000 * 60 * 5); // 5 minutes from now
|
12
|
-
const almostAlmostExpiredDate = new Date(baseDate.getTime() + 1000 * 60 * 25); // 35 minutes from now
|
13
|
-
const notExpiredDate = new Date(baseDate.getTime() + 1000 * 60 * 60 * 24); // 1 day from now
|
14
|
-
const getToken = (config) => {
|
15
|
-
const header = {
|
16
|
-
alg: 'HS256',
|
17
|
-
typ: 'JWT',
|
18
|
-
};
|
19
|
-
const payload = {
|
20
|
-
iat: Math.floor((config.iat ?? expiredDate).getTime() / 1000),
|
21
|
-
exp: Math.floor((config.exp ?? notExpiredDate).getTime() / 1000),
|
22
|
-
iss: config.iss ?? issuer,
|
23
|
-
aud: config.aud ?? 'myaudience',
|
24
|
-
sub: config.sub ?? 'mysubject',
|
25
|
-
};
|
26
|
-
const encodedHeader = Buffer.from(JSON.stringify(header)).toString('base64');
|
27
|
-
const encodedPayload = Buffer.from(JSON.stringify(payload)).toString('base64');
|
28
|
-
if (config.signature === false) {
|
29
|
-
return `${encodedHeader}.${encodedPayload}`;
|
30
|
-
}
|
31
|
-
return `${encodedHeader}.${encodedPayload}.signature`;
|
32
|
-
};
|
33
|
-
afterAll(() => jest.useRealTimers());
|
34
|
-
describe('getToken', () => {
|
35
|
-
it('should return the current token if it is not expired', async () => {
|
36
|
-
// Arrange
|
37
|
-
const token = getToken({ exp: notExpiredDate });
|
38
|
-
const service = new AuthService({
|
39
|
-
token,
|
40
|
-
url: 'http://localhost:0',
|
41
|
-
});
|
42
|
-
service.setToken(token);
|
43
|
-
// Act
|
44
|
-
const newToken = await service.getToken();
|
45
|
-
// Assert
|
46
|
-
expect(newToken.value).toEqual(token);
|
47
|
-
});
|
48
|
-
it('should refresh the token if it is about to expire', async () => {
|
49
|
-
// Arrange
|
50
|
-
const token = getToken({ exp: almostExpiredDate });
|
51
|
-
const service = new AuthService({
|
52
|
-
token,
|
53
|
-
url: 'http://localhost:0',
|
54
|
-
});
|
55
|
-
service.setToken(token);
|
56
|
-
const expected = getToken({ signature: false });
|
57
|
-
jest.spyOn(AuthService.prototype, 'refreshToken').mockResolvedValue(new Token(expected));
|
58
|
-
// Act
|
59
|
-
const newToken = await service.getToken();
|
60
|
-
// Assert
|
61
|
-
expect(newToken.value).not.toEqual(token);
|
62
|
-
expect(newToken.value).toEqual(expected);
|
63
|
-
expect(AuthService.prototype.refreshToken).toHaveBeenCalled();
|
64
|
-
});
|
65
|
-
it('should get a new token if there is no current token', async () => {
|
66
|
-
// Arrange
|
67
|
-
const token = getToken({ signature: false });
|
68
|
-
const service = new AuthService({
|
69
|
-
url: 'http://localhost:0',
|
70
|
-
token,
|
71
|
-
});
|
72
|
-
service.clearToken();
|
73
|
-
const expected = getToken({ signature: false });
|
74
|
-
jest.spyOn(AuthService.prototype, 'getNewUserToken').mockResolvedValue(new Token(expected));
|
75
|
-
// Act
|
76
|
-
const newToken = await service.getToken();
|
77
|
-
// Assert
|
78
|
-
expect(newToken.value).toEqual(expected);
|
79
|
-
expect(AuthService.prototype.getNewUserToken).toHaveBeenCalled();
|
80
|
-
});
|
81
|
-
});
|
82
|
-
describe('tokenRefreshLoop', () => {
|
83
|
-
jest.spyOn(AuthService.prototype, 'refreshTokenIfExpired').mockImplementation(() => {
|
84
|
-
// make sure the promise is resolved synchronously
|
85
|
-
return {
|
86
|
-
catch: () => {
|
87
|
-
return {
|
88
|
-
finally(onfinally) {
|
89
|
-
onfinally?.();
|
90
|
-
return Promise.resolve();
|
91
|
-
},
|
92
|
-
};
|
93
|
-
},
|
94
|
-
};
|
95
|
-
});
|
96
|
-
beforeEach(() => {
|
97
|
-
jest.clearAllTimers();
|
98
|
-
jest.clearAllMocks();
|
99
|
-
jest.useFakeTimers();
|
100
|
-
jest.setSystemTime(baseDate);
|
101
|
-
});
|
102
|
-
it('should check the token every 10 minutes', async () => {
|
103
|
-
// Arrange
|
104
|
-
const token = getToken({ exp: almostAlmostExpiredDate });
|
105
|
-
const service = new AuthService({
|
106
|
-
token,
|
107
|
-
url: 'http://localhost:0',
|
108
|
-
});
|
109
|
-
service.setToken(token);
|
110
|
-
// Act
|
111
|
-
service.startTokenRefreshChecker();
|
112
|
-
expect(AuthService.prototype.refreshTokenIfExpired).toHaveBeenCalledTimes(1);
|
113
|
-
jest.advanceTimersByTime(1000 * 60 * 10); // 10 minutes
|
114
|
-
expect(AuthService.prototype.refreshTokenIfExpired).toHaveBeenCalledTimes(2);
|
115
|
-
jest.advanceTimersByTime(1000 * 60); // 1 minutes - 24 minutes left
|
116
|
-
expect(AuthService.prototype.refreshTokenIfExpired).toHaveBeenCalledTimes(3);
|
117
|
-
jest.advanceTimersByTime(1000 * 60 * 10); // 10 minutes - 14 minutes left
|
118
|
-
jest.runOnlyPendingTimers(); // wait for the next timer to run
|
119
|
-
service.stopTokenRefreshChecker();
|
120
|
-
});
|
121
|
-
it('should not run again when cancelled', () => {
|
122
|
-
// Arrange
|
123
|
-
const token = getToken({ exp: notExpiredDate });
|
124
|
-
const service = new AuthService({
|
125
|
-
token,
|
126
|
-
url: 'http://localhost:0',
|
127
|
-
});
|
128
|
-
service.setToken(token);
|
129
|
-
// Act
|
130
|
-
service.startTokenRefreshChecker();
|
131
|
-
expect(AuthService.prototype.refreshTokenIfExpired).toHaveBeenCalledTimes(1);
|
132
|
-
service.stopTokenRefreshChecker();
|
133
|
-
jest.runOnlyPendingTimers();
|
134
|
-
expect(AuthService.prototype.refreshTokenIfExpired).toHaveBeenCalledTimes(1);
|
135
|
-
});
|
136
|
-
it('should correctly report running status', () => {
|
137
|
-
const token = getToken({ exp: notExpiredDate });
|
138
|
-
const service = new AuthService({
|
139
|
-
token,
|
140
|
-
url: 'http://localhost:0',
|
141
|
-
});
|
142
|
-
service.setToken(token);
|
143
|
-
expect(service.isTokenRefreshCheckerRunning()).toBe(false);
|
144
|
-
service.startTokenRefreshChecker();
|
145
|
-
expect(service.isTokenRefreshCheckerRunning()).toBe(true);
|
146
|
-
service.stopTokenRefreshChecker();
|
147
|
-
expect(service.isTokenRefreshCheckerRunning()).toBe(false);
|
148
|
-
});
|
149
|
-
it('should correctly report running status', () => {
|
150
|
-
const token = getToken({ exp: notExpiredDate });
|
151
|
-
const service = new AuthService({
|
152
|
-
token,
|
153
|
-
url: 'http://localhost:0',
|
154
|
-
});
|
155
|
-
service.setToken(token);
|
156
|
-
expect(service.isTokenRefreshCheckerRunning()).toBe(false);
|
157
|
-
service.startTokenRefreshChecker();
|
158
|
-
expect(service.isTokenRefreshCheckerRunning()).toBe(true);
|
159
|
-
service.stopTokenRefreshChecker();
|
160
|
-
expect(service.isTokenRefreshCheckerRunning()).toBe(false);
|
161
|
-
});
|
162
|
-
});
|
163
|
-
});
|
@@ -1,18 +0,0 @@
|
|
1
|
-
import { IBaseService, IBaseStream, IRocosSDKConfig, IStreamConfig, SubscriberStatusEnum } from '../models';
|
2
|
-
import { ISubscriberStatus } from '../models/ISubscriberStatus';
|
3
|
-
import { Logger } from 'loglevel';
|
4
|
-
import { Subject } from 'rxjs';
|
5
|
-
export declare abstract class BaseStreamService<T extends IBaseStream, C extends IStreamConfig = IStreamConfig> implements IBaseService, ISubscriberStatus {
|
6
|
-
protected config: IRocosSDKConfig;
|
7
|
-
protected logger: Logger;
|
8
|
-
protected status: boolean;
|
9
|
-
status$: Subject<SubscriberStatusEnum>;
|
10
|
-
protected constructor(name: string, config: IRocosSDKConfig);
|
11
|
-
getStatus(): boolean;
|
12
|
-
protected initStream(stream: T): Promise<void>;
|
13
|
-
protected createStreamFromConfig(identifier: string, config: C): Promise<{
|
14
|
-
stream: T;
|
15
|
-
isNew: boolean;
|
16
|
-
}>;
|
17
|
-
protected abstract getStream(config: C): T;
|
18
|
-
}
|
@@ -1,47 +0,0 @@
|
|
1
|
-
import { SubscriberStatusEnum, Token } from '../models';
|
2
|
-
import { RocosLogger } from '../logger/RocosLogger';
|
3
|
-
import { RocosStore } from '../store/RocosStore';
|
4
|
-
import { StreamRegister } from '../api/StreamRegister';
|
5
|
-
import { Subject } from 'rxjs';
|
6
|
-
export class BaseStreamService {
|
7
|
-
constructor(name, config) {
|
8
|
-
this.status = false;
|
9
|
-
this.status$ = new Subject();
|
10
|
-
this.config = config;
|
11
|
-
this.logger = RocosLogger.getInstance(`${name}(${this.config.url})`);
|
12
|
-
}
|
13
|
-
getStatus() {
|
14
|
-
return this.status;
|
15
|
-
}
|
16
|
-
async initStream(stream) {
|
17
|
-
const authService = RocosStore.getSDKInstance(this.config).getAuthService();
|
18
|
-
if (!this.config.token || !authService.isTokenValid(new Token(this.config.token))) {
|
19
|
-
try {
|
20
|
-
const token = await authService.getToken();
|
21
|
-
stream.setToken(token.value);
|
22
|
-
}
|
23
|
-
catch (e) {
|
24
|
-
this.logger.error('Can not retrieve auth token', e);
|
25
|
-
throw new Error('Can not retrieve auth token');
|
26
|
-
}
|
27
|
-
}
|
28
|
-
authService.startTokenRefreshChecker();
|
29
|
-
}
|
30
|
-
async createStreamFromConfig(identifier, config) {
|
31
|
-
const identifierWithScope = StreamRegister.getIdentifier(identifier);
|
32
|
-
const streamRegister = StreamRegister.getInstance();
|
33
|
-
let stream = streamRegister.getStream(identifierWithScope);
|
34
|
-
let isNew = false;
|
35
|
-
if (!stream) {
|
36
|
-
isNew = true;
|
37
|
-
stream = this.getStream(config);
|
38
|
-
stream.statusStream$.subscribe((msg) => {
|
39
|
-
this.status = msg === SubscriberStatusEnum.STOPPED || msg === SubscriberStatusEnum.ALIVE;
|
40
|
-
this.status$.next(msg);
|
41
|
-
});
|
42
|
-
await streamRegister.addStream(stream);
|
43
|
-
await this.initStream(stream);
|
44
|
-
}
|
45
|
-
return { stream, isNew };
|
46
|
-
}
|
47
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,180 +0,0 @@
|
|
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
|
-
});
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,37 +0,0 @@
|
|
1
|
-
import { TelemetryService } from './TelemetryService';
|
2
|
-
import { delay, from, lastValueFrom, NEVER, take, throwError } from 'rxjs';
|
3
|
-
import { CallsignStatus } from '../models';
|
4
|
-
describe('TelemetryService', () => {
|
5
|
-
describe('getRobotStatusChanges', () => {
|
6
|
-
it('should emit unknown to begin with', async () => {
|
7
|
-
const service = new TelemetryService({ url: '', token: '' });
|
8
|
-
// Mock 5 heartbeat messages
|
9
|
-
jest.spyOn(service, 'subscribe').mockReturnValue(NEVER);
|
10
|
-
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign').pipe(take(1)));
|
11
|
-
expect(lastValue).toEqual(CallsignStatus.UNKNOWN);
|
12
|
-
});
|
13
|
-
it('should emit online if the robot emits a heartbeat', async () => {
|
14
|
-
const service = new TelemetryService({ url: '', token: '' });
|
15
|
-
// Mock 5 heartbeat messages
|
16
|
-
jest
|
17
|
-
.spyOn(service, 'subscribe')
|
18
|
-
.mockReturnValue(from([0, 1, 2, 3, 4]).pipe(delay(100)));
|
19
|
-
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 1000, 10).pipe(take(2)));
|
20
|
-
expect(lastValue).toEqual(CallsignStatus.ONLINE);
|
21
|
-
}, 10000);
|
22
|
-
it('should emit offline if the robot never emits', async () => {
|
23
|
-
const service = new TelemetryService({ url: '', token: '' });
|
24
|
-
// Mock 5 heartbeat messages
|
25
|
-
jest.spyOn(service, 'subscribe').mockReturnValue(NEVER);
|
26
|
-
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 100, 10).pipe(take(2)));
|
27
|
-
expect(lastValue).toEqual(CallsignStatus.OFFLINE);
|
28
|
-
});
|
29
|
-
it('should emit an error if the telemetry errors', async () => {
|
30
|
-
const service = new TelemetryService({ url: '', token: '' });
|
31
|
-
// Mock 5 heartbeat messages
|
32
|
-
jest.spyOn(service, 'subscribe').mockReturnValue(throwError(() => new Error('test')));
|
33
|
-
const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 100, 10).pipe(take(2)));
|
34
|
-
expect(lastValue).toEqual(CallsignStatus.ERROR);
|
35
|
-
});
|
36
|
-
});
|
37
|
-
});
|