@dronedeploy/rocos-js-sdk 3.0.1-alpha.14 → 3.0.1-alpha.16
Sign up to get free protection for your applications and to get access to all the features.
- package/cjs/IRocosSDK.d.ts +2 -2
- package/cjs/RocosSDK.d.ts +7 -6
- package/cjs/RocosSDK.js +11 -10
- package/cjs/constants/api.d.ts +4 -6
- package/cjs/constants/api.js +6 -8
- package/cjs/models/RocosError.d.ts +1 -0
- package/cjs/models/RocosError.js +1 -0
- package/cjs/models/ServiceEnum.d.ts +2 -1
- package/cjs/models/ServiceEnum.js +1 -0
- 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/device-credentials/DeviceCredentials.d.ts +46 -0
- package/cjs/models/device-credentials/DeviceCredentials.js +2 -0
- package/cjs/models/index.d.ts +1 -1
- package/cjs/models/index.js +1 -1
- package/cjs/node/RocosSDKNode.d.ts +2 -1
- package/cjs/node/RocosSDKNode.js +6 -3
- package/cjs/services/DeviceCredentialsService.d.ts +15 -0
- package/cjs/services/DeviceCredentialsService.js +50 -0
- package/cjs/services/MapService.d.ts +1 -1
- package/cjs/services/MapService.js +1 -1
- package/cjs/services/ProfileService.d.ts +2 -1
- package/cjs/services/ProfileService.js +9 -3
- package/cjs/services/TelemetryService.d.ts +10 -1
- package/cjs/services/TelemetryService.js +27 -5
- package/cjs/services/index.d.ts +1 -1
- package/cjs/services/index.js +1 -1
- package/esm/IRocosSDK.d.ts +2 -2
- package/esm/RocosSDK.d.ts +7 -6
- package/esm/RocosSDK.js +12 -11
- package/esm/constants/api.d.ts +4 -6
- package/esm/constants/api.js +4 -6
- package/esm/models/RocosError.d.ts +1 -0
- package/esm/models/RocosError.js +1 -0
- package/esm/models/ServiceEnum.d.ts +2 -1
- package/esm/models/ServiceEnum.js +1 -0
- 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/device-credentials/DeviceCredentials.d.ts +46 -0
- package/esm/models/device-credentials/DeviceCredentials.js +1 -0
- package/esm/models/index.d.ts +1 -1
- package/esm/models/index.js +1 -1
- package/esm/node/RocosSDKNode.d.ts +2 -1
- package/esm/node/RocosSDKNode.js +7 -4
- package/esm/services/DeviceCredentialsService.d.ts +15 -0
- package/esm/services/DeviceCredentialsService.js +46 -0
- package/esm/services/MapService.d.ts +1 -1
- package/esm/services/MapService.js +1 -1
- package/esm/services/ProfileService.d.ts +2 -1
- package/esm/services/ProfileService.js +9 -3
- package/esm/services/TelemetryService.d.ts +10 -1
- package/esm/services/TelemetryService.js +28 -6
- package/esm/services/index.d.ts +1 -1
- package/esm/services/index.js +1 -1
- package/package.json +1 -2
- package/cjs/models/CallsignStatus.d.ts +0 -6
- package/cjs/models/CallsignStatus.js +0 -10
- package/cjs/services/FunctionService.d.ts +0 -68
- package/cjs/services/FunctionService.js +0 -103
- package/esm/models/CallsignStatus.d.ts +0 -6
- package/esm/models/CallsignStatus.js +0 -7
- package/esm/services/FunctionService.d.ts +0 -68
- package/esm/services/FunctionService.js +0 -99
@@ -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
@@ -5,9 +5,9 @@ export * from './CommandService';
|
|
5
5
|
export * from './ConfigGroupService';
|
6
6
|
export * from './ControlService';
|
7
7
|
export * from './DashboardService';
|
8
|
+
export * from './DeviceCredentialsService';
|
8
9
|
export * from './EventService';
|
9
10
|
export * from './FileAccessorService';
|
10
|
-
export * from './FunctionService';
|
11
11
|
export * from './IntegrationService';
|
12
12
|
export * from './ProfileService';
|
13
13
|
export * from './ProjectService';
|
package/cjs/services/index.js
CHANGED
@@ -21,9 +21,9 @@ __exportStar(require("./CommandService"), exports);
|
|
21
21
|
__exportStar(require("./ConfigGroupService"), exports);
|
22
22
|
__exportStar(require("./ControlService"), exports);
|
23
23
|
__exportStar(require("./DashboardService"), exports);
|
24
|
+
__exportStar(require("./DeviceCredentialsService"), exports);
|
24
25
|
__exportStar(require("./EventService"), exports);
|
25
26
|
__exportStar(require("./FileAccessorService"), exports);
|
26
|
-
__exportStar(require("./FunctionService"), exports);
|
27
27
|
__exportStar(require("./IntegrationService"), exports);
|
28
28
|
__exportStar(require("./ProfileService"), exports);
|
29
29
|
__exportStar(require("./ProjectService"), exports);
|
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, DeviceCredentialsService, 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;
|
@@ -28,6 +27,7 @@ export declare abstract class IRocosSDK {
|
|
28
27
|
abstract getSpotProvisionerService(): SpotProvisioningService | SpotProvisioningServiceNode;
|
29
28
|
abstract getIntegrationService(): IntegrationService;
|
30
29
|
abstract getEvaluatorService(): EvaluatorService;
|
30
|
+
abstract getDeviceCredentialsService(): DeviceCredentialsService;
|
31
31
|
abstract cleanup(): Promise<boolean>;
|
32
32
|
abstract enableDebugMode(on: boolean): void;
|
33
33
|
abstract setDebugLevel(level: IDebugLevel): void;
|
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, DeviceCredentialsService, 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';
|
@@ -19,7 +19,7 @@ export declare class RocosSDK implements IRocosSDK {
|
|
19
19
|
*/
|
20
20
|
getService<T extends IBaseService>(name: ServiceEnum): T;
|
21
21
|
/**
|
22
|
-
*
|
22
|
+
* Gets the authentication service.
|
23
23
|
*/
|
24
24
|
getAuthService(): AuthService;
|
25
25
|
/**
|
@@ -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
|
*/
|
@@ -130,6 +126,11 @@ export declare class RocosSDK implements IRocosSDK {
|
|
130
126
|
* @returns EvaluatorService
|
131
127
|
*/
|
132
128
|
getEvaluatorService(): EvaluatorService;
|
129
|
+
/**
|
130
|
+
* Gets the device credentials service.
|
131
|
+
* @returns DeviceCredentialsService
|
132
|
+
*/
|
133
|
+
getDeviceCredentialsService(): DeviceCredentialsService;
|
133
134
|
get platformTimeOffset(): number;
|
134
135
|
get platformTime(): number;
|
135
136
|
/**
|
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, DeviceCredentialsService, 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;
|
@@ -104,13 +101,16 @@ export class RocosSDK {
|
|
104
101
|
case ServiceEnum.EVALUATOR:
|
105
102
|
this.services[name] = new EvaluatorService(config);
|
106
103
|
break;
|
104
|
+
case ServiceEnum.DEVICE_CREDENTIALS:
|
105
|
+
this.services[name] = new DeviceCredentialsService(config);
|
106
|
+
break;
|
107
107
|
}
|
108
108
|
}
|
109
109
|
this.logger.debug(`Found service ${name}.`);
|
110
110
|
return this.services[name];
|
111
111
|
}
|
112
112
|
/**
|
113
|
-
*
|
113
|
+
* Gets the authentication service.
|
114
114
|
*/
|
115
115
|
getAuthService() {
|
116
116
|
return this.getService(ServiceEnum.AUTH);
|
@@ -175,12 +175,6 @@ export class RocosSDK {
|
|
175
175
|
getDashboardService() {
|
176
176
|
return this.getService(ServiceEnum.DASHBOARD);
|
177
177
|
}
|
178
|
-
/**
|
179
|
-
* Gets the function service
|
180
|
-
*/
|
181
|
-
getFunctionService() {
|
182
|
-
return this.getService(ServiceEnum.FUNCTION);
|
183
|
-
}
|
184
178
|
/**
|
185
179
|
* Gets the stream service
|
186
180
|
*/
|
@@ -273,6 +267,13 @@ export class RocosSDK {
|
|
273
267
|
getEvaluatorService() {
|
274
268
|
return this.getService(ServiceEnum.EVALUATOR);
|
275
269
|
}
|
270
|
+
/**
|
271
|
+
* Gets the device credentials service.
|
272
|
+
* @returns DeviceCredentialsService
|
273
|
+
*/
|
274
|
+
getDeviceCredentialsService() {
|
275
|
+
return this.getService(ServiceEnum.DEVICE_CREDENTIALS);
|
276
|
+
}
|
276
277
|
get platformTimeOffset() {
|
277
278
|
return PlatFormTimeService.getInstance(this.getTimeSyncerService())?.platformTimeOffset;
|
278
279
|
}
|
package/esm/constants/api.d.ts
CHANGED
@@ -82,8 +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
|
+
export declare const API_PROJECT_DEFINITION_EXPORT = "https://{url}/import-export/projects/{projectId}/robot-definitions/{definitionId}/export";
|
86
|
+
export declare const API_PROJECT_DEFINITION_IMPORT = "https://{url}/import-export/projects/{projectId}/robot-definitions/import";
|
87
87
|
export declare const API_PROJECT_GROUP_TYPE_URL = "https://{url}/projects/{projectId}/config-groups/{type}";
|
88
88
|
export declare const API_PROJECT_GROUP_TYPE_ID_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}";
|
89
89
|
export declare const API_PROJECT_GROUP_TYPE_PUBLISH_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/publish";
|
@@ -91,10 +91,6 @@ export declare const API_PROJECT_GROUP_TYPE_CONFIG_URL = "https://{url}/projects
|
|
91
91
|
export declare const API_PROJECT_GROUP_TYPE_VERSION_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{version}";
|
92
92
|
export declare const API_PROJECT_GROUP_TYPE_OWNER_ID_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/owner/{ownerId}";
|
93
93
|
export declare const API_PROJECT_GROUP_TYPE_OWNER_OVERRIDE_URL = "https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{ownerId}/override";
|
94
|
-
export declare const API_PROJECT_FUNCTION_URL = "https://{url}/projects/{projectId}/functions";
|
95
|
-
export declare const API_PROJECT_FUNCTION_ID_URL = "https://{url}/projects/{projectId}/functions/{functionId}";
|
96
|
-
export declare const API_PROJECT_FUNCTION_RUN_URL = "https://{url}/projects/{projectId}/functions/{functionId}/run";
|
97
|
-
export declare const API_PROJECT_FUNCTION_POD_URL = "https://{url}/projects/{projectId}/functions/{functionId}/pods";
|
98
94
|
export declare const API_PROJECT_EXPORT_URL = "https://{url}/projects/{projectId}/export-jobs";
|
99
95
|
export declare const API_PROJECT_STREAM_URL = "https://{url}/projects/{projectId}/streams";
|
100
96
|
export declare const API_PROJECT_STREAM_ID_URL = "https://{url}/projects/{projectId}/streams/{streamId}";
|
@@ -135,3 +131,5 @@ export declare const API_PROJECT_WORKFLOW_ID_URL = "https://{url}/projects/{proj
|
|
135
131
|
export declare const API_PROJECT_WORKFLOW_ASSET_URL = "https://{url}/projects/{projectId}/automate/flows/{workflowId}/assets";
|
136
132
|
export declare const API_PROJECT_DEPLOYED_WORKFLOW_URL = "https://{url}/projects/{projectId}/robots/{callsign}/automate/flows/deployments";
|
137
133
|
export declare const API_LINKED_PROJECT_URL = "https://{url}/linked-projects/{linkedProjectId}";
|
134
|
+
export declare const API_DEVICE_CREDENTIALS_URL = "https://{url}/projects/{projectId}/callsigns/{callsign}/device-credentials";
|
135
|
+
export declare const API_DEVICE_CREDENTIALS_AUTH_URL = "https://{url}/device-credentials/auth";
|
package/esm/constants/api.js
CHANGED
@@ -82,8 +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
|
+
export const API_PROJECT_DEFINITION_EXPORT = 'https://{url}/import-export/projects/{projectId}/robot-definitions/{definitionId}/export';
|
86
|
+
export const API_PROJECT_DEFINITION_IMPORT = 'https://{url}/import-export/projects/{projectId}/robot-definitions/import';
|
87
87
|
export const API_PROJECT_GROUP_TYPE_URL = 'https://{url}/projects/{projectId}/config-groups/{type}';
|
88
88
|
export const API_PROJECT_GROUP_TYPE_ID_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}';
|
89
89
|
export const API_PROJECT_GROUP_TYPE_PUBLISH_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/publish';
|
@@ -91,10 +91,6 @@ export const API_PROJECT_GROUP_TYPE_CONFIG_URL = 'https://{url}/projects/{projec
|
|
91
91
|
export const API_PROJECT_GROUP_TYPE_VERSION_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{version}';
|
92
92
|
export const API_PROJECT_GROUP_TYPE_OWNER_ID_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/owner/{ownerId}';
|
93
93
|
export const API_PROJECT_GROUP_TYPE_OWNER_OVERRIDE_URL = 'https://{url}/projects/{projectId}/config-groups/{type}/{configGroupId}/{ownerId}/override';
|
94
|
-
export const API_PROJECT_FUNCTION_URL = 'https://{url}/projects/{projectId}/functions';
|
95
|
-
export const API_PROJECT_FUNCTION_ID_URL = 'https://{url}/projects/{projectId}/functions/{functionId}';
|
96
|
-
export const API_PROJECT_FUNCTION_RUN_URL = 'https://{url}/projects/{projectId}/functions/{functionId}/run';
|
97
|
-
export const API_PROJECT_FUNCTION_POD_URL = 'https://{url}/projects/{projectId}/functions/{functionId}/pods';
|
98
94
|
export const API_PROJECT_EXPORT_URL = 'https://{url}/projects/{projectId}/export-jobs';
|
99
95
|
export const API_PROJECT_STREAM_URL = 'https://{url}/projects/{projectId}/streams';
|
100
96
|
export const API_PROJECT_STREAM_ID_URL = 'https://{url}/projects/{projectId}/streams/{streamId}';
|
@@ -135,3 +131,5 @@ export const API_PROJECT_WORKFLOW_ID_URL = 'https://{url}/projects/{projectId}/a
|
|
135
131
|
export const API_PROJECT_WORKFLOW_ASSET_URL = 'https://{url}/projects/{projectId}/automate/flows/{workflowId}/assets';
|
136
132
|
export const API_PROJECT_DEPLOYED_WORKFLOW_URL = 'https://{url}/projects/{projectId}/robots/{callsign}/automate/flows/deployments';
|
137
133
|
export const API_LINKED_PROJECT_URL = 'https://{url}/linked-projects/{linkedProjectId}';
|
134
|
+
export const API_DEVICE_CREDENTIALS_URL = 'https://{url}/projects/{projectId}/callsigns/{callsign}/device-credentials';
|
135
|
+
export const API_DEVICE_CREDENTIALS_AUTH_URL = 'https://{url}/device-credentials/auth';
|
package/esm/models/RocosError.js
CHANGED
@@ -24,6 +24,7 @@ export const errorCodes = {
|
|
24
24
|
MAPS_SERVICE_ERROR: 'MAPS_SERVICE_ERROR',
|
25
25
|
EVALUATOR_SERVICE_ERROR: 'EVALUATOR_SERVICE_ERROR',
|
26
26
|
WEBRTC_SERVICE_ERROR: 'WEBRTC_SERVICE_ERROR',
|
27
|
+
DEVICE_CREDENTIALS_SERVICE_ERROR: 'DEVICE_CREDENTIALS_SERVICE_ERROR',
|
27
28
|
};
|
28
29
|
export class RocosError extends Error {
|
29
30
|
constructor(err, code, statusCode) {
|
@@ -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
|
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
export interface DeviceCredentials {
|
2
|
+
[component: string]: {
|
3
|
+
[system: string]: DeviceCredential;
|
4
|
+
};
|
5
|
+
}
|
6
|
+
export interface DeviceCredential {
|
7
|
+
/**
|
8
|
+
* Device ID or username
|
9
|
+
*/
|
10
|
+
id: string;
|
11
|
+
/**
|
12
|
+
* Device secret or password
|
13
|
+
*/
|
14
|
+
key: string;
|
15
|
+
}
|
16
|
+
export interface DeviceCredentialCreate {
|
17
|
+
/**
|
18
|
+
* Will automatically be generated if not provided
|
19
|
+
*/
|
20
|
+
id?: string;
|
21
|
+
/**
|
22
|
+
* Will automatically be generated if not provided
|
23
|
+
*/
|
24
|
+
key?: string;
|
25
|
+
/**
|
26
|
+
* The agent component the credentials are for e.g. dji, spot, etc.
|
27
|
+
*/
|
28
|
+
component: string;
|
29
|
+
/**
|
30
|
+
* The system the credentials are for e.g. mqtt, rtmp, etc.
|
31
|
+
*/
|
32
|
+
system: string;
|
33
|
+
}
|
34
|
+
export interface DeviceCredentialAuth extends DeviceCredential {
|
35
|
+
/**
|
36
|
+
* The agent component the credentials are for e.g. dji, spot, etc.
|
37
|
+
*/
|
38
|
+
component: string;
|
39
|
+
/**
|
40
|
+
* The system the credentials are for e.g. mqtt, rtmp, etc.
|
41
|
+
*/
|
42
|
+
system: string;
|
43
|
+
}
|
44
|
+
export interface DeviceCredentialAuthResult {
|
45
|
+
result: 'allow' | 'deny';
|
46
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
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';
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { EvaluatorService, ScheduleService } from '../services';
|
1
|
+
import { DeviceCredentialsService, EvaluatorService, ScheduleService } from '../services';
|
2
2
|
import { IBaseService, ServiceEnum } from '../models';
|
3
3
|
import { CallerServiceNode } from '../services/CallerServiceNode';
|
4
4
|
import { CommandServiceNode } from '../services/CommandServiceNode';
|
@@ -48,4 +48,5 @@ export declare class RocosSDKNode extends RocosSDK {
|
|
48
48
|
* @deprecated Not supported in Node.js
|
49
49
|
*/
|
50
50
|
getRTPWebRTCService(): never;
|
51
|
+
getDeviceCredentialsService(): DeviceCredentialsService;
|
51
52
|
}
|
package/esm/node/RocosSDKNode.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { AssetStorageService, AuthService, ConfigGroupService, DashboardService,
|
1
|
+
import { AssetStorageService, AuthService, ConfigGroupService, DashboardService, DeviceCredentialsService, 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;
|
@@ -81,6 +78,9 @@ export class RocosSDKNode extends RocosSDK {
|
|
81
78
|
case ServiceEnum.MAP:
|
82
79
|
this.services[name] = new MapService(config);
|
83
80
|
break;
|
81
|
+
case ServiceEnum.DEVICE_CREDENTIALS:
|
82
|
+
this.services[name] = new DeviceCredentialsService(config);
|
83
|
+
break;
|
84
84
|
}
|
85
85
|
}
|
86
86
|
this.logger.debug(`Found service ${name}.`);
|
@@ -143,4 +143,7 @@ export class RocosSDKNode extends RocosSDK {
|
|
143
143
|
getRTPWebRTCService() {
|
144
144
|
throw new Error('WebRTC service is not supported in NodeJS');
|
145
145
|
}
|
146
|
+
getDeviceCredentialsService() {
|
147
|
+
return this.getService(ServiceEnum.DEVICE_CREDENTIALS);
|
148
|
+
}
|
146
149
|
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { DeviceCredentialAuth, DeviceCredentialAuthResult, DeviceCredentialCreate, DeviceCredentials } from '../models/device-credentials/DeviceCredentials';
|
2
|
+
import { IBaseService, IRocosSDKConfig, RocosError } from '../models';
|
3
|
+
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
4
|
+
/**
|
5
|
+
* Manage external devices authenticating with the platform
|
6
|
+
*/
|
7
|
+
export declare class DeviceCredentialsService extends BaseServiceAbstract implements IBaseService {
|
8
|
+
constructor(config: IRocosSDKConfig);
|
9
|
+
getStatus(): boolean;
|
10
|
+
protected getError(e: Error): RocosError;
|
11
|
+
list(projectId: string, callsign: string): Promise<DeviceCredentials>;
|
12
|
+
create(projectId: string, callsign: string, credentials: DeviceCredentialCreate): Promise<DeviceCredentialCreate>;
|
13
|
+
delete(projectId: string, callsign: string, component: string, system: string): Promise<void>;
|
14
|
+
auth(credentials: DeviceCredentialAuth): Promise<DeviceCredentialAuthResult>;
|
15
|
+
}
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import { API_DEVICE_CREDENTIALS_AUTH_URL, API_DEVICE_CREDENTIALS_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
|
+
* Manage external devices authenticating with the platform
|
8
|
+
*/
|
9
|
+
export class DeviceCredentialsService extends BaseServiceAbstract {
|
10
|
+
constructor(config) {
|
11
|
+
super(config);
|
12
|
+
this.logger = RocosLogger.getInstance(`DeviceCredentials(${this.config.url})`);
|
13
|
+
}
|
14
|
+
getStatus() {
|
15
|
+
return true;
|
16
|
+
}
|
17
|
+
getError(e) {
|
18
|
+
return new RocosError(e, errorCodes.DEVICE_CREDENTIALS_SERVICE_ERROR);
|
19
|
+
}
|
20
|
+
list(projectId, callsign) {
|
21
|
+
return this.callGet(formatServiceUrl(API_DEVICE_CREDENTIALS_URL, {
|
22
|
+
url: this.config.url,
|
23
|
+
projectId,
|
24
|
+
callsign,
|
25
|
+
}, this.config.insecure), 'Failed to get device credentials.');
|
26
|
+
}
|
27
|
+
create(projectId, callsign, credentials) {
|
28
|
+
return this.callPost(formatServiceUrl(API_DEVICE_CREDENTIALS_URL, {
|
29
|
+
url: this.config.url,
|
30
|
+
projectId,
|
31
|
+
callsign,
|
32
|
+
}, this.config.insecure), credentials, 'Failed to create device credentials.');
|
33
|
+
}
|
34
|
+
delete(projectId, callsign, component, system) {
|
35
|
+
return this.callDelete(formatServiceUrl(API_DEVICE_CREDENTIALS_URL, {
|
36
|
+
url: this.config.url,
|
37
|
+
projectId,
|
38
|
+
callsign,
|
39
|
+
}, this.config.insecure), 'Failed to delete device credentials.', { component, system });
|
40
|
+
}
|
41
|
+
auth(credentials) {
|
42
|
+
return this.callPost(formatServiceUrl(API_DEVICE_CREDENTIALS_AUTH_URL, {
|
43
|
+
url: this.config.url,
|
44
|
+
}, this.config.insecure), credentials, 'Failed to delete device credentials.');
|
45
|
+
}
|
46
|
+
}
|
@@ -2,7 +2,7 @@ import { IBaseService, IRocosSDKConfig, Map, RocosError } from '../models';
|
|
2
2
|
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
3
3
|
import { Observation } from '../models/maps/Panorama';
|
4
4
|
/**
|
5
|
-
*
|
5
|
+
* Maps service for managing robot maps in the cloud and on robots
|
6
6
|
*/
|
7
7
|
export declare class MapService extends BaseServiceAbstract implements IBaseService {
|
8
8
|
constructor(config: IRocosSDKConfig);
|
@@ -4,7 +4,7 @@ import { BaseServiceAbstract } from './BaseServiceAbstract';
|
|
4
4
|
import { RocosLogger } from '../logger/RocosLogger';
|
5
5
|
import { formatServiceUrl } from '../helpers/formatServiceUrl';
|
6
6
|
/**
|
7
|
-
*
|
7
|
+
* Maps service for managing robot maps in the cloud and on robots
|
8
8
|
*/
|
9
9
|
export class MapService extends BaseServiceAbstract {
|
10
10
|
constructor(config) {
|
@@ -249,10 +249,11 @@ export declare class ProfileService extends BaseServiceAbstract implements IBase
|
|
249
249
|
* @param projectId - Project Id
|
250
250
|
* @param profileData - Robot definition data
|
251
251
|
* @param newName - Optional new name for the robot definition. If not provided, the name from the imported definition will be used.
|
252
|
+
* @param newDescription - Optional new description for the robot definition. If not provided, the description from the imported definition will be used.
|
252
253
|
*
|
253
254
|
* @see export
|
254
255
|
*/
|
255
|
-
import(projectId: string, profileData:
|
256
|
+
import(projectId: string, profileData: Blob | File, newName?: string, newDescription?: string): Promise<{
|
256
257
|
profileId: string;
|
257
258
|
}>;
|
258
259
|
/**
|
@@ -364,14 +364,20 @@ export class ProfileService extends BaseServiceAbstract {
|
|
364
364
|
* @param projectId - Project Id
|
365
365
|
* @param profileData - Robot definition data
|
366
366
|
* @param newName - Optional new name for the robot definition. If not provided, the name from the imported definition will be used.
|
367
|
+
* @param newDescription - Optional new description for the robot definition. If not provided, the description from the imported definition will be used.
|
367
368
|
*
|
368
369
|
* @see export
|
369
370
|
*/
|
370
|
-
async import(projectId, profileData, newName) {
|
371
|
+
async import(projectId, profileData, newName, newDescription) {
|
372
|
+
const formData = new FormData();
|
371
373
|
if (newName) {
|
372
|
-
|
374
|
+
formData.append('name', newName);
|
373
375
|
}
|
374
|
-
|
376
|
+
if (newDescription) {
|
377
|
+
formData.append('description', newDescription);
|
378
|
+
}
|
379
|
+
formData.append('file', profileData);
|
380
|
+
return this.callPost(formatServiceUrl(API_PROJECT_DEFINITION_IMPORT, { url: this.config.url, projectId }, this.config.insecure), formData, `Failed to import robot definition for ${projectId}.`);
|
375
381
|
}
|
376
382
|
/**
|
377
383
|
* Update gamepads for a robot definition
|