@dronedeploy/rocos-js-sdk 0.0.1 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/IRocosSDK.d.ts +55 -0
- package/IRocosSDK.js +6 -0
- package/README.md +90 -0
- package/RocosSDK.d.ts +138 -0
- package/RocosSDK.js +294 -0
- package/api/StreamRegister.d.ts +13 -0
- package/api/StreamRegister.js +58 -0
- package/api/atoms/StreamHeartbeat.d.ts +27 -0
- package/api/atoms/StreamHeartbeat.js +115 -0
- package/api/streams/caller/CallerStream.d.ts +13 -0
- package/api/streams/caller/CallerStream.js +85 -0
- package/api/streams/caller/CallerStreamAbstract.d.ts +28 -0
- package/api/streams/caller/CallerStreamAbstract.js +99 -0
- package/api/streams/caller/CallerStreamNode.d.ts +13 -0
- package/api/streams/caller/CallerStreamNode.js +128 -0
- package/api/streams/command/CommandStream.d.ts +12 -0
- package/api/streams/command/CommandStream.js +68 -0
- package/api/streams/command/CommandStreamAbstract.d.ts +24 -0
- package/api/streams/command/CommandStreamAbstract.js +72 -0
- package/api/streams/command/CommandStreamNode.d.ts +12 -0
- package/api/streams/command/CommandStreamNode.js +93 -0
- package/api/streams/control/ControlStream.d.ts +14 -0
- package/api/streams/control/ControlStream.js +81 -0
- package/api/streams/control/ControlStreamAbstract.d.ts +28 -0
- package/api/streams/control/ControlStreamAbstract.js +108 -0
- package/api/streams/control/ControlStreamNode.d.ts +14 -0
- package/api/streams/control/ControlStreamNode.js +98 -0
- package/api/streams/fileAccessor/FileAccessorStream.d.ts +10 -0
- package/api/streams/fileAccessor/FileAccessorStream.js +74 -0
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.d.ts +26 -0
- package/api/streams/fileAccessor/FileAccessorStreamAbstract.js +82 -0
- package/api/streams/fileAccessor/FileAccessorStreamNode.d.ts +10 -0
- package/api/streams/fileAccessor/FileAccessorStreamNode.js +96 -0
- package/api/streams/search/SearchStream.d.ts +16 -0
- package/api/streams/search/SearchStream.js +120 -0
- package/api/streams/search/SearchStreamAbstract.d.ts +30 -0
- package/api/streams/search/SearchStreamAbstract.js +74 -0
- package/api/streams/search/SearchStreamNode.d.ts +16 -0
- package/api/streams/search/SearchStreamNode.js +143 -0
- package/api/streams/telemetry/TelemetryStream.d.ts +17 -0
- package/api/streams/telemetry/TelemetryStream.js +126 -0
- package/api/streams/telemetry/TelemetryStreamAbstract.d.ts +62 -0
- package/api/streams/telemetry/TelemetryStreamAbstract.js +421 -0
- package/api/streams/telemetry/TelemetryStreamNode.d.ts +21 -0
- package/api/streams/telemetry/TelemetryStreamNode.js +195 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.d.ts +44 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStream.js +67 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.d.ts +32 -0
- package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.js +65 -0
- package/constants/api.d.ts +121 -0
- package/constants/api.js +126 -0
- package/constants/grpc.d.ts +5 -0
- package/constants/grpc.js +8 -0
- package/constants/identifier.d.ts +6 -0
- package/constants/identifier.js +9 -0
- package/constants/timezones.d.ts +2 -0
- package/constants/timezones.js +430 -0
- 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.d.ts +1 -0
- package/helpers/arrayRemove.js +7 -0
- package/helpers/arrayUnique.d.ts +1 -0
- package/helpers/arrayUnique.js +7 -0
- package/helpers/average.d.ts +1 -0
- package/helpers/average.js +11 -0
- package/helpers/cleanObject.d.ts +1 -0
- package/helpers/cleanObject.js +20 -0
- package/helpers/enviroment.d.ts +8 -0
- package/helpers/enviroment.js +20 -0
- package/helpers/flattenCallsignsLookup.d.ts +2 -0
- package/helpers/flattenCallsignsLookup.js +10 -0
- package/helpers/flattenObject.d.ts +1 -0
- package/helpers/flattenObject.js +17 -0
- package/helpers/formatServiceUrl.d.ts +1 -0
- package/helpers/formatServiceUrl.js +11 -0
- package/helpers/generateUUID.d.ts +1 -0
- package/helpers/generateUUID.js +8 -0
- package/helpers/getSubscriptionsDifference.d.ts +10 -0
- package/helpers/getSubscriptionsDifference.js +39 -0
- package/helpers/getUniqueConfigKey.d.ts +7 -0
- package/helpers/getUniqueConfigKey.js +19 -0
- package/helpers/getUniqueId.d.ts +9 -0
- package/helpers/getUniqueId.js +15 -0
- package/helpers/getUnixTimeMs.d.ts +1 -0
- package/helpers/getUnixTimeMs.js +8 -0
- package/helpers/index.d.ts +3 -0
- package/helpers/index.js +15 -0
- package/helpers/nanosecondToMillisecond.d.ts +1 -0
- package/helpers/nanosecondToMillisecond.js +7 -0
- package/helpers/randomString.d.ts +1 -0
- package/helpers/randomString.js +7 -0
- package/helpers/standardDeviation.d.ts +1 -0
- package/helpers/standardDeviation.js +16 -0
- package/helpers/stringToUint8Array.d.ts +1 -0
- package/helpers/stringToUint8Array.js +14 -0
- package/helpers/uint8ArrayToString.d.ts +1 -0
- package/helpers/uint8ArrayToString.js +15 -0
- package/index.d.ts +7 -0
- package/index.js +19 -0
- package/logger/RocosLogger.d.ts +7 -0
- package/logger/RocosLogger.js +63 -0
- package/models/ExportDataQuery.d.ts +8 -0
- package/models/ExportDataQuery.js +17 -0
- package/models/ExternalProject.d.ts +6 -0
- package/models/ExternalProject.js +6 -0
- package/models/IBaseService.d.ts +3 -0
- package/models/IBaseService.js +2 -0
- package/models/IConfigGroup.d.ts +5 -0
- package/models/IConfigGroup.js +2 -0
- package/models/IDebugLevel.d.ts +2 -0
- package/models/IDebugLevel.js +2 -0
- package/models/IExportDataQuery.d.ts +9 -0
- package/models/IExportDataQuery.js +2 -0
- package/models/IFunctionConfig.d.ts +8 -0
- package/models/IFunctionConfig.js +2 -0
- package/models/IInvitation.d.ts +6 -0
- package/models/IInvitation.js +2 -0
- package/models/IInvitationExists.d.ts +4 -0
- package/models/IInvitationExists.js +2 -0
- package/models/IOperation.d.ts +6 -0
- package/models/IOperation.js +2 -0
- package/models/IPersonalAccessToken.d.ts +16 -0
- package/models/IPersonalAccessToken.js +2 -0
- package/models/IProject.d.ts +4 -0
- package/models/IProject.js +2 -0
- package/models/IProjectApplication.d.ts +6 -0
- package/models/IProjectApplication.js +2 -0
- package/models/IRobot.d.ts +17 -0
- package/models/IRobot.js +2 -0
- package/models/IRobotConfig.d.ts +8 -0
- package/models/IRobotConfig.js +2 -0
- package/models/IRobotPlugin.d.ts +3 -0
- package/models/IRobotPlugin.js +2 -0
- package/models/IRobotTemplate.d.ts +10 -0
- package/models/IRobotTemplate.js +2 -0
- package/models/IRocosSDKConfig.d.ts +25 -0
- package/models/IRocosSDKConfig.js +2 -0
- package/models/ISignupParams.d.ts +8 -0
- package/models/ISignupParams.js +2 -0
- package/models/ISource.d.ts +8 -0
- package/models/ISource.js +2 -0
- package/models/IStream.d.ts +9 -0
- package/models/IStream.js +2 -0
- package/models/IStreamConfig.d.ts +9 -0
- package/models/IStreamConfig.js +2 -0
- package/models/IStreamOptions.d.ts +7 -0
- package/models/IStreamOptions.js +2 -0
- package/models/IStreamSource.d.ts +8 -0
- package/models/IStreamSource.js +2 -0
- package/models/ISubscriberStatus.d.ts +5 -0
- package/models/ISubscriberStatus.js +2 -0
- package/models/ITelemetryStreamConfig.d.ts +7 -0
- package/models/ITelemetryStreamConfig.js +2 -0
- package/models/IToken.d.ts +5 -0
- package/models/IToken.js +2 -0
- package/models/IWidget.d.ts +25 -0
- package/models/IWidget.js +2 -0
- package/models/IWidgetLineGroup.d.ts +8 -0
- package/models/IWidgetLineGroup.js +2 -0
- package/models/ResponseLevelEnum.d.ts +6 -0
- package/models/ResponseLevelEnum.js +10 -0
- package/models/Robot.d.ts +19 -0
- package/models/Robot.js +12 -0
- package/models/RobotConfig.d.ts +10 -0
- package/models/RobotConfig.js +9 -0
- package/models/RobotPlugin.d.ts +5 -0
- package/models/RobotPlugin.js +9 -0
- package/models/RobotTemplate.d.ts +12 -0
- package/models/RobotTemplate.js +30 -0
- package/models/RocosError.d.ts +30 -0
- package/models/RocosError.js +43 -0
- package/models/ServiceEnum.d.ts +26 -0
- package/models/ServiceEnum.js +30 -0
- package/models/Stream.d.ts +10 -0
- package/models/Stream.js +15 -0
- package/models/StreamOptions.d.ts +9 -0
- package/models/StreamOptions.js +37 -0
- package/models/StreamSource.d.ts +10 -0
- package/models/StreamSource.js +15 -0
- package/models/SubscriberStatusEnum.d.ts +6 -0
- package/models/SubscriberStatusEnum.js +10 -0
- package/models/Token.d.ts +8 -0
- package/models/Token.js +15 -0
- package/models/Widget.d.ts +27 -0
- package/models/Widget.js +16 -0
- package/models/WidgetLineGroup.d.ts +10 -0
- package/models/WidgetLineGroup.js +9 -0
- package/models/asset-storage/AssetModelItem.d.ts +29 -0
- package/models/asset-storage/AssetModelItem.js +2 -0
- package/models/caller/IRocosCallerMessageChunk.d.ts +9 -0
- package/models/caller/IRocosCallerMessageChunk.js +2 -0
- package/models/caller/IRocosCallerMessageChunks.d.ts +5 -0
- package/models/caller/IRocosCallerMessageChunks.js +2 -0
- package/models/caller/IRocosCallerMessageHeartbeat.d.ts +2 -0
- package/models/caller/IRocosCallerMessageHeartbeat.js +2 -0
- package/models/caller/IRocosCallerMessageResponse.d.ts +9 -0
- package/models/caller/IRocosCallerMessageResponse.js +2 -0
- package/models/caller/IRocosCallerMessageResponseAck.d.ts +2 -0
- package/models/caller/IRocosCallerMessageResponseAck.js +2 -0
- package/models/caller/IRocosCallerMessageResponseResult.d.ts +2 -0
- package/models/caller/IRocosCallerMessageResponseResult.js +2 -0
- package/models/caller/IRocosCallerMessageResponseUid.d.ts +2 -0
- package/models/caller/IRocosCallerMessageResponseUid.js +2 -0
- package/models/caller/IRocosCallerMessageResponses.d.ts +5 -0
- package/models/caller/IRocosCallerMessageResponses.js +2 -0
- package/models/caller/RocosCallerResultStatus.d.ts +1 -0
- package/models/caller/RocosCallerResultStatus.js +5 -0
- package/models/callsigns/CallsignsEnums.d.ts +13 -0
- package/models/callsigns/CallsignsEnums.js +20 -0
- package/models/callsigns/CallsignsLookup.d.ts +8 -0
- package/models/callsigns/CallsignsLookup.js +33 -0
- package/models/callsigns/CallsignsQuery.d.ts +9 -0
- package/models/callsigns/CallsignsQuery.js +18 -0
- package/models/callsigns/CallsignsQueryPredicate.d.ts +9 -0
- package/models/callsigns/CallsignsQueryPredicate.js +19 -0
- package/models/command/IRocosCommandMessageHeartbeat.d.ts +2 -0
- package/models/command/IRocosCommandMessageHeartbeat.js +2 -0
- package/models/command/IRocosCommandMessageResponse.d.ts +2 -0
- package/models/command/IRocosCommandMessageResponse.js +2 -0
- package/models/command/RocosCommandResultStatus.d.ts +1 -0
- package/models/command/RocosCommandResultStatus.js +5 -0
- package/models/file/FileEnums.d.ts +30 -0
- package/models/file/FileEnums.js +36 -0
- package/models/index.d.ts +101 -0
- package/models/index.js +113 -0
- package/models/integrations/Overlay.d.ts +49 -0
- package/models/integrations/Overlay.js +2 -0
- package/models/integrations/Plan.d.ts +324 -0
- package/models/integrations/Plan.js +2 -0
- package/models/maps/Map.d.ts +12 -0
- package/models/maps/Map.js +2 -0
- package/models/message/IRocosCallerMessage.d.ts +8 -0
- package/models/message/IRocosCallerMessage.js +2 -0
- package/models/message/IRocosChangeMessage.d.ts +6 -0
- package/models/message/IRocosChangeMessage.js +2 -0
- package/models/message/IRocosCommandMessage.d.ts +6 -0
- package/models/message/IRocosCommandMessage.js +2 -0
- package/models/message/IRocosControlMessage.d.ts +7 -0
- package/models/message/IRocosControlMessage.js +2 -0
- package/models/message/IRocosOpResultMessage.d.ts +6 -0
- package/models/message/IRocosOpResultMessage.js +2 -0
- package/models/message/IRocosSearchMessage.d.ts +5 -0
- package/models/message/IRocosSearchMessage.js +2 -0
- package/models/message/IRocosSearchRowMessage.d.ts +9 -0
- package/models/message/IRocosSearchRowMessage.js +2 -0
- package/models/message/IRocosSearchStatusMessage.d.ts +4 -0
- package/models/message/IRocosSearchStatusMessage.js +2 -0
- package/models/message/IRocosTelemetryMessage.d.ts +18 -0
- package/models/message/IRocosTelemetryMessage.js +2 -0
- package/models/message/IStreamStatusMessage.d.ts +5 -0
- package/models/message/IStreamStatusMessage.js +2 -0
- package/models/message/RocosCallerMessage.d.ts +12 -0
- package/models/message/RocosCallerMessage.js +23 -0
- package/models/message/RocosCommandMessage.d.ts +10 -0
- package/models/message/RocosCommandMessage.js +16 -0
- package/models/message/RocosControlMessage.d.ts +11 -0
- package/models/message/RocosControlMessage.js +18 -0
- package/models/message/RocosOpResultMessage.d.ts +9 -0
- package/models/message/RocosOpResultMessage.js +22 -0
- package/models/message/RocosSearchMessage.d.ts +9 -0
- package/models/message/RocosSearchMessage.js +28 -0
- package/models/message/RocosSearchRowMessage.d.ts +13 -0
- package/models/message/RocosSearchRowMessage.js +20 -0
- package/models/message/RocosTelemetryMessage.d.ts +24 -0
- package/models/message/RocosTelemetryMessage.js +105 -0
- package/models/params/ICallerParams.d.ts +15 -0
- package/models/params/ICallerParams.js +2 -0
- package/models/params/ICommandParams.d.ts +9 -0
- package/models/params/ICommandParams.js +2 -0
- package/models/params/IControlParams.d.ts +8 -0
- package/models/params/IControlParams.js +2 -0
- package/models/params/IFileAccessorParams.d.ts +11 -0
- package/models/params/IFileAccessorParams.js +2 -0
- package/models/params/ISearchParams.d.ts +10 -0
- package/models/params/ISearchParams.js +2 -0
- package/models/params/ITelemetryParams.d.ts +18 -0
- package/models/params/ITelemetryParams.js +2 -0
- package/models/params/IWebRTCSignallingParams.d.ts +21 -0
- package/models/params/IWebRTCSignallingParams.js +2 -0
- package/models/projects/ProjectUser.d.ts +6 -0
- package/models/projects/ProjectUser.js +2 -0
- package/models/schedule/IScheduleAction.d.ts +13 -0
- package/models/schedule/IScheduleAction.js +9 -0
- package/models/schedule/IScheduleInfo.d.ts +11 -0
- package/models/schedule/IScheduleInfo.js +2 -0
- package/models/schedule/IScheduleJob.d.ts +12 -0
- package/models/schedule/IScheduleJob.js +2 -0
- package/models/search/SearchQueryFilter.d.ts +5 -0
- package/models/search/SearchQueryFilter.js +9 -0
- package/models/search/SearchStreamQuery.d.ts +15 -0
- package/models/search/SearchStreamQuery.js +10 -0
- package/models/stream/IBaseStream.d.ts +8 -0
- package/models/stream/IBaseStream.js +2 -0
- package/models/stream/ICallerStream.d.ts +8 -0
- package/models/stream/ICallerStream.js +2 -0
- package/models/stream/ICommandStream.d.ts +7 -0
- package/models/stream/ICommandStream.js +2 -0
- package/models/stream/IControlStream.d.ts +9 -0
- package/models/stream/IControlStream.js +2 -0
- package/models/stream/IFileAccessorStream.d.ts +10 -0
- package/models/stream/IFileAccessorStream.js +2 -0
- package/models/stream/ISearchStream.d.ts +11 -0
- package/models/stream/ISearchStream.js +2 -0
- package/models/stream/ITelemetryStream.d.ts +10 -0
- package/models/stream/ITelemetryStream.js +2 -0
- package/models/stream/IWebRTCSignallingStream.d.ts +41 -0
- package/models/stream/IWebRTCSignallingStream.js +7 -0
- package/models/types.d.ts +5 -0
- package/models/types.js +2 -0
- package/node/RocosSDKNode.d.ts +42 -0
- package/node/RocosSDKNode.js +148 -0
- package/node/index.d.ts +7 -0
- package/node/index.js +19 -0
- package/package.json +25 -6
- package/services/AssetStorageService.d.ts +92 -0
- package/services/AssetStorageService.js +153 -0
- package/services/AuthService.d.ts +61 -0
- package/services/AuthService.js +154 -0
- package/services/BaseServiceAbstract.d.ts +38 -0
- package/services/BaseServiceAbstract.js +103 -0
- package/services/CallerService.d.ts +22 -0
- package/services/CallerService.js +96 -0
- package/services/CallerServiceNode.d.ts +6 -0
- package/services/CallerServiceNode.js +11 -0
- package/services/CommandService.d.ts +21 -0
- package/services/CommandService.js +81 -0
- package/services/CommandServiceNode.d.ts +6 -0
- package/services/CommandServiceNode.js +11 -0
- package/services/ConfigGroupService.d.ts +89 -0
- package/services/ConfigGroupService.js +157 -0
- package/services/ControlService.d.ts +23 -0
- package/services/ControlService.js +100 -0
- package/services/ControlServiceNode.d.ts +6 -0
- package/services/ControlServiceNode.js +11 -0
- package/services/DashboardService.d.ts +97 -0
- package/services/DashboardService.js +146 -0
- package/services/EventService.d.ts +53 -0
- package/services/EventService.js +89 -0
- package/services/FileAccessorService.d.ts +25 -0
- package/services/FileAccessorService.js +85 -0
- package/services/FileAccessorServiceNode.d.ts +6 -0
- package/services/FileAccessorServiceNode.js +11 -0
- package/services/FunctionService.d.ts +68 -0
- package/services/FunctionService.js +103 -0
- package/services/IntegrationService.d.ts +48 -0
- package/services/IntegrationService.js +77 -0
- package/services/MapService.d.ts +96 -0
- package/services/MapService.js +119 -0
- package/services/PlatformTimeService.d.ts +35 -0
- package/services/PlatformTimeService.js +160 -0
- package/services/ProfileService.d.ts +244 -0
- package/services/ProfileService.js +366 -0
- package/services/ProjectService.d.ts +110 -0
- package/services/ProjectService.js +164 -0
- package/services/RobotService.d.ts +282 -0
- package/services/RobotService.js +467 -0
- package/services/ScheduleService.d.ts +22 -0
- package/services/ScheduleService.js +40 -0
- package/services/SearchService.d.ts +25 -0
- package/services/SearchService.js +93 -0
- package/services/SearchServiceNode.d.ts +6 -0
- package/services/SearchServiceNode.js +11 -0
- package/services/SpotProvisioningService.d.ts +14 -0
- package/services/SpotProvisioningService.js +43 -0
- package/services/SpotProvisioningServiceNode.d.ts +15 -0
- package/services/SpotProvisioningServiceNode.js +43 -0
- package/services/StreamService.d.ts +98 -0
- package/services/StreamService.js +146 -0
- package/services/TelemetryService.d.ts +43 -0
- package/services/TelemetryService.js +144 -0
- package/services/TelemetryServiceNode.d.ts +6 -0
- package/services/TelemetryServiceNode.js +11 -0
- package/services/TimeSyncerService.d.ts +13 -0
- package/services/TimeSyncerService.js +27 -0
- package/services/UserService.d.ts +200 -0
- package/services/UserService.js +319 -0
- package/services/WebRTCSignallingService.d.ts +22 -0
- package/services/WebRTCSignallingService.js +81 -0
- package/services/WorkflowService.d.ts +71 -0
- package/services/WorkflowService.js +122 -0
- package/services/index.d.ts +26 -0
- package/services/index.js +38 -0
- package/store/RocosStore.d.ts +31 -0
- package/store/RocosStore.js +53 -0
- 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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
2
|
+
import { ITelemetryParams } from '../../../models/params/ITelemetryParams';
|
|
3
|
+
import { TelemetryAckStatusMap, TelemetryQueryRequest, TelemetryRequest } from '../../../grpc/teletubby/teletubby_pb';
|
|
4
|
+
import { IRocosTelemetryMessage } from '../../../models/message/IRocosTelemetryMessage';
|
|
5
|
+
import { ITelemetryStream } from '../../../models/stream/ITelemetryStream';
|
|
6
|
+
import { ITelemetryStreamConfig } from '../../../models/ITelemetryStreamConfig';
|
|
7
|
+
import { Logger } from 'loglevel';
|
|
8
|
+
import { StreamHeartbeat } from '../../atoms/StreamHeartbeat';
|
|
9
|
+
import { SubscriberStatusEnum } from '../../../models/SubscriberStatusEnum';
|
|
10
|
+
export declare abstract class TelemetryStreamAbstract implements ITelemetryStream {
|
|
11
|
+
messageStream$: Subject<IRocosTelemetryMessage>;
|
|
12
|
+
identifier: string;
|
|
13
|
+
statusStream$: BehaviorSubject<SubscriberStatusEnum>;
|
|
14
|
+
protected subscriberId?: string;
|
|
15
|
+
protected projectId: string;
|
|
16
|
+
private callsignsLookup;
|
|
17
|
+
private sources;
|
|
18
|
+
protected token: string;
|
|
19
|
+
private scope;
|
|
20
|
+
protected url: string;
|
|
21
|
+
private timerIntervalInSec;
|
|
22
|
+
protected subscriberStatus: SubscriberStatusEnum;
|
|
23
|
+
private checkerStartedAt?;
|
|
24
|
+
private lastRobotMessageReceived?;
|
|
25
|
+
private messagesTimer;
|
|
26
|
+
private lastMessageReceived?;
|
|
27
|
+
private retryTimes;
|
|
28
|
+
private options;
|
|
29
|
+
protected receivedMessagesCount: number;
|
|
30
|
+
protected logger: Logger;
|
|
31
|
+
protected heartbeat: StreamHeartbeat;
|
|
32
|
+
private sendHeartbeatTime;
|
|
33
|
+
private receivedDataStats;
|
|
34
|
+
private subscriptions;
|
|
35
|
+
constructor(config: ITelemetryStreamConfig);
|
|
36
|
+
protected abstract stopInternal(): void;
|
|
37
|
+
protected abstract registerReceiver(): () => void;
|
|
38
|
+
protected abstract requestTelemetryQuery(req: TelemetryQueryRequest): Promise<void>;
|
|
39
|
+
protected abstract requestTelemetry(req: TelemetryRequest): Promise<void>;
|
|
40
|
+
protected abstract sendAcknowledgmentInternal(uid: string, status: TelemetryAckStatusMap[keyof TelemetryAckStatusMap], noRetry: boolean): boolean;
|
|
41
|
+
protected abstract sendHeartbeat(): void;
|
|
42
|
+
setToken(token: string): void;
|
|
43
|
+
init(): void;
|
|
44
|
+
stopStream(): void;
|
|
45
|
+
addSubscription(params: ITelemetryParams): void;
|
|
46
|
+
removeSubscription(params: ITelemetryParams, terminateReceiverGroup?: boolean): Promise<void>;
|
|
47
|
+
sendAcknowledgment(uid: string, status: TelemetryAckStatusMap[keyof TelemetryAckStatusMap], noRetry: boolean): boolean;
|
|
48
|
+
private getSubscriptions;
|
|
49
|
+
protected onData(message: IRocosTelemetryMessage): void;
|
|
50
|
+
private takeTelemetryAction;
|
|
51
|
+
protected listenMessagesAndRenew(): void;
|
|
52
|
+
private addTerminateToAction;
|
|
53
|
+
private messageTimeoutTryAgain;
|
|
54
|
+
/**
|
|
55
|
+
* Auto resubscribe to reduce CPU usage.
|
|
56
|
+
*/
|
|
57
|
+
private autoResubscribe;
|
|
58
|
+
private isFoundCallsign;
|
|
59
|
+
private isFoundSource;
|
|
60
|
+
private isRegisteredMessage;
|
|
61
|
+
private updateReceviedDataStatsWithMessage;
|
|
62
|
+
}
|
|
@@ -0,0 +1,421 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TelemetryStreamAbstract = void 0;
|
|
4
|
+
const rxjs_1 = require("rxjs");
|
|
5
|
+
const grpc_1 = require("../../../constants/grpc");
|
|
6
|
+
const teletubby_pb_1 = require("../../../grpc/teletubby/teletubby_pb");
|
|
7
|
+
const CallsignsLookup_1 = require("../../../models/callsigns/CallsignsLookup");
|
|
8
|
+
const CallsignsEnums_1 = require("../../../models/callsigns/CallsignsEnums");
|
|
9
|
+
const identifier_1 = require("../../../constants/identifier");
|
|
10
|
+
const RocosStore_1 = require("../../../store/RocosStore");
|
|
11
|
+
const RocosTelemetryMessage_1 = require("../../../models/message/RocosTelemetryMessage");
|
|
12
|
+
const StreamHeartbeat_1 = require("../../atoms/StreamHeartbeat");
|
|
13
|
+
const StreamOptions_1 = require("../../../models/StreamOptions");
|
|
14
|
+
const StreamRegister_1 = require("../../StreamRegister");
|
|
15
|
+
const SubscriberStatusEnum_1 = require("../../../models/SubscriberStatusEnum");
|
|
16
|
+
const arrayUnique_1 = require("../../../helpers/arrayUnique");
|
|
17
|
+
const operators_1 = require("rxjs/operators");
|
|
18
|
+
const getSubscriptionsDifference_1 = require("../../../helpers/getSubscriptionsDifference");
|
|
19
|
+
class TelemetryStreamAbstract {
|
|
20
|
+
constructor(config) {
|
|
21
|
+
// /////////////////
|
|
22
|
+
// Subscriber Check
|
|
23
|
+
this.timerIntervalInSec = 1;
|
|
24
|
+
this.subscriberStatus = SubscriberStatusEnum_1.SubscriberStatusEnum.STOPPED;
|
|
25
|
+
this.retryTimes = 0;
|
|
26
|
+
this.receivedMessagesCount = 0;
|
|
27
|
+
// send heartbeat timeout is set to 5 seconds 5000
|
|
28
|
+
this.sendHeartbeatTime = 5000;
|
|
29
|
+
this.receivedDataStats = {};
|
|
30
|
+
this.subscriptions = new Map();
|
|
31
|
+
this.identifier = StreamRegister_1.StreamRegister.getIdentifier(identifier_1.IDENTIFIER_NAME_TELEMETRY, config.scope);
|
|
32
|
+
this.projectId = config.projectId;
|
|
33
|
+
this.callsignsLookup = config.callsignsLookup;
|
|
34
|
+
this.token = config.token;
|
|
35
|
+
this.scope = config.scope;
|
|
36
|
+
this.url = config.url;
|
|
37
|
+
// make sure sources are unique for later comparison
|
|
38
|
+
this.sources = arrayUnique_1.arrayUnique(config.sources);
|
|
39
|
+
this.options = StreamOptions_1.StreamOptions.fromModel(config.options);
|
|
40
|
+
this.messageStream$ = new rxjs_1.Subject();
|
|
41
|
+
this.statusStream$ = new rxjs_1.BehaviorSubject(SubscriberStatusEnum_1.SubscriberStatusEnum.STOPPED);
|
|
42
|
+
this.heartbeat = new StreamHeartbeat_1.StreamHeartbeat(this.identifier);
|
|
43
|
+
// autoResubscribeEnabled = false
|
|
44
|
+
// // Resubscribe when received messages above this limit.
|
|
45
|
+
// autoResubscribeMessageLimit = 100
|
|
46
|
+
// // In seconds
|
|
47
|
+
// autoResubscribeMinimumTime = 10
|
|
48
|
+
// messageTimeoutInSec = 10
|
|
49
|
+
// TODO: implement receive heartbeat handler
|
|
50
|
+
// this.heartbeat
|
|
51
|
+
// .setHealthTimeout(6000)
|
|
52
|
+
// .setHealthMaxTimeout(10)
|
|
53
|
+
// .setHealthMaxMisses(5)
|
|
54
|
+
// .setHealthCheckStatusCallback(async (status) => {
|
|
55
|
+
// console.log('heartbeat status', status)
|
|
56
|
+
// })
|
|
57
|
+
// .setHealthCheckErrorCallback(async () => {
|
|
58
|
+
// console.log('heartbeat error')
|
|
59
|
+
// })
|
|
60
|
+
RocosStore_1.RocosStore.getChangeSubject()
|
|
61
|
+
.pipe(operators_1.filter((message) => {
|
|
62
|
+
return message.type === 'token' && message.url === this.url;
|
|
63
|
+
}))
|
|
64
|
+
.subscribe((msg) => {
|
|
65
|
+
this.token = msg.data;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
setToken(token) {
|
|
69
|
+
this.token = token;
|
|
70
|
+
}
|
|
71
|
+
init() {
|
|
72
|
+
this.logger.info('Creating new stream instance');
|
|
73
|
+
// Register Receiver
|
|
74
|
+
this.registerReceiver();
|
|
75
|
+
}
|
|
76
|
+
stopStream() {
|
|
77
|
+
var _a;
|
|
78
|
+
(_a = this.heartbeat) === null || _a === void 0 ? void 0 : _a.stop();
|
|
79
|
+
this.stopInternal();
|
|
80
|
+
if (this.messagesTimer) {
|
|
81
|
+
clearInterval(this.messagesTimer);
|
|
82
|
+
}
|
|
83
|
+
this.subscriberStatus = SubscriberStatusEnum_1.SubscriberStatusEnum.STOPPED;
|
|
84
|
+
this.statusStream$.next(this.subscriberStatus);
|
|
85
|
+
}
|
|
86
|
+
addSubscription(params) {
|
|
87
|
+
this.logger.info('Adding subscriptions from stream', params.uniqueId);
|
|
88
|
+
if (!this.subscriptions.has(params.uniqueId)) {
|
|
89
|
+
// get subscriptions before change
|
|
90
|
+
const before = this.getSubscriptions();
|
|
91
|
+
this.subscriptions.set(params.uniqueId, Object.assign(Object.assign({}, params), { count: 1 }));
|
|
92
|
+
// get subscriptions after change
|
|
93
|
+
const after = this.getSubscriptions();
|
|
94
|
+
// assign the current values from state after change
|
|
95
|
+
this.callsignsLookup = new CallsignsLookup_1.CallsignsLookup(Object.keys(after));
|
|
96
|
+
this.sources = arrayUnique_1.arrayUnique(Object.values(after).reduce((a, v) => a.concat(v), []));
|
|
97
|
+
// compare before and after subscriptions and only add the difference
|
|
98
|
+
const { toAdd } = getSubscriptionsDifference_1.getSubscriptionsDifference(before, after);
|
|
99
|
+
// only subscribe if the subscriberId exists, otherwise the messages will be subscribed on lazy load
|
|
100
|
+
if (toAdd.callsigns.length && toAdd.sources.length) {
|
|
101
|
+
this.logger.debug('New subscriptions added, we need to refresh sources', { toAdd });
|
|
102
|
+
void this.takeTelemetryAction('subscribe', new CallsignsLookup_1.CallsignsLookup(toAdd.callsigns), toAdd.sources);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
const subs = this.subscriptions.get(params.uniqueId);
|
|
107
|
+
subs.count++;
|
|
108
|
+
this.subscriptions.set(params.uniqueId, subs);
|
|
109
|
+
this.logger.info('Stream subscriptions already exists, increasing count', params.uniqueId, subs.count);
|
|
110
|
+
}
|
|
111
|
+
RocosStore_1.RocosStore.getChangeSubject().next({ type: 'telemetry-subscription', url: this.url, data: this.subscriptions });
|
|
112
|
+
}
|
|
113
|
+
async removeSubscription(params, terminateReceiverGroup = false) {
|
|
114
|
+
this.logger.info('Removing subscriptions from stream', params.uniqueId);
|
|
115
|
+
if (!this.subscriptions.has(params.uniqueId))
|
|
116
|
+
return;
|
|
117
|
+
const subs = this.subscriptions.get(params.uniqueId);
|
|
118
|
+
subs.count--;
|
|
119
|
+
if (subs.count)
|
|
120
|
+
return;
|
|
121
|
+
this.logger.info('Removing subscriptions from stream registry', params.uniqueId);
|
|
122
|
+
const before = this.getSubscriptions();
|
|
123
|
+
this.subscriptions.delete(params.uniqueId);
|
|
124
|
+
const after = this.getSubscriptions();
|
|
125
|
+
// assign the current values from state after change
|
|
126
|
+
this.callsignsLookup = new CallsignsLookup_1.CallsignsLookup(Object.keys(after));
|
|
127
|
+
this.sources = arrayUnique_1.arrayUnique(Object.values(after).reduce((a, v) => a.concat(v), []));
|
|
128
|
+
const { toRemove } = getSubscriptionsDifference_1.getSubscriptionsDifference(before, after);
|
|
129
|
+
if (toRemove.callsigns.length && toRemove.sources.length) {
|
|
130
|
+
this.logger.debug('Subscriptions removed, we need to refresh sources', { toRemove });
|
|
131
|
+
try {
|
|
132
|
+
await this.takeTelemetryAction('unsubscribe', new CallsignsLookup_1.CallsignsLookup(toRemove.callsigns), toRemove.sources, terminateReceiverGroup);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
this.logger.error(`Failed to unsubscribe: ${err}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (!this.subscriptions.size) {
|
|
139
|
+
this.logger.info('No subscriptions remaining closing stream', params.uniqueId);
|
|
140
|
+
this.stopStream();
|
|
141
|
+
// self remove when no subscriptions a re left
|
|
142
|
+
void StreamRegister_1.StreamRegister.getInstance().removeStream(this);
|
|
143
|
+
this.logger.info('Stream closed');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
sendAcknowledgment(uid, status, noRetry) {
|
|
147
|
+
return this.sendAcknowledgmentInternal(uid, status, noRetry);
|
|
148
|
+
}
|
|
149
|
+
getSubscriptions() {
|
|
150
|
+
const subs = {};
|
|
151
|
+
this.subscriptions.forEach((data) => {
|
|
152
|
+
if (data.callsigns) {
|
|
153
|
+
data.callsigns.forEach((item) => {
|
|
154
|
+
if (!subs[item]) {
|
|
155
|
+
subs[item] = arrayUnique_1.arrayUnique([...data.sources]);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
subs[item] = arrayUnique_1.arrayUnique([...subs[item], ...data.sources]);
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return subs;
|
|
164
|
+
}
|
|
165
|
+
onData(message) {
|
|
166
|
+
// Increase the counter
|
|
167
|
+
this.receivedMessagesCount++;
|
|
168
|
+
const { source } = message;
|
|
169
|
+
const { callsign } = message;
|
|
170
|
+
let isRobotMessage = true;
|
|
171
|
+
const now = new Date();
|
|
172
|
+
// Update last message received time
|
|
173
|
+
this.lastMessageReceived = now;
|
|
174
|
+
// Update the message's project id
|
|
175
|
+
message.projectId = this.projectId;
|
|
176
|
+
message.type = 'json';
|
|
177
|
+
message.subId = this.scope;
|
|
178
|
+
message.subscriberId = this.subscriberId;
|
|
179
|
+
message.receivedAt = new Date();
|
|
180
|
+
switch (source) {
|
|
181
|
+
// Subscribe message
|
|
182
|
+
case grpc_1.GRPC_SOURCE_SUBSCRIBED:
|
|
183
|
+
// eslint-disable-next-line no-case-declarations
|
|
184
|
+
const json = RocosTelemetryMessage_1.RocosTelemetryMessage.getPayloadAsJSON(message);
|
|
185
|
+
// eslint-disable-next-line no-case-declarations
|
|
186
|
+
const { subscriberId } = json;
|
|
187
|
+
if (this.subscriberId && subscriberId) {
|
|
188
|
+
this.logger.warn(`Replacing old subscriberId (${this.subscriberId}) with a new one (${subscriberId})`);
|
|
189
|
+
}
|
|
190
|
+
// Update the subscriberId
|
|
191
|
+
this.subscriberId = subscriberId;
|
|
192
|
+
message.subscriberId = this.subscriberId;
|
|
193
|
+
this.logger.info('onData', `subscriberId has been updated - ${subscriberId}`, { subscriberId });
|
|
194
|
+
void this.takeTelemetryAction('subscribe');
|
|
195
|
+
this.heartbeat.start(this.sendHeartbeat, this.sendHeartbeatTime);
|
|
196
|
+
isRobotMessage = false;
|
|
197
|
+
break;
|
|
198
|
+
// Server heartbeat message
|
|
199
|
+
case grpc_1.GRPC_SOURCE_NOOP:
|
|
200
|
+
// this.logger.debug('onData', 'received noop message');
|
|
201
|
+
isRobotMessage = false;
|
|
202
|
+
break;
|
|
203
|
+
default:
|
|
204
|
+
isRobotMessage = true;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
if (!source) {
|
|
208
|
+
isRobotMessage = false;
|
|
209
|
+
}
|
|
210
|
+
// Update robot last message timestamp
|
|
211
|
+
if (isRobotMessage) {
|
|
212
|
+
this.lastRobotMessageReceived = now;
|
|
213
|
+
}
|
|
214
|
+
message.payload = RocosTelemetryMessage_1.RocosTelemetryMessage.getPayloadByType(message);
|
|
215
|
+
// Update stats
|
|
216
|
+
this.updateReceviedDataStatsWithMessage(message);
|
|
217
|
+
// Send message to subscribers
|
|
218
|
+
if (this.isRegisteredMessage(callsign, source) && this.messageStream$) {
|
|
219
|
+
this.messageStream$.next(message);
|
|
220
|
+
if (message.isackable && this.options.autoAcknowledgmentEnabled) {
|
|
221
|
+
this.sendAcknowledgment(message.uid, teletubby_pb_1.TelemetryAckStatus.OK, false);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else if (isRobotMessage) {
|
|
225
|
+
// acknowledge any way, as the user never receives this message
|
|
226
|
+
if (message.isackable) {
|
|
227
|
+
this.sendAcknowledgment(message.uid, teletubby_pb_1.TelemetryAckStatus.REJECT, true);
|
|
228
|
+
}
|
|
229
|
+
// All messages received should be subscribed.
|
|
230
|
+
this.logger.debug('onData', 'received unsubscribed message', {
|
|
231
|
+
callsign,
|
|
232
|
+
source,
|
|
233
|
+
callsigns: this.callsignsLookup,
|
|
234
|
+
sources: this.sources,
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async takeTelemetryAction(actionType, callsignsLookup, sources, terminate) {
|
|
239
|
+
this.logger.debug('takeTelemetryAction', actionType);
|
|
240
|
+
if (!this.subscriberId || !this.projectId) {
|
|
241
|
+
this.logger.debug('takeTelemetryAction', actionType, `${actionType} without subscriberId or projectId - message will not send out`, {
|
|
242
|
+
subscriberId: this.subscriberId,
|
|
243
|
+
projectId: this.projectId,
|
|
244
|
+
});
|
|
245
|
+
return Promise.resolve();
|
|
246
|
+
}
|
|
247
|
+
const actionSources = sources !== null && sources !== void 0 ? sources : this.sources;
|
|
248
|
+
const actionCallsigns = callsignsLookup !== null && callsignsLookup !== void 0 ? callsignsLookup : this.callsignsLookup;
|
|
249
|
+
if (this.callsignsLookup.lookupType === CallsignsEnums_1.CallsignsLookupType.List) {
|
|
250
|
+
// Compose the request message
|
|
251
|
+
const req = new teletubby_pb_1.TelemetryRequest();
|
|
252
|
+
const actions = [];
|
|
253
|
+
const action = new teletubby_pb_1.TelemetryAction();
|
|
254
|
+
action.setOperation(actionType);
|
|
255
|
+
action.setCallsignsList(actionCallsigns.lookupValue);
|
|
256
|
+
action.setSourcesList(actionSources);
|
|
257
|
+
if (actionType === 'unsubscribe' && terminate) {
|
|
258
|
+
this.addTerminateToAction(action);
|
|
259
|
+
}
|
|
260
|
+
actions.push(action);
|
|
261
|
+
req.setRequestedactionsList(actions);
|
|
262
|
+
req.setSubscriberid(this.subscriberId);
|
|
263
|
+
this.logger.debug('takeTelemetryAction', actionType, 'client.requestTelemetry', this.subscriberId);
|
|
264
|
+
// Send the message to back-end.
|
|
265
|
+
return this.requestTelemetry(req);
|
|
266
|
+
}
|
|
267
|
+
else if (actionCallsigns.lookupType === CallsignsEnums_1.CallsignsLookupType.Query) {
|
|
268
|
+
const lookupValue = actionCallsigns.lookupValue;
|
|
269
|
+
// Compose the request message
|
|
270
|
+
const req = new teletubby_pb_1.TelemetryQueryRequest();
|
|
271
|
+
req.setSubscriberid(this.subscriberId);
|
|
272
|
+
req.setSourcesList(actionSources);
|
|
273
|
+
req.setOperation(actionType);
|
|
274
|
+
const telemetryQuery = new teletubby_pb_1.Query();
|
|
275
|
+
telemetryQuery.setOperation(lookupValue.operation);
|
|
276
|
+
// We don't support nested query at the moment
|
|
277
|
+
const queryOrPredicatesList = [];
|
|
278
|
+
// Loop through user provided predicates to construct a telemetry query request
|
|
279
|
+
lookupValue.predicates.forEach((callsignsPredicate) => {
|
|
280
|
+
const queryOrPredicate = new teletubby_pb_1.QueryOrPredicate();
|
|
281
|
+
const predicate = new teletubby_pb_1.Predicate();
|
|
282
|
+
// Map user provided predicate value to proto object
|
|
283
|
+
predicate.setAttribute(callsignsPredicate.attribute);
|
|
284
|
+
predicate.setOperation(callsignsPredicate.operation);
|
|
285
|
+
predicate.setValue(callsignsPredicate.value);
|
|
286
|
+
queryOrPredicate.setPredicate(predicate);
|
|
287
|
+
queryOrPredicatesList.push(queryOrPredicate);
|
|
288
|
+
});
|
|
289
|
+
telemetryQuery.setQueryorpredicatesList(queryOrPredicatesList);
|
|
290
|
+
req.setCallsignquery(telemetryQuery);
|
|
291
|
+
this.logger.debug('takeTelemetryAction', actionType, 'client.requestTelemetry', this.subscriberId);
|
|
292
|
+
// Send the telemetry query request to back-end.
|
|
293
|
+
return this.requestTelemetryQuery(req);
|
|
294
|
+
}
|
|
295
|
+
return Promise.reject('Unsupported lookupType');
|
|
296
|
+
}
|
|
297
|
+
listenMessagesAndRenew() {
|
|
298
|
+
const timer = this.messagesTimer;
|
|
299
|
+
this.checkerStartedAt = new Date();
|
|
300
|
+
// Clear the previous timer first.
|
|
301
|
+
if (timer) {
|
|
302
|
+
clearInterval(timer);
|
|
303
|
+
}
|
|
304
|
+
this.messagesTimer = setInterval(() => {
|
|
305
|
+
var _a;
|
|
306
|
+
const now = new Date();
|
|
307
|
+
const latest = this.lastMessageReceived;
|
|
308
|
+
const latestRobot = this.lastRobotMessageReceived;
|
|
309
|
+
const startedAt = (_a = this.checkerStartedAt) !== null && _a !== void 0 ? _a : new Date();
|
|
310
|
+
const timeout = this.options.messageTimeoutInSec;
|
|
311
|
+
let shouldRetry = false;
|
|
312
|
+
let shouldAutoResubscribe = false;
|
|
313
|
+
if (latest && (now.getTime() - latest.getTime()) / 1000 > timeout) {
|
|
314
|
+
// If we received message before, we should retry after timeout.
|
|
315
|
+
shouldRetry = true;
|
|
316
|
+
}
|
|
317
|
+
else if (!latest && startedAt && (now.getTime() - startedAt.getTime()) / 1000 > timeout) {
|
|
318
|
+
// If we have not received message before, we should also retry after timeout.
|
|
319
|
+
shouldRetry = true;
|
|
320
|
+
}
|
|
321
|
+
if (latestRobot) {
|
|
322
|
+
// If we get robot messages at least once.
|
|
323
|
+
if ((now.getTime() - latestRobot.getTime()) / 1000 > timeout) {
|
|
324
|
+
// Offline
|
|
325
|
+
this.subscriberStatus = SubscriberStatusEnum_1.SubscriberStatusEnum.DEAD;
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
// Online
|
|
329
|
+
this.subscriberStatus = SubscriberStatusEnum_1.SubscriberStatusEnum.ALIVE;
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
else if ((now.getTime() - startedAt.getTime()) / 1000 > timeout) {
|
|
333
|
+
// If there is no robot messages received, then we compare with startedAt time.
|
|
334
|
+
// Timeout
|
|
335
|
+
this.subscriberStatus = SubscriberStatusEnum_1.SubscriberStatusEnum.DEAD;
|
|
336
|
+
}
|
|
337
|
+
else if (this.retryTimes <= 0) {
|
|
338
|
+
// Still trying, status unknown.
|
|
339
|
+
this.subscriberStatus = SubscriberStatusEnum_1.SubscriberStatusEnum.STOPPED;
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
// Tried multiple times. dead already.
|
|
343
|
+
this.subscriberStatus = SubscriberStatusEnum_1.SubscriberStatusEnum.DEAD;
|
|
344
|
+
}
|
|
345
|
+
if (this.options.autoResubscribeEnabled &&
|
|
346
|
+
this.receivedMessagesCount > this.options.autoResubscribeMessageLimit &&
|
|
347
|
+
(now.getTime() - startedAt.getTime()) / 1000 > this.options.autoResubscribeMinimumTime) {
|
|
348
|
+
// If received messages above the limit of resubscribing, we need to resubscribe.
|
|
349
|
+
shouldAutoResubscribe = true;
|
|
350
|
+
}
|
|
351
|
+
if (shouldRetry) {
|
|
352
|
+
this.logger.debug('listenMessagesAndRenew', { shouldRetry: true });
|
|
353
|
+
// Retry
|
|
354
|
+
this.messageTimeoutTryAgain();
|
|
355
|
+
}
|
|
356
|
+
else if (shouldAutoResubscribe) {
|
|
357
|
+
this.logger.debug('listenMessagesAndRenew', {
|
|
358
|
+
shouldAutoResubscribe: true,
|
|
359
|
+
});
|
|
360
|
+
// Resubscribe
|
|
361
|
+
this.autoResubscribe();
|
|
362
|
+
}
|
|
363
|
+
// Update subscriber status.
|
|
364
|
+
this.statusStream$.next(this.subscriberStatus);
|
|
365
|
+
// Debug stats
|
|
366
|
+
this.logger.debug('listenMessagesAndRenew', 'Message stats', this.receivedDataStats);
|
|
367
|
+
}, this.timerIntervalInSec * 1000);
|
|
368
|
+
}
|
|
369
|
+
addTerminateToAction(telemetryAction) {
|
|
370
|
+
const unsubscribeOperation = new teletubby_pb_1.UnsubscribeOperation();
|
|
371
|
+
const unsubscribeOption = new teletubby_pb_1.UnsubscribeOption();
|
|
372
|
+
const receiverGroupUnsubscribeOption = new teletubby_pb_1.ReceiverGroupUnsubscribeOption();
|
|
373
|
+
receiverGroupUnsubscribeOption.setTerminate(true);
|
|
374
|
+
unsubscribeOption.setReceivergroupunsubscribeoption(receiverGroupUnsubscribeOption);
|
|
375
|
+
unsubscribeOperation.addOptions(unsubscribeOption);
|
|
376
|
+
telemetryAction.setUnsubscribeoperation(unsubscribeOperation);
|
|
377
|
+
}
|
|
378
|
+
messageTimeoutTryAgain() {
|
|
379
|
+
// Increase retry times.
|
|
380
|
+
this.retryTimes++;
|
|
381
|
+
// Remove the received call anyway.
|
|
382
|
+
this.stopInternal();
|
|
383
|
+
this.lastMessageReceived = undefined;
|
|
384
|
+
this.lastRobotMessageReceived = undefined;
|
|
385
|
+
this.registerReceiver();
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Auto resubscribe to reduce CPU usage.
|
|
389
|
+
*/
|
|
390
|
+
autoResubscribe() {
|
|
391
|
+
// Reset
|
|
392
|
+
this.retryTimes = 0;
|
|
393
|
+
// Remove the received call anyway.
|
|
394
|
+
this.stopInternal();
|
|
395
|
+
this.lastMessageReceived = undefined;
|
|
396
|
+
this.lastRobotMessageReceived = undefined;
|
|
397
|
+
this.registerReceiver();
|
|
398
|
+
}
|
|
399
|
+
isFoundCallsign(callsign) {
|
|
400
|
+
return this.callsignsLookup.lookupType === CallsignsEnums_1.CallsignsLookupType.List
|
|
401
|
+
? this.callsignsLookup.lookupValue.indexOf(callsign) !== -1
|
|
402
|
+
: true; // If callsigns lookup option is query, we always return true
|
|
403
|
+
}
|
|
404
|
+
isFoundSource(source) {
|
|
405
|
+
return this.sources.indexOf(source) !== -1;
|
|
406
|
+
}
|
|
407
|
+
isRegisteredMessage(callsign, source) {
|
|
408
|
+
return this.isFoundCallsign(callsign) && this.isFoundSource(source);
|
|
409
|
+
}
|
|
410
|
+
updateReceviedDataStatsWithMessage(msg) {
|
|
411
|
+
const { source } = msg;
|
|
412
|
+
const { callsign } = msg;
|
|
413
|
+
const id = `${callsign}-${source}`;
|
|
414
|
+
if (!this.receivedDataStats) {
|
|
415
|
+
this.receivedDataStats = {};
|
|
416
|
+
}
|
|
417
|
+
const count = this.receivedDataStats[id] ? this.receivedDataStats[id] : 0;
|
|
418
|
+
this.receivedDataStats[id] = count + 1;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
exports.TelemetryStreamAbstract = TelemetryStreamAbstract;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { TelemetryAckStatusMap, TelemetryQueryRequest, TelemetryRequest } from '../../../grpc/teletubby/teletubby_pb';
|
|
2
|
+
import { ITelemetryStreamConfig } from '../../../models/ITelemetryStreamConfig';
|
|
3
|
+
import { TelemetryStreamAbstract } from './TelemetryStreamAbstract';
|
|
4
|
+
export declare class TelemetryStreamNode extends TelemetryStreamAbstract {
|
|
5
|
+
private client?;
|
|
6
|
+
private stream?;
|
|
7
|
+
private port;
|
|
8
|
+
private credentials;
|
|
9
|
+
constructor(config: ITelemetryStreamConfig);
|
|
10
|
+
protected stopInternal(): void;
|
|
11
|
+
protected registerReceiver(): () => void;
|
|
12
|
+
private getCredentials;
|
|
13
|
+
private registerStream;
|
|
14
|
+
private onError;
|
|
15
|
+
private onEnd;
|
|
16
|
+
private getMetaData;
|
|
17
|
+
protected requestTelemetry(req: TelemetryRequest): Promise<void>;
|
|
18
|
+
protected requestTelemetryQuery(req: TelemetryQueryRequest): Promise<void>;
|
|
19
|
+
protected sendAcknowledgmentInternal(uid: string, status: TelemetryAckStatusMap[keyof TelemetryAckStatusMap], noRetry: boolean): boolean;
|
|
20
|
+
protected sendHeartbeat(): void;
|
|
21
|
+
}
|