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

Sign up to get free protection for your applications and to get access to all the features.
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
+ }