@dronedeploy/rocos-js-sdk 3.0.7 → 3.0.8

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.
@@ -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;
@@ -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;
@@ -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.7",
3
+ "version": "3.0.8",
4
4
  "description": "Javascript SDK for rocos",
5
5
  "main": "cjs/index.js",
6
6
  "module": "esm/index.js",