@dronedeploy/rocos-js-sdk 2.6.1 → 3.0.0-alpha.20

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 (618) hide show
  1. package/IRocosSDK.d.ts +3 -26
  2. package/IRocosSDK.js +1 -5
  3. package/README.md +18 -0
  4. package/RocosSDK.d.ts +6 -1
  5. package/RocosSDK.js +103 -95
  6. package/api/StreamRegister.d.ts +1 -1
  7. package/api/StreamRegister.js +23 -12
  8. package/api/atoms/StreamHeartbeat.js +3 -7
  9. package/api/streams/caller/CallerStream.d.ts +6 -6
  10. package/api/streams/caller/CallerStream.js +41 -49
  11. package/api/streams/caller/CallerStreamAbstract.d.ts +6 -11
  12. package/api/streams/caller/CallerStreamAbstract.js +55 -67
  13. package/api/streams/caller/CallerStreamNode.d.ts +6 -6
  14. package/api/streams/caller/CallerStreamNode.js +48 -61
  15. package/api/streams/command/CommandStream.d.ts +2 -4
  16. package/api/streams/command/CommandStream.js +28 -30
  17. package/api/streams/command/CommandStreamAbstract.d.ts +4 -8
  18. package/api/streams/command/CommandStreamAbstract.js +33 -42
  19. package/api/streams/command/CommandStreamNode.d.ts +2 -4
  20. package/api/streams/command/CommandStreamNode.js +16 -40
  21. package/api/streams/control/ControlStream.d.ts +4 -6
  22. package/api/streams/control/ControlStream.js +30 -36
  23. package/api/streams/control/ControlStreamAbstract.d.ts +6 -9
  24. package/api/streams/control/ControlStreamAbstract.js +57 -54
  25. package/api/streams/control/ControlStreamNode.d.ts +3 -5
  26. package/api/streams/control/ControlStreamNode.js +19 -44
  27. package/api/streams/fileAccessor/FileAccessorStream.d.ts +2 -4
  28. package/api/streams/fileAccessor/FileAccessorStream.js +42 -57
  29. package/api/streams/fileAccessor/FileAccessorStreamAbstract.d.ts +4 -9
  30. package/api/streams/fileAccessor/FileAccessorStreamAbstract.js +28 -48
  31. package/api/streams/fileAccessor/FileAccessorStreamNode.d.ts +1 -3
  32. package/api/streams/fileAccessor/FileAccessorStreamNode.js +23 -53
  33. package/api/streams/search/SearchStream.d.ts +2 -5
  34. package/api/streams/search/SearchStream.js +50 -74
  35. package/api/streams/search/SearchStreamAbstract.d.ts +4 -9
  36. package/api/streams/search/SearchStreamAbstract.js +33 -35
  37. package/api/streams/search/SearchStreamNode.d.ts +2 -5
  38. package/api/streams/search/SearchStreamNode.js +23 -48
  39. package/api/streams/telemetry/TelemetryStream.d.ts +4 -4
  40. package/api/streams/telemetry/TelemetryStream.js +49 -78
  41. package/api/streams/telemetry/TelemetryStreamAbstract.d.ts +8 -11
  42. package/api/streams/telemetry/TelemetryStreamAbstract.js +126 -145
  43. package/api/streams/telemetry/TelemetryStreamNode.d.ts +5 -5
  44. package/api/streams/telemetry/TelemetryStreamNode.js +44 -64
  45. package/api/streams/webRTCSignalling/WebRTCSignallingStream.d.ts +5 -10
  46. package/api/streams/webRTCSignalling/WebRTCSignallingStream.js +37 -20
  47. package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.d.ts +10 -13
  48. package/api/streams/webRTCSignalling/WebRTCSignallingStreamAbstract.js +37 -37
  49. package/constants/api.d.ts +14 -5
  50. package/constants/api.js +130 -126
  51. package/constants/auth.d.ts +2 -0
  52. package/constants/auth.js +2 -0
  53. package/constants/grpc.js +5 -8
  54. package/constants/identifier.js +6 -9
  55. package/constants/timezones.d.ts +1 -1
  56. package/constants/timezones.js +1 -4
  57. package/grpc/conker_pb.client.d.ts +78 -0
  58. package/grpc/conker_pb.client.js +55 -0
  59. package/grpc/conker_pb.d.ts +141 -0
  60. package/grpc/conker_pb.grpc-client.d.ts +81 -0
  61. package/grpc/conker_pb.grpc-client.js +58 -0
  62. package/grpc/conker_pb.js +104 -0
  63. package/grpc/filagree_pb.client.d.ts +68 -0
  64. package/grpc/filagree_pb.client.js +48 -0
  65. package/grpc/filagree_pb.d.ts +404 -0
  66. package/grpc/filagree_pb.grpc-client.d.ts +69 -0
  67. package/grpc/filagree_pb.grpc-client.js +51 -0
  68. package/grpc/filagree_pb.js +329 -0
  69. package/grpc/google/protobuf/descriptor_pb.d.ts +1798 -0
  70. package/grpc/google/protobuf/descriptor_pb.js +2378 -0
  71. package/grpc/google/protobuf/empty_pb.d.ts +23 -0
  72. package/grpc/google/protobuf/empty_pb.js +47 -0
  73. package/grpc/pigeon_pb.client.d.ts +96 -0
  74. package/grpc/pigeon_pb.client.js +72 -0
  75. package/grpc/pigeon_pb.d.ts +207 -0
  76. package/grpc/pigeon_pb.grpc-client.d.ts +98 -0
  77. package/grpc/pigeon_pb.grpc-client.js +68 -0
  78. package/grpc/pigeon_pb.js +144 -0
  79. package/grpc/rambo.uri.v1_pb.d.ts +73 -0
  80. package/grpc/rambo.uri.v1_pb.js +48 -0
  81. package/grpc/rambo.v1_pb.client.d.ts +66 -0
  82. package/grpc/rambo.v1_pb.client.js +48 -0
  83. package/grpc/rambo.v1_pb.d.ts +392 -0
  84. package/grpc/rambo.v1_pb.grpc-client.d.ts +56 -0
  85. package/grpc/rambo.v1_pb.grpc-client.js +44 -0
  86. package/grpc/rambo.v1_pb.js +272 -0
  87. package/grpc/serviette.uri.v1_pb.d.ts +89 -0
  88. package/grpc/serviette.uri.v1_pb.js +62 -0
  89. package/grpc/serviette.v1_pb.client.d.ts +225 -0
  90. package/grpc/serviette.v1_pb.client.js +174 -0
  91. package/grpc/serviette.v1_pb.d.ts +827 -0
  92. package/grpc/serviette.v1_pb.grpc-client.d.ts +215 -0
  93. package/grpc/serviette.v1_pb.grpc-client.js +162 -0
  94. package/grpc/serviette.v1_pb.js +553 -0
  95. package/grpc/slowlane_pb.client.d.ts +61 -0
  96. package/grpc/slowlane_pb.client.js +41 -0
  97. package/grpc/slowlane_pb.d.ts +303 -0
  98. package/grpc/slowlane_pb.grpc-client.d.ts +64 -0
  99. package/grpc/slowlane_pb.grpc-client.js +44 -0
  100. package/grpc/slowlane_pb.js +185 -0
  101. package/grpc/teletubby_pb.client.d.ts +145 -0
  102. package/grpc/teletubby_pb.client.js +104 -0
  103. package/grpc/teletubby_pb.d.ts +634 -0
  104. package/grpc/teletubby_pb.grpc-client.d.ts +152 -0
  105. package/grpc/teletubby_pb.grpc-client.js +100 -0
  106. package/grpc/teletubby_pb.js +1264 -0
  107. package/helpers/arrayRemove.js +2 -6
  108. package/helpers/arrayUnique.js +2 -6
  109. package/helpers/average.js +2 -7
  110. package/helpers/callerMessageHelpers.d.ts +14 -0
  111. package/helpers/callerMessageHelpers.js +86 -0
  112. package/helpers/cleanObject.js +17 -19
  113. package/helpers/cleanObject.spec.d.ts +1 -0
  114. package/helpers/cleanObject.spec.js +53 -0
  115. package/helpers/enviroment.js +4 -11
  116. package/helpers/flattenCallsignsLookup.d.ts +1 -1
  117. package/helpers/flattenCallsignsLookup.js +1 -5
  118. package/helpers/flattenObject.js +1 -5
  119. package/helpers/flattenObject.spec.d.ts +1 -0
  120. package/helpers/flattenObject.spec.js +29 -0
  121. package/helpers/flattenOneOf.d.ts +67 -0
  122. package/helpers/flattenOneOf.js +29 -0
  123. package/helpers/flattenOneOf.spec.d.ts +1 -0
  124. package/helpers/flattenOneOf.spec.js +157 -0
  125. package/helpers/formatServiceUrl.js +1 -5
  126. package/helpers/formatServiceUrl.spec.d.ts +1 -0
  127. package/helpers/formatServiceUrl.spec.js +16 -0
  128. package/helpers/generateUUID.js +3 -7
  129. package/helpers/getSubscriptionsDifference.d.ts +3 -3
  130. package/helpers/getSubscriptionsDifference.js +6 -10
  131. package/helpers/getURLSearchParams.d.ts +2 -0
  132. package/helpers/getURLSearchParams.js +9 -0
  133. package/helpers/getURLSearchParams.spec.d.ts +1 -0
  134. package/helpers/getURLSearchParams.spec.js +19 -0
  135. package/helpers/getUniqueConfigKey.js +1 -6
  136. package/helpers/getUniqueId.js +3 -7
  137. package/helpers/getUnixTimeMs.js +1 -5
  138. package/helpers/index.d.ts +3 -1
  139. package/helpers/index.js +5 -15
  140. package/helpers/nanosecondToMillisecond.d.ts +1 -1
  141. package/helpers/nanosecondToMillisecond.js +11 -6
  142. package/helpers/nanosecondToMillisecond.spec.d.ts +1 -0
  143. package/helpers/nanosecondToMillisecond.spec.js +20 -0
  144. package/helpers/randomString.js +1 -5
  145. package/helpers/standardDeviation.js +4 -8
  146. package/helpers/standardDeviation.spec.d.ts +1 -0
  147. package/helpers/standardDeviation.spec.js +11 -0
  148. package/helpers/stringToUint8Array.js +3 -7
  149. package/helpers/uint8ArrayToString.js +3 -8
  150. package/helpers/websandbox/connection.d.ts +67 -0
  151. package/helpers/websandbox/connection.js +133 -0
  152. package/helpers/websandbox/frame/frame.d.ts +12 -0
  153. package/helpers/websandbox/frame/frame.js +22 -0
  154. package/helpers/websandbox/frame/frame.source.d.ts +2 -0
  155. package/helpers/websandbox/frame/frame.source.js +5 -0
  156. package/helpers/websandbox/frame/index.d.ts +2 -0
  157. package/helpers/websandbox/frame/index.js +2 -0
  158. package/helpers/websandbox/frame/worker/index.d.ts +2 -0
  159. package/helpers/websandbox/frame/worker/index.js +2 -0
  160. package/helpers/websandbox/frame/worker/manager.d.ts +11 -0
  161. package/helpers/websandbox/frame/worker/manager.js +67 -0
  162. package/helpers/websandbox/frame/worker/manager.spec.d.ts +4 -0
  163. package/helpers/websandbox/frame/worker/manager.spec.js +127 -0
  164. package/helpers/websandbox/frame/worker/types.d.ts +11 -0
  165. package/helpers/websandbox/frame/worker/types.js +1 -0
  166. package/helpers/websandbox/frame/worker/worker.d.ts +1 -0
  167. package/helpers/websandbox/frame/worker/worker.js +74 -0
  168. package/helpers/websandbox/frame/worker/worker.source.d.ts +2 -0
  169. package/helpers/websandbox/frame/worker/worker.source.js +4 -0
  170. package/helpers/websandbox/index.d.ts +2 -0
  171. package/helpers/websandbox/index.js +2 -0
  172. package/helpers/websandbox/sandbox.d.ts +57 -0
  173. package/helpers/websandbox/sandbox.js +175 -0
  174. package/helpers/websandbox/types.d.ts +13 -0
  175. package/helpers/websandbox/types.js +1 -0
  176. package/index.js +7 -19
  177. package/logger/RocosLogger.js +18 -44
  178. package/models/CallsignStatus.d.ts +6 -0
  179. package/models/CallsignStatus.js +7 -0
  180. package/models/ExportDataQuery.js +1 -5
  181. package/models/ExternalProject.js +1 -5
  182. package/models/IBaseService.d.ts +1 -0
  183. package/models/IBaseService.js +1 -2
  184. package/models/IConfigGroup.js +1 -2
  185. package/models/IDebugLevel.d.ts +1 -1
  186. package/models/IDebugLevel.js +1 -2
  187. package/models/IExportDataQuery.js +1 -2
  188. package/models/IFunctionConfig.js +1 -2
  189. package/models/IInvitation.d.ts +1 -1
  190. package/models/IInvitation.js +1 -2
  191. package/models/IInvitationExists.js +1 -2
  192. package/models/IOperation.js +1 -2
  193. package/models/IPersonalAccessToken.js +1 -2
  194. package/models/IProject.js +1 -2
  195. package/models/IProjectApplication.js +1 -2
  196. package/models/IRobot.d.ts +1 -0
  197. package/models/IRobot.js +1 -2
  198. package/models/IRobotConfig.js +1 -2
  199. package/models/IRobotPlugin.js +1 -2
  200. package/models/IRobotSettings.d.ts +28 -0
  201. package/models/IRobotSettings.js +1 -0
  202. package/models/IRobotTemplate.js +1 -2
  203. package/models/IRocosSDKConfig.d.ts +3 -9
  204. package/models/IRocosSDKConfig.js +1 -2
  205. package/models/ISource.js +1 -2
  206. package/models/IStream.js +1 -2
  207. package/models/IStreamConfig.js +1 -2
  208. package/models/IStreamOptions.js +1 -2
  209. package/models/IStreamSource.js +1 -2
  210. package/models/ISubscriberStatus.js +1 -2
  211. package/models/ITelemetryStreamConfig.js +1 -2
  212. package/models/IToken.d.ts +7 -3
  213. package/models/IToken.js +1 -2
  214. package/models/IWidget.js +1 -2
  215. package/models/IWidgetLineGroup.js +1 -2
  216. package/models/ResponseLevelEnum.d.ts +4 -0
  217. package/models/ResponseLevelEnum.js +6 -5
  218. package/models/Robot.d.ts +1 -0
  219. package/models/Robot.js +1 -5
  220. package/models/RobotConfig.js +1 -5
  221. package/models/RobotPlugin.js +1 -5
  222. package/models/RobotTemplate.js +9 -14
  223. package/models/RocosError.d.ts +1 -0
  224. package/models/RocosError.js +3 -6
  225. package/models/ServiceEnum.d.ts +2 -1
  226. package/models/ServiceEnum.js +3 -5
  227. package/models/Stream.js +4 -8
  228. package/models/StreamOptions.js +1 -5
  229. package/models/StreamSource.js +3 -7
  230. package/models/SubscriberStatusEnum.js +2 -5
  231. package/models/Token.d.ts +36 -4
  232. package/models/Token.js +74 -11
  233. package/models/Token.spec.d.ts +1 -0
  234. package/models/Token.spec.js +108 -0
  235. package/models/Widget.js +4 -8
  236. package/models/WidgetLineGroup.js +1 -5
  237. package/models/asset-storage/AssetModelItem.d.ts +3 -0
  238. package/models/asset-storage/AssetModelItem.js +1 -2
  239. package/models/caller/IRocosCallerMessageChunk.d.ts +8 -2
  240. package/models/caller/IRocosCallerMessageChunk.js +1 -2
  241. package/models/caller/IRocosCallerMessageChunks.d.ts +2 -3
  242. package/models/caller/IRocosCallerMessageChunks.js +1 -2
  243. package/models/caller/IRocosCallerMessageHeartbeat.d.ts +3 -2
  244. package/models/caller/IRocosCallerMessageHeartbeat.js +1 -2
  245. package/models/caller/IRocosCallerMessageResponse.d.ts +3 -2
  246. package/models/caller/IRocosCallerMessageResponse.js +1 -2
  247. package/models/caller/IRocosCallerMessageResponseAck.d.ts +16 -2
  248. package/models/caller/IRocosCallerMessageResponseAck.js +13 -2
  249. package/models/caller/IRocosCallerMessageResponseResult.d.ts +15 -2
  250. package/models/caller/IRocosCallerMessageResponseResult.js +12 -2
  251. package/models/caller/IRocosCallerMessageResponseReturn.d.ts +8 -0
  252. package/models/caller/IRocosCallerMessageResponseReturn.js +1 -0
  253. package/models/caller/IRocosCallerMessageResponseUid.d.ts +10 -2
  254. package/models/caller/IRocosCallerMessageResponseUid.js +7 -2
  255. package/models/caller/IRocosCallerMessageResponses.d.ts +2 -3
  256. package/models/caller/IRocosCallerMessageResponses.js +1 -2
  257. package/models/caller/RocosCallerResultStatus.d.ts +11 -1
  258. package/models/caller/RocosCallerResultStatus.js +12 -5
  259. package/models/caller/RocosResponseLevel.d.ts +6 -0
  260. package/models/caller/RocosResponseLevel.js +7 -0
  261. package/models/caller/index.d.ts +11 -0
  262. package/models/caller/index.js +11 -0
  263. package/models/callsigns/CallsignsEnums.d.ts +3 -3
  264. package/models/callsigns/CallsignsEnums.js +11 -14
  265. package/models/callsigns/CallsignsLookup.js +10 -15
  266. package/models/callsigns/CallsignsQuery.js +1 -5
  267. package/models/callsigns/CallsignsQueryPredicate.js +1 -5
  268. package/models/command/IRocosCommandMessageHeartbeat.d.ts +1 -2
  269. package/models/command/IRocosCommandMessageHeartbeat.js +1 -2
  270. package/models/command/IRocosCommandMessageResponse.d.ts +55 -2
  271. package/models/command/IRocosCommandMessageResponse.js +29 -2
  272. package/models/command/RocosCommandResultStatus.d.ts +11 -1
  273. package/models/command/RocosCommandResultStatus.js +12 -5
  274. package/models/command/index.d.ts +4 -0
  275. package/models/command/index.js +4 -0
  276. package/models/file/FileEnums.d.ts +4 -4
  277. package/models/file/FileEnums.js +9 -12
  278. package/models/index.d.ts +6 -31
  279. package/models/index.js +76 -113
  280. package/models/integrations/Overlay.js +1 -2
  281. package/models/integrations/Plan.js +1 -2
  282. package/models/maps/Map.d.ts +2 -3
  283. package/models/maps/Map.js +1 -2
  284. package/models/maps/Panorama.d.ts +36 -0
  285. package/models/maps/Panorama.js +1 -0
  286. package/models/message/IRocosCallerMessage.js +1 -2
  287. package/models/message/IRocosChangeMessage.js +1 -2
  288. package/models/message/IRocosCommandMessage.js +1 -2
  289. package/models/message/IRocosControlMessage.js +1 -2
  290. package/models/message/IRocosOpResultMessage.d.ts +2 -2
  291. package/models/message/IRocosOpResultMessage.js +1 -2
  292. package/models/message/IRocosSearchMessage.js +1 -2
  293. package/models/message/IRocosSearchRowMessage.js +1 -2
  294. package/models/message/IRocosSearchStatusMessage.js +1 -2
  295. package/models/message/IRocosTelemetryMessage.d.ts +12 -7
  296. package/models/message/IRocosTelemetryMessage.js +1 -2
  297. package/models/message/IStreamStatusMessage.js +1 -2
  298. package/models/message/RocosCallerMessage.d.ts +2 -4
  299. package/models/message/RocosCallerMessage.js +24 -15
  300. package/models/message/RocosCommandMessage.d.ts +2 -3
  301. package/models/message/RocosCommandMessage.js +5 -8
  302. package/models/message/RocosControlMessage.d.ts +1 -1
  303. package/models/message/RocosControlMessage.js +6 -10
  304. package/models/message/RocosOpResultMessage.d.ts +3 -2
  305. package/models/message/RocosOpResultMessage.js +6 -10
  306. package/models/message/RocosSearchMessage.d.ts +1 -1
  307. package/models/message/RocosSearchMessage.js +5 -9
  308. package/models/message/RocosSearchRowMessage.d.ts +1 -1
  309. package/models/message/RocosSearchRowMessage.js +8 -12
  310. package/models/message/RocosTelemetryMessage.d.ts +9 -23
  311. package/models/message/RocosTelemetryMessage.js +51 -93
  312. package/models/message/index.d.ts +17 -0
  313. package/models/message/index.js +17 -0
  314. package/models/params/ICallerParams.d.ts +12 -1
  315. package/models/params/ICallerParams.js +1 -2
  316. package/models/params/ICommandParams.js +1 -2
  317. package/models/params/IControlParams.d.ts +1 -1
  318. package/models/params/IControlParams.js +1 -2
  319. package/models/params/IFileAccessorParams.js +1 -2
  320. package/models/params/ISearchParams.js +1 -2
  321. package/models/params/ITelemetryParams.d.ts +1 -1
  322. package/models/params/ITelemetryParams.js +1 -2
  323. package/models/params/IWebRTCSignallingParams.js +1 -2
  324. package/models/projects/ProjectUser.js +1 -2
  325. package/models/schedule/IScheduleAction.d.ts +1 -1
  326. package/models/schedule/IScheduleAction.js +2 -5
  327. package/models/schedule/IScheduleInfo.js +1 -2
  328. package/models/schedule/IScheduleJob.js +1 -2
  329. package/models/search/SearchQueryFilter.js +1 -5
  330. package/models/search/SearchStreamQuery.js +1 -5
  331. package/models/stream/IBaseStream.js +1 -2
  332. package/models/stream/ICallerStream.js +1 -2
  333. package/models/stream/ICommandStream.js +1 -2
  334. package/models/stream/IControlStream.js +1 -2
  335. package/models/stream/IFileAccessorStream.d.ts +1 -2
  336. package/models/stream/IFileAccessorStream.js +1 -2
  337. package/models/stream/ISearchStream.js +1 -2
  338. package/models/stream/ITelemetryStream.js +1 -2
  339. package/models/stream/IWebRTCSignallingStream.d.ts +51 -16
  340. package/models/stream/IWebRTCSignallingStream.js +1 -7
  341. package/models/types.d.ts +5 -5
  342. package/models/types.js +1 -2
  343. package/models/workflow/Workflow.d.ts +36 -0
  344. package/models/workflow/Workflow.js +1 -0
  345. package/node/RocosSDKNode.d.ts +6 -1
  346. package/node/RocosSDKNode.js +82 -80
  347. package/node/index.js +7 -19
  348. package/package.json +10 -11
  349. package/services/AssetStorageService.d.ts +23 -1
  350. package/services/AssetStorageService.js +53 -24
  351. package/services/AuthService.d.ts +59 -27
  352. package/services/AuthService.js +167 -86
  353. package/services/AuthService.spec.d.ts +1 -0
  354. package/services/AuthService.spec.js +163 -0
  355. package/services/BaseServiceAbstract.d.ts +11 -13
  356. package/services/BaseServiceAbstract.js +18 -24
  357. package/services/BaseStreamService.d.ts +18 -0
  358. package/services/BaseStreamService.js +47 -0
  359. package/services/CallerService.d.ts +37 -17
  360. package/services/CallerService.js +86 -65
  361. package/services/CallerService.spec.d.ts +1 -0
  362. package/services/CallerService.spec.js +227 -0
  363. package/services/CallerServiceNode.js +4 -8
  364. package/services/CommandService.d.ts +5 -17
  365. package/services/CommandService.js +19 -62
  366. package/services/CommandServiceNode.js +4 -8
  367. package/services/ConfigGroupService.js +17 -21
  368. package/services/ControlService.d.ts +5 -17
  369. package/services/ControlService.js +22 -65
  370. package/services/ControlServiceNode.js +4 -8
  371. package/services/DashboardService.js +20 -24
  372. package/services/EvaluatorService.d.ts +11 -0
  373. package/services/EvaluatorService.js +28 -0
  374. package/services/EventService.js +13 -17
  375. package/services/FileAccessorService.d.ts +4 -18
  376. package/services/FileAccessorService.js +14 -62
  377. package/services/FileAccessorServiceNode.js +4 -8
  378. package/services/FunctionService.js +17 -21
  379. package/services/IntegrationService.js +14 -19
  380. package/services/MapService.d.ts +71 -25
  381. package/services/MapService.js +113 -40
  382. package/services/PlatformTimeService.js +8 -12
  383. package/services/PlatformTimeService.spec.d.ts +1 -0
  384. package/services/PlatformTimeService.spec.js +180 -0
  385. package/services/ProfileService.js +36 -40
  386. package/services/ProjectService.js +23 -27
  387. package/services/RobotService.d.ts +2 -6
  388. package/services/RobotService.js +48 -55
  389. package/services/ScheduleService.js +10 -14
  390. package/services/SearchService.d.ts +4 -17
  391. package/services/SearchService.js +24 -59
  392. package/services/SearchServiceNode.js +4 -8
  393. package/services/SpotProvisioningService.d.ts +1 -1
  394. package/services/SpotProvisioningService.js +16 -16
  395. package/services/SpotProvisioningServiceNode.d.ts +1 -1
  396. package/services/SpotProvisioningServiceNode.js +16 -16
  397. package/services/StreamService.js +26 -30
  398. package/services/TelemetryService.d.ts +15 -17
  399. package/services/TelemetryService.js +103 -93
  400. package/services/TelemetryService.spec.d.ts +1 -0
  401. package/services/TelemetryService.spec.js +37 -0
  402. package/services/TelemetryServiceNode.js +4 -8
  403. package/services/TimeSyncerService.js +9 -13
  404. package/services/UserService.js +37 -41
  405. package/services/WebRTCSignallingService.d.ts +4 -4
  406. package/services/WebRTCSignallingService.js +24 -27
  407. package/services/WorkflowService.d.ts +25 -29
  408. package/services/WorkflowService.js +39 -75
  409. package/services/index.d.ts +1 -0
  410. package/services/index.js +27 -38
  411. package/store/RocosStore.js +9 -15
  412. package/demo/angular/.editorconfig +0 -16
  413. package/demo/angular/.eslintignore +0 -4
  414. package/demo/angular/.eslintrc.json +0 -50
  415. package/demo/angular/README.md +0 -36
  416. package/demo/angular/angular.json +0 -132
  417. package/demo/angular/karma.conf.js +0 -44
  418. package/demo/angular/package.json +0 -41
  419. package/demo/angular/src/app/app.component.css +0 -0
  420. package/demo/angular/src/app/app.component.html +0 -9
  421. package/demo/angular/src/app/app.component.ts +0 -10
  422. package/demo/angular/src/app/app.module.ts +0 -38
  423. package/demo/angular/src/app/components/assets/assets.component.css +0 -0
  424. package/demo/angular/src/app/components/assets/assets.component.html +0 -29
  425. package/demo/angular/src/app/components/assets/assets.component.ts +0 -107
  426. package/demo/angular/src/app/components/auth/auth.component.css +0 -0
  427. package/demo/angular/src/app/components/auth/auth.component.html +0 -27
  428. package/demo/angular/src/app/components/auth/auth.component.ts +0 -33
  429. package/demo/angular/src/app/components/caller/caller.component.css +0 -0
  430. package/demo/angular/src/app/components/caller/caller.component.html +0 -22
  431. package/demo/angular/src/app/components/caller/caller.component.ts +0 -61
  432. package/demo/angular/src/app/components/command/command.component.css +0 -0
  433. package/demo/angular/src/app/components/command/command.component.html +0 -22
  434. package/demo/angular/src/app/components/command/command.component.ts +0 -60
  435. package/demo/angular/src/app/components/integrations/integrations.component.ts +0 -43
  436. package/demo/angular/src/app/components/robots/robots.component.css +0 -0
  437. package/demo/angular/src/app/components/robots/robots.component.html +0 -13
  438. package/demo/angular/src/app/components/robots/robots.component.ts +0 -26
  439. package/demo/angular/src/app/components/sdk/sdk.component.css +0 -0
  440. package/demo/angular/src/app/components/sdk/sdk.component.html +0 -43
  441. package/demo/angular/src/app/components/sdk/sdk.component.ts +0 -50
  442. package/demo/angular/src/app/components/subscription/subscription.component.css +0 -0
  443. package/demo/angular/src/app/components/subscription/subscription.component.html +0 -6
  444. package/demo/angular/src/app/components/subscription/subscription.component.ts +0 -40
  445. package/demo/angular/src/app/components/telemetry/telemetry.component.css +0 -0
  446. package/demo/angular/src/app/components/telemetry/telemetry.component.html +0 -19
  447. package/demo/angular/src/app/components/telemetry/telemetry.component.ts +0 -61
  448. package/demo/angular/src/app/components/token/token.component.css +0 -0
  449. package/demo/angular/src/app/components/token/token.component.html +0 -10
  450. package/demo/angular/src/app/components/token/token.component.ts +0 -18
  451. package/demo/angular/src/app/components/video/p2pvideo/index.ts +0 -646
  452. package/demo/angular/src/app/components/video/video-source.ts +0 -315
  453. package/demo/angular/src/app/components/video/video.component.css +0 -6
  454. package/demo/angular/src/app/components/video/video.component.html +0 -54
  455. package/demo/angular/src/app/components/video/video.component.ts +0 -151
  456. package/demo/angular/src/app/services/sdk.service.ts +0 -193
  457. package/demo/angular/src/assets/.gitkeep +0 -0
  458. package/demo/angular/src/assets/HKGrotesk-Bold.otf +0 -0
  459. package/demo/angular/src/assets/HKGrotesk-Regular.otf +0 -0
  460. package/demo/angular/src/assets/logo.svg +0 -16
  461. package/demo/angular/src/environments/environment.prod.ts +0 -3
  462. package/demo/angular/src/environments/environment.ts +0 -16
  463. package/demo/angular/src/favicon.ico +0 -0
  464. package/demo/angular/src/index.html +0 -15
  465. package/demo/angular/src/main.ts +0 -7
  466. package/demo/angular/src/polyfills.ts +0 -53
  467. package/demo/angular/src/styles.css +0 -198
  468. package/demo/angular/tsconfig.app.json +0 -15
  469. package/demo/angular/tsconfig.json +0 -39
  470. package/demo/html/README.md +0 -8
  471. package/demo/html/assets/HKGrotesk-Bold.otf +0 -0
  472. package/demo/html/assets/HKGrotesk-Regular.otf +0 -0
  473. package/demo/html/assets/logo.svg +0 -16
  474. package/demo/html/favicon.ico +0 -0
  475. package/demo/html/index.html +0 -416
  476. package/demo/html/rocos-js-sdk.js +0 -3
  477. package/demo/html/rocos-js-sdk.js.LICENSE.txt +0 -8
  478. package/demo/html/rocos-js-sdk.js.map +0 -1
  479. package/demo/html/styles.css +0 -190
  480. package/demo/node/README.md +0 -17
  481. package/demo/node/index.js +0 -134
  482. package/demo/node/package.json +0 -8
  483. package/demo/react/.env +0 -1
  484. package/demo/react/.env.dist +0 -1
  485. package/demo/react/.eslintrc.json +0 -46
  486. package/demo/react/README.md +0 -65
  487. package/demo/react/package.json +0 -60
  488. package/demo/react/public/favicon.ico +0 -0
  489. package/demo/react/public/index.html +0 -43
  490. package/demo/react/public/logo192.png +0 -0
  491. package/demo/react/public/logo512.png +0 -0
  492. package/demo/react/public/manifest.json +0 -25
  493. package/demo/react/public/robots.txt +0 -3
  494. package/demo/react/src/App.css +0 -190
  495. package/demo/react/src/App.tsx +0 -31
  496. package/demo/react/src/actions/index.ts +0 -8
  497. package/demo/react/src/actions/sdkActions.ts +0 -62
  498. package/demo/react/src/assets/HKGrotesk-Bold.otf +0 -0
  499. package/demo/react/src/assets/HKGrotesk-Regular.otf +0 -0
  500. package/demo/react/src/assets/logo.svg +0 -16
  501. package/demo/react/src/components/AuthForm.tsx +0 -76
  502. package/demo/react/src/components/CallerBox.tsx +0 -53
  503. package/demo/react/src/components/CallerForm.tsx +0 -98
  504. package/demo/react/src/components/CommandBox.tsx +0 -47
  505. package/demo/react/src/components/CommandForm.tsx +0 -98
  506. package/demo/react/src/components/RobotsForm.tsx +0 -51
  507. package/demo/react/src/components/SubscriptionBox.tsx +0 -55
  508. package/demo/react/src/components/TelemetryForm.tsx +0 -98
  509. package/demo/react/src/components/TokenForm.tsx +0 -39
  510. package/demo/react/src/config.json +0 -14
  511. package/demo/react/src/controllers/RocosSDKController.ts +0 -48
  512. package/demo/react/src/helpers/deepEqual.ts +0 -27
  513. package/demo/react/src/hooks/useInput.ts +0 -29
  514. package/demo/react/src/index.css +0 -11
  515. package/demo/react/src/index.tsx +0 -26
  516. package/demo/react/src/react-app-env.d.ts +0 -1
  517. package/demo/react/src/reducers/sdkReducer.ts +0 -133
  518. package/demo/react/src/reportWebVitals.ts +0 -15
  519. package/demo/react/src/selectors/sdkSelector.ts +0 -11
  520. package/demo/react/src/setupTests.ts +0 -5
  521. package/demo/react/src/store.ts +0 -14
  522. package/demo/react/tsconfig.json +0 -26
  523. package/demo/sdk-sizer/dist/sdk-sizer/3rdpartylicenses.txt +0 -975
  524. package/demo/sdk-sizer/dist/sdk-sizer/favicon.ico +0 -0
  525. package/demo/sdk-sizer/dist/sdk-sizer/index.html +0 -12
  526. package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js +0 -2
  527. package/demo/sdk-sizer/dist/sdk-sizer/main.c9183649ce1856ef.js.map +0 -1
  528. package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js +0 -2
  529. package/demo/sdk-sizer/dist/sdk-sizer/polyfills.701c8e5d007909aa.js.map +0 -1
  530. package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js +0 -2
  531. package/demo/sdk-sizer/dist/sdk-sizer/runtime.00e20e689f5284a8.js.map +0 -1
  532. package/demo/sdk-sizer/dist/sdk-sizer/stats.json +0 -1
  533. package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css +0 -2
  534. package/demo/sdk-sizer/dist/sdk-sizer/styles.b45f7e627ac8cbce.css.map +0 -1
  535. package/grpc/file-accessor/filagree_grpc_pb.d.ts +0 -41
  536. package/grpc/file-accessor/filagree_grpc_pb.js +0 -121
  537. package/grpc/file-accessor/filagree_pb.d.ts +0 -339
  538. package/grpc/file-accessor/filagree_pb.js +0 -2261
  539. package/grpc/file-accessor/filagree_pb_service.d.ts +0 -115
  540. package/grpc/file-accessor/filagree_pb_service.js +0 -257
  541. package/grpc/rambo/rambo.v1_grpc_pb.d.ts +0 -39
  542. package/grpc/rambo/rambo.v1_grpc_pb.js +0 -73
  543. package/grpc/rambo/rambo.v1_pb.d.ts +0 -365
  544. package/grpc/rambo/rambo.v1_pb.js +0 -2469
  545. package/grpc/rambo/rambo.v1_pb_service.d.ts +0 -76
  546. package/grpc/rambo/rambo.v1_pb_service.js +0 -138
  547. package/grpc/rambo/uri.v1_grpc_pb.d.ts +0 -1
  548. package/grpc/rambo/uri.v1_grpc_pb.js +0 -1
  549. package/grpc/rambo/uri.v1_pb.d.ts +0 -80
  550. package/grpc/rambo/uri.v1_pb.js +0 -563
  551. package/grpc/rambo/uri.v1_pb_service.d.ts +0 -3
  552. package/grpc/rambo/uri.v1_pb_service.js +0 -3
  553. package/grpc/robot-control/conker_grpc_pb.d.ts +0 -46
  554. package/grpc/robot-control/conker_grpc_pb.js +0 -143
  555. package/grpc/robot-control/conker_pb.d.ts +0 -168
  556. package/grpc/robot-control/conker_pb.js +0 -1287
  557. package/grpc/robot-control/conker_pb_service.d.ts +0 -126
  558. package/grpc/robot-control/conker_pb_service.js +0 -301
  559. package/grpc/serviette/common.v1_grpc_pb.d.ts +0 -1
  560. package/grpc/serviette/common.v1_grpc_pb.js +0 -1
  561. package/grpc/serviette/common.v1_pb.d.ts +0 -8
  562. package/grpc/serviette/common.v1_pb.js +0 -45
  563. package/grpc/serviette/common.v1_pb_service.d.ts +0 -3
  564. package/grpc/serviette/common.v1_pb_service.js +0 -3
  565. package/grpc/serviette/serviette.v1_grpc_pb.d.ts +0 -137
  566. package/grpc/serviette/serviette.v1_grpc_pb.js +0 -331
  567. package/grpc/serviette/serviette.v1_pb.d.ts +0 -884
  568. package/grpc/serviette/serviette.v1_pb.js +0 -6363
  569. package/grpc/serviette/serviette.v1_pb_service.d.ts +0 -278
  570. package/grpc/serviette/serviette.v1_pb_service.js +0 -699
  571. package/grpc/serviette/uri.v1_grpc_pb.d.ts +0 -1
  572. package/grpc/serviette/uri.v1_grpc_pb.js +0 -1
  573. package/grpc/serviette/uri.v1_pb.d.ts +0 -102
  574. package/grpc/serviette/uri.v1_pb.js +0 -741
  575. package/grpc/serviette/uri.v1_pb_service.d.ts +0 -3
  576. package/grpc/serviette/uri.v1_pb_service.js +0 -3
  577. package/grpc/slowlane/slowlane_grpc_pb.d.ts +0 -38
  578. package/grpc/slowlane/slowlane_grpc_pb.js +0 -132
  579. package/grpc/slowlane/slowlane_pb.d.ts +0 -373
  580. package/grpc/slowlane/slowlane_pb.js +0 -2908
  581. package/grpc/slowlane/slowlane_pb_service.d.ts +0 -112
  582. package/grpc/slowlane/slowlane_pb_service.js +0 -189
  583. package/grpc/teletubby/teletubby_grpc_pb.d.ts +0 -73
  584. package/grpc/teletubby/teletubby_grpc_pb.js +0 -231
  585. package/grpc/teletubby/teletubby_pb.d.ts +0 -647
  586. package/grpc/teletubby/teletubby_pb.js +0 -4786
  587. package/grpc/teletubby/teletubby_pb_service.d.ts +0 -193
  588. package/grpc/teletubby/teletubby_pb_service.js +0 -436
  589. package/grpc/video/pigeon_grpc_pb.d.ts +0 -59
  590. package/grpc/video/pigeon_grpc_pb.js +0 -180
  591. package/grpc/video/pigeon_pb.d.ts +0 -237
  592. package/grpc/video/pigeon_pb.js +0 -1775
  593. package/grpc/video/pigeon_pb_service.d.ts +0 -152
  594. package/grpc/video/pigeon_pb_service.js +0 -292
  595. package/models/ISignupParams.d.ts +0 -8
  596. package/models/ISignupParams.js +0 -2
  597. package/utils/axisangle.d.ts +0 -18
  598. package/utils/axisangle.js +0 -48
  599. package/utils/eulerangles.d.ts +0 -22
  600. package/utils/eulerangles.js +0 -133
  601. package/utils/helperfunctions.d.ts +0 -5
  602. package/utils/helperfunctions.js +0 -50
  603. package/utils/localtransform.d.ts +0 -17
  604. package/utils/localtransform.js +0 -50
  605. package/utils/localtransformtree.d.ts +0 -17
  606. package/utils/localtransformtree.js +0 -88
  607. package/utils/misc.d.ts +0 -17
  608. package/utils/misc.js +0 -23
  609. package/utils/positionvector.d.ts +0 -13
  610. package/utils/positionvector.js +0 -79
  611. package/utils/quaternion.d.ts +0 -20
  612. package/utils/quaternion.js +0 -62
  613. package/utils/rotationmatrix.d.ts +0 -23
  614. package/utils/rotationmatrix.js +0 -262
  615. package/utils/transformationmatrix.d.ts +0 -12
  616. package/utils/transformationmatrix.js +0 -123
  617. package/utils/vector3.d.ts +0 -11
  618. package/utils/vector3.js +0 -61
@@ -0,0 +1,227 @@
1
+ import { AckStatus, ResultStatus, Stage, UIDVersion, } from '../models';
2
+ import { concatMap, delay, from, of } from 'rxjs';
3
+ import { CallerService } from './CallerService';
4
+ import { TestScheduler } from 'rxjs/testing';
5
+ const makeCallerMessage = (responses) => ({
6
+ responses: {
7
+ responses: responses ?? [],
8
+ },
9
+ });
10
+ const makeCallerChunkedMessage = (responses) => {
11
+ return responses.map((response, index) => {
12
+ if ('return' in response) {
13
+ throw new Error('Cannot create chunked message with return');
14
+ }
15
+ const chunk = response;
16
+ chunk.chunkIndex = index;
17
+ chunk.chunkCount = responses.length;
18
+ chunk.header = {
19
+ created: '0',
20
+ meta: {},
21
+ };
22
+ return {
23
+ chunks: {
24
+ chunks: [chunk],
25
+ },
26
+ };
27
+ });
28
+ };
29
+ const uid = {
30
+ hash: 'hash',
31
+ version: UIDVersion.HEADER_HASH_RAND,
32
+ };
33
+ const ack = (id) => ({
34
+ uid,
35
+ ack: {
36
+ status: AckStatus.PROGRESS,
37
+ message: id,
38
+ stage: Stage.AGENT,
39
+ },
40
+ });
41
+ const ret = (id) => {
42
+ const encoder = new TextEncoder();
43
+ const payload = encoder.encode(JSON.stringify({ id }));
44
+ return {
45
+ uid,
46
+ return: {
47
+ payload,
48
+ },
49
+ };
50
+ };
51
+ const chunkRet = (payload) => {
52
+ const array = new TextEncoder().encode(payload);
53
+ return {
54
+ uid,
55
+ payload: array,
56
+ chunkIndex: 0,
57
+ chunkCount: 1,
58
+ header: {
59
+ created: '0',
60
+ meta: {},
61
+ },
62
+ };
63
+ };
64
+ const res = (ok) => ({
65
+ uid,
66
+ result: {
67
+ status: ok ? ResultStatus.COMPLETE_SUCCESS : ResultStatus.FATAL,
68
+ message: ok ? 'everything is fine' : 'nothing is fine',
69
+ },
70
+ });
71
+ let testScheduler;
72
+ let service;
73
+ describe('CallerService', () => {
74
+ beforeEach(() => {
75
+ service = new CallerService({
76
+ url: 'http://localhost:8080',
77
+ token: 'token',
78
+ });
79
+ testScheduler = new TestScheduler((actual, expected) => {
80
+ expect(actual).toEqual(expected);
81
+ });
82
+ });
83
+ describe('callRaw', () => {
84
+ it('should handle a successful call', () => {
85
+ // Arrange
86
+ jest.spyOn(service, 'invokeRequest').mockImplementation(() => {
87
+ return from([
88
+ makeCallerMessage([ack('a')]),
89
+ makeCallerMessage([ack('b')]),
90
+ makeCallerMessage([ack('c'), ret(1)]),
91
+ makeCallerMessage([ret(2)]),
92
+ makeCallerMessage([ret(3), ret(4)]),
93
+ makeCallerMessage([ack('d')]),
94
+ makeCallerMessage([ack('e')]),
95
+ makeCallerMessage([ack('f')]),
96
+ makeCallerMessage([ack('g'), res(true)]),
97
+ makeCallerMessage([ack('h')]),
98
+ ]).pipe(concatMap((item) => of(item).pipe(delay(1))));
99
+ });
100
+ testScheduler.run(({ expectObservable }) => {
101
+ // Act
102
+ const call = service.call({
103
+ callsign: 'callsign',
104
+ projectId: 'project',
105
+ source: '/test',
106
+ });
107
+ // Assert
108
+ const expectedAckMarbles = '-abc--def|';
109
+ const expectedRetMarbles = '---ab(cd)|';
110
+ const expectedResMarbles = '---------(a|)';
111
+ const expectedAckValues = {
112
+ a: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'a' },
113
+ b: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'b' },
114
+ c: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'c' },
115
+ d: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'd' },
116
+ e: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'e' },
117
+ f: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'f' },
118
+ };
119
+ const expectedReturnValues = {
120
+ a: { id: 1 },
121
+ b: { id: 2 },
122
+ c: { id: 3 },
123
+ d: { id: 4 },
124
+ };
125
+ const expectedResultValues = {
126
+ a: { status: ResultStatus.COMPLETE_SUCCESS, message: 'everything is fine' },
127
+ };
128
+ expectObservable(call.ack$).toBe(expectedAckMarbles, expectedAckValues);
129
+ expectObservable(call.return$).toBe(expectedRetMarbles, expectedReturnValues);
130
+ expectObservable(call.result$).toBe(expectedResMarbles, expectedResultValues);
131
+ });
132
+ });
133
+ it('should handle a failed call', () => {
134
+ // Arrange
135
+ jest.spyOn(service, 'invokeRequest').mockImplementation(() => {
136
+ return from([
137
+ makeCallerMessage([ack('a')]),
138
+ makeCallerMessage([ack('b')]),
139
+ makeCallerMessage([ack('c'), ret(1)]),
140
+ makeCallerMessage([ret(2)]),
141
+ makeCallerMessage([ret(3), ret(4)]),
142
+ makeCallerMessage([ack('d')]),
143
+ makeCallerMessage([ack('e')]),
144
+ makeCallerMessage([ack('f')]),
145
+ makeCallerMessage([ack('g'), res(false)]),
146
+ makeCallerMessage([ack('h')]),
147
+ ]).pipe(concatMap((item) => of(item).pipe(delay(1))));
148
+ });
149
+ testScheduler.run(({ expectObservable }) => {
150
+ // Act
151
+ const call = service.call({
152
+ callsign: 'callsign',
153
+ projectId: 'project',
154
+ source: '/test',
155
+ });
156
+ // Assert
157
+ const expectedAckMarbles = '-abc--def#';
158
+ const expectedRetMarbles = '---ab(cd)#';
159
+ const expectedResMarbles = '---------(a|)';
160
+ const expectedAckValues = {
161
+ a: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'a' },
162
+ b: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'b' },
163
+ c: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'c' },
164
+ d: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'd' },
165
+ e: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'e' },
166
+ f: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'f' },
167
+ };
168
+ const expectedReturnValues = {
169
+ a: { id: 1 },
170
+ b: { id: 2 },
171
+ c: { id: 3 },
172
+ d: { id: 4 },
173
+ };
174
+ const expectedResultValues = {
175
+ a: { status: ResultStatus.FATAL, message: 'nothing is fine' },
176
+ };
177
+ expectObservable(call.ack$).toBe(expectedAckMarbles, expectedAckValues, res(false).result);
178
+ expectObservable(call.return$).toBe(expectedRetMarbles, expectedReturnValues, res(false).result);
179
+ expectObservable(call.result$).toBe(expectedResMarbles, expectedResultValues);
180
+ });
181
+ });
182
+ it('should handle a successful chunked call', () => {
183
+ // Arrange
184
+ jest.spyOn(service, 'invokeRequest').mockImplementation(() => {
185
+ return from([
186
+ ...makeCallerChunkedMessage([
187
+ chunkRet('[{"'),
188
+ chunkRet('id":1},'),
189
+ ack('a'),
190
+ chunkRet('{"id":2}'),
191
+ ack('b'),
192
+ chunkRet(']'),
193
+ ]),
194
+ makeCallerMessage([ack('c'), ret(3)]),
195
+ makeCallerMessage([res(true)]),
196
+ ]).pipe(concatMap((item) => of(item).pipe(delay(1))));
197
+ });
198
+ testScheduler.run(({ expectObservable }) => {
199
+ // Act
200
+ const call = service.call({
201
+ callsign: 'callsign',
202
+ projectId: 'project',
203
+ source: '/test',
204
+ });
205
+ // Assert
206
+ const expectedAckMarbles = '---a-b-c|';
207
+ const expectedRetMarbles = '------ab|';
208
+ const expectedResMarbles = '--------(a|)';
209
+ const expectedAckValues = {
210
+ a: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'a' },
211
+ b: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'b' },
212
+ c: { stage: Stage.AGENT, status: AckStatus.PROGRESS, message: 'c' },
213
+ };
214
+ const expectedReturnValues = {
215
+ a: [{ id: 1 }, { id: 2 }],
216
+ b: { id: 3 },
217
+ };
218
+ const expectedResultValues = {
219
+ a: { status: ResultStatus.COMPLETE_SUCCESS, message: 'everything is fine' },
220
+ };
221
+ expectObservable(call.ack$).toBe(expectedAckMarbles, expectedAckValues);
222
+ expectObservable(call.return$).toBe(expectedRetMarbles, expectedReturnValues);
223
+ expectObservable(call.result$).toBe(expectedResMarbles, expectedResultValues);
224
+ });
225
+ });
226
+ });
227
+ });
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CallerServiceNode = void 0;
4
- const CallerService_1 = require("./CallerService");
5
- const CallerStreamNode_1 = require("../api/streams/caller/CallerStreamNode");
6
- class CallerServiceNode extends CallerService_1.CallerService {
1
+ import { CallerService } from './CallerService';
2
+ import { CallerStreamNode } from '../api/streams/caller/CallerStreamNode';
3
+ export class CallerServiceNode extends CallerService {
7
4
  getStream(config) {
8
- return new CallerStreamNode_1.CallerStreamNode(config);
5
+ return new CallerStreamNode(config);
9
6
  }
10
7
  }
11
- exports.CallerServiceNode = CallerServiceNode;
@@ -1,21 +1,9 @@
1
- import { Observable, Subject } from 'rxjs';
2
- import { IBaseService } from '../models/IBaseService';
3
- import { ICommandParams } from '../models/params/ICommandParams';
4
- import { ICommandStream } from '../models/stream/ICommandStream';
5
- import { IRocosCommandMessage } from '../models/message/IRocosCommandMessage';
6
- import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
7
- import { IStreamConfig } from '../models/IStreamConfig';
8
- import { ISubscriberStatus } from '../models/ISubscriberStatus';
9
- import { SubscriberStatusEnum } from '../models/SubscriberStatusEnum';
10
- export declare class CommandService implements IBaseService, ISubscriberStatus {
11
- private config;
12
- private logger;
13
- private status;
14
- status$: Subject<SubscriberStatusEnum>;
1
+ import { ICommandParams, ICommandStream, IRocosCommandMessage, IRocosSDKConfig, IStreamConfig } from '../models';
2
+ import { Observable } from 'rxjs';
3
+ import { BaseStreamService } from './BaseStreamService';
4
+ export declare class CommandService extends BaseStreamService<ICommandStream> {
15
5
  constructor(config: IRocosSDKConfig);
16
- getStatus(): boolean;
17
6
  invokeRequest(params: ICommandParams): Observable<IRocosCommandMessage>;
18
- private createStream;
19
- private initStream;
7
+ protected createStream(): Promise<ICommandStream>;
20
8
  protected getStream(config: IStreamConfig): ICommandStream;
21
9
  }
@@ -1,26 +1,14 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CommandService = void 0;
4
- const rxjs_1 = require("rxjs");
5
- const CommandStream_1 = require("../api/streams/command/CommandStream");
6
- const identifier_1 = require("../constants/identifier");
7
- const RocosLogger_1 = require("../logger/RocosLogger");
8
- const RocosStore_1 = require("../store/RocosStore");
9
- const StreamRegister_1 = require("../api/StreamRegister");
10
- const SubscriberStatusEnum_1 = require("../models/SubscriberStatusEnum");
11
- const operators_1 = require("rxjs/operators");
12
- class CommandService {
1
+ import { Subject } from 'rxjs';
2
+ import { BaseStreamService } from './BaseStreamService';
3
+ import { CommandStream } from '../api/streams/command/CommandStream';
4
+ import { IDENTIFIER_NAME_COMMAND } from '../constants/identifier';
5
+ import { finalize } from 'rxjs/operators';
6
+ export class CommandService extends BaseStreamService {
13
7
  constructor(config) {
14
- this.status = false;
15
- this.status$ = new rxjs_1.Subject();
16
- this.config = config;
17
- this.logger = RocosLogger_1.RocosLogger.getInstance(`CommandService(${this.config.url})`);
18
- }
19
- getStatus() {
20
- return this.status;
8
+ super('CommandService', config);
21
9
  }
22
10
  invokeRequest(params) {
23
- const subject = new rxjs_1.Subject();
11
+ const subject = new Subject();
24
12
  let subscription;
25
13
  this.createStream()
26
14
  .then((stream) => {
@@ -30,52 +18,21 @@ class CommandService {
30
18
  this.logger.info('invokeRequest error', e);
31
19
  subject.error(e);
32
20
  });
33
- return subject.asObservable().pipe(operators_1.finalize(() => {
34
- subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
21
+ return subject.asObservable().pipe(finalize(() => {
22
+ subscription?.unsubscribe();
35
23
  }));
36
24
  }
37
25
  async createStream() {
38
- const scope = 'default';
39
- const identifier = StreamRegister_1.StreamRegister.getIdentifier(identifier_1.IDENTIFIER_NAME_COMMAND, scope);
40
- const streamRegister = StreamRegister_1.StreamRegister.getInstance();
41
- let stream = streamRegister.getStream(identifier);
42
- if (!stream) {
43
- stream = this.getStream({
44
- url: this.config.url,
45
- token: this.config.token,
46
- scope,
47
- options: this.config.options,
48
- port: this.config.port,
49
- insecure: this.config.insecure,
50
- });
51
- stream.statusStream$.subscribe((msg) => {
52
- this.status = msg === SubscriberStatusEnum_1.SubscriberStatusEnum.STOPPED || msg === SubscriberStatusEnum_1.SubscriberStatusEnum.ALIVE;
53
- this.status$.next(msg);
54
- });
55
- // don't wait for these promises, they can be init after startup
56
- await streamRegister.addStream(stream);
57
- await this.initStream(stream);
58
- }
59
- return stream;
60
- }
61
- async initStream(stream) {
62
- // an async callback to set the stream token in case one was not set at startup
63
- if (!this.config.token) {
64
- try {
65
- const authService = RocosStore_1.RocosStore.getSDKInstance(this.config).getAuthService();
66
- const token = await authService.getToken();
67
- if (token === null || token === void 0 ? void 0 : token.value) {
68
- this.config.token = token === null || token === void 0 ? void 0 : token.value;
69
- stream.setToken(this.config.token);
70
- }
71
- }
72
- catch (e) {
73
- this.logger.info('Can not retrieve auth token', e);
74
- }
75
- }
26
+ return (await this.createStreamFromConfig(IDENTIFIER_NAME_COMMAND, {
27
+ url: this.config.url,
28
+ token: this.config.token,
29
+ scope: 'default',
30
+ options: this.config.options,
31
+ port: this.config.port,
32
+ insecure: this.config.insecure,
33
+ })).stream;
76
34
  }
77
35
  getStream(config) {
78
- return new CommandStream_1.CommandStream(config);
36
+ return new CommandStream(config);
79
37
  }
80
38
  }
81
- exports.CommandService = CommandService;
@@ -1,11 +1,7 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CommandServiceNode = void 0;
4
- const CommandService_1 = require("./CommandService");
5
- const CommandStreamNode_1 = require("../api/streams/command/CommandStreamNode");
6
- class CommandServiceNode extends CommandService_1.CommandService {
1
+ import { CommandService } from './CommandService';
2
+ import { CommandStreamNode } from '../api/streams/command/CommandStreamNode';
3
+ export class CommandServiceNode extends CommandService {
7
4
  getStream(config) {
8
- return new CommandStreamNode_1.CommandStreamNode(config);
5
+ return new CommandStreamNode(config);
9
6
  }
10
7
  }
11
- exports.CommandServiceNode = CommandServiceNode;
@@ -1,18 +1,15 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConfigGroupService = void 0;
4
- const api_1 = require("../constants/api");
5
- const RocosError_1 = require("../models/RocosError");
6
- const BaseServiceAbstract_1 = require("./BaseServiceAbstract");
7
- const RocosLogger_1 = require("../logger/RocosLogger");
8
- const formatServiceUrl_1 = require("../helpers/formatServiceUrl");
9
- class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
1
+ import { API_PROJECT_GROUP_TYPE_CONFIG_URL, API_PROJECT_GROUP_TYPE_ID_URL, API_PROJECT_GROUP_TYPE_OWNER_ID_URL, API_PROJECT_GROUP_TYPE_OWNER_OVERRIDE_URL, API_PROJECT_GROUP_TYPE_PUBLISH_URL, API_PROJECT_GROUP_TYPE_URL, API_PROJECT_GROUP_TYPE_VERSION_URL, } from '../constants/api';
2
+ import { RocosError, errorCodes } from '../models/RocosError';
3
+ import { BaseServiceAbstract } from './BaseServiceAbstract';
4
+ import { RocosLogger } from '../logger/RocosLogger';
5
+ import { formatServiceUrl } from '../helpers/formatServiceUrl';
6
+ export class ConfigGroupService extends BaseServiceAbstract {
10
7
  constructor(config) {
11
8
  super(config);
12
- this.logger = RocosLogger_1.RocosLogger.getInstance(`ConfigGroupService(${this.config.url})`);
9
+ this.logger = RocosLogger.getInstance(`ConfigGroupService(${this.config.url})`);
13
10
  }
14
11
  getError(e) {
15
- return new RocosError_1.RocosError(e, RocosError_1.errorCodes.CONFIG_GROUP_SERVICE_ERROR);
12
+ return new RocosError(e, errorCodes.CONFIG_GROUP_SERVICE_ERROR);
16
13
  }
17
14
  getStatus() {
18
15
  return true;
@@ -26,7 +23,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
26
23
  */
27
24
  // TODO: map the response object
28
25
  async create(projectId, type, model) {
29
- return this.callPost(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_URL, { url: this.config.url, projectId, type }, this.config.insecure), model, `Failed to create config group for ${projectId}, type ${type}.`);
26
+ return this.callPost(formatServiceUrl(API_PROJECT_GROUP_TYPE_URL, { url: this.config.url, projectId, type }, this.config.insecure), model, `Failed to create config group for ${projectId}, type ${type}.`);
30
27
  }
31
28
  /**
32
29
  * Get a config group list
@@ -36,7 +33,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
36
33
  */
37
34
  // TODO: map the response object
38
35
  async list(projectId, type) {
39
- return this.callGet(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_URL, { url: this.config.url, projectId, type }, this.config.insecure), `Failed to get config group list for ${projectId}, type ${type}.`);
36
+ return this.callGet(formatServiceUrl(API_PROJECT_GROUP_TYPE_URL, { url: this.config.url, projectId, type }, this.config.insecure), `Failed to get config group list for ${projectId}, type ${type}.`);
40
37
  }
41
38
  /**
42
39
  * Update a config group
@@ -48,7 +45,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
48
45
  */
49
46
  // TODO: map the response object
50
47
  async update(projectId, type, configGroupId, model) {
51
- return this.callPut(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_ID_URL, { url: this.config.url, projectId, type, configGroupId }, this.config.insecure), model, `Failed to update config group for ${projectId}, type ${type}, configGroupId ${configGroupId}.`);
48
+ return this.callPut(formatServiceUrl(API_PROJECT_GROUP_TYPE_ID_URL, { url: this.config.url, projectId, type, configGroupId }, this.config.insecure), model, `Failed to update config group for ${projectId}, type ${type}, configGroupId ${configGroupId}.`);
52
49
  }
53
50
  /**
54
51
  * Get a config group
@@ -59,7 +56,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
59
56
  */
60
57
  // TODO: map the response object
61
58
  async info(projectId, type, configGroupId) {
62
- return this.callGet(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_ID_URL, { url: this.config.url, projectId, type, configGroupId }, this.config.insecure), `Failed to get config group for ${projectId}, type ${type}, configGroupId ${configGroupId}.`);
59
+ return this.callGet(formatServiceUrl(API_PROJECT_GROUP_TYPE_ID_URL, { url: this.config.url, projectId, type, configGroupId }, this.config.insecure), `Failed to get config group for ${projectId}, type ${type}, configGroupId ${configGroupId}.`);
63
60
  }
64
61
  /**
65
62
  * Publish a config group
@@ -71,7 +68,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
71
68
  */
72
69
  // TODO: map the response object
73
70
  async publish(projectId, type, configGroupId, model) {
74
- return this.callPost(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_PUBLISH_URL, { url: this.config.url, projectId, type, configGroupId }, this.config.insecure), model, `Failed to publish config group for ${projectId}, type ${type}, configGroupId ${configGroupId}.`);
71
+ return this.callPost(formatServiceUrl(API_PROJECT_GROUP_TYPE_PUBLISH_URL, { url: this.config.url, projectId, type, configGroupId }, this.config.insecure), model, `Failed to publish config group for ${projectId}, type ${type}, configGroupId ${configGroupId}.`);
75
72
  }
76
73
  /**
77
74
  * Update a config
@@ -87,7 +84,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
87
84
  async updateConfig(projectId, type, configGroupId, configId,
88
85
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
89
86
  content) {
90
- return this.callPut(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_CONFIG_URL, {
87
+ return this.callPut(formatServiceUrl(API_PROJECT_GROUP_TYPE_CONFIG_URL, {
91
88
  url: this.config.url,
92
89
  projectId,
93
90
  type,
@@ -105,7 +102,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
105
102
  */
106
103
  // TODO: map the response object
107
104
  async getByVersion(projectId, type, configGroupId, version) {
108
- return this.callGet(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_VERSION_URL, {
105
+ return this.callGet(formatServiceUrl(API_PROJECT_GROUP_TYPE_VERSION_URL, {
109
106
  url: this.config.url,
110
107
  projectId,
111
108
  type,
@@ -127,7 +124,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
127
124
  async overrideByOwnerId(projectId, type, configGroupId, ownerId,
128
125
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
129
126
  content) {
130
- return this.callPost(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_OWNER_OVERRIDE_URL, {
127
+ return this.callPost(formatServiceUrl(API_PROJECT_GROUP_TYPE_OWNER_OVERRIDE_URL, {
131
128
  url: this.config.url,
132
129
  projectId,
133
130
  type,
@@ -145,7 +142,7 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
145
142
  */
146
143
  // TODO: map the response object
147
144
  async getOverrideConfig(projectId, type, configGroupId, ownerId) {
148
- return this.callGet(formatServiceUrl_1.formatServiceUrl(api_1.API_PROJECT_GROUP_TYPE_OWNER_ID_URL, {
145
+ return this.callGet(formatServiceUrl(API_PROJECT_GROUP_TYPE_OWNER_ID_URL, {
149
146
  url: this.config.url,
150
147
  projectId,
151
148
  type,
@@ -154,4 +151,3 @@ class ConfigGroupService extends BaseServiceAbstract_1.BaseServiceAbstract {
154
151
  }, this.config.insecure), `Failed to get override for ${projectId}, type ${type}, configGroupId ${configGroupId}, ownerId ${ownerId}.`);
155
152
  }
156
153
  }
157
- exports.ConfigGroupService = ConfigGroupService;
@@ -1,23 +1,11 @@
1
- import { ControlActionType, IControlParams } from '../models/params/IControlParams';
2
- import { Observable, Subject } from 'rxjs';
3
- import { IBaseService } from '../models/IBaseService';
4
- import { IControlStream } from '../models/stream/IControlStream';
5
- import { IRocosControlMessage } from '../models/message/IRocosControlMessage';
6
- import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
7
- import { IStreamConfig } from '../models/IStreamConfig';
8
- import { ISubscriberStatus } from '../models/ISubscriberStatus';
9
- import { SubscriberStatusEnum } from '../models/SubscriberStatusEnum';
10
- export declare class ControlService implements IBaseService, ISubscriberStatus {
11
- private config;
12
- private logger;
13
- private status;
14
- status$: Subject<SubscriberStatusEnum>;
1
+ import { ControlActionType, IControlParams, IControlStream, IRocosControlMessage, IRocosSDKConfig, IStreamConfig } from '../models';
2
+ import { Observable } from 'rxjs';
3
+ import { BaseStreamService } from './BaseStreamService';
4
+ export declare class ControlService extends BaseStreamService<IControlStream> {
15
5
  constructor(config: IRocosSDKConfig);
16
- getStatus(): boolean;
17
6
  takeActionWithAck(action: ControlActionType, params: IControlParams, ackTimeoutInSeconds?: number): Observable<string>;
18
7
  sendCommand(params: IControlParams): Promise<void>;
19
8
  sendCommandWithAck(params: IControlParams): Observable<IRocosControlMessage>;
20
- private createStream;
21
- private initStream;
9
+ protected createStream(): Promise<IControlStream>;
22
10
  protected getStream(config: IStreamConfig): IControlStream;
23
11
  }
@@ -1,26 +1,14 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ControlService = void 0;
4
- const rxjs_1 = require("rxjs");
5
- const ControlStream_1 = require("../api/streams/control/ControlStream");
6
- const identifier_1 = require("../constants/identifier");
7
- const RocosLogger_1 = require("../logger/RocosLogger");
8
- const RocosStore_1 = require("../store/RocosStore");
9
- const StreamRegister_1 = require("../api/StreamRegister");
10
- const SubscriberStatusEnum_1 = require("../models/SubscriberStatusEnum");
11
- const operators_1 = require("rxjs/operators");
12
- class ControlService {
1
+ import { Subject } from 'rxjs';
2
+ import { BaseStreamService } from './BaseStreamService';
3
+ import { ControlStream } from '../api/streams/control/ControlStream';
4
+ import { IDENTIFIER_NAME_CONTROL } from '../constants/identifier';
5
+ import { finalize } from 'rxjs/operators';
6
+ export class ControlService extends BaseStreamService {
13
7
  constructor(config) {
14
- this.status = false;
15
- this.status$ = new rxjs_1.Subject();
16
- this.config = config;
17
- this.logger = RocosLogger_1.RocosLogger.getInstance(`ControlService(${this.config.url})`);
18
- }
19
- getStatus() {
20
- return this.status;
8
+ super('ControlService', config);
21
9
  }
22
10
  takeActionWithAck(action, params, ackTimeoutInSeconds = 15) {
23
- const subject = new rxjs_1.Subject();
11
+ const subject = new Subject();
24
12
  let subscription;
25
13
  this.createStream()
26
14
  .then((stream) => {
@@ -30,8 +18,8 @@ class ControlService {
30
18
  this.logger.info('takeActionWithAck error', e);
31
19
  subject.error(e);
32
20
  });
33
- return subject.asObservable().pipe(operators_1.finalize(() => {
34
- subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
21
+ return subject.asObservable().pipe(finalize(() => {
22
+ subscription?.unsubscribe();
35
23
  }));
36
24
  }
37
25
  async sendCommand(params) {
@@ -39,7 +27,7 @@ class ControlService {
39
27
  return stream.sendCommand(params);
40
28
  }
41
29
  sendCommandWithAck(params) {
42
- const subject = new rxjs_1.Subject();
30
+ const subject = new Subject();
43
31
  let subscription;
44
32
  this.createStream()
45
33
  .then((stream) => {
@@ -49,52 +37,21 @@ class ControlService {
49
37
  this.logger.info('sendCommandWithAck error', e);
50
38
  subject.error(e);
51
39
  });
52
- return subject.asObservable().pipe(operators_1.finalize(() => {
53
- subscription === null || subscription === void 0 ? void 0 : subscription.unsubscribe();
40
+ return subject.asObservable().pipe(finalize(() => {
41
+ subscription?.unsubscribe();
54
42
  }));
55
43
  }
56
44
  async createStream() {
57
- const scope = 'default';
58
- const identifier = StreamRegister_1.StreamRegister.getIdentifier(identifier_1.IDENTIFIER_NAME_CONTROL, scope);
59
- const streamRegister = StreamRegister_1.StreamRegister.getInstance();
60
- let stream = streamRegister.getStream(identifier);
61
- if (!stream) {
62
- stream = this.getStream({
63
- url: this.config.url,
64
- token: this.config.token,
65
- scope,
66
- options: this.config.options,
67
- port: this.config.port,
68
- insecure: this.config.insecure,
69
- });
70
- stream.statusStream$.subscribe((msg) => {
71
- this.status = msg === SubscriberStatusEnum_1.SubscriberStatusEnum.STOPPED || msg === SubscriberStatusEnum_1.SubscriberStatusEnum.ALIVE;
72
- this.status$.next(msg);
73
- });
74
- // don't wait for these promises, they can be init after startup
75
- await streamRegister.addStream(stream);
76
- await this.initStream(stream);
77
- }
78
- return stream;
79
- }
80
- async initStream(stream) {
81
- // an async callback to set the stream token in case one was not set at startup
82
- if (!this.config.token) {
83
- try {
84
- const authService = RocosStore_1.RocosStore.getSDKInstance(this.config).getAuthService();
85
- const token = await authService.getToken();
86
- if (token === null || token === void 0 ? void 0 : token.value) {
87
- this.config.token = token === null || token === void 0 ? void 0 : token.value;
88
- stream.setToken(this.config.token);
89
- }
90
- }
91
- catch (e) {
92
- this.logger.info('Can not retrieve auth token', e);
93
- }
94
- }
45
+ return (await this.createStreamFromConfig(IDENTIFIER_NAME_CONTROL, {
46
+ url: this.config.url,
47
+ token: this.config.token,
48
+ scope: 'default',
49
+ options: this.config.options,
50
+ port: this.config.port,
51
+ insecure: this.config.insecure,
52
+ })).stream;
95
53
  }
96
54
  getStream(config) {
97
- return new ControlStream_1.ControlStream(config);
55
+ return new ControlStream(config);
98
56
  }
99
57
  }
100
- exports.ControlService = ControlService;