@dronedeploy/rocos-js-sdk 0.0.1 → 1.0.0-alpha-2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (468) hide show
  1. package/IRocosSDK.d.ts +55 -0
  2. package/IRocosSDK.js +2 -0
  3. package/README.md +108 -0
  4. package/RocosSDK.d.ts +138 -0
  5. package/RocosSDK.js +292 -0
  6. package/api/StreamRegister.d.ts +13 -0
  7. package/api/StreamRegister.js +69 -0
  8. package/api/atoms/StreamHeartbeat.d.ts +27 -0
  9. package/api/atoms/StreamHeartbeat.js +111 -0
  10. package/api/streams/caller/CallerStream.d.ts +13 -0
  11. package/api/streams/caller/CallerStream.js +77 -0
  12. package/api/streams/caller/CallerStreamAbstract.d.ts +23 -0
  13. package/api/streams/caller/CallerStreamAbstract.js +87 -0
  14. package/api/streams/caller/CallerStreamNode.d.ts +13 -0
  15. package/api/streams/caller/CallerStreamNode.js +115 -0
  16. package/api/streams/command/CommandStream.d.ts +10 -0
  17. package/api/streams/command/CommandStream.js +66 -0
  18. package/api/streams/command/CommandStreamAbstract.d.ts +20 -0
  19. package/api/streams/command/CommandStreamAbstract.js +63 -0
  20. package/api/streams/command/CommandStreamNode.d.ts +10 -0
  21. package/api/streams/command/CommandStreamNode.js +69 -0
  22. package/api/streams/control/ControlStream.d.ts +12 -0
  23. package/api/streams/control/ControlStream.js +75 -0
  24. package/api/streams/control/ControlStreamAbstract.d.ts +25 -0
  25. package/api/streams/control/ControlStreamAbstract.js +111 -0
  26. package/api/streams/control/ControlStreamNode.d.ts +12 -0
  27. package/api/streams/control/ControlStreamNode.js +73 -0
  28. package/api/streams/fileAccessor/FileAccessorStream.d.ts +8 -0
  29. package/api/streams/fileAccessor/FileAccessorStream.js +59 -0
  30. package/api/streams/fileAccessor/FileAccessorStreamAbstract.d.ts +21 -0
  31. package/api/streams/fileAccessor/FileAccessorStreamAbstract.js +62 -0
  32. package/api/streams/fileAccessor/FileAccessorStreamNode.d.ts +8 -0
  33. package/api/streams/fileAccessor/FileAccessorStreamNode.js +66 -0
  34. package/api/streams/search/SearchStream.d.ts +13 -0
  35. package/api/streams/search/SearchStream.js +96 -0
  36. package/api/streams/search/SearchStreamAbstract.d.ts +25 -0
  37. package/api/streams/search/SearchStreamAbstract.js +72 -0
  38. package/api/streams/search/SearchStreamNode.d.ts +13 -0
  39. package/api/streams/search/SearchStreamNode.js +118 -0
  40. package/api/streams/telemetry/TelemetryStream.d.ts +17 -0
  41. package/api/streams/telemetry/TelemetryStream.js +97 -0
  42. package/api/streams/telemetry/TelemetryStreamAbstract.d.ts +59 -0
  43. package/api/streams/telemetry/TelemetryStreamAbstract.js +402 -0
  44. package/api/streams/telemetry/TelemetryStreamNode.d.ts +21 -0
  45. package/api/streams/telemetry/TelemetryStreamNode.js +175 -0
  46. package/api/streams/webRTCSignalling/WebRTCSignallingStream.d.ts +39 -0
  47. package/api/streams/webRTCSignalling/WebRTCSignallingStream.js +84 -0
  48. package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.d.ts +29 -0
  49. package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.js +65 -0
  50. package/constants/api.d.ts +126 -0
  51. package/constants/api.js +126 -0
  52. package/constants/auth.d.ts +2 -0
  53. package/constants/auth.js +2 -0
  54. package/constants/grpc.d.ts +5 -0
  55. package/constants/grpc.js +5 -0
  56. package/constants/identifier.d.ts +6 -0
  57. package/constants/identifier.js +6 -0
  58. package/constants/timezones.d.ts +2 -0
  59. package/constants/timezones.js +427 -0
  60. package/grpc/conker_pb.client.d.ts +78 -0
  61. package/grpc/conker_pb.client.js +55 -0
  62. package/grpc/conker_pb.d.ts +141 -0
  63. package/grpc/conker_pb.grpc-client.d.ts +81 -0
  64. package/grpc/conker_pb.grpc-client.js +58 -0
  65. package/grpc/conker_pb.js +104 -0
  66. package/grpc/filagree_pb.client.d.ts +68 -0
  67. package/grpc/filagree_pb.client.js +48 -0
  68. package/grpc/filagree_pb.d.ts +404 -0
  69. package/grpc/filagree_pb.grpc-client.d.ts +69 -0
  70. package/grpc/filagree_pb.grpc-client.js +51 -0
  71. package/grpc/filagree_pb.js +329 -0
  72. package/grpc/google/protobuf/descriptor_pb.d.ts +1798 -0
  73. package/grpc/google/protobuf/descriptor_pb.js +2378 -0
  74. package/grpc/google/protobuf/empty_pb.d.ts +23 -0
  75. package/grpc/google/protobuf/empty_pb.js +47 -0
  76. package/grpc/pigeon_pb.client.d.ts +96 -0
  77. package/grpc/pigeon_pb.client.js +72 -0
  78. package/grpc/pigeon_pb.d.ts +207 -0
  79. package/grpc/pigeon_pb.grpc-client.d.ts +98 -0
  80. package/grpc/pigeon_pb.grpc-client.js +68 -0
  81. package/grpc/pigeon_pb.js +144 -0
  82. package/grpc/rambo.uri.v1_pb.d.ts +73 -0
  83. package/grpc/rambo.uri.v1_pb.js +48 -0
  84. package/grpc/rambo.v1_pb.client.d.ts +66 -0
  85. package/grpc/rambo.v1_pb.client.js +48 -0
  86. package/grpc/rambo.v1_pb.d.ts +392 -0
  87. package/grpc/rambo.v1_pb.grpc-client.d.ts +56 -0
  88. package/grpc/rambo.v1_pb.grpc-client.js +44 -0
  89. package/grpc/rambo.v1_pb.js +272 -0
  90. package/grpc/serviette.uri.v1_pb.d.ts +89 -0
  91. package/grpc/serviette.uri.v1_pb.js +62 -0
  92. package/grpc/serviette.v1_pb.client.d.ts +225 -0
  93. package/grpc/serviette.v1_pb.client.js +174 -0
  94. package/grpc/serviette.v1_pb.d.ts +827 -0
  95. package/grpc/serviette.v1_pb.grpc-client.d.ts +215 -0
  96. package/grpc/serviette.v1_pb.grpc-client.js +162 -0
  97. package/grpc/serviette.v1_pb.js +553 -0
  98. package/grpc/slowlane_pb.client.d.ts +61 -0
  99. package/grpc/slowlane_pb.client.js +41 -0
  100. package/grpc/slowlane_pb.d.ts +303 -0
  101. package/grpc/slowlane_pb.grpc-client.d.ts +64 -0
  102. package/grpc/slowlane_pb.grpc-client.js +44 -0
  103. package/grpc/slowlane_pb.js +185 -0
  104. package/grpc/teletubby_pb.client.d.ts +145 -0
  105. package/grpc/teletubby_pb.client.js +104 -0
  106. package/grpc/teletubby_pb.d.ts +634 -0
  107. package/grpc/teletubby_pb.grpc-client.d.ts +152 -0
  108. package/grpc/teletubby_pb.grpc-client.js +100 -0
  109. package/grpc/teletubby_pb.js +1264 -0
  110. package/helpers/arrayRemove.d.ts +1 -0
  111. package/helpers/arrayRemove.js +3 -0
  112. package/helpers/arrayUnique.d.ts +1 -0
  113. package/helpers/arrayUnique.js +3 -0
  114. package/helpers/average.d.ts +1 -0
  115. package/helpers/average.js +6 -0
  116. package/helpers/cleanObject.d.ts +1 -0
  117. package/helpers/cleanObject.js +18 -0
  118. package/helpers/cleanObject.spec.d.ts +1 -0
  119. package/helpers/cleanObject.spec.js +53 -0
  120. package/helpers/enviroment.d.ts +8 -0
  121. package/helpers/enviroment.js +13 -0
  122. package/helpers/flattenCallsignsLookup.d.ts +2 -0
  123. package/helpers/flattenCallsignsLookup.js +6 -0
  124. package/helpers/flattenObject.d.ts +1 -0
  125. package/helpers/flattenObject.js +13 -0
  126. package/helpers/flattenObject.spec.d.ts +1 -0
  127. package/helpers/flattenObject.spec.js +29 -0
  128. package/helpers/flattenOneOf.d.ts +67 -0
  129. package/helpers/flattenOneOf.js +29 -0
  130. package/helpers/flattenOneOf.spec.d.ts +1 -0
  131. package/helpers/flattenOneOf.spec.js +157 -0
  132. package/helpers/formatServiceUrl.d.ts +1 -0
  133. package/helpers/formatServiceUrl.js +7 -0
  134. package/helpers/formatServiceUrl.spec.d.ts +1 -0
  135. package/helpers/formatServiceUrl.spec.js +16 -0
  136. package/helpers/generateUUID.d.ts +1 -0
  137. package/helpers/generateUUID.js +4 -0
  138. package/helpers/getSubscriptionsDifference.d.ts +10 -0
  139. package/helpers/getSubscriptionsDifference.js +35 -0
  140. package/helpers/getUniqueConfigKey.d.ts +7 -0
  141. package/helpers/getUniqueConfigKey.js +14 -0
  142. package/helpers/getUniqueId.d.ts +9 -0
  143. package/helpers/getUniqueId.js +11 -0
  144. package/helpers/getUnixTimeMs.d.ts +1 -0
  145. package/helpers/getUnixTimeMs.js +4 -0
  146. package/helpers/index.d.ts +3 -0
  147. package/helpers/index.js +3 -0
  148. package/helpers/nanosecondToMillisecond.d.ts +1 -0
  149. package/helpers/nanosecondToMillisecond.js +6 -0
  150. package/helpers/randomString.d.ts +1 -0
  151. package/helpers/randomString.js +3 -0
  152. package/helpers/standardDeviation.d.ts +1 -0
  153. package/helpers/standardDeviation.js +12 -0
  154. package/helpers/standardDeviation.spec.d.ts +1 -0
  155. package/helpers/standardDeviation.spec.js +11 -0
  156. package/helpers/stringToUint8Array.d.ts +1 -0
  157. package/helpers/stringToUint8Array.js +10 -0
  158. package/helpers/uint8ArrayToString.d.ts +1 -0
  159. package/helpers/uint8ArrayToString.js +10 -0
  160. package/index.d.ts +7 -0
  161. package/index.js +7 -0
  162. package/logger/RocosLogger.d.ts +7 -0
  163. package/logger/RocosLogger.js +37 -0
  164. package/models/CallsignStatus.d.ts +6 -0
  165. package/models/CallsignStatus.js +7 -0
  166. package/models/ExportDataQuery.d.ts +8 -0
  167. package/models/ExportDataQuery.js +13 -0
  168. package/models/ExternalProject.d.ts +6 -0
  169. package/models/ExternalProject.js +2 -0
  170. package/models/IBaseService.d.ts +4 -0
  171. package/models/IBaseService.js +1 -0
  172. package/models/IConfigGroup.d.ts +5 -0
  173. package/models/IConfigGroup.js +1 -0
  174. package/models/IDebugLevel.d.ts +2 -0
  175. package/models/IDebugLevel.js +1 -0
  176. package/models/IExportDataQuery.d.ts +9 -0
  177. package/models/IExportDataQuery.js +1 -0
  178. package/models/IFunctionConfig.d.ts +8 -0
  179. package/models/IFunctionConfig.js +1 -0
  180. package/models/IInvitation.d.ts +6 -0
  181. package/models/IInvitation.js +1 -0
  182. package/models/IInvitationExists.d.ts +4 -0
  183. package/models/IInvitationExists.js +1 -0
  184. package/models/IOperation.d.ts +6 -0
  185. package/models/IOperation.js +1 -0
  186. package/models/IPersonalAccessToken.d.ts +16 -0
  187. package/models/IPersonalAccessToken.js +1 -0
  188. package/models/IProject.d.ts +4 -0
  189. package/models/IProject.js +1 -0
  190. package/models/IProjectApplication.d.ts +6 -0
  191. package/models/IProjectApplication.js +1 -0
  192. package/models/IRobot.d.ts +18 -0
  193. package/models/IRobot.js +1 -0
  194. package/models/IRobotConfig.d.ts +8 -0
  195. package/models/IRobotConfig.js +1 -0
  196. package/models/IRobotPlugin.d.ts +3 -0
  197. package/models/IRobotPlugin.js +1 -0
  198. package/models/IRobotSettings.d.ts +28 -0
  199. package/models/IRobotSettings.js +1 -0
  200. package/models/IRobotTemplate.d.ts +10 -0
  201. package/models/IRobotTemplate.js +1 -0
  202. package/models/IRocosSDKConfig.d.ts +19 -0
  203. package/models/IRocosSDKConfig.js +1 -0
  204. package/models/ISource.d.ts +8 -0
  205. package/models/ISource.js +1 -0
  206. package/models/IStream.d.ts +9 -0
  207. package/models/IStream.js +1 -0
  208. package/models/IStreamConfig.d.ts +9 -0
  209. package/models/IStreamConfig.js +1 -0
  210. package/models/IStreamOptions.d.ts +7 -0
  211. package/models/IStreamOptions.js +1 -0
  212. package/models/IStreamSource.d.ts +8 -0
  213. package/models/IStreamSource.js +1 -0
  214. package/models/ISubscriberStatus.d.ts +5 -0
  215. package/models/ISubscriberStatus.js +1 -0
  216. package/models/ITelemetryStreamConfig.d.ts +7 -0
  217. package/models/ITelemetryStreamConfig.js +1 -0
  218. package/models/IToken.d.ts +9 -0
  219. package/models/IToken.js +1 -0
  220. package/models/IWidget.d.ts +25 -0
  221. package/models/IWidget.js +1 -0
  222. package/models/IWidgetLineGroup.d.ts +8 -0
  223. package/models/IWidgetLineGroup.js +1 -0
  224. package/models/ResponseLevelEnum.d.ts +10 -0
  225. package/models/ResponseLevelEnum.js +11 -0
  226. package/models/Robot.d.ts +20 -0
  227. package/models/Robot.js +8 -0
  228. package/models/RobotConfig.d.ts +10 -0
  229. package/models/RobotConfig.js +5 -0
  230. package/models/RobotPlugin.d.ts +5 -0
  231. package/models/RobotPlugin.js +5 -0
  232. package/models/RobotTemplate.d.ts +12 -0
  233. package/models/RobotTemplate.js +25 -0
  234. package/models/RocosError.d.ts +30 -0
  235. package/models/RocosError.js +39 -0
  236. package/models/ServiceEnum.d.ts +26 -0
  237. package/models/ServiceEnum.js +27 -0
  238. package/models/Stream.d.ts +10 -0
  239. package/models/Stream.js +11 -0
  240. package/models/StreamOptions.d.ts +9 -0
  241. package/models/StreamOptions.js +33 -0
  242. package/models/StreamSource.d.ts +10 -0
  243. package/models/StreamSource.js +11 -0
  244. package/models/SubscriberStatusEnum.d.ts +6 -0
  245. package/models/SubscriberStatusEnum.js +7 -0
  246. package/models/Token.d.ts +40 -0
  247. package/models/Token.js +78 -0
  248. package/models/Token.spec.d.ts +1 -0
  249. package/models/Token.spec.js +108 -0
  250. package/models/Widget.d.ts +27 -0
  251. package/models/Widget.js +12 -0
  252. package/models/WidgetLineGroup.d.ts +10 -0
  253. package/models/WidgetLineGroup.js +5 -0
  254. package/models/asset-storage/AssetModelItem.d.ts +29 -0
  255. package/models/asset-storage/AssetModelItem.js +1 -0
  256. package/models/caller/IRocosCallerMessageChunk.d.ts +10 -0
  257. package/models/caller/IRocosCallerMessageChunk.js +1 -0
  258. package/models/caller/IRocosCallerMessageChunks.d.ts +4 -0
  259. package/models/caller/IRocosCallerMessageChunks.js +1 -0
  260. package/models/caller/IRocosCallerMessageHeartbeat.d.ts +3 -0
  261. package/models/caller/IRocosCallerMessageHeartbeat.js +1 -0
  262. package/models/caller/IRocosCallerMessageResponse.d.ts +10 -0
  263. package/models/caller/IRocosCallerMessageResponse.js +1 -0
  264. package/models/caller/IRocosCallerMessageResponseAck.d.ts +16 -0
  265. package/models/caller/IRocosCallerMessageResponseAck.js +13 -0
  266. package/models/caller/IRocosCallerMessageResponseResult.d.ts +15 -0
  267. package/models/caller/IRocosCallerMessageResponseResult.js +12 -0
  268. package/models/caller/IRocosCallerMessageResponseReturn.d.ts +8 -0
  269. package/models/caller/IRocosCallerMessageResponseReturn.js +1 -0
  270. package/models/caller/IRocosCallerMessageResponseUid.d.ts +10 -0
  271. package/models/caller/IRocosCallerMessageResponseUid.js +7 -0
  272. package/models/caller/IRocosCallerMessageResponses.d.ts +4 -0
  273. package/models/caller/IRocosCallerMessageResponses.js +1 -0
  274. package/models/caller/RocosCallerResultStatus.d.ts +11 -0
  275. package/models/caller/RocosCallerResultStatus.js +12 -0
  276. package/models/caller/RocosResponseLevel.d.ts +6 -0
  277. package/models/caller/RocosResponseLevel.js +7 -0
  278. package/models/caller/index.d.ts +10 -0
  279. package/models/caller/index.js +10 -0
  280. package/models/callsigns/CallsignsEnums.d.ts +13 -0
  281. package/models/callsigns/CallsignsEnums.js +17 -0
  282. package/models/callsigns/CallsignsLookup.d.ts +8 -0
  283. package/models/callsigns/CallsignsLookup.js +28 -0
  284. package/models/callsigns/CallsignsQuery.d.ts +9 -0
  285. package/models/callsigns/CallsignsQuery.js +14 -0
  286. package/models/callsigns/CallsignsQueryPredicate.d.ts +9 -0
  287. package/models/callsigns/CallsignsQueryPredicate.js +15 -0
  288. package/models/command/IRocosCommandMessageHeartbeat.d.ts +1 -0
  289. package/models/command/IRocosCommandMessageHeartbeat.js +1 -0
  290. package/models/command/IRocosCommandMessageResponse.d.ts +55 -0
  291. package/models/command/IRocosCommandMessageResponse.js +29 -0
  292. package/models/command/RocosCommandResultStatus.d.ts +11 -0
  293. package/models/command/RocosCommandResultStatus.js +12 -0
  294. package/models/command/index.d.ts +4 -0
  295. package/models/command/index.js +4 -0
  296. package/models/file/FileEnums.d.ts +30 -0
  297. package/models/file/FileEnums.js +33 -0
  298. package/models/index.d.ts +75 -0
  299. package/models/index.js +75 -0
  300. package/models/integrations/Overlay.d.ts +49 -0
  301. package/models/integrations/Overlay.js +1 -0
  302. package/models/integrations/Plan.d.ts +324 -0
  303. package/models/integrations/Plan.js +1 -0
  304. package/models/maps/Map.d.ts +13 -0
  305. package/models/maps/Map.js +1 -0
  306. package/models/message/IRocosCallerMessage.d.ts +8 -0
  307. package/models/message/IRocosCallerMessage.js +1 -0
  308. package/models/message/IRocosChangeMessage.d.ts +6 -0
  309. package/models/message/IRocosChangeMessage.js +1 -0
  310. package/models/message/IRocosCommandMessage.d.ts +6 -0
  311. package/models/message/IRocosCommandMessage.js +1 -0
  312. package/models/message/IRocosControlMessage.d.ts +7 -0
  313. package/models/message/IRocosControlMessage.js +1 -0
  314. package/models/message/IRocosOpResultMessage.d.ts +6 -0
  315. package/models/message/IRocosOpResultMessage.js +1 -0
  316. package/models/message/IRocosSearchMessage.d.ts +5 -0
  317. package/models/message/IRocosSearchMessage.js +1 -0
  318. package/models/message/IRocosSearchRowMessage.d.ts +9 -0
  319. package/models/message/IRocosSearchRowMessage.js +1 -0
  320. package/models/message/IRocosSearchStatusMessage.d.ts +4 -0
  321. package/models/message/IRocosSearchStatusMessage.js +1 -0
  322. package/models/message/IRocosTelemetryMessage.d.ts +23 -0
  323. package/models/message/IRocosTelemetryMessage.js +1 -0
  324. package/models/message/IStreamStatusMessage.d.ts +5 -0
  325. package/models/message/IStreamStatusMessage.js +1 -0
  326. package/models/message/RocosCallerMessage.d.ts +10 -0
  327. package/models/message/RocosCallerMessage.js +32 -0
  328. package/models/message/RocosCommandMessage.d.ts +9 -0
  329. package/models/message/RocosCommandMessage.js +13 -0
  330. package/models/message/RocosControlMessage.d.ts +11 -0
  331. package/models/message/RocosControlMessage.js +14 -0
  332. package/models/message/RocosOpResultMessage.d.ts +10 -0
  333. package/models/message/RocosOpResultMessage.js +18 -0
  334. package/models/message/RocosSearchMessage.d.ts +9 -0
  335. package/models/message/RocosSearchMessage.js +24 -0
  336. package/models/message/RocosSearchRowMessage.d.ts +13 -0
  337. package/models/message/RocosSearchRowMessage.js +16 -0
  338. package/models/message/RocosTelemetryMessage.d.ts +10 -0
  339. package/models/message/RocosTelemetryMessage.js +63 -0
  340. package/models/message/index.d.ts +17 -0
  341. package/models/message/index.js +17 -0
  342. package/models/params/ICallerParams.d.ts +16 -0
  343. package/models/params/ICallerParams.js +1 -0
  344. package/models/params/ICommandParams.d.ts +9 -0
  345. package/models/params/ICommandParams.js +1 -0
  346. package/models/params/IControlParams.d.ts +8 -0
  347. package/models/params/IControlParams.js +1 -0
  348. package/models/params/IFileAccessorParams.d.ts +11 -0
  349. package/models/params/IFileAccessorParams.js +1 -0
  350. package/models/params/ISearchParams.d.ts +10 -0
  351. package/models/params/ISearchParams.js +1 -0
  352. package/models/params/ITelemetryParams.d.ts +18 -0
  353. package/models/params/ITelemetryParams.js +1 -0
  354. package/models/params/IWebRTCSignallingParams.d.ts +21 -0
  355. package/models/params/IWebRTCSignallingParams.js +1 -0
  356. package/models/projects/ProjectUser.d.ts +6 -0
  357. package/models/projects/ProjectUser.js +1 -0
  358. package/models/schedule/IScheduleAction.d.ts +13 -0
  359. package/models/schedule/IScheduleAction.js +6 -0
  360. package/models/schedule/IScheduleInfo.d.ts +11 -0
  361. package/models/schedule/IScheduleInfo.js +1 -0
  362. package/models/schedule/IScheduleJob.d.ts +12 -0
  363. package/models/schedule/IScheduleJob.js +1 -0
  364. package/models/search/SearchQueryFilter.d.ts +5 -0
  365. package/models/search/SearchQueryFilter.js +5 -0
  366. package/models/search/SearchStreamQuery.d.ts +15 -0
  367. package/models/search/SearchStreamQuery.js +6 -0
  368. package/models/stream/IBaseStream.d.ts +8 -0
  369. package/models/stream/IBaseStream.js +1 -0
  370. package/models/stream/ICallerStream.d.ts +8 -0
  371. package/models/stream/ICallerStream.js +1 -0
  372. package/models/stream/ICommandStream.d.ts +7 -0
  373. package/models/stream/ICommandStream.js +1 -0
  374. package/models/stream/IControlStream.d.ts +9 -0
  375. package/models/stream/IControlStream.js +1 -0
  376. package/models/stream/IFileAccessorStream.d.ts +9 -0
  377. package/models/stream/IFileAccessorStream.js +1 -0
  378. package/models/stream/ISearchStream.d.ts +11 -0
  379. package/models/stream/ISearchStream.js +1 -0
  380. package/models/stream/ITelemetryStream.d.ts +10 -0
  381. package/models/stream/ITelemetryStream.js +1 -0
  382. package/models/stream/IWebRTCSignallingStream.d.ts +76 -0
  383. package/models/stream/IWebRTCSignallingStream.js +1 -0
  384. package/models/types.d.ts +5 -0
  385. package/models/types.js +1 -0
  386. package/node/RocosSDKNode.d.ts +42 -0
  387. package/node/RocosSDKNode.js +143 -0
  388. package/node/index.d.ts +7 -0
  389. package/node/index.js +7 -0
  390. package/package.json +22 -6
  391. package/services/AssetStorageService.d.ts +99 -0
  392. package/services/AssetStorageService.js +158 -0
  393. package/services/AuthService.d.ts +93 -0
  394. package/services/AuthService.js +235 -0
  395. package/services/AuthService.spec.d.ts +1 -0
  396. package/services/AuthService.spec.js +163 -0
  397. package/services/BaseServiceAbstract.d.ts +36 -0
  398. package/services/BaseServiceAbstract.js +101 -0
  399. package/services/BaseStreamService.d.ts +18 -0
  400. package/services/BaseStreamService.js +47 -0
  401. package/services/CallerService.d.ts +10 -0
  402. package/services/CallerService.js +53 -0
  403. package/services/CallerServiceNode.d.ts +6 -0
  404. package/services/CallerServiceNode.js +7 -0
  405. package/services/CommandService.d.ts +9 -0
  406. package/services/CommandService.js +38 -0
  407. package/services/CommandServiceNode.d.ts +6 -0
  408. package/services/CommandServiceNode.js +7 -0
  409. package/services/ConfigGroupService.d.ts +89 -0
  410. package/services/ConfigGroupService.js +153 -0
  411. package/services/ControlService.d.ts +11 -0
  412. package/services/ControlService.js +57 -0
  413. package/services/ControlServiceNode.d.ts +6 -0
  414. package/services/ControlServiceNode.js +7 -0
  415. package/services/DashboardService.d.ts +97 -0
  416. package/services/DashboardService.js +142 -0
  417. package/services/EventService.d.ts +53 -0
  418. package/services/EventService.js +85 -0
  419. package/services/FileAccessorService.d.ts +11 -0
  420. package/services/FileAccessorService.js +37 -0
  421. package/services/FileAccessorServiceNode.d.ts +6 -0
  422. package/services/FileAccessorServiceNode.js +7 -0
  423. package/services/FunctionService.d.ts +68 -0
  424. package/services/FunctionService.js +99 -0
  425. package/services/IntegrationService.d.ts +48 -0
  426. package/services/IntegrationService.js +72 -0
  427. package/services/MapService.d.ts +109 -0
  428. package/services/MapService.js +149 -0
  429. package/services/PlatformTimeService.d.ts +35 -0
  430. package/services/PlatformTimeService.js +156 -0
  431. package/services/PlatformTimeService.spec.d.ts +1 -0
  432. package/services/PlatformTimeService.spec.js +180 -0
  433. package/services/ProfileService.d.ts +244 -0
  434. package/services/ProfileService.js +362 -0
  435. package/services/ProjectService.d.ts +110 -0
  436. package/services/ProjectService.js +160 -0
  437. package/services/RobotService.d.ts +278 -0
  438. package/services/RobotService.js +460 -0
  439. package/services/ScheduleService.d.ts +22 -0
  440. package/services/ScheduleService.js +36 -0
  441. package/services/SearchService.d.ts +12 -0
  442. package/services/SearchService.js +58 -0
  443. package/services/SearchServiceNode.d.ts +6 -0
  444. package/services/SearchServiceNode.js +7 -0
  445. package/services/SpotProvisioningService.d.ts +14 -0
  446. package/services/SpotProvisioningService.js +43 -0
  447. package/services/SpotProvisioningServiceNode.d.ts +15 -0
  448. package/services/SpotProvisioningServiceNode.js +43 -0
  449. package/services/StreamService.d.ts +98 -0
  450. package/services/StreamService.js +142 -0
  451. package/services/TelemetryService.d.ts +40 -0
  452. package/services/TelemetryService.js +142 -0
  453. package/services/TelemetryService.spec.d.ts +1 -0
  454. package/services/TelemetryService.spec.js +37 -0
  455. package/services/TelemetryServiceNode.d.ts +6 -0
  456. package/services/TelemetryServiceNode.js +7 -0
  457. package/services/TimeSyncerService.d.ts +13 -0
  458. package/services/TimeSyncerService.js +23 -0
  459. package/services/UserService.d.ts +200 -0
  460. package/services/UserService.js +315 -0
  461. package/services/WebRTCSignallingService.d.ts +22 -0
  462. package/services/WebRTCSignallingService.js +78 -0
  463. package/services/WorkflowService.d.ts +71 -0
  464. package/services/WorkflowService.js +118 -0
  465. package/services/index.d.ts +26 -0
  466. package/services/index.js +26 -0
  467. package/store/RocosStore.d.ts +31 -0
  468. package/store/RocosStore.js +47 -0
@@ -0,0 +1,402 @@
1
+ import { BehaviorSubject, Subject } from 'rxjs';
2
+ import { CallsignsLookup, CallsignsLookupType, RocosTelemetryMessage, StreamOptions, SubscriberStatusEnum, } from '../../../models';
3
+ import { GRPC_SOURCE_NOOP, GRPC_SOURCE_SUBSCRIBED } from '../../../constants/grpc';
4
+ import { QueryOrPredicate, TelemetryAckStatus, TelemetryQueryRequest, TelemetryRequest, UnsubscribeOperation, } from '../../../grpc/teletubby_pb';
5
+ import { IDENTIFIER_NAME_TELEMETRY } from '../../../constants/identifier';
6
+ import { RocosStore } from '../../../store/RocosStore';
7
+ import { StreamHeartbeat } from '../../atoms/StreamHeartbeat';
8
+ import { StreamRegister } from '../../StreamRegister';
9
+ import { arrayUnique } from '../../../helpers/arrayUnique';
10
+ import { filter } from 'rxjs/operators';
11
+ import { getSubscriptionsDifference } from '../../../helpers/getSubscriptionsDifference';
12
+ export class TelemetryStreamAbstract {
13
+ constructor(config) {
14
+ // /////////////////
15
+ // Subscriber Check
16
+ this.timerIntervalInSec = 1;
17
+ this.subscriberStatus = SubscriberStatusEnum.STOPPED;
18
+ this.retryTimes = 0;
19
+ this.receivedMessagesCount = 0;
20
+ // send heartbeat timeout is set to 5 seconds 5000
21
+ this.sendHeartbeatTime = 5000;
22
+ this.receivedDataStats = {};
23
+ this.subscriptions = new Map();
24
+ this.identifier = StreamRegister.getIdentifier(IDENTIFIER_NAME_TELEMETRY, config.scope);
25
+ this.projectId = config.projectId;
26
+ this.callsignsLookup = config.callsignsLookup;
27
+ this.token = config.token;
28
+ this.scope = config.scope;
29
+ this.url = config.url;
30
+ // make sure sources are unique for later comparison
31
+ this.sources = arrayUnique(config.sources);
32
+ this.options = StreamOptions.fromModel(config.options);
33
+ this.messageStream$ = new Subject();
34
+ this.statusStream$ = new BehaviorSubject(SubscriberStatusEnum.STOPPED);
35
+ this.heartbeat = new StreamHeartbeat(this.identifier);
36
+ RocosStore.getChangeSubject()
37
+ .pipe(filter((message) => {
38
+ return message.type === 'token' && message.url === this.url;
39
+ }))
40
+ .subscribe((msg) => {
41
+ this.token = msg.data;
42
+ });
43
+ }
44
+ setToken(token) {
45
+ this.token = token;
46
+ }
47
+ init() {
48
+ this.logger.info('Creating new stream instance');
49
+ // Register Receiver
50
+ this.registerReceiver();
51
+ }
52
+ stopStream() {
53
+ this.heartbeat?.stop();
54
+ this.stopInternal();
55
+ if (this.messagesTimer) {
56
+ clearInterval(this.messagesTimer);
57
+ }
58
+ this.subscriberStatus = SubscriberStatusEnum.STOPPED;
59
+ this.statusStream$.next(this.subscriberStatus);
60
+ }
61
+ addSubscription(params) {
62
+ this.logger.info('Adding subscriptions from stream', params.uniqueId);
63
+ if (!this.subscriptions.has(params.uniqueId)) {
64
+ // get subscriptions before change
65
+ const before = this.getSubscriptions();
66
+ this.subscriptions.set(params.uniqueId, {
67
+ ...params,
68
+ count: 1, // set the count to one just in case it's set in param
69
+ });
70
+ // get subscriptions after change
71
+ const after = this.getSubscriptions();
72
+ // assign the current values from state after change
73
+ this.callsignsLookup = new CallsignsLookup(Object.keys(after));
74
+ this.sources = arrayUnique(Object.values(after).reduce((a, v) => a.concat(v), []));
75
+ // compare before and after subscriptions and only add the difference
76
+ const { toAdd } = getSubscriptionsDifference(before, after);
77
+ // only subscribe if the subscriberId exists, otherwise the messages will be subscribed on lazy load
78
+ if (toAdd.callsigns.length && toAdd.sources.length) {
79
+ this.logger.debug('New subscriptions added, we need to refresh sources', { toAdd });
80
+ void this.takeTelemetryAction('subscribe', new CallsignsLookup(toAdd.callsigns), toAdd.sources);
81
+ }
82
+ }
83
+ else {
84
+ const subs = this.subscriptions.get(params.uniqueId);
85
+ subs.count++;
86
+ this.subscriptions.set(params.uniqueId, subs);
87
+ this.logger.info('Stream subscriptions already exists, increasing count', params.uniqueId, subs.count);
88
+ }
89
+ RocosStore.getChangeSubject().next({ type: 'telemetry-subscription', url: this.url, data: this.subscriptions });
90
+ }
91
+ async removeSubscription(params, terminateReceiverGroup = false) {
92
+ this.logger.info('Removing subscriptions from stream', params.uniqueId);
93
+ if (!this.subscriptions.has(params.uniqueId))
94
+ return;
95
+ const subs = this.subscriptions.get(params.uniqueId);
96
+ subs.count--;
97
+ if (subs.count)
98
+ return;
99
+ this.logger.info('Removing subscriptions from stream registry', params.uniqueId);
100
+ const before = this.getSubscriptions();
101
+ this.subscriptions.delete(params.uniqueId);
102
+ const after = this.getSubscriptions();
103
+ // assign the current values from state after change
104
+ this.callsignsLookup = new CallsignsLookup(Object.keys(after));
105
+ this.sources = arrayUnique(Object.values(after).reduce((a, v) => a.concat(v), []));
106
+ const { toRemove } = getSubscriptionsDifference(before, after);
107
+ if (toRemove.callsigns.length && toRemove.sources.length) {
108
+ this.logger.debug('Subscriptions removed, we need to refresh sources', { toRemove });
109
+ try {
110
+ await this.takeTelemetryAction('unsubscribe', new CallsignsLookup(toRemove.callsigns), toRemove.sources, terminateReceiverGroup);
111
+ }
112
+ catch (err) {
113
+ this.logger.error(`Failed to unsubscribe: ${err}`);
114
+ }
115
+ }
116
+ if (!this.subscriptions.size) {
117
+ this.logger.info('No subscriptions remaining closing stream', params.uniqueId);
118
+ this.stopStream();
119
+ // self remove when no subscriptions a re left
120
+ void StreamRegister.getInstance().removeStream(this);
121
+ this.logger.info('Stream closed');
122
+ }
123
+ }
124
+ sendAcknowledgment(uid, status, noRetry) {
125
+ return this.sendAcknowledgmentInternal(uid, status, noRetry);
126
+ }
127
+ getSubscriptions() {
128
+ const subs = {};
129
+ this.subscriptions.forEach((data) => {
130
+ if (data.callsigns) {
131
+ data.callsigns.forEach((item) => {
132
+ if (!subs[item]) {
133
+ subs[item] = arrayUnique([...data.sources]);
134
+ }
135
+ else {
136
+ subs[item] = arrayUnique([...subs[item], ...data.sources]);
137
+ }
138
+ });
139
+ }
140
+ });
141
+ return subs;
142
+ }
143
+ onData(message, isStream) {
144
+ this.receivedMessagesCount++;
145
+ let rocosMessage;
146
+ const data = {
147
+ subscriberId: this.subscriberId,
148
+ subId: this.scope,
149
+ projectId: this.projectId,
150
+ };
151
+ if (isStream) {
152
+ rocosMessage = RocosTelemetryMessage.fromTelemetryStreamMessage(message, data, 'json');
153
+ }
154
+ else {
155
+ rocosMessage = RocosTelemetryMessage.fromTelemetryMessage(message, data, 'json');
156
+ }
157
+ const { source, callsign } = rocosMessage;
158
+ let isRobotMessage = true;
159
+ const now = new Date();
160
+ // Update last message received time
161
+ this.lastMessageReceived = now;
162
+ switch (source) {
163
+ // Subscribe message
164
+ case GRPC_SOURCE_SUBSCRIBED: {
165
+ const { subscriberId } = rocosMessage.payload;
166
+ if (this.subscriberId && subscriberId) {
167
+ this.logger.warn(`Replacing old subscriberId (${this.subscriberId}) with a new one (${subscriberId})`);
168
+ }
169
+ // Update the subscriberId
170
+ this.subscriberId = subscriberId;
171
+ rocosMessage.subscriberId = this.subscriberId;
172
+ this.logger.info('onData', `subscriberId has been updated - ${subscriberId}`, { subscriberId });
173
+ void this.takeTelemetryAction('subscribe');
174
+ this.heartbeat.start(this.sendHeartbeat, this.sendHeartbeatTime);
175
+ isRobotMessage = false;
176
+ break;
177
+ }
178
+ // Server heartbeat message
179
+ case GRPC_SOURCE_NOOP:
180
+ isRobotMessage = false;
181
+ break;
182
+ }
183
+ // Update robot last message timestamp
184
+ if (isRobotMessage) {
185
+ this.lastRobotMessageReceived = now;
186
+ }
187
+ // Update stats
188
+ this.updateReceivedDataStatsWithMessage(rocosMessage);
189
+ // Send message to subscribers
190
+ if (this.isRegisteredMessage(callsign, source) && this.messageStream$) {
191
+ this.messageStream$.next(rocosMessage);
192
+ if (rocosMessage.isackable && this.options.autoAcknowledgmentEnabled) {
193
+ this.sendAcknowledgment(rocosMessage.uid, TelemetryAckStatus.OK, false);
194
+ }
195
+ }
196
+ else if (isRobotMessage) {
197
+ // acknowledge any way, as the user never receives this message
198
+ if (rocosMessage.isackable) {
199
+ this.sendAcknowledgment(rocosMessage.uid, TelemetryAckStatus.REJECT, true);
200
+ }
201
+ // All messages received should be subscribed.
202
+ this.logger.debug('onData', 'received unsubscribed message', {
203
+ callsign,
204
+ source,
205
+ callsigns: this.callsignsLookup,
206
+ sources: this.sources,
207
+ });
208
+ }
209
+ }
210
+ async takeTelemetryAction(actionType, callsignsLookup, sources, terminate) {
211
+ this.logger.debug('takeTelemetryAction', actionType);
212
+ if (!this.subscriberId || !this.projectId) {
213
+ this.logger.debug('takeTelemetryAction', actionType, `${actionType} without subscriberId or projectId - message will not send out`, {
214
+ subscriberId: this.subscriberId,
215
+ projectId: this.projectId,
216
+ });
217
+ return Promise.resolve();
218
+ }
219
+ const actionSources = sources ?? this.sources;
220
+ const actionCallsigns = callsignsLookup ?? this.callsignsLookup;
221
+ if (this.callsignsLookup.lookupType === CallsignsLookupType.List) {
222
+ // Compose the request message
223
+ const req = TelemetryRequest.create({
224
+ subscriberId: this.subscriberId,
225
+ requestedActions: [
226
+ {
227
+ operation: actionType,
228
+ callsigns: actionCallsigns.lookupValue,
229
+ sources: actionSources,
230
+ },
231
+ ],
232
+ });
233
+ if (actionType === 'unsubscribe' && terminate) {
234
+ this.addTerminateToAction(req.requestedActions[0]);
235
+ }
236
+ this.logger.debug('takeTelemetryAction', actionType, 'client.requestTelemetry', this.subscriberId);
237
+ // Send the message to back-end.
238
+ return this.requestTelemetry(req);
239
+ }
240
+ else if (actionCallsigns.lookupType === CallsignsLookupType.Query) {
241
+ const lookupValue = actionCallsigns.lookupValue;
242
+ // We don't support nested query at the moment
243
+ const queryOrPredicatesList = [];
244
+ // Loop through user provided predicates to construct a telemetry query request
245
+ lookupValue.predicates.forEach((callsignsPredicate) => {
246
+ const queryOrPredicate = QueryOrPredicate.create({
247
+ content: {
248
+ oneofKind: 'predicate',
249
+ predicate: {
250
+ attribute: callsignsPredicate.attribute.valueOf(),
251
+ operation: callsignsPredicate.operation.valueOf(),
252
+ value: callsignsPredicate.value,
253
+ },
254
+ },
255
+ });
256
+ queryOrPredicatesList.push(queryOrPredicate);
257
+ });
258
+ // Compose the request message
259
+ const req = TelemetryQueryRequest.create({
260
+ subscriberId: this.subscriberId,
261
+ sources: actionSources,
262
+ operation: actionType,
263
+ callsignQuery: {
264
+ operation: lookupValue.operation.valueOf(),
265
+ queryOrPredicates: queryOrPredicatesList,
266
+ },
267
+ });
268
+ this.logger.debug('takeTelemetryAction', actionType, 'client.requestTelemetry', this.subscriberId);
269
+ // Send the telemetry query request to back-end.
270
+ return this.requestTelemetryQuery(req);
271
+ }
272
+ return Promise.reject('Unsupported lookupType');
273
+ }
274
+ listenMessagesAndRenew() {
275
+ const timer = this.messagesTimer;
276
+ this.checkerStartedAt = new Date();
277
+ // Clear the previous timer first.
278
+ if (timer) {
279
+ clearInterval(timer);
280
+ }
281
+ this.messagesTimer = setInterval(() => {
282
+ const now = new Date();
283
+ const latest = this.lastMessageReceived;
284
+ const latestRobot = this.lastRobotMessageReceived;
285
+ const startedAt = this.checkerStartedAt ?? new Date();
286
+ const timeout = this.options.messageTimeoutInSec;
287
+ let shouldRetry = false;
288
+ let shouldAutoResubscribe = false;
289
+ const hasExceededTimeoutSinceLastMessage = latest && (now.getTime() - latest.getTime()) / 1000 > timeout;
290
+ const hasExceededTimeoutBeforeMessages = !latest && startedAt && (now.getTime() - startedAt.getTime()) / 1000 > timeout;
291
+ if (hasExceededTimeoutSinceLastMessage || hasExceededTimeoutBeforeMessages) {
292
+ shouldRetry = true;
293
+ }
294
+ if (latestRobot) {
295
+ // If we get robot messages at least once.
296
+ if ((now.getTime() - latestRobot.getTime()) / 1000 > timeout) {
297
+ // Offline
298
+ this.subscriberStatus = SubscriberStatusEnum.DEAD;
299
+ }
300
+ else {
301
+ // Online
302
+ this.subscriberStatus = SubscriberStatusEnum.ALIVE;
303
+ }
304
+ }
305
+ else if ((now.getTime() - startedAt.getTime()) / 1000 > timeout) {
306
+ // If there is no robot messages received, then we compare with startedAt time.
307
+ // Timeout
308
+ this.subscriberStatus = SubscriberStatusEnum.DEAD;
309
+ }
310
+ else if (this.retryTimes <= 0) {
311
+ // Still trying, status unknown.
312
+ this.subscriberStatus = SubscriberStatusEnum.STOPPED;
313
+ }
314
+ else {
315
+ // Tried multiple times. dead already.
316
+ this.subscriberStatus = SubscriberStatusEnum.DEAD;
317
+ }
318
+ if (this.options.autoResubscribeEnabled &&
319
+ this.receivedMessagesCount > this.options.autoResubscribeMessageLimit &&
320
+ (now.getTime() - startedAt.getTime()) / 1000 > this.options.autoResubscribeMinimumTime) {
321
+ // If received messages above the limit of resubscribing, we need to resubscribe.
322
+ shouldAutoResubscribe = true;
323
+ }
324
+ if (shouldRetry) {
325
+ this.logger.debug('listenMessagesAndRenew', { shouldRetry: true });
326
+ // Retry
327
+ this.messageTimeoutTryAgain();
328
+ }
329
+ else if (shouldAutoResubscribe) {
330
+ this.logger.debug('listenMessagesAndRenew', {
331
+ shouldAutoResubscribe: true,
332
+ });
333
+ // Resubscribe
334
+ this.autoResubscribe();
335
+ }
336
+ // Update subscriber status.
337
+ this.statusStream$.next(this.subscriberStatus);
338
+ // Debug stats
339
+ this.logger.debug('listenMessagesAndRenew', 'Message stats', this.receivedDataStats);
340
+ }, this.timerIntervalInSec * 1000);
341
+ }
342
+ addTerminateToAction(telemetryAction) {
343
+ const unsubscribeOperation = UnsubscribeOperation.create({
344
+ options: [
345
+ {
346
+ content: {
347
+ receivergroupUnsubscribeOption: {
348
+ terminate: true,
349
+ },
350
+ oneofKind: 'receivergroupUnsubscribeOption',
351
+ },
352
+ },
353
+ ],
354
+ });
355
+ telemetryAction.content = {
356
+ oneofKind: 'unsubscribeOperation',
357
+ unsubscribeOperation,
358
+ };
359
+ }
360
+ messageTimeoutTryAgain() {
361
+ // Increase retry times.
362
+ this.retryTimes++;
363
+ // Remove the received call anyway.
364
+ this.stopInternal();
365
+ this.lastMessageReceived = undefined;
366
+ this.lastRobotMessageReceived = undefined;
367
+ this.registerReceiver();
368
+ }
369
+ /**
370
+ * Auto resubscribe to reduce CPU usage.
371
+ */
372
+ autoResubscribe() {
373
+ // Reset
374
+ this.retryTimes = 0;
375
+ // Remove the received call anyway.
376
+ this.stopInternal();
377
+ this.lastMessageReceived = undefined;
378
+ this.lastRobotMessageReceived = undefined;
379
+ this.registerReceiver();
380
+ }
381
+ isFoundCallsign(callsign) {
382
+ return this.callsignsLookup.lookupType === CallsignsLookupType.List
383
+ ? this.callsignsLookup.lookupValue.indexOf(callsign) !== -1
384
+ : true; // If callsigns lookup option is query, we always return true
385
+ }
386
+ isFoundSource(source) {
387
+ return this.sources.indexOf(source) !== -1;
388
+ }
389
+ isRegisteredMessage(callsign, source) {
390
+ return this.isFoundCallsign(callsign) && this.isFoundSource(source);
391
+ }
392
+ updateReceivedDataStatsWithMessage(msg) {
393
+ const { source } = msg;
394
+ const { callsign } = msg;
395
+ const id = `${callsign}-${source}`;
396
+ if (!this.receivedDataStats) {
397
+ this.receivedDataStats = {};
398
+ }
399
+ const count = this.receivedDataStats[id] ? this.receivedDataStats[id] : 0;
400
+ this.receivedDataStats[id] = count + 1;
401
+ }
402
+ }
@@ -0,0 +1,21 @@
1
+ import { ITelemetryStreamConfig } from '../../../models';
2
+ import { TelemetryAckStatus, TelemetryQueryRequest, TelemetryRequest } from '../../../grpc/teletubby_pb';
3
+ import { TelemetryStreamAbstract } from './TelemetryStreamAbstract';
4
+ export declare class TelemetryStreamNode extends TelemetryStreamAbstract {
5
+ private client?;
6
+ private stream?;
7
+ private readonly port;
8
+ private readonly 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: TelemetryAckStatus, noRetry: boolean): boolean;
20
+ protected sendHeartbeat(): void;
21
+ }
@@ -0,0 +1,175 @@
1
+ import * as grpc from '@grpc/grpc-js';
2
+ import { SubscriberStatusEnum } from '../../../models';
3
+ import { ReceiverStreamMessage, } from '../../../grpc/teletubby_pb';
4
+ import { RocosLogger } from '../../../logger/RocosLogger';
5
+ import { TelemetryReceiverClient } from '../../../grpc/teletubby_pb.grpc-client';
6
+ import { TelemetryStreamAbstract } from './TelemetryStreamAbstract';
7
+ import { v4 as uuid4 } from 'uuid';
8
+ export class TelemetryStreamNode extends TelemetryStreamAbstract {
9
+ constructor(config) {
10
+ super(config);
11
+ this.logger = RocosLogger.getInstance(`TelemetryStream(${this.identifier})`);
12
+ this.port = config.port ?? 443;
13
+ this.credentials = config.insecure ? grpc.credentials.createInsecure() : grpc.credentials.createSsl();
14
+ }
15
+ stopInternal() {
16
+ try {
17
+ this.logger.info('Starting stop stream process');
18
+ this.logger.info('Stopping stream');
19
+ this.stream?.end();
20
+ this.stream = undefined;
21
+ this.logger.info('Stopping client');
22
+ this.client?.close();
23
+ this.client = undefined;
24
+ this.logger.info('Finished stop stream process');
25
+ }
26
+ catch (e) {
27
+ this.logger.error('Error stopping stream.', e);
28
+ }
29
+ }
30
+ registerReceiver() {
31
+ this.logger.info('registerReceiver');
32
+ // Reset counter
33
+ this.receivedMessagesCount = 0;
34
+ try {
35
+ const receiver = new TelemetryReceiverClient(`${this.url}:${this.port}`, this.getCredentials(), {
36
+ 'grpc.min_reconnect_backoff_ms': 1000,
37
+ 'grpc.max_reconnect_backoff_ms': 10000,
38
+ });
39
+ const waitForClientReady = async (error) => {
40
+ let err = error;
41
+ if (!err) {
42
+ try {
43
+ this.logger.info('registering stream receiver');
44
+ this.stream = this.registerStream();
45
+ this.logger.info('registered stream receiver');
46
+ }
47
+ catch (e) {
48
+ err = e;
49
+ }
50
+ }
51
+ if (err) {
52
+ this.logger.warn(`failed to create telemetry client, error: ${err}`);
53
+ // await this.stopandReRegisterStream()
54
+ }
55
+ };
56
+ const deadline = new Date();
57
+ deadline.setSeconds(deadline.getSeconds() + 2);
58
+ receiver.waitForReady(deadline, () => void waitForClientReady());
59
+ this.client = receiver;
60
+ this.logger.info(`Tele receiver client: ${JSON.stringify(this.client)}`);
61
+ }
62
+ catch (e) {
63
+ this.logger.error('Error initializing receiver client', e);
64
+ }
65
+ this.listenMessagesAndRenew();
66
+ return () => {
67
+ this.client?.close();
68
+ };
69
+ }
70
+ getCredentials() {
71
+ const mdCb = (_params, callback) => {
72
+ const meta = this.getMetaData();
73
+ callback(null, meta);
74
+ };
75
+ return grpc.credentials.combineChannelCredentials(this.credentials, grpc.credentials.createFromMetadataGenerator(mdCb));
76
+ }
77
+ registerStream() {
78
+ try {
79
+ this.logger.info('registering stream');
80
+ const stream = this.client.registerStreamReceiver();
81
+ this.logger.info('stream registered');
82
+ stream.on('data', (msg) => {
83
+ if (msg.content.oneofKind === 'message') {
84
+ this.onData(msg, true);
85
+ }
86
+ });
87
+ stream.on('error', (e) => this.onError(e));
88
+ stream.on('end', () => this.onEnd());
89
+ return stream;
90
+ }
91
+ catch (e) {
92
+ this.logger.error(`Telemetry Stream registerStream error" SubscriberId: ${this.subscriberId}`, e);
93
+ throw e;
94
+ }
95
+ }
96
+ onError(e) {
97
+ this.logger.error(`Telemetry Stream Error: ${e}, SubscriberId: ${this.subscriberId}`);
98
+ this.subscriberStatus = SubscriberStatusEnum.ERROR;
99
+ this.statusStream$.next(this.subscriberStatus);
100
+ }
101
+ onEnd() {
102
+ this.logger.debug('registerReceiver', 'end');
103
+ }
104
+ getMetaData() {
105
+ const meta = new grpc.Metadata();
106
+ meta.add('authorization', this.token);
107
+ meta.add('r-p', this.projectId);
108
+ meta.add('r-tid', uuid4());
109
+ meta.add('r-cs', 'rocos-js-sdk-agent');
110
+ return meta;
111
+ }
112
+ requestTelemetry(req) {
113
+ this.logger.debug('Sending telemetry request');
114
+ return new Promise((resolve, reject) => {
115
+ this.client.requestTelemetry(req, (err, ack) => {
116
+ this.logger.debug('subscribeSources with callsigns callback', err, ack);
117
+ if (err) {
118
+ this.logger.error('error requestTelemetry ', err);
119
+ return reject(err);
120
+ }
121
+ resolve();
122
+ });
123
+ });
124
+ }
125
+ requestTelemetryQuery(req) {
126
+ this.logger.debug('Requesting telemetry with query');
127
+ return new Promise((resolve, reject) => {
128
+ this.client.requestTelemetryQuery(req, (err, ack) => {
129
+ this.logger.debug('subscribeSources with query callback', err, ack);
130
+ if (err) {
131
+ this.logger.error('error requestTelemetryQuery ', err);
132
+ return reject(err);
133
+ }
134
+ resolve();
135
+ });
136
+ });
137
+ }
138
+ sendAcknowledgmentInternal(uid, status, noRetry) {
139
+ this.logger.info('Sending acknowledgment', { uid, status, noRetry });
140
+ const request = ReceiverStreamMessage.create({
141
+ content: {
142
+ oneofKind: 'ack',
143
+ ack: {
144
+ uid,
145
+ status,
146
+ noRetry,
147
+ },
148
+ },
149
+ });
150
+ const response = this.stream?.write(request);
151
+ this.logger.info('Sent acknowledgment response', { uid, status, noRetry });
152
+ return response ?? false;
153
+ }
154
+ sendHeartbeat() {
155
+ try {
156
+ if (this.client && this.stream) {
157
+ this.logger.info('sending heartbeat');
158
+ const request = ReceiverStreamMessage.create({
159
+ content: {
160
+ oneofKind: 'heartbeat',
161
+ heartbeat: {},
162
+ },
163
+ });
164
+ this.stream?.write(request);
165
+ }
166
+ else {
167
+ this.logger.warn('Can not send heartbeat, stream does not exist.');
168
+ }
169
+ }
170
+ catch (e) {
171
+ this.logger?.warn('Error for heartbeat');
172
+ this.stream?.emit('error', e);
173
+ }
174
+ }
175
+ }
@@ -0,0 +1,39 @@
1
+ import { AddIceCandidateRequest, GetDetailsRequest, OfferRequest, OperatorConnectRequest } from '../../../grpc/pigeon_pb';
2
+ import { IStreamConfig, IWebRTCSignallingGetDetailsResponse, IWebRTCSignallingMessage, IWebRTCSignallingOutcome, IWebRTCSignallingResponseStream } from '../../../models';
3
+ import { WebRTCSignallingStreamAbstract } from './WebRTCSignallingStreamAbstract';
4
+ /**
5
+ * Web implementation for the WebRTC signalling stream
6
+ */
7
+ export declare class WebRTCSignallingStream extends WebRTCSignallingStreamAbstract {
8
+ private webRTCOperatorclient;
9
+ constructor(config: IStreamConfig);
10
+ /**
11
+ * Connect operator stream
12
+ * @param projectId
13
+ * @param request
14
+ * @returns
15
+ */
16
+ protected connectOperatorStream(projectId: string, request: OperatorConnectRequest): IWebRTCSignallingResponseStream<IWebRTCSignallingMessage>;
17
+ /**
18
+ * Get details for the peer
19
+ * @param projectId
20
+ * @param request
21
+ * @returns
22
+ */
23
+ protected getPeerDetails(projectId: string, request: GetDetailsRequest): Promise<IWebRTCSignallingGetDetailsResponse>;
24
+ /**
25
+ * Send offer connecction to peer
26
+ * @param projectId
27
+ * @param request
28
+ * @returns
29
+ */
30
+ protected offerPeerConnection(projectId: string, request: OfferRequest): Promise<IWebRTCSignallingOutcome>;
31
+ /**
32
+ * Add ice candidate for peer
33
+ * @param projectId
34
+ * @param request
35
+ * @returns
36
+ */
37
+ protected addPeerIceCandidate(projectId: string, request: AddIceCandidateRequest): Promise<IWebRTCSignallingOutcome>;
38
+ private getMetadata;
39
+ }