@dronedeploy/rocos-js-sdk 3.0.6 → 3.0.8

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,7 +1,7 @@
1
1
  import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, DeviceCredentialsService, EnvironmentService, EvaluatorService, EventService, FileAccessorService, IntegrationService, MapService, ProfileService, ProjectService, RTPWebRTCService, RobotService, SearchService, SpotProvisioningService, SpotProvisioningServiceNode, StreamService, TargetService, TelemetryService, TimeSyncerService, UserService, WebRTCSignallingService, WorkflowService } from './services';
2
2
  import { IBaseService, IDebugLevel, ServiceEnum } from './models';
3
3
  export declare abstract class IRocosSDK {
4
- abstract getService<T extends IBaseService>(name: ServiceEnum): T;
4
+ abstract getService<T extends IBaseService>(_name: ServiceEnum): T;
5
5
  abstract getAuthService(): AuthService;
6
6
  abstract getRobotService(): RobotService;
7
7
  abstract getEventService(): EventService;
package/cjs/RocosSDK.js CHANGED
@@ -338,6 +338,7 @@ class RocosSDK {
338
338
  if (!override)
339
339
  return this.config;
340
340
  // strip out the overrides from the config
341
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
341
342
  const { overrides: _, ...config } = this.config;
342
343
  return {
343
344
  ...config,
@@ -1,16 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.nanosecondToMillisecond = void 0;
4
- function isNumber(n) {
5
- return typeof n === 'number';
6
- }
7
4
  const nanosecondToMillisecond = (nano) => {
8
- if (isNumber(nano)) {
5
+ if (typeof nano === 'number') {
9
6
  return nano / 1e6;
10
7
  }
11
8
  if (nano.length < 16) {
12
9
  return Number(nano) / 1e6;
13
10
  }
14
- return Number(nano.slice(0, -6) + '.' + nano.slice(-6));
11
+ return Number(`${nano.slice(0, -6)}.${nano.slice(-6)}`);
15
12
  };
16
13
  exports.nanosecondToMillisecond = nanosecondToMillisecond;
@@ -1,5 +1,5 @@
1
1
  export interface IRobotSettings {
2
- type: "settings";
2
+ type: 'settings';
3
3
  items: {
4
4
  id: string;
5
5
  value: {
@@ -10,6 +10,11 @@ interface ConfigBase {
10
10
  options?: IStreamOptions;
11
11
  port?: number;
12
12
  insecure?: boolean;
13
+ hooks?: {
14
+ http?: {
15
+ onResponse?: (res: Response) => void;
16
+ };
17
+ };
13
18
  }
14
19
  export interface IRocosSDKConfigApp extends ConfigBase {
15
20
  appId: string;
@@ -9,4 +9,5 @@ export interface Map {
9
9
  isUploading: boolean;
10
10
  isInCloud: boolean;
11
11
  hash: string;
12
+ lastModifiedTimestamp: number;
12
13
  }
@@ -61,6 +61,7 @@ class BaseServiceAbstract {
61
61
  async fetchOrThrow(url, config, responseType) {
62
62
  this.logger.debug('Fetching', { url, config });
63
63
  const res = await fetch(url, config);
64
+ this.config.hooks?.http?.onResponse?.(res.clone());
64
65
  if (!res.ok) {
65
66
  const payload = await res.text();
66
67
  this.logger.warn('Failed HTTP Response', { status: res.statusText, payload, response: res });
@@ -83,7 +84,7 @@ class BaseServiceAbstract {
83
84
  try {
84
85
  return JSON.parse(textRes);
85
86
  }
86
- catch (e) {
87
+ catch {
87
88
  this.logger.error('Failed to parse JSON from response', { textRes });
88
89
  return textRes;
89
90
  }
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CallerService = void 0;
4
- const splitRobotTopic_1 = require("../helpers/splitRobotTopic");
5
4
  const models_1 = require("../models");
6
5
  const rxjs_1 = require("rxjs");
7
6
  const operators_1 = require("rxjs/operators");
@@ -9,6 +8,7 @@ const callerMessageHelpers_1 = require("../helpers/callerMessageHelpers");
9
8
  const BaseStreamService_1 = require("./BaseStreamService");
10
9
  const CallerStream_1 = require("../api/streams/caller/CallerStream");
11
10
  const identifier_1 = require("../constants/identifier");
11
+ const splitRobotTopic_1 = require("../helpers/splitRobotTopic");
12
12
  const uuid_1 = require("uuid");
13
13
  class CallerService extends BaseStreamService_1.BaseStreamService {
14
14
  constructor(config) {
@@ -119,9 +119,7 @@ class PlatFormTimeService {
119
119
  let totalServerTimeOffset = 0;
120
120
  const measurementsWithValues = platformTimeMeasurements.filter((x) => !!x?.serverTime);
121
121
  measurementsWithValues.forEach((x) => {
122
- // eslint-disable-next-line operator-linebreak
123
122
  totalServerTimeOffset +=
124
- // eslint-disable-next-line no-mixed-operators
125
123
  x.clientTimeStampEnd - (x.clientTimeStampEnd - x.clientTimeStampStart) / 2 - x.serverTime.now / 10 ** 6;
126
124
  });
127
125
  // final platformTimeOffset is in miliseconds
@@ -126,7 +126,7 @@ class TelemetryService extends BaseStreamService_1.BaseStreamService {
126
126
  sources: [source],
127
127
  callsigns: [callsign],
128
128
  }).pipe((0, rxjs_1.map)(() => Date.now()));
129
- return (0, rxjs_1.combineLatest)([heartbeatTime$.pipe((0, rxjs_1.startWith)(startedAt)), (0, rxjs_1.interval)(intervalMs)]).pipe((0, rxjs_1.map)(([lastHeartbeat, _]) => {
129
+ return (0, rxjs_1.combineLatest)([heartbeatTime$.pipe((0, rxjs_1.startWith)(startedAt)), (0, rxjs_1.interval)(intervalMs)]).pipe((0, rxjs_1.map)(([lastHeartbeat]) => {
130
130
  const now = Date.now();
131
131
  // If we haven't received a heartbeat, but we've only just started
132
132
  if (lastHeartbeat === startedAt && now - startedAt <= heartbeatTimeoutMs) {
@@ -60,20 +60,20 @@ class WebRTCSignallingService {
60
60
  return stream;
61
61
  }
62
62
  async initStream(stream) {
63
+ if (this.config.token)
64
+ return;
63
65
  // an async callback to set the stream token in case one was not set at startup
64
- if (!this.config.token) {
65
- try {
66
- const authService = RocosStore_1.RocosStore.getSDKInstance(this.config).getAuthService();
67
- const token = await authService.getToken();
68
- if (token?.value) {
69
- this.config.token = token?.value;
70
- stream.setToken(this.config.token);
71
- }
72
- }
73
- catch (e) {
74
- this.logger.info('Can not retrieve auth token for web rtc signalling stream', e);
66
+ try {
67
+ const authService = RocosStore_1.RocosStore.getSDKInstance(this.config).getAuthService();
68
+ const token = await authService.getToken();
69
+ if (token?.value) {
70
+ this.config.token = token?.value;
71
+ stream.setToken(this.config.token);
75
72
  }
76
73
  }
74
+ catch (e) {
75
+ this.logger.info('Can not retrieve auth token for web rtc signalling stream', e);
76
+ }
77
77
  }
78
78
  getStream(config) {
79
79
  return new WebRTCSignallingStream_1.WebRTCSignallingStream(config);
@@ -1,7 +1,7 @@
1
1
  import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, DeviceCredentialsService, EnvironmentService, EvaluatorService, EventService, FileAccessorService, IntegrationService, MapService, ProfileService, ProjectService, RTPWebRTCService, RobotService, SearchService, SpotProvisioningService, SpotProvisioningServiceNode, StreamService, TargetService, TelemetryService, TimeSyncerService, UserService, WebRTCSignallingService, WorkflowService } from './services';
2
2
  import { IBaseService, IDebugLevel, ServiceEnum } from './models';
3
3
  export declare abstract class IRocosSDK {
4
- abstract getService<T extends IBaseService>(name: ServiceEnum): T;
4
+ abstract getService<T extends IBaseService>(_name: ServiceEnum): T;
5
5
  abstract getAuthService(): AuthService;
6
6
  abstract getRobotService(): RobotService;
7
7
  abstract getEventService(): EventService;
package/esm/RocosSDK.js CHANGED
@@ -335,6 +335,7 @@ export class RocosSDK {
335
335
  if (!override)
336
336
  return this.config;
337
337
  // strip out the overrides from the config
338
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
338
339
  const { overrides: _, ...config } = this.config;
339
340
  return {
340
341
  ...config,
@@ -1,12 +1,9 @@
1
- function isNumber(n) {
2
- return typeof n === 'number';
3
- }
4
1
  export const nanosecondToMillisecond = (nano) => {
5
- if (isNumber(nano)) {
2
+ if (typeof nano === 'number') {
6
3
  return nano / 1e6;
7
4
  }
8
5
  if (nano.length < 16) {
9
6
  return Number(nano) / 1e6;
10
7
  }
11
- return Number(nano.slice(0, -6) + '.' + nano.slice(-6));
8
+ return Number(`${nano.slice(0, -6)}.${nano.slice(-6)}`);
12
9
  };
@@ -1,5 +1,5 @@
1
1
  export interface IRobotSettings {
2
- type: "settings";
2
+ type: 'settings';
3
3
  items: {
4
4
  id: string;
5
5
  value: {
@@ -10,6 +10,11 @@ interface ConfigBase {
10
10
  options?: IStreamOptions;
11
11
  port?: number;
12
12
  insecure?: boolean;
13
+ hooks?: {
14
+ http?: {
15
+ onResponse?: (res: Response) => void;
16
+ };
17
+ };
13
18
  }
14
19
  export interface IRocosSDKConfigApp extends ConfigBase {
15
20
  appId: string;
@@ -9,4 +9,5 @@ export interface Map {
9
9
  isUploading: boolean;
10
10
  isInCloud: boolean;
11
11
  hash: string;
12
+ lastModifiedTimestamp: number;
12
13
  }
@@ -58,6 +58,7 @@ export class BaseServiceAbstract {
58
58
  async fetchOrThrow(url, config, responseType) {
59
59
  this.logger.debug('Fetching', { url, config });
60
60
  const res = await fetch(url, config);
61
+ this.config.hooks?.http?.onResponse?.(res.clone());
61
62
  if (!res.ok) {
62
63
  const payload = await res.text();
63
64
  this.logger.warn('Failed HTTP Response', { status: res.statusText, payload, response: res });
@@ -80,7 +81,7 @@ export class BaseServiceAbstract {
80
81
  try {
81
82
  return JSON.parse(textRes);
82
83
  }
83
- catch (e) {
84
+ catch {
84
85
  this.logger.error('Failed to parse JSON from response', { textRes });
85
86
  return textRes;
86
87
  }
@@ -1,4 +1,3 @@
1
- import { splitRobotTopic } from '../helpers/splitRobotTopic';
2
1
  import { ResultStatus, RocosResponseLevel, } from '../models';
3
2
  import { Subject, map, mergeMap, take, takeUntil } from 'rxjs';
4
3
  import { filter, finalize } from 'rxjs/operators';
@@ -6,6 +5,7 @@ import { getResponses, handleChunkedMessages } from '../helpers/callerMessageHel
6
5
  import { BaseStreamService } from './BaseStreamService';
7
6
  import { CallerStream } from '../api/streams/caller/CallerStream';
8
7
  import { IDENTIFIER_NAME_CALLER } from '../constants/identifier';
8
+ import { splitRobotTopic } from '../helpers/splitRobotTopic';
9
9
  import { v4 } from 'uuid';
10
10
  export class CallerService extends BaseStreamService {
11
11
  constructor(config) {
@@ -116,9 +116,7 @@ export class PlatFormTimeService {
116
116
  let totalServerTimeOffset = 0;
117
117
  const measurementsWithValues = platformTimeMeasurements.filter((x) => !!x?.serverTime);
118
118
  measurementsWithValues.forEach((x) => {
119
- // eslint-disable-next-line operator-linebreak
120
119
  totalServerTimeOffset +=
121
- // eslint-disable-next-line no-mixed-operators
122
120
  x.clientTimeStampEnd - (x.clientTimeStampEnd - x.clientTimeStampStart) / 2 - x.serverTime.now / 10 ** 6;
123
121
  });
124
122
  // final platformTimeOffset is in miliseconds
@@ -1,5 +1,5 @@
1
1
  import { BehaviorSubject, catchError, combineLatest, distinctUntilChanged, from, interval, map, mergeAll, of, startWith, } from 'rxjs';
2
- import { CallsignStatus, CallsignsLookup, CallsignsLookupType, RocosError, TelemetryMonitorStatus, SubscriberStatusEnum, errorCodes, } from '../models';
2
+ import { CallsignStatus, CallsignsLookup, CallsignsLookupType, RocosError, SubscriberStatusEnum, TelemetryMonitorStatus, errorCodes, } from '../models';
3
3
  import { filter, finalize } from 'rxjs/operators';
4
4
  import { BaseStreamService } from './BaseStreamService';
5
5
  import { IDENTIFIER_NAME_TELEMETRY } from '../constants/identifier';
@@ -123,7 +123,7 @@ export class TelemetryService extends BaseStreamService {
123
123
  sources: [source],
124
124
  callsigns: [callsign],
125
125
  }).pipe(map(() => Date.now()));
126
- return combineLatest([heartbeatTime$.pipe(startWith(startedAt)), interval(intervalMs)]).pipe(map(([lastHeartbeat, _]) => {
126
+ return combineLatest([heartbeatTime$.pipe(startWith(startedAt)), interval(intervalMs)]).pipe(map(([lastHeartbeat]) => {
127
127
  const now = Date.now();
128
128
  // If we haven't received a heartbeat, but we've only just started
129
129
  if (lastHeartbeat === startedAt && now - startedAt <= heartbeatTimeoutMs) {
@@ -57,20 +57,20 @@ export class WebRTCSignallingService {
57
57
  return stream;
58
58
  }
59
59
  async initStream(stream) {
60
+ if (this.config.token)
61
+ return;
60
62
  // an async callback to set the stream token in case one was not set at startup
61
- if (!this.config.token) {
62
- try {
63
- const authService = RocosStore.getSDKInstance(this.config).getAuthService();
64
- const token = await authService.getToken();
65
- if (token?.value) {
66
- this.config.token = token?.value;
67
- stream.setToken(this.config.token);
68
- }
69
- }
70
- catch (e) {
71
- this.logger.info('Can not retrieve auth token for web rtc signalling stream', e);
63
+ try {
64
+ const authService = RocosStore.getSDKInstance(this.config).getAuthService();
65
+ const token = await authService.getToken();
66
+ if (token?.value) {
67
+ this.config.token = token?.value;
68
+ stream.setToken(this.config.token);
72
69
  }
73
70
  }
71
+ catch (e) {
72
+ this.logger.info('Can not retrieve auth token for web rtc signalling stream', e);
73
+ }
74
74
  }
75
75
  getStream(config) {
76
76
  return new WebRTCSignallingStream(config);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dronedeploy/rocos-js-sdk",
3
- "version": "3.0.6",
3
+ "version": "3.0.8",
4
4
  "description": "Javascript SDK for rocos",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",