@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.
Files changed (587) hide show
  1. package/IRocosSDK.d.ts +55 -0
  2. package/IRocosSDK.js +6 -0
  3. package/README.md +90 -0
  4. package/RocosSDK.d.ts +138 -0
  5. package/RocosSDK.js +294 -0
  6. package/api/StreamRegister.d.ts +13 -0
  7. package/api/StreamRegister.js +58 -0
  8. package/api/atoms/StreamHeartbeat.d.ts +27 -0
  9. package/api/atoms/StreamHeartbeat.js +115 -0
  10. package/api/streams/caller/CallerStream.d.ts +13 -0
  11. package/api/streams/caller/CallerStream.js +85 -0
  12. package/api/streams/caller/CallerStreamAbstract.d.ts +28 -0
  13. package/api/streams/caller/CallerStreamAbstract.js +99 -0
  14. package/api/streams/caller/CallerStreamNode.d.ts +13 -0
  15. package/api/streams/caller/CallerStreamNode.js +128 -0
  16. package/api/streams/command/CommandStream.d.ts +12 -0
  17. package/api/streams/command/CommandStream.js +68 -0
  18. package/api/streams/command/CommandStreamAbstract.d.ts +24 -0
  19. package/api/streams/command/CommandStreamAbstract.js +72 -0
  20. package/api/streams/command/CommandStreamNode.d.ts +12 -0
  21. package/api/streams/command/CommandStreamNode.js +93 -0
  22. package/api/streams/control/ControlStream.d.ts +14 -0
  23. package/api/streams/control/ControlStream.js +81 -0
  24. package/api/streams/control/ControlStreamAbstract.d.ts +28 -0
  25. package/api/streams/control/ControlStreamAbstract.js +108 -0
  26. package/api/streams/control/ControlStreamNode.d.ts +14 -0
  27. package/api/streams/control/ControlStreamNode.js +98 -0
  28. package/api/streams/fileAccessor/FileAccessorStream.d.ts +10 -0
  29. package/api/streams/fileAccessor/FileAccessorStream.js +74 -0
  30. package/api/streams/fileAccessor/FileAccessorStreamAbstract.d.ts +26 -0
  31. package/api/streams/fileAccessor/FileAccessorStreamAbstract.js +82 -0
  32. package/api/streams/fileAccessor/FileAccessorStreamNode.d.ts +10 -0
  33. package/api/streams/fileAccessor/FileAccessorStreamNode.js +96 -0
  34. package/api/streams/search/SearchStream.d.ts +16 -0
  35. package/api/streams/search/SearchStream.js +120 -0
  36. package/api/streams/search/SearchStreamAbstract.d.ts +30 -0
  37. package/api/streams/search/SearchStreamAbstract.js +74 -0
  38. package/api/streams/search/SearchStreamNode.d.ts +16 -0
  39. package/api/streams/search/SearchStreamNode.js +143 -0
  40. package/api/streams/telemetry/TelemetryStream.d.ts +17 -0
  41. package/api/streams/telemetry/TelemetryStream.js +126 -0
  42. package/api/streams/telemetry/TelemetryStreamAbstract.d.ts +62 -0
  43. package/api/streams/telemetry/TelemetryStreamAbstract.js +421 -0
  44. package/api/streams/telemetry/TelemetryStreamNode.d.ts +21 -0
  45. package/api/streams/telemetry/TelemetryStreamNode.js +195 -0
  46. package/api/streams/webRTCSignalling/WebRTCSignallingStream.d.ts +44 -0
  47. package/api/streams/webRTCSignalling/WebRTCSignallingStream.js +67 -0
  48. package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.d.ts +32 -0
  49. package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.js +65 -0
  50. package/constants/api.d.ts +121 -0
  51. package/constants/api.js +126 -0
  52. package/constants/grpc.d.ts +5 -0
  53. package/constants/grpc.js +8 -0
  54. package/constants/identifier.d.ts +6 -0
  55. package/constants/identifier.js +9 -0
  56. package/constants/timezones.d.ts +2 -0
  57. package/constants/timezones.js +430 -0
  58. package/demo/angular/.editorconfig +16 -0
  59. package/demo/angular/.eslintignore +4 -0
  60. package/demo/angular/.eslintrc.json +50 -0
  61. package/demo/angular/README.md +36 -0
  62. package/demo/angular/angular.json +132 -0
  63. package/demo/angular/karma.conf.js +44 -0
  64. package/demo/angular/package.json +41 -0
  65. package/demo/angular/src/app/app.component.css +0 -0
  66. package/demo/angular/src/app/app.component.html +9 -0
  67. package/demo/angular/src/app/app.component.ts +10 -0
  68. package/demo/angular/src/app/app.module.ts +38 -0
  69. package/demo/angular/src/app/components/assets/assets.component.css +0 -0
  70. package/demo/angular/src/app/components/assets/assets.component.html +29 -0
  71. package/demo/angular/src/app/components/assets/assets.component.ts +107 -0
  72. package/demo/angular/src/app/components/auth/auth.component.css +0 -0
  73. package/demo/angular/src/app/components/auth/auth.component.html +27 -0
  74. package/demo/angular/src/app/components/auth/auth.component.ts +33 -0
  75. package/demo/angular/src/app/components/caller/caller.component.css +0 -0
  76. package/demo/angular/src/app/components/caller/caller.component.html +22 -0
  77. package/demo/angular/src/app/components/caller/caller.component.ts +61 -0
  78. package/demo/angular/src/app/components/command/command.component.css +0 -0
  79. package/demo/angular/src/app/components/command/command.component.html +22 -0
  80. package/demo/angular/src/app/components/command/command.component.ts +60 -0
  81. package/demo/angular/src/app/components/integrations/integrations.component.ts +43 -0
  82. package/demo/angular/src/app/components/robots/robots.component.css +0 -0
  83. package/demo/angular/src/app/components/robots/robots.component.html +13 -0
  84. package/demo/angular/src/app/components/robots/robots.component.ts +26 -0
  85. package/demo/angular/src/app/components/sdk/sdk.component.css +0 -0
  86. package/demo/angular/src/app/components/sdk/sdk.component.html +43 -0
  87. package/demo/angular/src/app/components/sdk/sdk.component.ts +50 -0
  88. package/demo/angular/src/app/components/subscription/subscription.component.css +0 -0
  89. package/demo/angular/src/app/components/subscription/subscription.component.html +6 -0
  90. package/demo/angular/src/app/components/subscription/subscription.component.ts +40 -0
  91. package/demo/angular/src/app/components/telemetry/telemetry.component.css +0 -0
  92. package/demo/angular/src/app/components/telemetry/telemetry.component.html +19 -0
  93. package/demo/angular/src/app/components/telemetry/telemetry.component.ts +61 -0
  94. package/demo/angular/src/app/components/token/token.component.css +0 -0
  95. package/demo/angular/src/app/components/token/token.component.html +10 -0
  96. package/demo/angular/src/app/components/token/token.component.ts +18 -0
  97. package/demo/angular/src/app/components/video/p2pvideo/index.ts +646 -0
  98. package/demo/angular/src/app/components/video/video-source.ts +315 -0
  99. package/demo/angular/src/app/components/video/video.component.css +6 -0
  100. package/demo/angular/src/app/components/video/video.component.html +54 -0
  101. package/demo/angular/src/app/components/video/video.component.ts +151 -0
  102. package/demo/angular/src/app/services/sdk.service.ts +193 -0
  103. package/demo/angular/src/assets/.gitkeep +0 -0
  104. package/demo/angular/src/assets/HKGrotesk-Bold.otf +0 -0
  105. package/demo/angular/src/assets/HKGrotesk-Regular.otf +0 -0
  106. package/demo/angular/src/assets/logo.svg +16 -0
  107. package/demo/angular/src/environments/environment.prod.ts +3 -0
  108. package/demo/angular/src/environments/environment.ts +16 -0
  109. package/demo/angular/src/favicon.ico +0 -0
  110. package/demo/angular/src/index.html +15 -0
  111. package/demo/angular/src/main.ts +7 -0
  112. package/demo/angular/src/polyfills.ts +53 -0
  113. package/demo/angular/src/styles.css +198 -0
  114. package/demo/angular/tsconfig.app.json +15 -0
  115. package/demo/angular/tsconfig.json +39 -0
  116. package/demo/html/README.md +8 -0
  117. package/demo/html/assets/HKGrotesk-Bold.otf +0 -0
  118. package/demo/html/assets/HKGrotesk-Regular.otf +0 -0
  119. package/demo/html/assets/logo.svg +16 -0
  120. package/demo/html/favicon.ico +0 -0
  121. package/demo/html/index.html +416 -0
  122. package/demo/html/rocos-js-sdk.js +3 -0
  123. package/demo/html/rocos-js-sdk.js.LICENSE.txt +8 -0
  124. package/demo/html/rocos-js-sdk.js.map +1 -0
  125. package/demo/html/styles.css +190 -0
  126. package/demo/node/README.md +17 -0
  127. package/demo/node/index.js +134 -0
  128. package/demo/node/package.json +8 -0
  129. package/demo/react/.env +1 -0
  130. package/demo/react/.env.dist +1 -0
  131. package/demo/react/.eslintrc.json +46 -0
  132. package/demo/react/README.md +65 -0
  133. package/demo/react/package.json +60 -0
  134. package/demo/react/public/favicon.ico +0 -0
  135. package/demo/react/public/index.html +43 -0
  136. package/demo/react/public/logo192.png +0 -0
  137. package/demo/react/public/logo512.png +0 -0
  138. package/demo/react/public/manifest.json +25 -0
  139. package/demo/react/public/robots.txt +3 -0
  140. package/demo/react/src/App.css +190 -0
  141. package/demo/react/src/App.tsx +31 -0
  142. package/demo/react/src/actions/index.ts +8 -0
  143. package/demo/react/src/actions/sdkActions.ts +62 -0
  144. package/demo/react/src/assets/HKGrotesk-Bold.otf +0 -0
  145. package/demo/react/src/assets/HKGrotesk-Regular.otf +0 -0
  146. package/demo/react/src/assets/logo.svg +16 -0
  147. package/demo/react/src/components/AuthForm.tsx +76 -0
  148. package/demo/react/src/components/CallerBox.tsx +53 -0
  149. package/demo/react/src/components/CallerForm.tsx +98 -0
  150. package/demo/react/src/components/CommandBox.tsx +47 -0
  151. package/demo/react/src/components/CommandForm.tsx +98 -0
  152. package/demo/react/src/components/RobotsForm.tsx +51 -0
  153. package/demo/react/src/components/SubscriptionBox.tsx +55 -0
  154. package/demo/react/src/components/TelemetryForm.tsx +98 -0
  155. package/demo/react/src/components/TokenForm.tsx +39 -0
  156. package/demo/react/src/config.json +14 -0
  157. package/demo/react/src/controllers/RocosSDKController.ts +48 -0
  158. package/demo/react/src/helpers/deepEqual.ts +27 -0
  159. package/demo/react/src/hooks/useInput.ts +29 -0
  160. package/demo/react/src/index.css +11 -0
  161. package/demo/react/src/index.tsx +26 -0
  162. package/demo/react/src/react-app-env.d.ts +1 -0
  163. package/demo/react/src/reducers/sdkReducer.ts +133 -0
  164. package/demo/react/src/reportWebVitals.ts +15 -0
  165. package/demo/react/src/selectors/sdkSelector.ts +11 -0
  166. package/demo/react/src/setupTests.ts +5 -0
  167. package/demo/react/src/store.ts +14 -0
  168. package/demo/react/tsconfig.json +26 -0
  169. package/demo/sdk-sizer/dist/sdk-sizer/3rdpartylicenses.txt +975 -0
  170. package/demo/sdk-sizer/dist/sdk-sizer/favicon.ico +0 -0
  171. package/demo/sdk-sizer/dist/sdk-sizer/index.html +12 -0
  172. package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js +2 -0
  173. package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js.map +1 -0
  174. package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js +2 -0
  175. package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js.map +1 -0
  176. package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js +2 -0
  177. package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js.map +1 -0
  178. package/demo/sdk-sizer/dist/sdk-sizer/stats.json +1 -0
  179. package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css +2 -0
  180. package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css.map +1 -0
  181. package/grpc/file-accessor/filagree_grpc_pb.d.ts +41 -0
  182. package/grpc/file-accessor/filagree_grpc_pb.js +121 -0
  183. package/grpc/file-accessor/filagree_pb.d.ts +339 -0
  184. package/grpc/file-accessor/filagree_pb.js +2261 -0
  185. package/grpc/file-accessor/filagree_pb_service.d.ts +115 -0
  186. package/grpc/file-accessor/filagree_pb_service.js +257 -0
  187. package/grpc/rambo/rambo.v1_grpc_pb.d.ts +39 -0
  188. package/grpc/rambo/rambo.v1_grpc_pb.js +73 -0
  189. package/grpc/rambo/rambo.v1_pb.d.ts +365 -0
  190. package/grpc/rambo/rambo.v1_pb.js +2469 -0
  191. package/grpc/rambo/rambo.v1_pb_service.d.ts +76 -0
  192. package/grpc/rambo/rambo.v1_pb_service.js +138 -0
  193. package/grpc/rambo/uri.v1_grpc_pb.d.ts +1 -0
  194. package/grpc/rambo/uri.v1_grpc_pb.js +1 -0
  195. package/grpc/rambo/uri.v1_pb.d.ts +80 -0
  196. package/grpc/rambo/uri.v1_pb.js +563 -0
  197. package/grpc/rambo/uri.v1_pb_service.d.ts +3 -0
  198. package/grpc/rambo/uri.v1_pb_service.js +3 -0
  199. package/grpc/robot-control/conker_grpc_pb.d.ts +46 -0
  200. package/grpc/robot-control/conker_grpc_pb.js +143 -0
  201. package/grpc/robot-control/conker_pb.d.ts +168 -0
  202. package/grpc/robot-control/conker_pb.js +1287 -0
  203. package/grpc/robot-control/conker_pb_service.d.ts +126 -0
  204. package/grpc/robot-control/conker_pb_service.js +301 -0
  205. package/grpc/serviette/common.v1_grpc_pb.d.ts +1 -0
  206. package/grpc/serviette/common.v1_grpc_pb.js +1 -0
  207. package/grpc/serviette/common.v1_pb.d.ts +8 -0
  208. package/grpc/serviette/common.v1_pb.js +45 -0
  209. package/grpc/serviette/common.v1_pb_service.d.ts +3 -0
  210. package/grpc/serviette/common.v1_pb_service.js +3 -0
  211. package/grpc/serviette/serviette.v1_grpc_pb.d.ts +137 -0
  212. package/grpc/serviette/serviette.v1_grpc_pb.js +331 -0
  213. package/grpc/serviette/serviette.v1_pb.d.ts +884 -0
  214. package/grpc/serviette/serviette.v1_pb.js +6363 -0
  215. package/grpc/serviette/serviette.v1_pb_service.d.ts +278 -0
  216. package/grpc/serviette/serviette.v1_pb_service.js +699 -0
  217. package/grpc/serviette/uri.v1_grpc_pb.d.ts +1 -0
  218. package/grpc/serviette/uri.v1_grpc_pb.js +1 -0
  219. package/grpc/serviette/uri.v1_pb.d.ts +102 -0
  220. package/grpc/serviette/uri.v1_pb.js +741 -0
  221. package/grpc/serviette/uri.v1_pb_service.d.ts +3 -0
  222. package/grpc/serviette/uri.v1_pb_service.js +3 -0
  223. package/grpc/slowlane/slowlane_grpc_pb.d.ts +38 -0
  224. package/grpc/slowlane/slowlane_grpc_pb.js +132 -0
  225. package/grpc/slowlane/slowlane_pb.d.ts +373 -0
  226. package/grpc/slowlane/slowlane_pb.js +2908 -0
  227. package/grpc/slowlane/slowlane_pb_service.d.ts +112 -0
  228. package/grpc/slowlane/slowlane_pb_service.js +189 -0
  229. package/grpc/teletubby/teletubby_grpc_pb.d.ts +73 -0
  230. package/grpc/teletubby/teletubby_grpc_pb.js +231 -0
  231. package/grpc/teletubby/teletubby_pb.d.ts +647 -0
  232. package/grpc/teletubby/teletubby_pb.js +4786 -0
  233. package/grpc/teletubby/teletubby_pb_service.d.ts +193 -0
  234. package/grpc/teletubby/teletubby_pb_service.js +436 -0
  235. package/grpc/video/pigeon_grpc_pb.d.ts +59 -0
  236. package/grpc/video/pigeon_grpc_pb.js +180 -0
  237. package/grpc/video/pigeon_pb.d.ts +237 -0
  238. package/grpc/video/pigeon_pb.js +1775 -0
  239. package/grpc/video/pigeon_pb_service.d.ts +152 -0
  240. package/grpc/video/pigeon_pb_service.js +292 -0
  241. package/helpers/arrayRemove.d.ts +1 -0
  242. package/helpers/arrayRemove.js +7 -0
  243. package/helpers/arrayUnique.d.ts +1 -0
  244. package/helpers/arrayUnique.js +7 -0
  245. package/helpers/average.d.ts +1 -0
  246. package/helpers/average.js +11 -0
  247. package/helpers/cleanObject.d.ts +1 -0
  248. package/helpers/cleanObject.js +20 -0
  249. package/helpers/enviroment.d.ts +8 -0
  250. package/helpers/enviroment.js +20 -0
  251. package/helpers/flattenCallsignsLookup.d.ts +2 -0
  252. package/helpers/flattenCallsignsLookup.js +10 -0
  253. package/helpers/flattenObject.d.ts +1 -0
  254. package/helpers/flattenObject.js +17 -0
  255. package/helpers/formatServiceUrl.d.ts +1 -0
  256. package/helpers/formatServiceUrl.js +11 -0
  257. package/helpers/generateUUID.d.ts +1 -0
  258. package/helpers/generateUUID.js +8 -0
  259. package/helpers/getSubscriptionsDifference.d.ts +10 -0
  260. package/helpers/getSubscriptionsDifference.js +39 -0
  261. package/helpers/getUniqueConfigKey.d.ts +7 -0
  262. package/helpers/getUniqueConfigKey.js +19 -0
  263. package/helpers/getUniqueId.d.ts +9 -0
  264. package/helpers/getUniqueId.js +15 -0
  265. package/helpers/getUnixTimeMs.d.ts +1 -0
  266. package/helpers/getUnixTimeMs.js +8 -0
  267. package/helpers/index.d.ts +3 -0
  268. package/helpers/index.js +15 -0
  269. package/helpers/nanosecondToMillisecond.d.ts +1 -0
  270. package/helpers/nanosecondToMillisecond.js +7 -0
  271. package/helpers/randomString.d.ts +1 -0
  272. package/helpers/randomString.js +7 -0
  273. package/helpers/standardDeviation.d.ts +1 -0
  274. package/helpers/standardDeviation.js +16 -0
  275. package/helpers/stringToUint8Array.d.ts +1 -0
  276. package/helpers/stringToUint8Array.js +14 -0
  277. package/helpers/uint8ArrayToString.d.ts +1 -0
  278. package/helpers/uint8ArrayToString.js +15 -0
  279. package/index.d.ts +7 -0
  280. package/index.js +19 -0
  281. package/logger/RocosLogger.d.ts +7 -0
  282. package/logger/RocosLogger.js +63 -0
  283. package/models/ExportDataQuery.d.ts +8 -0
  284. package/models/ExportDataQuery.js +17 -0
  285. package/models/ExternalProject.d.ts +6 -0
  286. package/models/ExternalProject.js +6 -0
  287. package/models/IBaseService.d.ts +3 -0
  288. package/models/IBaseService.js +2 -0
  289. package/models/IConfigGroup.d.ts +5 -0
  290. package/models/IConfigGroup.js +2 -0
  291. package/models/IDebugLevel.d.ts +2 -0
  292. package/models/IDebugLevel.js +2 -0
  293. package/models/IExportDataQuery.d.ts +9 -0
  294. package/models/IExportDataQuery.js +2 -0
  295. package/models/IFunctionConfig.d.ts +8 -0
  296. package/models/IFunctionConfig.js +2 -0
  297. package/models/IInvitation.d.ts +6 -0
  298. package/models/IInvitation.js +2 -0
  299. package/models/IInvitationExists.d.ts +4 -0
  300. package/models/IInvitationExists.js +2 -0
  301. package/models/IOperation.d.ts +6 -0
  302. package/models/IOperation.js +2 -0
  303. package/models/IPersonalAccessToken.d.ts +16 -0
  304. package/models/IPersonalAccessToken.js +2 -0
  305. package/models/IProject.d.ts +4 -0
  306. package/models/IProject.js +2 -0
  307. package/models/IProjectApplication.d.ts +6 -0
  308. package/models/IProjectApplication.js +2 -0
  309. package/models/IRobot.d.ts +17 -0
  310. package/models/IRobot.js +2 -0
  311. package/models/IRobotConfig.d.ts +8 -0
  312. package/models/IRobotConfig.js +2 -0
  313. package/models/IRobotPlugin.d.ts +3 -0
  314. package/models/IRobotPlugin.js +2 -0
  315. package/models/IRobotTemplate.d.ts +10 -0
  316. package/models/IRobotTemplate.js +2 -0
  317. package/models/IRocosSDKConfig.d.ts +25 -0
  318. package/models/IRocosSDKConfig.js +2 -0
  319. package/models/ISignupParams.d.ts +8 -0
  320. package/models/ISignupParams.js +2 -0
  321. package/models/ISource.d.ts +8 -0
  322. package/models/ISource.js +2 -0
  323. package/models/IStream.d.ts +9 -0
  324. package/models/IStream.js +2 -0
  325. package/models/IStreamConfig.d.ts +9 -0
  326. package/models/IStreamConfig.js +2 -0
  327. package/models/IStreamOptions.d.ts +7 -0
  328. package/models/IStreamOptions.js +2 -0
  329. package/models/IStreamSource.d.ts +8 -0
  330. package/models/IStreamSource.js +2 -0
  331. package/models/ISubscriberStatus.d.ts +5 -0
  332. package/models/ISubscriberStatus.js +2 -0
  333. package/models/ITelemetryStreamConfig.d.ts +7 -0
  334. package/models/ITelemetryStreamConfig.js +2 -0
  335. package/models/IToken.d.ts +5 -0
  336. package/models/IToken.js +2 -0
  337. package/models/IWidget.d.ts +25 -0
  338. package/models/IWidget.js +2 -0
  339. package/models/IWidgetLineGroup.d.ts +8 -0
  340. package/models/IWidgetLineGroup.js +2 -0
  341. package/models/ResponseLevelEnum.d.ts +6 -0
  342. package/models/ResponseLevelEnum.js +10 -0
  343. package/models/Robot.d.ts +19 -0
  344. package/models/Robot.js +12 -0
  345. package/models/RobotConfig.d.ts +10 -0
  346. package/models/RobotConfig.js +9 -0
  347. package/models/RobotPlugin.d.ts +5 -0
  348. package/models/RobotPlugin.js +9 -0
  349. package/models/RobotTemplate.d.ts +12 -0
  350. package/models/RobotTemplate.js +30 -0
  351. package/models/RocosError.d.ts +30 -0
  352. package/models/RocosError.js +43 -0
  353. package/models/ServiceEnum.d.ts +26 -0
  354. package/models/ServiceEnum.js +30 -0
  355. package/models/Stream.d.ts +10 -0
  356. package/models/Stream.js +15 -0
  357. package/models/StreamOptions.d.ts +9 -0
  358. package/models/StreamOptions.js +37 -0
  359. package/models/StreamSource.d.ts +10 -0
  360. package/models/StreamSource.js +15 -0
  361. package/models/SubscriberStatusEnum.d.ts +6 -0
  362. package/models/SubscriberStatusEnum.js +10 -0
  363. package/models/Token.d.ts +8 -0
  364. package/models/Token.js +15 -0
  365. package/models/Widget.d.ts +27 -0
  366. package/models/Widget.js +16 -0
  367. package/models/WidgetLineGroup.d.ts +10 -0
  368. package/models/WidgetLineGroup.js +9 -0
  369. package/models/asset-storage/AssetModelItem.d.ts +29 -0
  370. package/models/asset-storage/AssetModelItem.js +2 -0
  371. package/models/caller/IRocosCallerMessageChunk.d.ts +9 -0
  372. package/models/caller/IRocosCallerMessageChunk.js +2 -0
  373. package/models/caller/IRocosCallerMessageChunks.d.ts +5 -0
  374. package/models/caller/IRocosCallerMessageChunks.js +2 -0
  375. package/models/caller/IRocosCallerMessageHeartbeat.d.ts +2 -0
  376. package/models/caller/IRocosCallerMessageHeartbeat.js +2 -0
  377. package/models/caller/IRocosCallerMessageResponse.d.ts +9 -0
  378. package/models/caller/IRocosCallerMessageResponse.js +2 -0
  379. package/models/caller/IRocosCallerMessageResponseAck.d.ts +2 -0
  380. package/models/caller/IRocosCallerMessageResponseAck.js +2 -0
  381. package/models/caller/IRocosCallerMessageResponseResult.d.ts +2 -0
  382. package/models/caller/IRocosCallerMessageResponseResult.js +2 -0
  383. package/models/caller/IRocosCallerMessageResponseUid.d.ts +2 -0
  384. package/models/caller/IRocosCallerMessageResponseUid.js +2 -0
  385. package/models/caller/IRocosCallerMessageResponses.d.ts +5 -0
  386. package/models/caller/IRocosCallerMessageResponses.js +2 -0
  387. package/models/caller/RocosCallerResultStatus.d.ts +1 -0
  388. package/models/caller/RocosCallerResultStatus.js +5 -0
  389. package/models/callsigns/CallsignsEnums.d.ts +13 -0
  390. package/models/callsigns/CallsignsEnums.js +20 -0
  391. package/models/callsigns/CallsignsLookup.d.ts +8 -0
  392. package/models/callsigns/CallsignsLookup.js +33 -0
  393. package/models/callsigns/CallsignsQuery.d.ts +9 -0
  394. package/models/callsigns/CallsignsQuery.js +18 -0
  395. package/models/callsigns/CallsignsQueryPredicate.d.ts +9 -0
  396. package/models/callsigns/CallsignsQueryPredicate.js +19 -0
  397. package/models/command/IRocosCommandMessageHeartbeat.d.ts +2 -0
  398. package/models/command/IRocosCommandMessageHeartbeat.js +2 -0
  399. package/models/command/IRocosCommandMessageResponse.d.ts +2 -0
  400. package/models/command/IRocosCommandMessageResponse.js +2 -0
  401. package/models/command/RocosCommandResultStatus.d.ts +1 -0
  402. package/models/command/RocosCommandResultStatus.js +5 -0
  403. package/models/file/FileEnums.d.ts +30 -0
  404. package/models/file/FileEnums.js +36 -0
  405. package/models/index.d.ts +101 -0
  406. package/models/index.js +113 -0
  407. package/models/integrations/Overlay.d.ts +49 -0
  408. package/models/integrations/Overlay.js +2 -0
  409. package/models/integrations/Plan.d.ts +324 -0
  410. package/models/integrations/Plan.js +2 -0
  411. package/models/maps/Map.d.ts +12 -0
  412. package/models/maps/Map.js +2 -0
  413. package/models/message/IRocosCallerMessage.d.ts +8 -0
  414. package/models/message/IRocosCallerMessage.js +2 -0
  415. package/models/message/IRocosChangeMessage.d.ts +6 -0
  416. package/models/message/IRocosChangeMessage.js +2 -0
  417. package/models/message/IRocosCommandMessage.d.ts +6 -0
  418. package/models/message/IRocosCommandMessage.js +2 -0
  419. package/models/message/IRocosControlMessage.d.ts +7 -0
  420. package/models/message/IRocosControlMessage.js +2 -0
  421. package/models/message/IRocosOpResultMessage.d.ts +6 -0
  422. package/models/message/IRocosOpResultMessage.js +2 -0
  423. package/models/message/IRocosSearchMessage.d.ts +5 -0
  424. package/models/message/IRocosSearchMessage.js +2 -0
  425. package/models/message/IRocosSearchRowMessage.d.ts +9 -0
  426. package/models/message/IRocosSearchRowMessage.js +2 -0
  427. package/models/message/IRocosSearchStatusMessage.d.ts +4 -0
  428. package/models/message/IRocosSearchStatusMessage.js +2 -0
  429. package/models/message/IRocosTelemetryMessage.d.ts +18 -0
  430. package/models/message/IRocosTelemetryMessage.js +2 -0
  431. package/models/message/IStreamStatusMessage.d.ts +5 -0
  432. package/models/message/IStreamStatusMessage.js +2 -0
  433. package/models/message/RocosCallerMessage.d.ts +12 -0
  434. package/models/message/RocosCallerMessage.js +23 -0
  435. package/models/message/RocosCommandMessage.d.ts +10 -0
  436. package/models/message/RocosCommandMessage.js +16 -0
  437. package/models/message/RocosControlMessage.d.ts +11 -0
  438. package/models/message/RocosControlMessage.js +18 -0
  439. package/models/message/RocosOpResultMessage.d.ts +9 -0
  440. package/models/message/RocosOpResultMessage.js +22 -0
  441. package/models/message/RocosSearchMessage.d.ts +9 -0
  442. package/models/message/RocosSearchMessage.js +28 -0
  443. package/models/message/RocosSearchRowMessage.d.ts +13 -0
  444. package/models/message/RocosSearchRowMessage.js +20 -0
  445. package/models/message/RocosTelemetryMessage.d.ts +24 -0
  446. package/models/message/RocosTelemetryMessage.js +105 -0
  447. package/models/params/ICallerParams.d.ts +15 -0
  448. package/models/params/ICallerParams.js +2 -0
  449. package/models/params/ICommandParams.d.ts +9 -0
  450. package/models/params/ICommandParams.js +2 -0
  451. package/models/params/IControlParams.d.ts +8 -0
  452. package/models/params/IControlParams.js +2 -0
  453. package/models/params/IFileAccessorParams.d.ts +11 -0
  454. package/models/params/IFileAccessorParams.js +2 -0
  455. package/models/params/ISearchParams.d.ts +10 -0
  456. package/models/params/ISearchParams.js +2 -0
  457. package/models/params/ITelemetryParams.d.ts +18 -0
  458. package/models/params/ITelemetryParams.js +2 -0
  459. package/models/params/IWebRTCSignallingParams.d.ts +21 -0
  460. package/models/params/IWebRTCSignallingParams.js +2 -0
  461. package/models/projects/ProjectUser.d.ts +6 -0
  462. package/models/projects/ProjectUser.js +2 -0
  463. package/models/schedule/IScheduleAction.d.ts +13 -0
  464. package/models/schedule/IScheduleAction.js +9 -0
  465. package/models/schedule/IScheduleInfo.d.ts +11 -0
  466. package/models/schedule/IScheduleInfo.js +2 -0
  467. package/models/schedule/IScheduleJob.d.ts +12 -0
  468. package/models/schedule/IScheduleJob.js +2 -0
  469. package/models/search/SearchQueryFilter.d.ts +5 -0
  470. package/models/search/SearchQueryFilter.js +9 -0
  471. package/models/search/SearchStreamQuery.d.ts +15 -0
  472. package/models/search/SearchStreamQuery.js +10 -0
  473. package/models/stream/IBaseStream.d.ts +8 -0
  474. package/models/stream/IBaseStream.js +2 -0
  475. package/models/stream/ICallerStream.d.ts +8 -0
  476. package/models/stream/ICallerStream.js +2 -0
  477. package/models/stream/ICommandStream.d.ts +7 -0
  478. package/models/stream/ICommandStream.js +2 -0
  479. package/models/stream/IControlStream.d.ts +9 -0
  480. package/models/stream/IControlStream.js +2 -0
  481. package/models/stream/IFileAccessorStream.d.ts +10 -0
  482. package/models/stream/IFileAccessorStream.js +2 -0
  483. package/models/stream/ISearchStream.d.ts +11 -0
  484. package/models/stream/ISearchStream.js +2 -0
  485. package/models/stream/ITelemetryStream.d.ts +10 -0
  486. package/models/stream/ITelemetryStream.js +2 -0
  487. package/models/stream/IWebRTCSignallingStream.d.ts +41 -0
  488. package/models/stream/IWebRTCSignallingStream.js +7 -0
  489. package/models/types.d.ts +5 -0
  490. package/models/types.js +2 -0
  491. package/node/RocosSDKNode.d.ts +42 -0
  492. package/node/RocosSDKNode.js +148 -0
  493. package/node/index.d.ts +7 -0
  494. package/node/index.js +19 -0
  495. package/package.json +25 -6
  496. package/services/AssetStorageService.d.ts +92 -0
  497. package/services/AssetStorageService.js +153 -0
  498. package/services/AuthService.d.ts +61 -0
  499. package/services/AuthService.js +154 -0
  500. package/services/BaseServiceAbstract.d.ts +38 -0
  501. package/services/BaseServiceAbstract.js +103 -0
  502. package/services/CallerService.d.ts +22 -0
  503. package/services/CallerService.js +96 -0
  504. package/services/CallerServiceNode.d.ts +6 -0
  505. package/services/CallerServiceNode.js +11 -0
  506. package/services/CommandService.d.ts +21 -0
  507. package/services/CommandService.js +81 -0
  508. package/services/CommandServiceNode.d.ts +6 -0
  509. package/services/CommandServiceNode.js +11 -0
  510. package/services/ConfigGroupService.d.ts +89 -0
  511. package/services/ConfigGroupService.js +157 -0
  512. package/services/ControlService.d.ts +23 -0
  513. package/services/ControlService.js +100 -0
  514. package/services/ControlServiceNode.d.ts +6 -0
  515. package/services/ControlServiceNode.js +11 -0
  516. package/services/DashboardService.d.ts +97 -0
  517. package/services/DashboardService.js +146 -0
  518. package/services/EventService.d.ts +53 -0
  519. package/services/EventService.js +89 -0
  520. package/services/FileAccessorService.d.ts +25 -0
  521. package/services/FileAccessorService.js +85 -0
  522. package/services/FileAccessorServiceNode.d.ts +6 -0
  523. package/services/FileAccessorServiceNode.js +11 -0
  524. package/services/FunctionService.d.ts +68 -0
  525. package/services/FunctionService.js +103 -0
  526. package/services/IntegrationService.d.ts +48 -0
  527. package/services/IntegrationService.js +77 -0
  528. package/services/MapService.d.ts +96 -0
  529. package/services/MapService.js +119 -0
  530. package/services/PlatformTimeService.d.ts +35 -0
  531. package/services/PlatformTimeService.js +160 -0
  532. package/services/ProfileService.d.ts +244 -0
  533. package/services/ProfileService.js +366 -0
  534. package/services/ProjectService.d.ts +110 -0
  535. package/services/ProjectService.js +164 -0
  536. package/services/RobotService.d.ts +282 -0
  537. package/services/RobotService.js +467 -0
  538. package/services/ScheduleService.d.ts +22 -0
  539. package/services/ScheduleService.js +40 -0
  540. package/services/SearchService.d.ts +25 -0
  541. package/services/SearchService.js +93 -0
  542. package/services/SearchServiceNode.d.ts +6 -0
  543. package/services/SearchServiceNode.js +11 -0
  544. package/services/SpotProvisioningService.d.ts +14 -0
  545. package/services/SpotProvisioningService.js +43 -0
  546. package/services/SpotProvisioningServiceNode.d.ts +15 -0
  547. package/services/SpotProvisioningServiceNode.js +43 -0
  548. package/services/StreamService.d.ts +98 -0
  549. package/services/StreamService.js +146 -0
  550. package/services/TelemetryService.d.ts +43 -0
  551. package/services/TelemetryService.js +144 -0
  552. package/services/TelemetryServiceNode.d.ts +6 -0
  553. package/services/TelemetryServiceNode.js +11 -0
  554. package/services/TimeSyncerService.d.ts +13 -0
  555. package/services/TimeSyncerService.js +27 -0
  556. package/services/UserService.d.ts +200 -0
  557. package/services/UserService.js +319 -0
  558. package/services/WebRTCSignallingService.d.ts +22 -0
  559. package/services/WebRTCSignallingService.js +81 -0
  560. package/services/WorkflowService.d.ts +71 -0
  561. package/services/WorkflowService.js +122 -0
  562. package/services/index.d.ts +26 -0
  563. package/services/index.js +38 -0
  564. package/store/RocosStore.d.ts +31 -0
  565. package/store/RocosStore.js +53 -0
  566. package/utils/axisangle.d.ts +18 -0
  567. package/utils/axisangle.js +48 -0
  568. package/utils/eulerangles.d.ts +22 -0
  569. package/utils/eulerangles.js +133 -0
  570. package/utils/helperfunctions.d.ts +5 -0
  571. package/utils/helperfunctions.js +50 -0
  572. package/utils/localtransform.d.ts +17 -0
  573. package/utils/localtransform.js +50 -0
  574. package/utils/localtransformtree.d.ts +17 -0
  575. package/utils/localtransformtree.js +88 -0
  576. package/utils/misc.d.ts +17 -0
  577. package/utils/misc.js +23 -0
  578. package/utils/positionvector.d.ts +13 -0
  579. package/utils/positionvector.js +79 -0
  580. package/utils/quaternion.d.ts +20 -0
  581. package/utils/quaternion.js +62 -0
  582. package/utils/rotationmatrix.d.ts +23 -0
  583. package/utils/rotationmatrix.js +262 -0
  584. package/utils/transformationmatrix.d.ts +12 -0
  585. package/utils/transformationmatrix.js +123 -0
  586. package/utils/vector3.d.ts +11 -0
  587. 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
+ }