@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,149 @@
1
+ import { API_MAPS_COPY_URL, API_MAPS_DEPLOYED_URL, API_MAPS_DEPLOY_URL, API_MAPS_GEOJSON_URL, API_MAPS_MERGE_URL, API_MAPS_URL, API_MAP_ID_URL, } from '../constants/api';
2
+ import { RocosError, errorCodes } from '../models';
3
+ import { BaseServiceAbstract } from './BaseServiceAbstract';
4
+ import { RocosLogger } from '../logger/RocosLogger';
5
+ import { formatServiceUrl } from '../helpers/formatServiceUrl';
6
+ /**
7
+ * Integrations to retrieve data from the linked project in DroneDeploy
8
+ */
9
+ export class MapService extends BaseServiceAbstract {
10
+ constructor(config) {
11
+ super(config);
12
+ this.logger = RocosLogger.getInstance(`MapService(${this.config.url})`);
13
+ }
14
+ getStatus() {
15
+ return true;
16
+ }
17
+ getError(e) {
18
+ return new RocosError(e, errorCodes.MAPS_SERVICE_ERROR);
19
+ }
20
+ async list(projectId, callsign) {
21
+ const resp = await this.callGet(formatServiceUrl(API_MAPS_URL, {
22
+ url: this.config.url,
23
+ projectId,
24
+ }, this.config.insecure), 'Failed to get maps.', callsign ? { callsign } : undefined);
25
+ return resp.maps;
26
+ }
27
+ /** List maps to be deployed to a callsign
28
+ *
29
+ * @param projectId
30
+ * @param callsign
31
+ */
32
+ async listDeployedMaps(projectId, callsign) {
33
+ const safeCallsign = encodeURIComponent(callsign);
34
+ const resp = await this.callGet(formatServiceUrl(API_MAPS_DEPLOYED_URL, {
35
+ url: this.config.url,
36
+ projectId,
37
+ callsign: safeCallsign,
38
+ }, this.config.insecure), 'Failed to get deployed maps.');
39
+ return resp.maps;
40
+ }
41
+ /**
42
+ * Creates a new map by merging two existing maps
43
+ * @param projectId Project ID
44
+ * @param maps Array of two map IDs to merge
45
+ * @param options Options to create the new map
46
+ */
47
+ async merge(projectId, maps, options) {
48
+ if (maps.length !== 2)
49
+ throw new Error('You must provide two maps to merge.');
50
+ const payload = {
51
+ projectID: projectId,
52
+ mapIDLeft: maps[0],
53
+ mapIDRight: maps[1],
54
+ name: options.name,
55
+ description: options.description,
56
+ callsign: options.callsign,
57
+ };
58
+ return this.callPost(formatServiceUrl(API_MAPS_MERGE_URL, {
59
+ url: this.config.url,
60
+ projectId,
61
+ }, this.config.insecure), payload, 'Failed to merge maps.');
62
+ }
63
+ /** Returns a map in its canonical form
64
+ *
65
+ * @param projectId Project ID
66
+ * @param mapId Map ID
67
+ */
68
+ async get(projectId, mapId) {
69
+ return this.callGet(formatServiceUrl(API_MAP_ID_URL, {
70
+ url: this.config.url,
71
+ projectId,
72
+ mapId,
73
+ }, this.config.insecure), 'Failed to get map.');
74
+ }
75
+ /**
76
+ * Updates a maps metadata
77
+ * @param projectId Project ID
78
+ * @param mapId Map ID
79
+ * @param options New metadata
80
+ */
81
+ async update(projectId, mapId, options) {
82
+ return this.callPut(formatServiceUrl(API_MAP_ID_URL, {
83
+ url: this.config.url,
84
+ projectId,
85
+ mapId,
86
+ }, this.config.insecure), options, 'Failed to update map.');
87
+ }
88
+ /**
89
+ * Begins uploading a map from the agent
90
+ *
91
+ * @param projectId Project ID
92
+ * @param mapId Map ID
93
+ * @param callsign Robot callsign
94
+ * @param hash Map hash
95
+ */
96
+ async sendToCloud(projectId, mapId, callsign, hash) {
97
+ return this.callPost(formatServiceUrl(API_MAP_ID_URL, {
98
+ url: this.config.url,
99
+ projectId,
100
+ mapId,
101
+ }, this.config.insecure), { callsign, hash }, 'Failed to start map upload.');
102
+ }
103
+ async delete(projectId, mapId, callsign, hash) {
104
+ return this.callDelete(formatServiceUrl(API_MAP_ID_URL, {
105
+ url: this.config.url,
106
+ projectId,
107
+ mapId,
108
+ }, this.config.insecure), 'Failed to delete map.', callsign ? { callsign, hash } : {});
109
+ }
110
+ /**
111
+ * Makes a copy of an uploaded map
112
+ *
113
+ * @param projectId Project ID
114
+ * @param mapId Map ID
115
+ * @param options Options to create the new map
116
+ */
117
+ async copy(projectId, mapId, options) {
118
+ return this.callPost(formatServiceUrl(API_MAPS_COPY_URL, {
119
+ url: this.config.url,
120
+ projectId,
121
+ mapId,
122
+ }, this.config.insecure), options, 'Failed to copy map.');
123
+ }
124
+ /** Deploy a map from the cloud to a robot
125
+ *
126
+ * @param projectId Project ID
127
+ * @param mapId Map ID
128
+ * @param callsign Robot callsign
129
+ */
130
+ async deploy(projectId, mapId, callsign) {
131
+ return this.callPost(formatServiceUrl(API_MAPS_DEPLOY_URL, {
132
+ url: this.config.url,
133
+ projectId,
134
+ mapId,
135
+ }, this.config.insecure), { callsign }, 'Failed to deploy map.');
136
+ }
137
+ /** Get a GeoJSON representation of a map
138
+ *
139
+ * @param projectId Project ID
140
+ * @param mapId Map ID
141
+ */
142
+ async getGeoJSON(projectId, mapId) {
143
+ return this.callGet(formatServiceUrl(API_MAPS_GEOJSON_URL, {
144
+ url: this.config.url,
145
+ projectId,
146
+ mapId,
147
+ }, this.config.insecure), 'Failed to get map GeoJSON.');
148
+ }
149
+ }
@@ -0,0 +1,35 @@
1
+ import { Logger } from 'loglevel';
2
+ import { TimeSyncerService } from './TimeSyncerService';
3
+ export interface IPlatformTime {
4
+ now: number;
5
+ duration: number;
6
+ }
7
+ export interface IPlatformTimeMeasurement {
8
+ clientTimeStampEnd: number;
9
+ clientTimeStampStart: number;
10
+ serverTime: IPlatformTime;
11
+ }
12
+ export declare class PlatFormTimeService {
13
+ protected static instance: PlatFormTimeService;
14
+ protected backoffTimeouts: number[];
15
+ protected isSyncing: boolean;
16
+ protected backoffFailCount: number;
17
+ protected serverTimeOffset: number;
18
+ protected lastPlatformTimeSyncedAt: number;
19
+ protected timeSyncerService: TimeSyncerService;
20
+ protected logger: Logger;
21
+ protected constructor(timeSyncerService: TimeSyncerService);
22
+ static getInstance(timeSyncerService?: TimeSyncerService): PlatFormTimeService;
23
+ get platformTimeOffset(): number;
24
+ get platformTime(): number;
25
+ private getClockOffsetBetweenClientAndServer;
26
+ private getPlatformTime;
27
+ protected handleServerTimeNotReliable(): void;
28
+ private backoff;
29
+ protected isReliableServerTime(platformTimeMeasurements: IPlatformTimeMeasurement[]): boolean;
30
+ private handleGetServerTimeError;
31
+ protected calculateOffset(platformTimeMeasurements: IPlatformTimeMeasurement[]): number;
32
+ private saveOffset;
33
+ protected removeLongestAndShortest(serverTimeMeasurements: IPlatformTimeMeasurement[]): IPlatformTimeMeasurement[];
34
+ private getServerTime;
35
+ }
@@ -0,0 +1,156 @@
1
+ import { RocosLogger } from '../logger/RocosLogger';
2
+ import { standardDeviation } from '../helpers/standardDeviation';
3
+ const NUMBER_OF_SERVER_TIME_USED_TO_CALIBRATE = 5;
4
+ const MAX_CLIENT_WAITING_TIME_STANDARD_DEVIATION_ALLOWED = 100; // 100 miliseconds
5
+ const KEY_GR_PLATFORM_TIME_OFFSET = 'gr_platformTimeOffset';
6
+ const KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT = 'gr_lastPlatformTimeSyncedAt';
7
+ const GR_PLATFORM_TIME_TTL = 30 * 60 * 1000; // 30 minutes
8
+ export class PlatFormTimeService {
9
+ // Make this a singleton, so that we don't have multi platform time
10
+ constructor(timeSyncerService) {
11
+ this.backoffTimeouts = [5 * 1000, 30 * 1000, 60 * 1000, 300 * 1000]; // in miliseconds
12
+ this.isSyncing = false;
13
+ this.backoffFailCount = 0;
14
+ this.serverTimeOffset = 0;
15
+ this.lastPlatformTimeSyncedAt = 0;
16
+ this.logger = RocosLogger.getInstance('PlatformTimeService');
17
+ if (window?.localStorage) {
18
+ this.lastPlatformTimeSyncedAt = Number(window.localStorage.getItem(KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT)) || 0;
19
+ this.serverTimeOffset = Number(window.localStorage.getItem(KEY_GR_PLATFORM_TIME_OFFSET)) || 0;
20
+ }
21
+ this.timeSyncerService = timeSyncerService;
22
+ this.logger.debug('stored platform time: ', this.platformTime);
23
+ setTimeout(() => {
24
+ void this.getClockOffsetBetweenClientAndServer();
25
+ }, 2000);
26
+ }
27
+ static getInstance(timeSyncerService) {
28
+ if (!PlatFormTimeService.instance) {
29
+ if (!timeSyncerService) {
30
+ throw new Error('platform time service object is not instantiated yet, please pass timeSyncerService to create it');
31
+ }
32
+ PlatFormTimeService.instance = new PlatFormTimeService(timeSyncerService);
33
+ }
34
+ return PlatFormTimeService.instance;
35
+ }
36
+ get platformTimeOffset() {
37
+ return this.serverTimeOffset;
38
+ }
39
+ get platformTime() {
40
+ const now = Date.now();
41
+ return now - this.serverTimeOffset;
42
+ }
43
+ async getClockOffsetBetweenClientAndServer() {
44
+ let serverTimeOffsets = [];
45
+ if (this.isSyncing) {
46
+ return;
47
+ }
48
+ this.isSyncing = true;
49
+ for (let count = 0; count < NUMBER_OF_SERVER_TIME_USED_TO_CALIBRATE; count++) {
50
+ try {
51
+ const platformTime = await this.getPlatformTime();
52
+ serverTimeOffsets.push(platformTime);
53
+ }
54
+ catch (e) {
55
+ this.handleGetServerTimeError(e);
56
+ return;
57
+ }
58
+ }
59
+ if (this.isReliableServerTime(serverTimeOffsets)) {
60
+ serverTimeOffsets = this.removeLongestAndShortest(serverTimeOffsets);
61
+ const serverTimeOffset = this.calculateOffset(serverTimeOffsets);
62
+ this.saveOffset(serverTimeOffset);
63
+ }
64
+ else {
65
+ this.handleServerTimeNotReliable();
66
+ }
67
+ }
68
+ async getPlatformTime() {
69
+ const clientTimeStampStart = Date.now();
70
+ // exception should be handled by the caller
71
+ const serverTime = await this.getServerTime();
72
+ const clientTimeStampEnd = Date.now();
73
+ return {
74
+ clientTimeStampEnd,
75
+ clientTimeStampStart,
76
+ serverTime,
77
+ };
78
+ }
79
+ handleServerTimeNotReliable() {
80
+ this.logger.error('not able to get reliable server time, will try again...');
81
+ this.isSyncing = false;
82
+ this.backoff();
83
+ }
84
+ backoff() {
85
+ this.backoffFailCount++;
86
+ this.logger.debug('backoff count: ', this.backoffFailCount);
87
+ const backoffTimeoutIndex = this.backoffFailCount - 1;
88
+ let delay;
89
+ if (backoffTimeoutIndex >= this.backoffTimeouts.length) {
90
+ // Use the longest delay if backoff failed too many times
91
+ delay = this.backoffTimeouts[this.backoffTimeouts.length - 1];
92
+ }
93
+ else {
94
+ delay = this.backoffTimeouts[backoffTimeoutIndex];
95
+ }
96
+ setTimeout(() => {
97
+ void this.getClockOffsetBetweenClientAndServer();
98
+ }, delay);
99
+ }
100
+ isReliableServerTime(platformTimeMeasurements) {
101
+ const stdDeviation = standardDeviation(
102
+ // get the standardDeviation of the client waiting time
103
+ platformTimeMeasurements.map((x) => x.clientTimeStampEnd - x.clientTimeStampStart));
104
+ this.logger.debug('standard deviation', stdDeviation);
105
+ // We judge server time is reliable only the standard deviation of client waiting time is less
106
+ // than the threshold
107
+ return stdDeviation < MAX_CLIENT_WAITING_TIME_STANDARD_DEVIATION_ALLOWED;
108
+ }
109
+ handleGetServerTimeError(e) {
110
+ this.logger.error('Fail to get server time, will try again...', { e });
111
+ this.isSyncing = false;
112
+ this.backoff();
113
+ }
114
+ calculateOffset(platformTimeMeasurements) {
115
+ // Timestamp when Received the Response - Time Request Duration / 2 - Timestamp within the Response .
116
+ let totalServerTimeOffset = 0;
117
+ const measurementsWithValues = platformTimeMeasurements.filter((x) => !!x?.serverTime);
118
+ measurementsWithValues.forEach((x) => {
119
+ // eslint-disable-next-line operator-linebreak
120
+ totalServerTimeOffset +=
121
+ // eslint-disable-next-line no-mixed-operators
122
+ x.clientTimeStampEnd - (x.clientTimeStampEnd - x.clientTimeStampStart) / 2 - x.serverTime.now / 10 ** 6;
123
+ });
124
+ // final platformTimeOffset is in miliseconds
125
+ return Math.round(totalServerTimeOffset / measurementsWithValues.length);
126
+ }
127
+ saveOffset(timeOffset) {
128
+ this.backoffFailCount = 0;
129
+ this.isSyncing = false;
130
+ this.serverTimeOffset = timeOffset;
131
+ this.lastPlatformTimeSyncedAt = Date.now();
132
+ if (window?.localStorage) {
133
+ window.localStorage.setItem(KEY_GR_PLATFORM_TIME_OFFSET, String(this.serverTimeOffset));
134
+ window.localStorage.setItem(KEY_GR_LAST_PLATFORM_TIME_SYNCED_AT, String(this.lastPlatformTimeSyncedAt));
135
+ }
136
+ this.logger.debug('calibrated server time offset', timeOffset);
137
+ // resync the time in 30 minutes
138
+ setTimeout(() => {
139
+ void this.getClockOffsetBetweenClientAndServer();
140
+ }, GR_PLATFORM_TIME_TTL);
141
+ }
142
+ removeLongestAndShortest(serverTimeMeasurements) {
143
+ let result = [];
144
+ if (serverTimeMeasurements.length > 2) {
145
+ // remove the server time responses with shortest/longest client waiting duration
146
+ serverTimeMeasurements.sort((a, b) => {
147
+ return a.clientTimeStampEnd - a.clientTimeStampStart - (b.clientTimeStampEnd - b.clientTimeStampStart);
148
+ });
149
+ result = serverTimeMeasurements.slice(1, serverTimeMeasurements.length - 1);
150
+ }
151
+ return result;
152
+ }
153
+ getServerTime() {
154
+ return this.timeSyncerService.getServerTime();
155
+ }
156
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,180 @@
1
+ import { PlatFormTimeService } from "./PlatformTimeService";
2
+ import { TimeSyncerService } from "./TimeSyncerService";
3
+ import { standardDeviation } from "../helpers";
4
+ // Subclass PlatformTimeService so that we can test the protected methods
5
+ class PlatformtimeServicePublic extends PlatFormTimeService {
6
+ constructor(timeSyncerService) {
7
+ super(timeSyncerService);
8
+ }
9
+ isReliableServerTime(platformTimeMeasurement) {
10
+ return super.isReliableServerTime(platformTimeMeasurement);
11
+ }
12
+ calculateOffset(platformTimeMeasurement) {
13
+ return super.calculateOffset(platformTimeMeasurement);
14
+ }
15
+ removeLongestAndShortest(platformTimeMeasurement) {
16
+ return super.removeLongestAndShortest(platformTimeMeasurement);
17
+ }
18
+ static getInstance(timeSyncerService) {
19
+ const instance = super.getInstance(timeSyncerService);
20
+ return instance;
21
+ }
22
+ }
23
+ describe('platformTimeService', () => {
24
+ it('should calculate standard deviation correctly', () => {
25
+ let numbers = [10, 12, 23, 23, 16, 23, 21, 16];
26
+ let stdDev = standardDeviation(numbers);
27
+ expect(Math.abs(stdDev - 4.8989794855664)).toBeLessThan(0.000001);
28
+ numbers = [100, 12, 23, 23, 116, 23, 21, 162];
29
+ stdDev = standardDeviation(numbers);
30
+ expect(Math.abs(stdDev - 53.702886328394)).toBeLessThan(0.000001);
31
+ });
32
+ it('should be able to tell reliable server time response', () => {
33
+ jest.useFakeTimers();
34
+ const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
35
+ const mock = {
36
+ clientTimeStampEnd: 100,
37
+ clientTimeStampStart: 20,
38
+ serverTime: {
39
+ now: 0,
40
+ duration: 0,
41
+ },
42
+ };
43
+ const mocks = [];
44
+ mocks.push(mock);
45
+ let isReliableServerTime = p.isReliableServerTime(mocks);
46
+ expect(isReliableServerTime).toBeTruthy();
47
+ for (let i = 0; i < 4; i++) {
48
+ mocks.push({ ...mock });
49
+ isReliableServerTime = p.isReliableServerTime(mocks);
50
+ expect(isReliableServerTime).toBeTruthy();
51
+ }
52
+ });
53
+ it('should be able to tell unreliable server time response', () => {
54
+ jest.useFakeTimers();
55
+ const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
56
+ const mock = {
57
+ clientTimeStampEnd: 100,
58
+ clientTimeStampStart: 0,
59
+ serverTime: {
60
+ now: 0,
61
+ duration: 0,
62
+ },
63
+ };
64
+ const mocks = [];
65
+ let isReliableServerTime = false;
66
+ for (let i = 0; i < 5; i++) {
67
+ const mockClone = { ...mock };
68
+ mockClone.clientTimeStampEnd += i * 60;
69
+ mocks.push(mockClone);
70
+ }
71
+ isReliableServerTime = p.isReliableServerTime(mocks);
72
+ expect(isReliableServerTime).toBeTruthy();
73
+ for (let i = 0; i < 5; i++) {
74
+ const mockClone = { ...mock };
75
+ mockClone.clientTimeStampEnd += i * 70;
76
+ mocks.push(mockClone);
77
+ }
78
+ isReliableServerTime = p.isReliableServerTime(mocks);
79
+ expect(isReliableServerTime).toBeTruthy();
80
+ for (let i = 0; i < 5; i++) {
81
+ const mockClone = { ...mock };
82
+ mockClone.clientTimeStampEnd += i * 80;
83
+ mocks.push(mockClone);
84
+ }
85
+ isReliableServerTime = p.isReliableServerTime(mocks);
86
+ // std dev = 113.13708498985
87
+ expect(isReliableServerTime).toBeFalsy();
88
+ for (let i = 0; i < 5; i++) {
89
+ const mockClone = { ...mock };
90
+ mockClone.clientTimeStampEnd += i * 100;
91
+ mocks.push(mockClone);
92
+ }
93
+ isReliableServerTime = p.isReliableServerTime(mocks);
94
+ expect(isReliableServerTime).toBeFalsy();
95
+ });
96
+ it('should be able to remove shortest and longest correctly', () => {
97
+ jest.useFakeTimers();
98
+ const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
99
+ const mock = {
100
+ clientTimeStampEnd: 100,
101
+ clientTimeStampStart: 0,
102
+ serverTime: {
103
+ now: 0,
104
+ duration: 0,
105
+ },
106
+ };
107
+ const mocks = [];
108
+ let mockClone = { ...mock };
109
+ mockClone.clientTimeStampEnd = 100;
110
+ mocks.push(mockClone);
111
+ mockClone = { ...mock };
112
+ mockClone.clientTimeStampEnd = 200;
113
+ mocks.push(mockClone);
114
+ mockClone = { ...mock };
115
+ mockClone.clientTimeStampEnd = 500;
116
+ mocks.push(mockClone);
117
+ mockClone = { ...mock };
118
+ mockClone.clientTimeStampEnd = 400;
119
+ mocks.push(mockClone);
120
+ mockClone = { ...mock };
121
+ mockClone.clientTimeStampEnd = 300;
122
+ mocks.push(mockClone);
123
+ const platformTimeMeasurement = p.removeLongestAndShortest(mocks);
124
+ platformTimeMeasurement.forEach((p) => {
125
+ expect(p.clientTimeStampEnd).not.toEqual(100);
126
+ expect(p.clientTimeStampEnd).not.toEqual(500);
127
+ });
128
+ });
129
+ it('should be able to calculate the offset correctly', () => {
130
+ jest.useFakeTimers();
131
+ const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
132
+ const mock = {
133
+ clientTimeStampEnd: 100,
134
+ clientTimeStampStart: 0,
135
+ serverTime: {
136
+ now: 0,
137
+ duration: 0,
138
+ },
139
+ };
140
+ const mocks = [];
141
+ let mockClone = { ...mock };
142
+ mockClone.clientTimeStampEnd = 200;
143
+ mocks.push(mockClone);
144
+ mockClone = { ...mock };
145
+ mockClone.clientTimeStampEnd = 500;
146
+ mocks.push(mockClone);
147
+ mockClone = { ...mock };
148
+ mockClone.clientTimeStampEnd = 400;
149
+ mocks.push(mockClone);
150
+ const offset = p.calculateOffset(mocks);
151
+ // (200-(200)/2 + 500 - (500)/2 + 400 - (400)/2)/3 = 183.333333333, round to 183
152
+ expect(offset).toEqual(183);
153
+ });
154
+ it('should be able to filter where service time is not provided', () => {
155
+ jest.useFakeTimers();
156
+ const p = PlatformtimeServicePublic.getInstance(new TimeSyncerService({}));
157
+ const mock = {
158
+ clientTimeStampEnd: 100,
159
+ clientTimeStampStart: 0,
160
+ serverTime: {
161
+ now: 0,
162
+ duration: 0,
163
+ },
164
+ };
165
+ const mocks = [];
166
+ let mockClone = { ...mock };
167
+ mockClone.clientTimeStampEnd = 200;
168
+ mockClone.serverTime = undefined;
169
+ mocks.push(mockClone);
170
+ mockClone = { ...mock };
171
+ mockClone.clientTimeStampEnd = 500;
172
+ mocks.push(mockClone);
173
+ mockClone = { ...mock };
174
+ mockClone.clientTimeStampEnd = 400;
175
+ mocks.push(mockClone);
176
+ const offset = p.calculateOffset(mocks);
177
+ // (500 - (500)/2 + 400 - (400)/2)/2 = 225
178
+ expect(offset).toEqual(225);
179
+ });
180
+ });