@dronedeploy/rocos-js-sdk 3.0.1-alpha.11 → 3.0.1-alpha.15
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/IRocosSDK.d.ts +1 -2
- package/cjs/RocosSDK.d.ts +4 -6
- package/cjs/RocosSDK.js +1 -9
- package/cjs/api/streams/caller/CallerStream.js +5 -2
- package/cjs/api/streams/caller/CallerStreamNode.js +2 -1
- package/cjs/api/streams/command/CommandStream.js +5 -2
- package/cjs/api/streams/command/CommandStreamNode.js +2 -1
- package/cjs/api/streams/control/ControlStream.js +5 -2
- package/cjs/api/streams/control/ControlStreamAbstract.d.ts +1 -1
- package/cjs/api/streams/control/ControlStreamNode.js +2 -1
- package/cjs/api/streams/fileAccessor/FileAccessorStream.js +4 -1
- package/cjs/api/streams/fileAccessor/FileAccessorStreamNode.js +3 -1
- package/cjs/api/streams/search/SearchStream.js +5 -2
- package/cjs/api/streams/search/SearchStreamNode.js +2 -1
- package/cjs/api/streams/telemetry/TelemetryStream.js +4 -1
- package/cjs/api/streams/telemetry/TelemetryStreamAbstract.d.ts +1 -1
- package/cjs/api/streams/telemetry/TelemetryStreamNode.js +2 -1
- package/cjs/api/streams/webRTCSignalling/WebRTCSignallingStream.js +5 -2
- package/cjs/constants/api.d.ts +2 -4
- package/cjs/constants/api.js +4 -6
- package/cjs/helpers/getUniqueConfigKey.d.ts +6 -2
- package/cjs/helpers/getUniqueConfigKey.js +7 -2
- package/cjs/models/TelemetryStatus.d.ts +12 -0
- package/cjs/models/TelemetryStatus.js +17 -0
- package/cjs/models/Token.d.ts +2 -2
- package/cjs/models/Token.js +5 -5
- package/cjs/models/index.d.ts +1 -1
- package/cjs/models/index.js +1 -1
- package/cjs/node/RocosSDKNode.js +0 -3
- package/cjs/services/ProfileService.d.ts +23 -0
- package/cjs/services/ProfileService.js +28 -0
- package/cjs/services/RTPWebRTCService.d.ts +1 -1
- package/cjs/services/RTPWebRTCService.js +4 -2
- package/cjs/services/TelemetryService.d.ts +10 -1
- package/cjs/services/TelemetryService.js +27 -5
- package/cjs/services/index.d.ts +0 -1
- package/cjs/services/index.js +0 -1
- package/cjs/store/RocosStore.d.ts +1 -2
- package/esm/IRocosSDK.d.ts +1 -2
- package/esm/RocosSDK.d.ts +4 -6
- package/esm/RocosSDK.js +2 -10
- package/esm/api/streams/caller/CallerStream.js +5 -2
- package/esm/api/streams/caller/CallerStreamNode.js +2 -1
- package/esm/api/streams/command/CommandStream.js +5 -2
- package/esm/api/streams/command/CommandStreamNode.js +2 -1
- package/esm/api/streams/control/ControlStream.js +5 -2
- package/esm/api/streams/control/ControlStreamAbstract.d.ts +1 -1
- package/esm/api/streams/control/ControlStreamNode.js +2 -1
- package/esm/api/streams/fileAccessor/FileAccessorStream.js +4 -1
- package/esm/api/streams/fileAccessor/FileAccessorStreamNode.js +3 -1
- package/esm/api/streams/search/SearchStream.js +5 -2
- package/esm/api/streams/search/SearchStreamNode.js +2 -1
- package/esm/api/streams/telemetry/TelemetryStream.js +4 -1
- package/esm/api/streams/telemetry/TelemetryStreamAbstract.d.ts +1 -1
- package/esm/api/streams/telemetry/TelemetryStreamNode.js +2 -1
- package/esm/api/streams/webRTCSignalling/WebRTCSignallingStream.js +5 -2
- package/esm/constants/api.d.ts +2 -4
- package/esm/constants/api.js +2 -4
- package/esm/helpers/getUniqueConfigKey.d.ts +6 -2
- package/esm/helpers/getUniqueConfigKey.js +7 -2
- package/esm/models/TelemetryStatus.d.ts +12 -0
- package/esm/models/TelemetryStatus.js +14 -0
- package/esm/models/Token.d.ts +2 -2
- package/esm/models/Token.js +5 -5
- package/esm/models/index.d.ts +1 -1
- package/esm/models/index.js +1 -1
- package/esm/node/RocosSDKNode.js +1 -4
- package/esm/services/ProfileService.d.ts +23 -0
- package/esm/services/ProfileService.js +29 -1
- package/esm/services/RTPWebRTCService.d.ts +1 -1
- package/esm/services/RTPWebRTCService.js +4 -2
- package/esm/services/TelemetryService.d.ts +10 -1
- package/esm/services/TelemetryService.js +28 -6
- package/esm/services/index.d.ts +0 -1
- package/esm/services/index.js +0 -1
- package/esm/store/RocosStore.d.ts +1 -2
- package/package.json +1 -2
- package/cjs/helpers/cleanObject.spec.d.ts +0 -1
- package/cjs/helpers/cleanObject.spec.js +0 -55
- package/cjs/helpers/flattenObject.spec.d.ts +0 -1
- package/cjs/helpers/flattenObject.spec.js +0 -31
- package/cjs/helpers/flattenOneOf.spec.d.ts +0 -1
- package/cjs/helpers/flattenOneOf.spec.js +0 -159
- package/cjs/helpers/formatServiceUrl.spec.d.ts +0 -1
- package/cjs/helpers/formatServiceUrl.spec.js +0 -18
- package/cjs/helpers/getSha256Hex.spec.d.ts +0 -1
- package/cjs/helpers/getSha256Hex.spec.js +0 -19
- package/cjs/helpers/getSha256HexNode.spec.d.ts +0 -1
- package/cjs/helpers/getSha256HexNode.spec.js +0 -10
- package/cjs/helpers/getURLSearchParams.spec.d.ts +0 -1
- package/cjs/helpers/getURLSearchParams.spec.js +0 -21
- package/cjs/helpers/nanosecondToMillisecond.spec.d.ts +0 -1
- package/cjs/helpers/nanosecondToMillisecond.spec.js +0 -22
- package/cjs/helpers/splitRobotTopic.spec.d.ts +0 -1
- package/cjs/helpers/splitRobotTopic.spec.js +0 -53
- package/cjs/helpers/standardDeviation.spec.d.ts +0 -1
- package/cjs/helpers/standardDeviation.spec.js +0 -13
- package/cjs/helpers/websandbox/frame/worker/manager.spec.d.ts +0 -4
- package/cjs/helpers/websandbox/frame/worker/manager.spec.js +0 -132
- package/cjs/models/CallsignStatus.d.ts +0 -6
- package/cjs/models/CallsignStatus.js +0 -10
- package/cjs/models/Token.spec.d.ts +0 -1
- package/cjs/models/Token.spec.js +0 -110
- package/cjs/services/AuthService.spec.d.ts +0 -1
- package/cjs/services/AuthService.spec.js +0 -165
- package/cjs/services/CallerService.spec.d.ts +0 -1
- package/cjs/services/CallerService.spec.js +0 -229
- package/cjs/services/FunctionService.d.ts +0 -68
- package/cjs/services/FunctionService.js +0 -103
- package/cjs/services/PlatformTimeService.spec.d.ts +0 -1
- package/cjs/services/PlatformTimeService.spec.js +0 -182
- package/cjs/services/RTPWebRTCService.spec.d.ts +0 -4
- package/cjs/services/RTPWebRTCService.spec.js +0 -171
- package/cjs/services/TelemetryService.spec.d.ts +0 -1
- package/cjs/services/TelemetryService.spec.js +0 -39
- package/esm/helpers/cleanObject.spec.d.ts +0 -1
- package/esm/helpers/cleanObject.spec.js +0 -53
- package/esm/helpers/flattenObject.spec.d.ts +0 -1
- package/esm/helpers/flattenObject.spec.js +0 -29
- package/esm/helpers/flattenOneOf.spec.d.ts +0 -1
- package/esm/helpers/flattenOneOf.spec.js +0 -157
- package/esm/helpers/formatServiceUrl.spec.d.ts +0 -1
- package/esm/helpers/formatServiceUrl.spec.js +0 -16
- package/esm/helpers/getSha256Hex.spec.d.ts +0 -1
- package/esm/helpers/getSha256Hex.spec.js +0 -14
- package/esm/helpers/getSha256HexNode.spec.d.ts +0 -1
- package/esm/helpers/getSha256HexNode.spec.js +0 -8
- package/esm/helpers/getURLSearchParams.spec.d.ts +0 -1
- package/esm/helpers/getURLSearchParams.spec.js +0 -19
- package/esm/helpers/nanosecondToMillisecond.spec.d.ts +0 -1
- package/esm/helpers/nanosecondToMillisecond.spec.js +0 -20
- package/esm/helpers/splitRobotTopic.spec.d.ts +0 -1
- package/esm/helpers/splitRobotTopic.spec.js +0 -51
- package/esm/helpers/standardDeviation.spec.d.ts +0 -1
- package/esm/helpers/standardDeviation.spec.js +0 -11
- package/esm/helpers/websandbox/frame/worker/manager.spec.d.ts +0 -4
- package/esm/helpers/websandbox/frame/worker/manager.spec.js +0 -127
- package/esm/models/CallsignStatus.d.ts +0 -6
- package/esm/models/CallsignStatus.js +0 -7
- package/esm/models/Token.spec.d.ts +0 -1
- package/esm/models/Token.spec.js +0 -108
- package/esm/services/AuthService.spec.d.ts +0 -1
- package/esm/services/AuthService.spec.js +0 -163
- package/esm/services/CallerService.spec.d.ts +0 -1
- package/esm/services/CallerService.spec.js +0 -227
- package/esm/services/FunctionService.d.ts +0 -68
- package/esm/services/FunctionService.js +0 -99
- package/esm/services/PlatformTimeService.spec.d.ts +0 -1
- package/esm/services/PlatformTimeService.spec.js +0 -180
- package/esm/services/RTPWebRTCService.spec.d.ts +0 -4
- package/esm/services/RTPWebRTCService.spec.js +0 -169
- package/esm/services/TelemetryService.spec.d.ts +0 -1
- package/esm/services/TelemetryService.spec.js +0 -37
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Observable } from 'rxjs';
|
2
|
-
import { CallsignStatus, IRocosSDKConfig, IRocosTelemetryMessage, IStreamStatusMessage, ITelemetryStream, ITelemetryStreamConfig, ITelemetrySubscriptionParams, ITelemetrySubscriptions } from '../models';
|
2
|
+
import { CallsignStatus, IRocosSDKConfig, IRocosTelemetryMessage, IStreamStatusMessage, ITelemetryStream, ITelemetryStreamConfig, ITelemetrySubscriptionParams, ITelemetrySubscriptions, TelemetryMonitorStatus } from '../models';
|
3
3
|
import { BaseStreamService } from './BaseStreamService';
|
4
4
|
export declare class TelemetryService extends BaseStreamService<ITelemetryStream, ITelemetryStreamConfig> {
|
5
5
|
private statusSubscription;
|
@@ -34,6 +34,15 @@ export declare class TelemetryService extends BaseStreamService<ITelemetryStream
|
|
34
34
|
* @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
|
35
35
|
*/
|
36
36
|
getRobotStatusChanges(projectId: string, callsign: string, heartbeatTimeoutMs?: number, intervalMs?: number): Observable<CallsignStatus>;
|
37
|
+
/**
|
38
|
+
* Subscribes to the given telemetry and checks we receive one at least emission every `heartbeatTimeoutMs` (default 5s)
|
39
|
+
* @param projectId
|
40
|
+
* @param callsign
|
41
|
+
* @param source the telemetry source to monitor
|
42
|
+
* @param heartbeatTimeoutMs optionally override the deadline for telemetry emissions (in ms). Default 5000ms
|
43
|
+
* @param intervalMs optionally override the interval to check for telemetry emissions (in ms). Default 2000ms
|
44
|
+
*/
|
45
|
+
monitorTelemetryWithTimeout(projectId: string, callsign: string, source: string, heartbeatTimeoutMs?: number, intervalMs?: number): Observable<TelemetryMonitorStatus>;
|
37
46
|
protected initStream(stream: ITelemetryStream): Promise<void>;
|
38
47
|
private buildScope;
|
39
48
|
private createStream;
|
@@ -98,23 +98,45 @@ class TelemetryService extends BaseStreamService_1.BaseStreamService {
|
|
98
98
|
* @param intervalMs optionally override the interval to check for heartbeats (in ms). Default 2000ms
|
99
99
|
*/
|
100
100
|
getRobotStatusChanges(projectId, callsign, heartbeatTimeoutMs = HEARTBEAT_TIMEOUT, intervalMs = 2000) {
|
101
|
+
return this.monitorTelemetryWithTimeout(projectId, callsign, HEARTBEAT_SOURCE, heartbeatTimeoutMs, intervalMs).pipe((0, rxjs_1.map)((status) => {
|
102
|
+
switch (status) {
|
103
|
+
case models_1.TelemetryMonitorStatus.CONNECTED:
|
104
|
+
return models_1.CallsignStatus.ONLINE;
|
105
|
+
case models_1.TelemetryMonitorStatus.DISCONNECTED:
|
106
|
+
return models_1.CallsignStatus.OFFLINE;
|
107
|
+
case models_1.TelemetryMonitorStatus.ERROR:
|
108
|
+
return models_1.CallsignStatus.ERROR;
|
109
|
+
default:
|
110
|
+
return models_1.CallsignStatus.UNKNOWN;
|
111
|
+
}
|
112
|
+
}));
|
113
|
+
}
|
114
|
+
/**
|
115
|
+
* Subscribes to the given telemetry and checks we receive one at least emission every `heartbeatTimeoutMs` (default 5s)
|
116
|
+
* @param projectId
|
117
|
+
* @param callsign
|
118
|
+
* @param source the telemetry source to monitor
|
119
|
+
* @param heartbeatTimeoutMs optionally override the deadline for telemetry emissions (in ms). Default 5000ms
|
120
|
+
* @param intervalMs optionally override the interval to check for telemetry emissions (in ms). Default 2000ms
|
121
|
+
*/
|
122
|
+
monitorTelemetryWithTimeout(projectId, callsign, source, heartbeatTimeoutMs = HEARTBEAT_TIMEOUT, intervalMs = 2000) {
|
101
123
|
const startedAt = Date.now();
|
102
124
|
const heartbeatTime$ = this.subscribe({
|
103
125
|
projectId,
|
104
|
-
sources: [
|
126
|
+
sources: [source],
|
105
127
|
callsigns: [callsign],
|
106
128
|
}).pipe((0, rxjs_1.map)(() => Date.now()));
|
107
129
|
return (0, rxjs_1.combineLatest)([heartbeatTime$.pipe((0, rxjs_1.startWith)(startedAt)), (0, rxjs_1.interval)(intervalMs)]).pipe((0, rxjs_1.map)(([lastHeartbeat, _]) => {
|
108
130
|
const now = Date.now();
|
109
131
|
// If we haven't received a heartbeat, but we've only just started
|
110
132
|
if (lastHeartbeat === startedAt && now - startedAt <= heartbeatTimeoutMs) {
|
111
|
-
return models_1.
|
133
|
+
return models_1.TelemetryMonitorStatus.UNKNOWN;
|
112
134
|
}
|
113
135
|
if (now - lastHeartbeat > heartbeatTimeoutMs) {
|
114
|
-
return models_1.
|
136
|
+
return models_1.TelemetryMonitorStatus.DISCONNECTED;
|
115
137
|
}
|
116
|
-
return models_1.
|
117
|
-
}), (0, rxjs_1.startWith)(models_1.
|
138
|
+
return models_1.TelemetryMonitorStatus.CONNECTED;
|
139
|
+
}), (0, rxjs_1.startWith)(models_1.TelemetryMonitorStatus.UNKNOWN), (0, rxjs_1.distinctUntilChanged)(), (0, rxjs_1.catchError)(() => (0, rxjs_1.of)(models_1.TelemetryMonitorStatus.ERROR)));
|
118
140
|
}
|
119
141
|
async initStream(stream) {
|
120
142
|
await super.initStream(stream);
|
package/cjs/services/index.d.ts
CHANGED
@@ -7,7 +7,6 @@ export * from './ControlService';
|
|
7
7
|
export * from './DashboardService';
|
8
8
|
export * from './EventService';
|
9
9
|
export * from './FileAccessorService';
|
10
|
-
export * from './FunctionService';
|
11
10
|
export * from './IntegrationService';
|
12
11
|
export * from './ProfileService';
|
13
12
|
export * from './ProjectService';
|
package/cjs/services/index.js
CHANGED
@@ -23,7 +23,6 @@ __exportStar(require("./ControlService"), exports);
|
|
23
23
|
__exportStar(require("./DashboardService"), exports);
|
24
24
|
__exportStar(require("./EventService"), exports);
|
25
25
|
__exportStar(require("./FileAccessorService"), exports);
|
26
|
-
__exportStar(require("./FunctionService"), exports);
|
27
26
|
__exportStar(require("./IntegrationService"), exports);
|
28
27
|
__exportStar(require("./ProfileService"), exports);
|
29
28
|
__exportStar(require("./ProjectService"), exports);
|
@@ -1,6 +1,5 @@
|
|
1
|
-
import { IRocosChangeMessage } from '../models
|
1
|
+
import { IRocosChangeMessage, IRocosSDKConfig } from '../models';
|
2
2
|
import { IRocosSDK } from '../IRocosSDK';
|
3
|
-
import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
|
4
3
|
import { Subject } from 'rxjs';
|
5
4
|
export declare class RocosStore {
|
6
5
|
private static changeSubject$?;
|
package/esm/IRocosSDK.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, EvaluatorService, EventService, FileAccessorService,
|
1
|
+
import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, EvaluatorService, EventService, FileAccessorService, IntegrationService, MapService, ProfileService, ProjectService, RobotService, SearchService, SpotProvisioningService, SpotProvisioningServiceNode, StreamService, TelemetryService, TimeSyncerService, UserService, WebRTCSignallingService, WorkflowService } from './services';
|
2
2
|
import { IBaseService, IDebugLevel, ServiceEnum } from './models';
|
3
3
|
import { RTPWebRTCService } from './services/RTPWebRTCService';
|
4
4
|
export declare abstract class IRocosSDK {
|
@@ -14,7 +14,6 @@ export declare abstract class IRocosSDK {
|
|
14
14
|
abstract getSearchService(): SearchService;
|
15
15
|
abstract getConfigGroupService(): ConfigGroupService;
|
16
16
|
abstract getDashboardService(): DashboardService;
|
17
|
-
abstract getFunctionService(): FunctionService;
|
18
17
|
abstract getStreamService(): StreamService;
|
19
18
|
abstract getUserService(): UserService;
|
20
19
|
abstract getMapService(): MapService;
|
package/esm/RocosSDK.d.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, EvaluatorService, EventService, FileAccessorService,
|
1
|
+
import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, EvaluatorService, EventService, FileAccessorService, IntegrationService, MapService, ProfileService, ProjectService, RTPWebRTCService, RobotService, ScheduleService, SearchService, SpotProvisioningService, StreamService, TelemetryService, TimeSyncerService, UserService, WebRTCSignallingService, WorkflowService } from './services';
|
2
2
|
import { AuthorisedConfig, IBaseService, IDebugLevel, IRocosSDKConfig, ServiceEnum } from './models';
|
3
3
|
import { IRocosSDK } from './IRocosSDK';
|
4
4
|
import { Logger } from 'loglevel';
|
@@ -62,10 +62,6 @@ export declare class RocosSDK implements IRocosSDK {
|
|
62
62
|
* Gets the dashboard service
|
63
63
|
*/
|
64
64
|
getDashboardService(): DashboardService;
|
65
|
-
/**
|
66
|
-
* Gets the function service
|
67
|
-
*/
|
68
|
-
getFunctionService(): FunctionService;
|
69
65
|
/**
|
70
66
|
* Gets the stream service
|
71
67
|
*/
|
@@ -145,5 +141,7 @@ export declare class RocosSDK implements IRocosSDK {
|
|
145
141
|
*/
|
146
142
|
enableDebugMode(on: boolean): void;
|
147
143
|
setDebugLevel(level: IDebugLevel): void;
|
148
|
-
protected overrideConfig(service: ServiceEnum): AuthorisedConfig
|
144
|
+
protected overrideConfig(service: ServiceEnum): AuthorisedConfig & {
|
145
|
+
_parentConfig?: IRocosSDKConfig;
|
146
|
+
};
|
149
147
|
}
|
package/esm/RocosSDK.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, EvaluatorService, EventService, FileAccessorService,
|
1
|
+
import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, EvaluatorService, EventService, FileAccessorService, IntegrationService, MapService, PlatFormTimeService, ProfileService, ProjectService, RTPWebRTCService, RobotService, ScheduleService, SearchService, SpotProvisioningService, StreamService, TelemetryService, TimeSyncerService, UserService, WebRTCSignallingService, WorkflowService, } from './services';
|
2
2
|
import { ServiceEnum } from './models';
|
3
3
|
import { RocosLogger } from './logger/RocosLogger';
|
4
4
|
import { RocosStore } from './store/RocosStore';
|
@@ -59,9 +59,6 @@ export class RocosSDK {
|
|
59
59
|
case ServiceEnum.DASHBOARD:
|
60
60
|
this.services[name] = new DashboardService(config);
|
61
61
|
break;
|
62
|
-
case ServiceEnum.FUNCTION:
|
63
|
-
this.services[name] = new FunctionService(config);
|
64
|
-
break;
|
65
62
|
case ServiceEnum.STREAM:
|
66
63
|
this.services[name] = new StreamService(config);
|
67
64
|
break;
|
@@ -175,12 +172,6 @@ export class RocosSDK {
|
|
175
172
|
getDashboardService() {
|
176
173
|
return this.getService(ServiceEnum.DASHBOARD);
|
177
174
|
}
|
178
|
-
/**
|
179
|
-
* Gets the function service
|
180
|
-
*/
|
181
|
-
getFunctionService() {
|
182
|
-
return this.getService(ServiceEnum.FUNCTION);
|
183
|
-
}
|
184
175
|
/**
|
185
176
|
* Gets the stream service
|
186
177
|
*/
|
@@ -319,6 +310,7 @@ export class RocosSDK {
|
|
319
310
|
return {
|
320
311
|
...config,
|
321
312
|
...this.config.overrides?.[service],
|
313
|
+
_parentConfig: this.config,
|
322
314
|
};
|
323
315
|
}
|
324
316
|
}
|
@@ -68,11 +68,14 @@ export class CallerStream extends CallerStreamAbstract {
|
|
68
68
|
return stringToUint8Array(payload);
|
69
69
|
}
|
70
70
|
getMetadata(projectId, callsign, subsystem) {
|
71
|
-
|
72
|
-
'authorization': this.token,
|
71
|
+
const meta = {
|
73
72
|
'r-p': projectId,
|
74
73
|
'r-cs': callsign,
|
75
74
|
'r-s': subsystem ?? '',
|
76
75
|
};
|
76
|
+
if (this.token) {
|
77
|
+
meta.authorization = this.token;
|
78
|
+
}
|
79
|
+
return meta;
|
77
80
|
}
|
78
81
|
}
|
@@ -109,7 +109,8 @@ export class CallerStreamNode extends CallerStreamAbstract {
|
|
109
109
|
meta.add('r-p', projectId);
|
110
110
|
meta.add('r-cs', callsign);
|
111
111
|
meta.add('r-s', subsystem ?? '');
|
112
|
-
|
112
|
+
if (this.token)
|
113
|
+
meta.add('authorization', this.token);
|
113
114
|
return meta;
|
114
115
|
}
|
115
116
|
}
|
@@ -58,10 +58,13 @@ export class CommandStream extends CommandStreamAbstract {
|
|
58
58
|
});
|
59
59
|
}
|
60
60
|
getMetadata(projectId, callsign) {
|
61
|
-
|
62
|
-
'authorization': this.token,
|
61
|
+
const meta = {
|
63
62
|
'r-p': projectId,
|
64
63
|
'r-cs': callsign,
|
65
64
|
};
|
65
|
+
if (this.token) {
|
66
|
+
meta.authorization = this.token;
|
67
|
+
}
|
68
|
+
return meta;
|
66
69
|
}
|
67
70
|
}
|
@@ -58,12 +58,13 @@ export class CommandStreamNode extends CommandStreamAbstract {
|
|
58
58
|
}
|
59
59
|
getMetadata(projectId, callsign, subsystem) {
|
60
60
|
const meta = new grpc.Metadata();
|
61
|
-
meta.add('authorization', this.token);
|
62
61
|
meta.add('r-p', projectId);
|
63
62
|
meta.add('r-cs', callsign);
|
64
63
|
if (subsystem) {
|
65
64
|
meta.add('r-s', subsystem);
|
66
65
|
}
|
66
|
+
if (this.token)
|
67
|
+
meta.add('authorization', this.token);
|
67
68
|
return meta;
|
68
69
|
}
|
69
70
|
}
|
@@ -67,10 +67,13 @@ export class ControlStream extends ControlStreamAbstract {
|
|
67
67
|
return stringToUint8Array(payload);
|
68
68
|
}
|
69
69
|
getMetadata(projectId, callsign) {
|
70
|
-
|
71
|
-
'authorization': this.token,
|
70
|
+
const meta = {
|
72
71
|
'r-p': projectId,
|
73
72
|
'r-cs': callsign,
|
74
73
|
};
|
74
|
+
if (this.token) {
|
75
|
+
meta.authorization = this.token;
|
76
|
+
}
|
77
|
+
return meta;
|
75
78
|
}
|
76
79
|
}
|
@@ -5,7 +5,7 @@ import { Logger } from 'loglevel';
|
|
5
5
|
export declare abstract class ControlStreamAbstract implements IControlStream {
|
6
6
|
identifier: string;
|
7
7
|
statusStream$: BehaviorSubject<SubscriberStatusEnum>;
|
8
|
-
protected token
|
8
|
+
protected token?: string;
|
9
9
|
private readonly scope;
|
10
10
|
protected url: string;
|
11
11
|
protected subscriberStatus: SubscriberStatusEnum;
|
@@ -65,9 +65,10 @@ export class ControlStreamNode extends ControlStreamAbstract {
|
|
65
65
|
}
|
66
66
|
getMetadata(projectId, callsign) {
|
67
67
|
const meta = new grpc.Metadata();
|
68
|
-
meta.add('authorization', this.token);
|
69
68
|
meta.add('r-p', projectId);
|
70
69
|
meta.add('r-cs', callsign);
|
70
|
+
if (this.token)
|
71
|
+
meta.add('authorization', this.token);
|
71
72
|
return meta;
|
72
73
|
}
|
73
74
|
}
|
@@ -48,7 +48,10 @@ export class FileAccessorStream extends FileAccessorStreamAbstract {
|
|
48
48
|
throw new Error('Error in serverReqOp call');
|
49
49
|
}
|
50
50
|
getMetadata(projectId, callsign) {
|
51
|
-
const result = {
|
51
|
+
const result = {};
|
52
|
+
if (this.token) {
|
53
|
+
result.authorization = this.token;
|
54
|
+
}
|
52
55
|
if (projectId) {
|
53
56
|
result['r-p'] = projectId;
|
54
57
|
}
|
@@ -54,7 +54,9 @@ export class FileAccessorStreamNode extends FileAccessorStreamAbstract {
|
|
54
54
|
}
|
55
55
|
getMetadata(projectId, callsign) {
|
56
56
|
const meta = new grpc.Metadata();
|
57
|
-
|
57
|
+
if (this.token) {
|
58
|
+
meta.add('authorization', this.token);
|
59
|
+
}
|
58
60
|
if (projectId) {
|
59
61
|
meta.add('r-p', projectId);
|
60
62
|
}
|
@@ -89,9 +89,12 @@ export class SearchStream extends SearchStreamAbstract {
|
|
89
89
|
return response;
|
90
90
|
}
|
91
91
|
getMetadata(projectId) {
|
92
|
-
|
93
|
-
'authorization': this.token,
|
92
|
+
const meta = {
|
94
93
|
'r-p': projectId,
|
95
94
|
};
|
95
|
+
if (this.token) {
|
96
|
+
meta.authorization = this.token;
|
97
|
+
}
|
98
|
+
return meta;
|
96
99
|
}
|
97
100
|
}
|
@@ -111,8 +111,9 @@ export class SearchStreamNode extends SearchStreamAbstract {
|
|
111
111
|
}
|
112
112
|
getMetadata(projectId) {
|
113
113
|
const meta = new grpc.Metadata();
|
114
|
-
meta.add('authorization', this.token);
|
115
114
|
meta.add('r-p', projectId);
|
115
|
+
if (this.token)
|
116
|
+
meta.add('authorization', this.token);
|
116
117
|
return meta;
|
117
118
|
}
|
118
119
|
}
|
@@ -62,7 +62,10 @@ export class TelemetryStream extends TelemetryStreamAbstract {
|
|
62
62
|
}
|
63
63
|
}
|
64
64
|
getMetadata(projectId) {
|
65
|
-
const result = {
|
65
|
+
const result = {};
|
66
|
+
if (this.token) {
|
67
|
+
result.authorization = this.token;
|
68
|
+
}
|
66
69
|
if (projectId) {
|
67
70
|
result['r-p'] = projectId;
|
68
71
|
}
|
@@ -11,7 +11,7 @@ export declare abstract class TelemetryStreamAbstract implements ITelemetryStrea
|
|
11
11
|
protected projectId: string;
|
12
12
|
private callsignsLookup;
|
13
13
|
private sources;
|
14
|
-
protected token
|
14
|
+
protected token?: string;
|
15
15
|
private scope;
|
16
16
|
protected url: string;
|
17
17
|
private timerIntervalInSec;
|
@@ -103,10 +103,11 @@ export class TelemetryStreamNode extends TelemetryStreamAbstract {
|
|
103
103
|
}
|
104
104
|
getMetaData() {
|
105
105
|
const meta = new grpc.Metadata();
|
106
|
-
meta.add('authorization', this.token);
|
107
106
|
meta.add('r-p', this.projectId);
|
108
107
|
meta.add('r-tid', uuid4());
|
109
108
|
meta.add('r-cs', 'rocos-js-sdk-agent');
|
109
|
+
if (this.token)
|
110
|
+
meta.add('authorization', this.token);
|
110
111
|
return meta;
|
111
112
|
}
|
112
113
|
requestTelemetry(req) {
|
@@ -77,9 +77,12 @@ export class WebRTCSignallingStream extends WebRTCSignallingStreamAbstract {
|
|
77
77
|
return this.webRTCOperatorclient.addIceCandidate(request, { meta: metadata }).response;
|
78
78
|
}
|
79
79
|
getMetadata(projectId) {
|
80
|
-
|
81
|
-
'authorization': this.token,
|
80
|
+
const meta = {
|
82
81
|
'r-p': projectId,
|
83
82
|
};
|
83
|
+
if (this.token) {
|
84
|
+
meta.authorization = this.token;
|
85
|
+
}
|
86
|
+
return meta;
|
84
87
|
}
|
85
88
|
}
|
package/esm/constants/api.d.ts
CHANGED
@@ -82,6 +82,8 @@ export declare const API_PROJECT_DEFINITION_ACTION_URL = "https://{url}/projects
|
|
82
82
|
export declare const API_PROJECT_DEFINITION_BUTTON_URL = "https://{url}/projects/{projectId}/robot-definitions/{definitionId}/buttons";
|
83
83
|
export declare const API_PROJECT_DEFINITION_TRIGGER_URL = "https://{url}/projects/{projectId}/robot-definitions/{definitionId}/triggers";
|
84
84
|
export declare const API_PROJECT_DEFINITION_GAMEPAD_URL = "https://{url}/projects/{projectId}/robot-definitions/{definitionId}/gamepads";
|
85
|
+
export declare const API_PROJECT_DEFINITION_EXPORT = "https://{url}/projects/{projectId}/robot-definitions/{definitionId}/export";
|
86
|
+
export declare const API_PROJECT_DEFINITION_IMPORT = "https://{url}/projects/{projectId}/robot-definitions/import";
|
85
87
|
export declare const API_PROJECT_GROUP_TYPE_URL = "https://{url}/projects/{projectId}/config-groups/{type}";
|
86
88
|
export declare const API_PROJECT_GROUP_TYPE_ID_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}";
|
87
89
|
export declare const API_PROJECT_GROUP_TYPE_PUBLISH_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/publish";
|
@@ -89,10 +91,6 @@ export declare const API_PROJECT_GROUP_TYPE_CONFIG_URL = "https://{url}/projects
|
|
89
91
|
export declare const API_PROJECT_GROUP_TYPE_VERSION_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{version}";
|
90
92
|
export declare const API_PROJECT_GROUP_TYPE_OWNER_ID_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/owner/{ownerId}";
|
91
93
|
export declare const API_PROJECT_GROUP_TYPE_OWNER_OVERRIDE_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{ownerId}/override";
|
92
|
-
export declare const API_PROJECT_FUNCTION_URL = "https://{url}/projects/{projectId}/functions";
|
93
|
-
export declare const API_PROJECT_FUNCTION_ID_URL = "https://{url}/projects/{projectId}/functions/{functionId}";
|
94
|
-
export declare const API_PROJECT_FUNCTION_RUN_URL = "https://{url}/projects/{projectId}/functions/{functionId}/run";
|
95
|
-
export declare const API_PROJECT_FUNCTION_POD_URL = "https://{url}/projects/{projectId}/functions/{functionId}/pods";
|
96
94
|
export declare const API_PROJECT_EXPORT_URL = "https://{url}/projects/{projectId}/export-jobs";
|
97
95
|
export declare const API_PROJECT_STREAM_URL = "https://{url}/projects/{projectId}/streams";
|
98
96
|
export declare const API_PROJECT_STREAM_ID_URL = "https://{url}/projects/{projectId}/streams/{streamId}";
|
package/esm/constants/api.js
CHANGED
@@ -82,6 +82,8 @@ export const API_PROJECT_DEFINITION_ACTION_URL = 'https://{url}/projects/{projec
|
|
82
82
|
export const API_PROJECT_DEFINITION_BUTTON_URL = 'https://{url}/projects/{projectId}/robot-definitions/{definitionId}/buttons';
|
83
83
|
export const API_PROJECT_DEFINITION_TRIGGER_URL = 'https://{url}/projects/{projectId}/robot-definitions/{definitionId}/triggers';
|
84
84
|
export const API_PROJECT_DEFINITION_GAMEPAD_URL = 'https://{url}/projects/{projectId}/robot-definitions/{definitionId}/gamepads';
|
85
|
+
export const API_PROJECT_DEFINITION_EXPORT = 'https://{url}/projects/{projectId}/robot-definitions/{definitionId}/export';
|
86
|
+
export const API_PROJECT_DEFINITION_IMPORT = 'https://{url}/projects/{projectId}/robot-definitions/import';
|
85
87
|
export const API_PROJECT_GROUP_TYPE_URL = 'https://{url}/projects/{projectId}/config-groups/{type}';
|
86
88
|
export const API_PROJECT_GROUP_TYPE_ID_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}';
|
87
89
|
export const API_PROJECT_GROUP_TYPE_PUBLISH_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/publish';
|
@@ -89,10 +91,6 @@ export const API_PROJECT_GROUP_TYPE_CONFIG_URL = 'https://{url}/projects/{projec
|
|
89
91
|
export const API_PROJECT_GROUP_TYPE_VERSION_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{version}';
|
90
92
|
export const API_PROJECT_GROUP_TYPE_OWNER_ID_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/owner/{ownerId}';
|
91
93
|
export const API_PROJECT_GROUP_TYPE_OWNER_OVERRIDE_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{ownerId}/override';
|
92
|
-
export const API_PROJECT_FUNCTION_URL = 'https://{url}/projects/{projectId}/functions';
|
93
|
-
export const API_PROJECT_FUNCTION_ID_URL = 'https://{url}/projects/{projectId}/functions/{functionId}';
|
94
|
-
export const API_PROJECT_FUNCTION_RUN_URL = 'https://{url}/projects/{projectId}/functions/{functionId}/run';
|
95
|
-
export const API_PROJECT_FUNCTION_POD_URL = 'https://{url}/projects/{projectId}/functions/{functionId}/pods';
|
96
94
|
export const API_PROJECT_EXPORT_URL = 'https://{url}/projects/{projectId}/export-jobs';
|
97
95
|
export const API_PROJECT_STREAM_URL = 'https://{url}/projects/{projectId}/streams';
|
98
96
|
export const API_PROJECT_STREAM_ID_URL = 'https://{url}/projects/{projectId}/streams/{streamId}';
|
@@ -1,7 +1,11 @@
|
|
1
|
-
import { IRocosSDKConfig } from '../models
|
1
|
+
import { IRocosSDKConfig } from '../models';
|
2
|
+
type ConfigWithParent = IRocosSDKConfig & {
|
3
|
+
_parentConfig?: ConfigWithParent;
|
4
|
+
};
|
2
5
|
/**
|
3
6
|
* Flattens and orders the sdk config props to make a unique key
|
4
7
|
*
|
5
8
|
* @param config - SDK config {@link IRocosSDKConfig}
|
6
9
|
*/
|
7
|
-
export declare const getUniqueConfigKey: (config:
|
10
|
+
export declare const getUniqueConfigKey: (config: ConfigWithParent) => string;
|
11
|
+
export {};
|
@@ -4,10 +4,15 @@
|
|
4
4
|
* @param config - SDK config {@link IRocosSDKConfig}
|
5
5
|
*/
|
6
6
|
export const getUniqueConfigKey = (config) => {
|
7
|
-
|
7
|
+
let rootConfig = config;
|
8
|
+
if (rootConfig._parentConfig) {
|
9
|
+
// assume there is only one level of nesting
|
10
|
+
rootConfig = rootConfig._parentConfig;
|
11
|
+
}
|
12
|
+
return Object.keys(rootConfig)
|
8
13
|
.sort()
|
9
14
|
.map((item) => {
|
10
|
-
return item !== 'token' ? `${item}:${
|
15
|
+
return item !== 'token' ? `${item}:${rootConfig[item]}` : false;
|
11
16
|
})
|
12
17
|
.filter(Boolean)
|
13
18
|
.join();
|
@@ -0,0 +1,12 @@
|
|
1
|
+
export declare enum TelemetryMonitorStatus {
|
2
|
+
UNKNOWN = "unknown",
|
3
|
+
CONNECTED = "connected",
|
4
|
+
DISCONNECTED = "disconnected",
|
5
|
+
ERROR = "error"
|
6
|
+
}
|
7
|
+
export declare enum CallsignStatus {
|
8
|
+
UNKNOWN = "unknown",
|
9
|
+
ONLINE = "online",
|
10
|
+
OFFLINE = "offline",
|
11
|
+
ERROR = "error"
|
12
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
export var TelemetryMonitorStatus;
|
2
|
+
(function (TelemetryMonitorStatus) {
|
3
|
+
TelemetryMonitorStatus["UNKNOWN"] = "unknown";
|
4
|
+
TelemetryMonitorStatus["CONNECTED"] = "connected";
|
5
|
+
TelemetryMonitorStatus["DISCONNECTED"] = "disconnected";
|
6
|
+
TelemetryMonitorStatus["ERROR"] = "error";
|
7
|
+
})(TelemetryMonitorStatus || (TelemetryMonitorStatus = {}));
|
8
|
+
export var CallsignStatus;
|
9
|
+
(function (CallsignStatus) {
|
10
|
+
CallsignStatus["UNKNOWN"] = "unknown";
|
11
|
+
CallsignStatus["ONLINE"] = "online";
|
12
|
+
CallsignStatus["OFFLINE"] = "offline";
|
13
|
+
CallsignStatus["ERROR"] = "error";
|
14
|
+
})(CallsignStatus || (CallsignStatus = {}));
|
package/esm/models/Token.d.ts
CHANGED
@@ -31,10 +31,10 @@ export declare class Token implements IToken {
|
|
31
31
|
isExpiredIn(threshold?: number, unit?: 'minutes' | 'seconds' | 'hours'): boolean;
|
32
32
|
isExpired(): boolean;
|
33
33
|
private getJWTPayload;
|
34
|
-
/** Decode a
|
34
|
+
/** Decode a base64url string.
|
35
35
|
*
|
36
36
|
* Supports both Node.js and browser environments.
|
37
37
|
* @private
|
38
38
|
*/
|
39
|
-
private
|
39
|
+
private decodeBase64URL;
|
40
40
|
}
|
package/esm/models/Token.js
CHANGED
@@ -51,7 +51,7 @@ export class Token {
|
|
51
51
|
throw new Error('Invalid token, too many parts');
|
52
52
|
}
|
53
53
|
const [header, payload] = parts.slice(0, 2).map((part) => {
|
54
|
-
return JSON.parse(this.
|
54
|
+
return JSON.parse(this.decodeBase64URL(part));
|
55
55
|
});
|
56
56
|
if (typeof payload !== 'object') {
|
57
57
|
throw new Error('Invalid token, payload must be an object');
|
@@ -64,15 +64,15 @@ export class Token {
|
|
64
64
|
}
|
65
65
|
return payload;
|
66
66
|
}
|
67
|
-
/** Decode a
|
67
|
+
/** Decode a base64url string.
|
68
68
|
*
|
69
69
|
* Supports both Node.js and browser environments.
|
70
70
|
* @private
|
71
71
|
*/
|
72
|
-
|
72
|
+
decodeBase64URL(base64String) {
|
73
73
|
if (isNode) {
|
74
|
-
return Buffer.from(base64String, '
|
74
|
+
return Buffer.from(base64String, 'base64url').toString('utf-8');
|
75
75
|
}
|
76
|
-
return atob(base64String);
|
76
|
+
return atob(base64String.replace(/-/g, '+').replace(/_/g, '/'));
|
77
77
|
}
|
78
78
|
}
|
package/esm/models/index.d.ts
CHANGED
@@ -33,7 +33,6 @@ export * from './integrations/Plan';
|
|
33
33
|
export * from './maps/Map';
|
34
34
|
export * from './maps/Panorama';
|
35
35
|
export * from './projects/ProjectUser';
|
36
|
-
export * from './CallsignStatus';
|
37
36
|
export * from './ExportDataQuery';
|
38
37
|
export * from './HttpError';
|
39
38
|
export * from './IBaseService';
|
@@ -73,6 +72,7 @@ export * from './Stream';
|
|
73
72
|
export * from './StreamOptions';
|
74
73
|
export * from './StreamSource';
|
75
74
|
export * from './SubscriberStatusEnum';
|
75
|
+
export * from './TelemetryStatus';
|
76
76
|
export * from './Token';
|
77
77
|
export * from './types';
|
78
78
|
export * from './Widget';
|
package/esm/models/index.js
CHANGED
@@ -33,7 +33,6 @@ export * from './integrations/Plan';
|
|
33
33
|
export * from './maps/Map';
|
34
34
|
export * from './maps/Panorama';
|
35
35
|
export * from './projects/ProjectUser';
|
36
|
-
export * from './CallsignStatus';
|
37
36
|
export * from './ExportDataQuery';
|
38
37
|
export * from './HttpError';
|
39
38
|
export * from './IBaseService';
|
@@ -73,6 +72,7 @@ export * from './Stream';
|
|
73
72
|
export * from './StreamOptions';
|
74
73
|
export * from './StreamSource';
|
75
74
|
export * from './SubscriberStatusEnum';
|
75
|
+
export * from './TelemetryStatus';
|
76
76
|
export * from './Token';
|
77
77
|
export * from './types';
|
78
78
|
export * from './Widget';
|
package/esm/node/RocosSDKNode.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { AssetStorageService, AuthService, ConfigGroupService, DashboardService, EventService,
|
1
|
+
import { AssetStorageService, AuthService, ConfigGroupService, DashboardService, EventService, IntegrationService, MapService, ProfileService, ProjectService, RobotService, ScheduleService, SpotProvisioningServiceNode, StreamService, UserService, } from '../services';
|
2
2
|
import { ServiceEnum } from '../models';
|
3
3
|
import { CallerServiceNode } from '../services/CallerServiceNode';
|
4
4
|
import { CommandServiceNode } from '../services/CommandServiceNode';
|
@@ -48,9 +48,6 @@ export class RocosSDKNode extends RocosSDK {
|
|
48
48
|
case ServiceEnum.DASHBOARD:
|
49
49
|
this.services[name] = new DashboardService(config);
|
50
50
|
break;
|
51
|
-
case ServiceEnum.FUNCTION:
|
52
|
-
this.services[name] = new FunctionService(config);
|
53
|
-
break;
|
54
51
|
case ServiceEnum.STREAM:
|
55
52
|
this.services[name] = new StreamService(config);
|
56
53
|
break;
|
@@ -232,6 +232,29 @@ export declare class ProfileService extends BaseServiceAbstract implements IBase
|
|
232
232
|
* @description - Renamed from robotDefGetGamepads
|
233
233
|
*/
|
234
234
|
getGamepads(projectId: string, definitionId: string): Promise<any>;
|
235
|
+
/** Export robot definition into JSON format
|
236
|
+
*
|
237
|
+
* Can be used to import robot definition into another project
|
238
|
+
*
|
239
|
+
* @param projectId - Project Id
|
240
|
+
* @param definitionId - Robot definition Id
|
241
|
+
*
|
242
|
+
* @see import
|
243
|
+
*/
|
244
|
+
export(projectId: string, definitionId: string): Promise<Record<string, unknown>>;
|
245
|
+
/** Import robot definition from JSON format
|
246
|
+
*
|
247
|
+
* Accepts a previously exported robot definition
|
248
|
+
*
|
249
|
+
* @param projectId - Project Id
|
250
|
+
* @param profileData - Robot definition data
|
251
|
+
* @param newName - Optional new name for the robot definition. If not provided, the name from the imported definition will be used.
|
252
|
+
*
|
253
|
+
* @see export
|
254
|
+
*/
|
255
|
+
import(projectId: string, profileData: Record<string, unknown>, newName?: string): Promise<{
|
256
|
+
profileId: string;
|
257
|
+
}>;
|
235
258
|
/**
|
236
259
|
* Update gamepads for a robot definition
|
237
260
|
*
|