@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,43 @@
1
+ import { RocosError, errorCodes } from '../models';
2
+ import { API_SPOTTY_URL } from '../constants/api';
3
+ import { BaseServiceAbstract } from './BaseServiceAbstract';
4
+ import { RocosLogger } from '../logger/RocosLogger';
5
+ import { RocosStore } from '../store/RocosStore';
6
+ import { formatServiceUrl } from '../helpers/formatServiceUrl';
7
+ export class SpotProvisioningServiceNode extends BaseServiceAbstract {
8
+ constructor(config) {
9
+ super(config);
10
+ this.logger = RocosLogger.getInstance(`SpotService(${this.config.url})`);
11
+ }
12
+ getStatus() {
13
+ return true;
14
+ }
15
+ getError(e) {
16
+ return new RocosError(e, errorCodes.SPOT_SERVICE_ERROR);
17
+ }
18
+ async getSpotCoreImage(projectId, profileId, robot, tag = 'stable', patMetadata, timezone) {
19
+ const userService = RocosStore.getSDKInstance(this.config).getUserService();
20
+ const pat = await userService.createPAT({
21
+ name: `Spot provisioning token for ${robot.callsign}`,
22
+ projectId,
23
+ scope: ['provisioning'],
24
+ robotDefinitionId: profileId,
25
+ metaData: {
26
+ defaultRobotDefinitionId: profileId,
27
+ singleUse: true,
28
+ ...patMetadata,
29
+ },
30
+ ttlDays: 90,
31
+ });
32
+ return this.callPost(formatServiceUrl(API_SPOTTY_URL, { url: this.config.url }, this.config.insecure), {
33
+ pat: pat.pat,
34
+ callsign: robot.callsign,
35
+ robotName: robot.name,
36
+ project: projectId,
37
+ agentImageTag: tag,
38
+ timezone,
39
+ }, 'Failed to get image.', {
40
+ responseType: 'stream',
41
+ });
42
+ }
43
+ }
@@ -0,0 +1,98 @@
1
+ import { RocosError } from '../models/RocosError';
2
+ import { BaseServiceAbstract } from './BaseServiceAbstract';
3
+ import { IBaseService } from '../models/IBaseService';
4
+ import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
5
+ import { ISource } from '../models/ISource';
6
+ import { IStream } from '../models/IStream';
7
+ import { IStreamSource } from '../models/IStreamSource';
8
+ export declare class StreamService extends BaseServiceAbstract implements IBaseService {
9
+ constructor(config: IRocosSDKConfig);
10
+ protected getError(e: Error): RocosError;
11
+ getStatus(): boolean;
12
+ /**
13
+ * Create a new stream.
14
+ *
15
+ * @param projectId - Project Id
16
+ * @param stream - Stream object
17
+ */
18
+ create(projectId: string, stream: IStream): Promise<any>;
19
+ /**
20
+ * Get streams list by project id.
21
+ */
22
+ list(projectId: string): Promise<IStream[]>;
23
+ /**
24
+ * Get stream information by project id and stream id.
25
+ *
26
+ * @param projectId - Project Id
27
+ * @param streamId - Stream Id
28
+ */
29
+ info(projectId: string, streamId: string): Promise<IStream>;
30
+ /**
31
+ * Add new data to the stream
32
+ *
33
+ * @param projectId - Project Id
34
+ * @param streamId - Stream Id
35
+ * @param sources - Payload {@link IStreamSource[]}
36
+ */
37
+ addData(projectId: string, streamId: string, sources: IStreamSource[]): Promise<any>;
38
+ /**
39
+ * Get sources for stream.
40
+ */
41
+ sources(): Promise<ISource[]>;
42
+ /**
43
+ * Get source info
44
+ *
45
+ * @param sourceId - Source Id
46
+ */
47
+ sourceInfo(sourceId: string): Promise<ISource>;
48
+ /**
49
+ * Get streams list of robot
50
+ *
51
+ * @param projectId - Project Id
52
+ * @param callsign - Robot's Callsign
53
+ */
54
+ streamsForRobot(projectId: string, callsign: string): Promise<IStream[]>;
55
+ /**
56
+ * Bind robot with stream
57
+ *
58
+ * @param projectId - Project Id
59
+ * @param streamId - Steam Id
60
+ * @param callsigns - The Robots' callsigns which should bind with stream
61
+ */
62
+ bindRobot(projectId: string, streamId: string, callsigns: string[]): Promise<any>;
63
+ /**
64
+ * Unbind robot with stream
65
+ *
66
+ * @param projectId - Project Id
67
+ * @param streamId - Steam Id
68
+ * @param callsigns - The Robots' callsigns which should unbind with stream
69
+ */
70
+ unbindRobot(projectId: string, streamId: string, callsigns: string[]): Promise<any>;
71
+ /**
72
+ * Remove streams by list
73
+ *
74
+ * @param projectId - Project Id
75
+ * @param streamIds - Stream Ids
76
+ */
77
+ removeStreams(projectId: string, streamIds: string[]): Promise<any>;
78
+ /**
79
+ * Remove stream data by dataIds list
80
+ *
81
+ * @param projectId - Project Id
82
+ * @param streamId - Stream Id
83
+ * @param dataIds - Data Ids, e.g. {sourceId: string, dataId: string}
84
+ */
85
+ removeStreamData(projectId: string, streamId: string, dataIds: any[]): Promise<any>;
86
+ /**
87
+ * Remove stream data by ids list
88
+ *
89
+ * @param projectId - Project Id
90
+ * @param streamId - Stream Id
91
+ * @param ids - ids list (string[])
92
+ */
93
+ removeStreamDataByIds(projectId: string, streamId: string, ids: string[]): Promise<any>;
94
+ /**
95
+ * Get stream data exporter templates list
96
+ */
97
+ dataExporterTemplates(): Promise<any>;
98
+ }
@@ -0,0 +1,142 @@
1
+ import { API_PROJECT_CALLSIGN_STREAM_URL, API_PROJECT_STREAM_CALLSIGN_URL, API_PROJECT_STREAM_DATA_URL, API_PROJECT_STREAM_ID_URL, API_PROJECT_STREAM_URL, API_SOURCE_ID_URL, API_SOURCE_URL, API_TEMPLATE_EXPORTER_URL, } from '../constants/api';
2
+ import { RocosError, errorCodes } from '../models/RocosError';
3
+ import { BaseServiceAbstract } from './BaseServiceAbstract';
4
+ import { RocosLogger } from '../logger/RocosLogger';
5
+ import { Stream } from '../models/Stream';
6
+ import { StreamSource } from '../models/StreamSource';
7
+ import { cleanObject } from '../helpers/cleanObject';
8
+ import { formatServiceUrl } from '../helpers/formatServiceUrl';
9
+ export class StreamService extends BaseServiceAbstract {
10
+ constructor(config) {
11
+ super(config);
12
+ this.logger = RocosLogger.getInstance(`StreamService(${this.config.url})`);
13
+ }
14
+ getError(e) {
15
+ return new RocosError(e, errorCodes.STREAM_SERVICE_ERROR);
16
+ }
17
+ getStatus() {
18
+ return true;
19
+ }
20
+ /**
21
+ * Create a new stream.
22
+ *
23
+ * @param projectId - Project Id
24
+ * @param stream - Stream object
25
+ */
26
+ // TODO: map the response object
27
+ async create(projectId, stream) {
28
+ return this.callPost(formatServiceUrl(API_PROJECT_STREAM_URL, { url: this.config.url, projectId }, this.config.insecure), cleanObject(new Stream(stream)), `Failed to create stream for ${projectId}.`);
29
+ }
30
+ /**
31
+ * Get streams list by project id.
32
+ */
33
+ async list(projectId) {
34
+ const data = await this.callGet(formatServiceUrl(API_PROJECT_STREAM_URL, { url: this.config.url, projectId }, this.config.insecure), `Failed to get streams for ${projectId}.`);
35
+ return data.map((stream) => cleanObject(new Stream(stream)));
36
+ }
37
+ /**
38
+ * Get stream information by project id and stream id.
39
+ *
40
+ * @param projectId - Project Id
41
+ * @param streamId - Stream Id
42
+ */
43
+ async info(projectId, streamId) {
44
+ const data = await this.callGet(formatServiceUrl(API_PROJECT_STREAM_ID_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to get stream for ${projectId}, streamId ${streamId}.`);
45
+ return cleanObject(new Stream(data));
46
+ }
47
+ /**
48
+ * Add new data to the stream
49
+ *
50
+ * @param projectId - Project Id
51
+ * @param streamId - Stream Id
52
+ * @param sources - Payload {@link IStreamSource[]}
53
+ */
54
+ // TODO: map the response object
55
+ async addData(projectId, streamId, sources) {
56
+ return this.callPut(formatServiceUrl(API_PROJECT_STREAM_DATA_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), { data: sources.map((source) => cleanObject(new StreamSource(source))) }, `Failed add data to stream for ${projectId}, streamId ${streamId}.`);
57
+ }
58
+ /**
59
+ * Get sources for stream.
60
+ */
61
+ async sources() {
62
+ return this.callGet(formatServiceUrl(API_SOURCE_URL, { url: this.config.url }, this.config.insecure), 'Failed to get sources for stream.');
63
+ }
64
+ /**
65
+ * Get source info
66
+ *
67
+ * @param sourceId - Source Id
68
+ */
69
+ async sourceInfo(sourceId) {
70
+ return this.callGet(formatServiceUrl(API_SOURCE_ID_URL, { url: this.config.url, sourceId }, this.config.insecure), `Failed add et source info for ${sourceId}.`);
71
+ }
72
+ /**
73
+ * Get streams list of robot
74
+ *
75
+ * @param projectId - Project Id
76
+ * @param callsign - Robot's Callsign
77
+ */
78
+ async streamsForRobot(projectId, callsign) {
79
+ return this.callGet(formatServiceUrl(API_PROJECT_CALLSIGN_STREAM_URL, { url: this.config.url, projectId, callsign }, this.config.insecure), `Failed get streams for ${projectId}, callsign ${callsign}.`);
80
+ }
81
+ /**
82
+ * Bind robot with stream
83
+ *
84
+ * @param projectId - Project Id
85
+ * @param streamId - Steam Id
86
+ * @param callsigns - The Robots' callsigns which should bind with stream
87
+ */
88
+ // TODO: map the response object
89
+ async bindRobot(projectId, streamId, callsigns) {
90
+ return this.callPut(formatServiceUrl(API_PROJECT_STREAM_CALLSIGN_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), callsigns, `Failed to bind robot with stream for ${projectId}, streamId ${streamId}.`);
91
+ }
92
+ /**
93
+ * Unbind robot with stream
94
+ *
95
+ * @param projectId - Project Id
96
+ * @param streamId - Steam Id
97
+ * @param callsigns - The Robots' callsigns which should unbind with stream
98
+ */
99
+ // TODO: map the response object
100
+ async unbindRobot(projectId, streamId, callsigns) {
101
+ return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_CALLSIGN_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to unbind robot with stream for ${projectId}, streamId ${streamId}.`, callsigns);
102
+ }
103
+ /**
104
+ * Remove streams by list
105
+ *
106
+ * @param projectId - Project Id
107
+ * @param streamIds - Stream Ids
108
+ */
109
+ // TODO: map the response object
110
+ async removeStreams(projectId, streamIds) {
111
+ return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_URL, { url: this.config.url, projectId }, this.config.insecure), `Failed to remove stream for ${projectId}.`, streamIds);
112
+ }
113
+ /**
114
+ * Remove stream data by dataIds list
115
+ *
116
+ * @param projectId - Project Id
117
+ * @param streamId - Stream Id
118
+ * @param dataIds - Data Ids, e.g. {sourceId: string, dataId: string}
119
+ */
120
+ // TODO: map the response object
121
+ async removeStreamData(projectId, streamId, dataIds) {
122
+ return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_DATA_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to remove streams for ${projectId}, streamId ${streamId}.`, dataIds);
123
+ }
124
+ /**
125
+ * Remove stream data by ids list
126
+ *
127
+ * @param projectId - Project Id
128
+ * @param streamId - Stream Id
129
+ * @param ids - ids list (string[])
130
+ */
131
+ // TODO: map the response object
132
+ async removeStreamDataByIds(projectId, streamId, ids) {
133
+ return this.callDelete(formatServiceUrl(API_PROJECT_STREAM_DATA_URL, { url: this.config.url, projectId, streamId }, this.config.insecure), `Failed to remove streams for ${projectId}, streamId ${streamId}.`, ids);
134
+ }
135
+ /**
136
+ * Get stream data exporter templates list
137
+ */
138
+ // TODO: map the response object
139
+ async dataExporterTemplates() {
140
+ return this.callGet(formatServiceUrl(API_TEMPLATE_EXPORTER_URL, { url: this.config.url }, this.config.insecure), 'Failed to get data exporters.');
141
+ }
142
+ }
@@ -0,0 +1,40 @@
1
+ import { Observable } from 'rxjs';
2
+ import { CallsignStatus, IRocosSDKConfig, IRocosTelemetryMessage, IStreamStatusMessage, ITelemetryStream, ITelemetryStreamConfig, ITelemetrySubscriptionParams, ITelemetrySubscriptions } from '../models';
3
+ import { BaseStreamService } from './BaseStreamService';
4
+ export declare class TelemetryService extends BaseStreamService<ITelemetryStream, ITelemetryStreamConfig> {
5
+ private statusSubscription;
6
+ private changeStream$;
7
+ private streamStatusSubject$;
8
+ constructor(config: IRocosSDKConfig);
9
+ /**
10
+ * The main method for subscribing to telemetry messages
11
+ *
12
+ * @param params - Subscription params
13
+ *
14
+ * @returns An Observable that outputs telemetry messages
15
+ */
16
+ subscribe(params: ITelemetrySubscriptionParams): Observable<IRocosTelemetryMessage>;
17
+ /**
18
+ * A method to keep track of the current subscriptions
19
+ *
20
+ * @returns An Observable that outputs subscription changes
21
+ */
22
+ getSubscriptionChanges(): Observable<ITelemetrySubscriptions>;
23
+ /**
24
+ * A method to keep track of the stream status
25
+ *
26
+ * @returns An Observable that outputs stream status
27
+ */
28
+ getStatusChanges(): Observable<IStreamStatusMessage>;
29
+ /**
30
+ * Subscribes to the heartbeat telemetry and checks we receive one at least every 5s
31
+ * @param projectId
32
+ * @param callsign
33
+ * @param heartbeatTimeoutMs optionally override the deadline for heartbeats (in ms). Default 5000ms
34
+ * @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
35
+ */
36
+ getRobotStatusChanges(projectId: string, callsign: string, heartbeatTimeoutMs?: number, intervalMs?: number): Observable<CallsignStatus>;
37
+ protected initStream(stream: ITelemetryStream): Promise<void>;
38
+ private createStream;
39
+ protected getStream(config: ITelemetryStreamConfig): ITelemetryStream;
40
+ }
@@ -0,0 +1,142 @@
1
+ import { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, from, interval, map, mergeAll, of, startWith, } from 'rxjs';
2
+ import { CallsignsLookup, CallsignsLookupType, CallsignStatus, errorCodes, RocosError, SubscriberStatusEnum, } from '../models';
3
+ import { filter, finalize } from 'rxjs/operators';
4
+ import { BaseStreamService } from './BaseStreamService';
5
+ import { IDENTIFIER_NAME_TELEMETRY } from '../constants/identifier';
6
+ import { RocosStore } from '../store/RocosStore';
7
+ import { TelemetryStream } from '../api/streams/telemetry/TelemetryStream';
8
+ import { arrayUnique } from '../helpers/arrayUnique';
9
+ import { getUniqueId } from '../helpers/getUniqueId';
10
+ const HEARTBEAT_SOURCE = '/rocos/agent/telemetry/heartbeat';
11
+ const HEARTBEAT_TIMEOUT = 5000; // if no heartbeat within 5 seconds then the robot is considered dead
12
+ export class TelemetryService extends BaseStreamService {
13
+ constructor(config) {
14
+ super('TelemetryService', config);
15
+ this.changeStream$ = new BehaviorSubject(new Map());
16
+ RocosStore.getChangeSubject()
17
+ .pipe(filter((message) => {
18
+ return message.type === 'telemetry-subscription' && message.url === this.config.url;
19
+ }))
20
+ .subscribe((msg) => {
21
+ this.changeStream$.next(msg.data);
22
+ });
23
+ this.streamStatusSubject$ = new BehaviorSubject({
24
+ scope: 'default',
25
+ status: SubscriberStatusEnum.STOPPED,
26
+ });
27
+ }
28
+ /**
29
+ * The main method for subscribing to telemetry messages
30
+ *
31
+ * @param params - Subscription params
32
+ *
33
+ * @returns An Observable that outputs telemetry messages
34
+ */
35
+ subscribe(params) {
36
+ const sources = arrayUnique(params.sources).map((item) => item.trim()) ?? [];
37
+ if (!params?.callsigns && params?.query) {
38
+ this.logger.error('Error: params need to contain either callsigns or query', params);
39
+ throw new RocosError('Params need to contain either callsigns or query.', errorCodes.TELEMETRY_SERVICE_ERROR);
40
+ }
41
+ let callsignsLookup = new CallsignsLookup([]);
42
+ if (params?.callsigns) {
43
+ this.logger.info('subscribe with callsigns', params);
44
+ callsignsLookup = new CallsignsLookup(params.callsigns);
45
+ }
46
+ else if (params?.query) {
47
+ this.logger.info('subscribe with query', params);
48
+ callsignsLookup = new CallsignsLookup(params.query);
49
+ }
50
+ const scope = params.scope ?? 'default';
51
+ const callsigns = callsignsLookup.lookupValue;
52
+ const subscriptionParams = {
53
+ uniqueId: getUniqueId(params.projectId, callsignsLookup, sources, scope),
54
+ callsigns: callsignsLookup?.lookupType === CallsignsLookupType.List ? callsignsLookup.lookupValue : [],
55
+ sources,
56
+ };
57
+ const stream = this.createStream(params.projectId, callsignsLookup, sources, scope).then((stream) => {
58
+ stream.addSubscription(subscriptionParams);
59
+ if (!this.statusSubscription) {
60
+ this.statusSubscription = stream.statusStream$.subscribe((msg) => {
61
+ this.status = msg === SubscriberStatusEnum.STOPPED || msg === SubscriberStatusEnum.ALIVE;
62
+ this.status$.next(msg);
63
+ });
64
+ }
65
+ return from(stream.messageStream$).pipe(finalize(() => stream?.removeSubscription(subscriptionParams, params.terminateReceiverGroupOnUnsubscribe)));
66
+ });
67
+ return from(stream).pipe(mergeAll(), filter((message) => {
68
+ return callsigns.includes(message.callsign) && sources.includes(message.source);
69
+ }));
70
+ }
71
+ /**
72
+ * A method to keep track of the current subscriptions
73
+ *
74
+ * @returns An Observable that outputs subscription changes
75
+ */
76
+ getSubscriptionChanges() {
77
+ return this.changeStream$.asObservable();
78
+ }
79
+ /**
80
+ * A method to keep track of the stream status
81
+ *
82
+ * @returns An Observable that outputs stream status
83
+ */
84
+ getStatusChanges() {
85
+ return this.streamStatusSubject$.asObservable();
86
+ }
87
+ /**
88
+ * Subscribes to the heartbeat telemetry and checks we receive one at least every 5s
89
+ * @param projectId
90
+ * @param callsign
91
+ * @param heartbeatTimeoutMs optionally override the deadline for heartbeats (in ms). Default 5000ms
92
+ * @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
93
+ */
94
+ getRobotStatusChanges(projectId, callsign, heartbeatTimeoutMs = HEARTBEAT_TIMEOUT, intervalMs = 2000) {
95
+ const startedAt = Date.now();
96
+ const heartbeatTime$ = this.subscribe({
97
+ projectId,
98
+ sources: [HEARTBEAT_SOURCE],
99
+ callsigns: [callsign],
100
+ }).pipe(map(() => Date.now()));
101
+ return combineLatest([heartbeatTime$.pipe(startWith(startedAt)), interval(intervalMs)]).pipe(map(([lastHeartbeat, _]) => {
102
+ const now = Date.now();
103
+ // If we haven't received a heartbeat, but we've only just started
104
+ if (lastHeartbeat === startedAt && now - startedAt <= heartbeatTimeoutMs) {
105
+ return CallsignStatus.UNKNOWN;
106
+ }
107
+ if (now - lastHeartbeat > heartbeatTimeoutMs) {
108
+ return CallsignStatus.OFFLINE;
109
+ }
110
+ return CallsignStatus.ONLINE;
111
+ }), startWith(CallsignStatus.UNKNOWN), distinctUntilChanged(), catchError(() => of(CallsignStatus.ERROR)));
112
+ }
113
+ async initStream(stream) {
114
+ await super.initStream(stream);
115
+ stream.init();
116
+ }
117
+ async createStream(projectId, callsignsLookup, sources, scope) {
118
+ const newStream = await this.createStreamFromConfig(IDENTIFIER_NAME_TELEMETRY, {
119
+ url: this.config.url,
120
+ projectId,
121
+ callsignsLookup,
122
+ sources,
123
+ token: this.config.token,
124
+ scope: scope ?? 'default',
125
+ options: this.config.options,
126
+ port: this.config.port,
127
+ insecure: this.config.insecure,
128
+ });
129
+ if (!newStream.isNew) {
130
+ newStream.stream.statusStream$.subscribe((msg) => {
131
+ this.streamStatusSubject$.next({
132
+ scope,
133
+ status: msg,
134
+ });
135
+ });
136
+ }
137
+ return newStream.stream;
138
+ }
139
+ getStream(config) {
140
+ return new TelemetryStream(config);
141
+ }
142
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,37 @@
1
+ import { TelemetryService } from './TelemetryService';
2
+ import { delay, from, lastValueFrom, NEVER, take, throwError } from 'rxjs';
3
+ import { CallsignStatus } from '../models';
4
+ describe('TelemetryService', () => {
5
+ describe('getRobotStatusChanges', () => {
6
+ it('should emit unknown to begin with', async () => {
7
+ const service = new TelemetryService({ url: '', token: '' });
8
+ // Mock 5 heartbeat messages
9
+ jest.spyOn(service, 'subscribe').mockReturnValue(NEVER);
10
+ const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign').pipe(take(1)));
11
+ expect(lastValue).toEqual(CallsignStatus.UNKNOWN);
12
+ });
13
+ it('should emit online if the robot emits a heartbeat', async () => {
14
+ const service = new TelemetryService({ url: '', token: '' });
15
+ // Mock 5 heartbeat messages
16
+ jest
17
+ .spyOn(service, 'subscribe')
18
+ .mockReturnValue(from([0, 1, 2, 3, 4]).pipe(delay(100)));
19
+ const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 1000, 10).pipe(take(2)));
20
+ expect(lastValue).toEqual(CallsignStatus.ONLINE);
21
+ }, 10000);
22
+ it('should emit offline if the robot never emits', async () => {
23
+ const service = new TelemetryService({ url: '', token: '' });
24
+ // Mock 5 heartbeat messages
25
+ jest.spyOn(service, 'subscribe').mockReturnValue(NEVER);
26
+ const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 100, 10).pipe(take(2)));
27
+ expect(lastValue).toEqual(CallsignStatus.OFFLINE);
28
+ });
29
+ it('should emit an error if the telemetry errors', async () => {
30
+ const service = new TelemetryService({ url: '', token: '' });
31
+ // Mock 5 heartbeat messages
32
+ jest.spyOn(service, 'subscribe').mockReturnValue(throwError(() => new Error('test')));
33
+ const lastValue = await lastValueFrom(service.getRobotStatusChanges('project', 'callsign', 100, 10).pipe(take(2)));
34
+ expect(lastValue).toEqual(CallsignStatus.ERROR);
35
+ });
36
+ });
37
+ });
@@ -0,0 +1,6 @@
1
+ import { ITelemetryStream } from '../models/stream/ITelemetryStream';
2
+ import { ITelemetryStreamConfig } from '../models/ITelemetryStreamConfig';
3
+ import { TelemetryService } from './TelemetryService';
4
+ export declare class TelemetryServiceNode extends TelemetryService {
5
+ protected getStream(config: ITelemetryStreamConfig): ITelemetryStream;
6
+ }
@@ -0,0 +1,7 @@
1
+ import { TelemetryService } from './TelemetryService';
2
+ import { TelemetryStreamNode } from '../api/streams/telemetry/TelemetryStreamNode';
3
+ export class TelemetryServiceNode extends TelemetryService {
4
+ getStream(config) {
5
+ return new TelemetryStreamNode(config);
6
+ }
7
+ }
@@ -0,0 +1,13 @@
1
+ import { RocosError } from '../models/RocosError';
2
+ import { BaseServiceAbstract } from './BaseServiceAbstract';
3
+ import { IBaseService } from '../models/IBaseService';
4
+ import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
5
+ export declare class TimeSyncerService extends BaseServiceAbstract implements IBaseService {
6
+ constructor(config: IRocosSDKConfig);
7
+ protected getError(e: Error): RocosError;
8
+ getStatus(): boolean;
9
+ /**
10
+ * Get Server Time
11
+ */
12
+ getServerTime(): Promise<any>;
13
+ }
@@ -0,0 +1,23 @@
1
+ import { RocosError, errorCodes } from '../models/RocosError';
2
+ import { API_SERVER_TIME_URL } from '../constants/api';
3
+ import { BaseServiceAbstract } from './BaseServiceAbstract';
4
+ import { RocosLogger } from '../logger/RocosLogger';
5
+ import { formatServiceUrl } from '../helpers/formatServiceUrl';
6
+ export class TimeSyncerService extends BaseServiceAbstract {
7
+ constructor(config) {
8
+ super(config);
9
+ this.logger = RocosLogger.getInstance(`TimeSyncerService(${this.config.url})`);
10
+ }
11
+ getError(e) {
12
+ return new RocosError(e, errorCodes.TIME_SYNCER_SERVICE_ERROR);
13
+ }
14
+ getStatus() {
15
+ return true;
16
+ }
17
+ /**
18
+ * Get Server Time
19
+ */
20
+ getServerTime() {
21
+ return this.callGet(formatServiceUrl(API_SERVER_TIME_URL, { url: this.config.url }, this.config.insecure), 'Failed to get server time.');
22
+ }
23
+ }