@dronedeploy/rocos-js-sdk 3.0.1-alpha.5 → 3.0.1-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/cjs/RocosSDK.d.ts +2 -1
  2. package/cjs/RocosSDK.js +38 -26
  3. package/cjs/api/streams/caller/CallerStream.js +2 -1
  4. package/cjs/api/streams/command/CommandStream.js +2 -1
  5. package/cjs/api/streams/control/ControlStream.js +2 -1
  6. package/cjs/api/streams/fileAccessor/FileAccessorStream.js +2 -1
  7. package/cjs/api/streams/search/SearchStream.js +2 -1
  8. package/cjs/api/streams/telemetry/TelemetryStream.js +2 -1
  9. package/cjs/api/streams/webRTCSignalling/WebRTCSignallingStream.js +2 -1
  10. package/cjs/constants/api.d.ts +1 -0
  11. package/cjs/constants/api.js +2 -1
  12. package/cjs/helpers/getSha256Hex.d.ts +1 -0
  13. package/cjs/helpers/getSha256Hex.js +9 -0
  14. package/cjs/helpers/getSha256Hex.spec.d.ts +1 -0
  15. package/cjs/helpers/getSha256Hex.spec.js +19 -0
  16. package/cjs/helpers/getSha256HexNode.d.ts +1 -0
  17. package/cjs/helpers/getSha256HexNode.js +13 -0
  18. package/cjs/helpers/getSha256HexNode.spec.d.ts +1 -0
  19. package/cjs/helpers/getSha256HexNode.spec.js +10 -0
  20. package/cjs/models/IRocosSDKConfig.d.ts +8 -4
  21. package/cjs/models/workflow/Workflow.d.ts +69 -11
  22. package/cjs/node/RocosSDKNode.d.ts +1 -2
  23. package/cjs/node/RocosSDKNode.js +54 -65
  24. package/cjs/services/AssetStorageService.js +1 -1
  25. package/cjs/services/BaseStreamService.js +2 -0
  26. package/cjs/services/WorkflowService.d.ts +11 -16
  27. package/cjs/services/WorkflowService.js +32 -15
  28. package/cjs/services/WorkflowServiceNode.d.ts +4 -0
  29. package/cjs/services/WorkflowServiceNode.js +12 -0
  30. package/esm/RocosSDK.d.ts +2 -1
  31. package/esm/RocosSDK.js +38 -26
  32. package/esm/api/streams/caller/CallerStream.js +2 -1
  33. package/esm/api/streams/command/CommandStream.js +2 -1
  34. package/esm/api/streams/control/ControlStream.js +2 -1
  35. package/esm/api/streams/fileAccessor/FileAccessorStream.js +2 -1
  36. package/esm/api/streams/search/SearchStream.js +2 -1
  37. package/esm/api/streams/telemetry/TelemetryStream.js +2 -1
  38. package/esm/api/streams/webRTCSignalling/WebRTCSignallingStream.js +2 -1
  39. package/esm/constants/api.d.ts +1 -0
  40. package/esm/constants/api.js +1 -0
  41. package/esm/helpers/getSha256Hex.d.ts +1 -0
  42. package/esm/helpers/getSha256Hex.js +5 -0
  43. package/esm/helpers/getSha256Hex.spec.d.ts +1 -0
  44. package/esm/helpers/getSha256Hex.spec.js +14 -0
  45. package/esm/helpers/getSha256HexNode.d.ts +1 -0
  46. package/esm/helpers/getSha256HexNode.js +6 -0
  47. package/esm/helpers/getSha256HexNode.spec.d.ts +1 -0
  48. package/esm/helpers/getSha256HexNode.spec.js +8 -0
  49. package/esm/models/IRocosSDKConfig.d.ts +8 -4
  50. package/esm/models/workflow/Workflow.d.ts +69 -11
  51. package/esm/node/RocosSDKNode.d.ts +1 -2
  52. package/esm/node/RocosSDKNode.js +26 -37
  53. package/esm/services/AssetStorageService.js +3 -3
  54. package/esm/services/BaseStreamService.js +2 -0
  55. package/esm/services/WorkflowService.d.ts +11 -16
  56. package/esm/services/WorkflowService.js +33 -16
  57. package/esm/services/WorkflowServiceNode.d.ts +4 -0
  58. package/esm/services/WorkflowServiceNode.js +8 -0
  59. package/package.json +1 -1
@@ -2,98 +2,87 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RocosSDKNode = void 0;
4
4
  const services_1 = require("../services");
5
- const AssetStorageService_1 = require("../services/AssetStorageService");
6
- const AuthService_1 = require("../services/AuthService");
5
+ const models_1 = require("../models");
7
6
  const CallerServiceNode_1 = require("../services/CallerServiceNode");
8
7
  const CommandServiceNode_1 = require("../services/CommandServiceNode");
9
- const ConfigGroupService_1 = require("../services/ConfigGroupService");
10
8
  const ControlServiceNode_1 = require("../services/ControlServiceNode");
11
- const DashboardService_1 = require("../services/DashboardService");
12
- const EventService_1 = require("../services/EventService");
13
9
  const FileAccessorServiceNode_1 = require("../services/FileAccessorServiceNode");
14
- const FunctionService_1 = require("../services/FunctionService");
15
- const IntegrationService_1 = require("../services/IntegrationService");
16
- const ProfileService_1 = require("../services/ProfileService");
17
- const ProjectService_1 = require("../services/ProjectService");
18
- const RobotService_1 = require("../services/RobotService");
19
10
  const RocosSDK_1 = require("../RocosSDK");
20
11
  const SearchServiceNode_1 = require("../services/SearchServiceNode");
21
- const ServiceEnum_1 = require("../models/ServiceEnum");
22
- const StreamService_1 = require("../services/StreamService");
23
12
  const TelemetryServiceNode_1 = require("../services/TelemetryServiceNode");
24
- const UserService_1 = require("../services/UserService");
25
- const WorkflowService_1 = require("../services/WorkflowService");
13
+ const WorkflowServiceNode_1 = require("../services/WorkflowServiceNode");
26
14
  class RocosSDKNode extends RocosSDK_1.RocosSDK {
27
15
  // eslint-disable-next-line max-lines-per-function
28
16
  getService(name) {
29
17
  if (!this.services?.[name]) {
30
18
  this.logger.info(`Service ${name} does not exist, creating it now.`);
19
+ const config = this.overrideConfig(name);
31
20
  switch (name) {
32
- case ServiceEnum_1.ServiceEnum.AUTH:
33
- this.services[name] = new AuthService_1.AuthService(this.config);
21
+ case models_1.ServiceEnum.AUTH:
22
+ this.services[name] = new services_1.AuthService(config);
34
23
  break;
35
- case ServiceEnum_1.ServiceEnum.TELEMETRY:
36
- this.services[name] = new TelemetryServiceNode_1.TelemetryServiceNode(this.config);
24
+ case models_1.ServiceEnum.TELEMETRY:
25
+ this.services[name] = new TelemetryServiceNode_1.TelemetryServiceNode(config);
37
26
  break;
38
- case ServiceEnum_1.ServiceEnum.ROBOT:
39
- this.services[name] = new RobotService_1.RobotService(this.config);
27
+ case models_1.ServiceEnum.ROBOT:
28
+ this.services[name] = new services_1.RobotService(config);
40
29
  break;
41
- case ServiceEnum_1.ServiceEnum.EVENT:
42
- this.services[name] = new EventService_1.EventService(this.config);
30
+ case models_1.ServiceEnum.EVENT:
31
+ this.services[name] = new services_1.EventService(config);
43
32
  break;
44
- case ServiceEnum_1.ServiceEnum.PROJECT:
45
- this.services[name] = new ProjectService_1.ProjectService(this.config);
33
+ case models_1.ServiceEnum.PROJECT:
34
+ this.services[name] = new services_1.ProjectService(config);
46
35
  break;
47
- case ServiceEnum_1.ServiceEnum.CALLER:
48
- this.services[name] = new CallerServiceNode_1.CallerServiceNode(this.config);
36
+ case models_1.ServiceEnum.CALLER:
37
+ this.services[name] = new CallerServiceNode_1.CallerServiceNode(config);
49
38
  break;
50
- case ServiceEnum_1.ServiceEnum.COMMAND:
51
- this.services[name] = new CommandServiceNode_1.CommandServiceNode(this.config);
39
+ case models_1.ServiceEnum.COMMAND:
40
+ this.services[name] = new CommandServiceNode_1.CommandServiceNode(config);
52
41
  break;
53
- case ServiceEnum_1.ServiceEnum.CONTROL:
54
- this.services[name] = new ControlServiceNode_1.ControlServiceNode(this.config);
42
+ case models_1.ServiceEnum.CONTROL:
43
+ this.services[name] = new ControlServiceNode_1.ControlServiceNode(config);
55
44
  break;
56
- case ServiceEnum_1.ServiceEnum.SEARCH:
57
- this.services[name] = new SearchServiceNode_1.SearchServiceNode(this.config);
45
+ case models_1.ServiceEnum.SEARCH:
46
+ this.services[name] = new SearchServiceNode_1.SearchServiceNode(config);
58
47
  break;
59
- case ServiceEnum_1.ServiceEnum.CONFIG_GROUP:
60
- this.services[name] = new ConfigGroupService_1.ConfigGroupService(this.config);
48
+ case models_1.ServiceEnum.CONFIG_GROUP:
49
+ this.services[name] = new services_1.ConfigGroupService(config);
61
50
  break;
62
- case ServiceEnum_1.ServiceEnum.DASHBOARD:
63
- this.services[name] = new DashboardService_1.DashboardService(this.config);
51
+ case models_1.ServiceEnum.DASHBOARD:
52
+ this.services[name] = new services_1.DashboardService(config);
64
53
  break;
65
- case ServiceEnum_1.ServiceEnum.FUNCTION:
66
- this.services[name] = new FunctionService_1.FunctionService(this.config);
54
+ case models_1.ServiceEnum.FUNCTION:
55
+ this.services[name] = new services_1.FunctionService(config);
67
56
  break;
68
- case ServiceEnum_1.ServiceEnum.STREAM:
69
- this.services[name] = new StreamService_1.StreamService(this.config);
57
+ case models_1.ServiceEnum.STREAM:
58
+ this.services[name] = new services_1.StreamService(config);
70
59
  break;
71
- case ServiceEnum_1.ServiceEnum.USER:
72
- this.services[name] = new UserService_1.UserService(this.config);
60
+ case models_1.ServiceEnum.USER:
61
+ this.services[name] = new services_1.UserService(config);
73
62
  break;
74
- case ServiceEnum_1.ServiceEnum.WORKFLOW:
75
- this.services[name] = new WorkflowService_1.WorkflowService(this.config);
63
+ case models_1.ServiceEnum.WORKFLOW:
64
+ this.services[name] = new WorkflowServiceNode_1.WorkflowServiceNode(config);
76
65
  break;
77
- case ServiceEnum_1.ServiceEnum.ASSET_STORAGE:
78
- this.services[name] = new AssetStorageService_1.AssetStorageService(this.config);
66
+ case models_1.ServiceEnum.ASSET_STORAGE:
67
+ this.services[name] = new services_1.AssetStorageService(config);
79
68
  break;
80
- case ServiceEnum_1.ServiceEnum.PROFILE:
81
- this.services[name] = new ProfileService_1.ProfileService(this.config);
69
+ case models_1.ServiceEnum.PROFILE:
70
+ this.services[name] = new services_1.ProfileService(config);
82
71
  break;
83
- case ServiceEnum_1.ServiceEnum.FILE_ACCESSOR:
84
- this.services[name] = new FileAccessorServiceNode_1.FileAccessorServiceNode(this.config);
72
+ case models_1.ServiceEnum.FILE_ACCESSOR:
73
+ this.services[name] = new FileAccessorServiceNode_1.FileAccessorServiceNode(config);
85
74
  break;
86
- case ServiceEnum_1.ServiceEnum.SPOT_PROVISIONER:
87
- this.services[name] = new services_1.SpotProvisioningServiceNode(this.config);
75
+ case models_1.ServiceEnum.SPOT_PROVISIONER:
76
+ this.services[name] = new services_1.SpotProvisioningServiceNode(config);
88
77
  break;
89
- case ServiceEnum_1.ServiceEnum.SCHEDULE:
90
- this.services[name] = new services_1.ScheduleService(this.config);
78
+ case models_1.ServiceEnum.SCHEDULE:
79
+ this.services[name] = new services_1.ScheduleService(config);
91
80
  break;
92
- case ServiceEnum_1.ServiceEnum.INTEGRATION:
93
- this.services[name] = new IntegrationService_1.IntegrationService(this.config);
81
+ case models_1.ServiceEnum.INTEGRATION:
82
+ this.services[name] = new services_1.IntegrationService(config);
94
83
  break;
95
- case ServiceEnum_1.ServiceEnum.MAP:
96
- this.services[name] = new services_1.MapService(this.config);
84
+ case models_1.ServiceEnum.MAP:
85
+ this.services[name] = new services_1.MapService(config);
97
86
  break;
98
87
  }
99
88
  }
@@ -104,44 +93,44 @@ class RocosSDKNode extends RocosSDK_1.RocosSDK {
104
93
  * Gets the telemetry service.
105
94
  */
106
95
  getTelemetryService() {
107
- return this.getService(ServiceEnum_1.ServiceEnum.TELEMETRY);
96
+ return this.getService(models_1.ServiceEnum.TELEMETRY);
108
97
  }
109
98
  /**
110
99
  * Gets the scheduler service.
111
100
  */
112
101
  getSchedulerService() {
113
- return this.getService(ServiceEnum_1.ServiceEnum.SCHEDULE);
102
+ return this.getService(models_1.ServiceEnum.SCHEDULE);
114
103
  }
115
104
  /**
116
105
  * Gets the service call service.
117
106
  */
118
107
  getCallerService() {
119
- return this.getService(ServiceEnum_1.ServiceEnum.CALLER);
108
+ return this.getService(models_1.ServiceEnum.CALLER);
120
109
  }
121
110
  /**
122
111
  * Gets the command service.
123
112
  */
124
113
  getCommandService() {
125
- return this.getService(ServiceEnum_1.ServiceEnum.COMMAND);
114
+ return this.getService(models_1.ServiceEnum.COMMAND);
126
115
  }
127
116
  /**
128
117
  * Gets the robot control service.
129
118
  */
130
119
  getControlService() {
131
- return this.getService(ServiceEnum_1.ServiceEnum.CONTROL);
120
+ return this.getService(models_1.ServiceEnum.CONTROL);
132
121
  }
133
122
  /**
134
123
  * Gets the search service.
135
124
  */
136
125
  getSearchService() {
137
- return this.getService(ServiceEnum_1.ServiceEnum.SEARCH);
126
+ return this.getService(models_1.ServiceEnum.SEARCH);
138
127
  }
139
128
  /**
140
129
  * Gets the file accessor service
141
130
  * @returns FileAccessorServiceNode
142
131
  */
143
132
  getFileAccessorService() {
144
- return this.getService(ServiceEnum_1.ServiceEnum.FILE_ACCESSOR);
133
+ return this.getService(models_1.ServiceEnum.FILE_ACCESSOR);
145
134
  }
146
135
  /**
147
136
  * Gets the evaluator service
@@ -211,7 +211,7 @@ class AssetStorageService extends BaseServiceAbstract_1.BaseServiceAbstract {
211
211
  * @param integration
212
212
  */
213
213
  updateSyncIntegration(projectId, integrationId, integration) {
214
- return this.callPut((0, formatServiceUrl_1.formatServiceUrl)(api_1.API_PROJECT_ASSET_INTEGRATION_PATH_URL, { url: this.config.url, projectId, integrationId: integrationId }, this.config.insecure), integration, `Failed to update asset sync integrations for ${projectId}.`);
214
+ return this.callPut((0, formatServiceUrl_1.formatServiceUrl)(api_1.API_PROJECT_ASSET_INTEGRATION_PATH_URL, { url: this.config.url, projectId, integrationId }, this.config.insecure), integration, `Failed to update asset sync integrations for ${projectId}.`);
215
215
  }
216
216
  /**
217
217
  * Delete a Sync Integration
@@ -17,6 +17,8 @@ class BaseStreamService {
17
17
  return this.status;
18
18
  }
19
19
  async initStream(stream) {
20
+ if (this.config.insecure)
21
+ return; // no need to init auth for insecure connections
20
22
  const authService = RocosStore_1.RocosStore.getSDKInstance(this.config).getAuthService();
21
23
  if (!this.config.token || !authService.isTokenValid(new models_1.Token(this.config.token))) {
22
24
  try {
@@ -1,5 +1,5 @@
1
- import { RocosError } from '../models/RocosError';
2
1
  import type { Workflow, WorkflowBase } from '../models/workflow/Workflow';
2
+ import { RocosError } from '../models/RocosError';
3
3
  import { BaseServiceAbstract } from './BaseServiceAbstract';
4
4
  import { IBaseService } from '../models/IBaseService';
5
5
  import { IRocosSDKConfig } from '../models/IRocosSDKConfig';
@@ -13,11 +13,6 @@ export declare class WorkflowService extends BaseServiceAbstract implements IBas
13
13
  * @param projectId - Project Id
14
14
  */
15
15
  list(projectId: string): Promise<Workflow[]>;
16
- /**
17
- * @deprecated This method is deprecated and will be removed in a future version.
18
- * Use list instead.
19
- */
20
- getAll: (projectId: string) => Promise<Workflow[]>;
21
16
  /**
22
17
  * Create a workflow
23
18
  *
@@ -32,11 +27,6 @@ export declare class WorkflowService extends BaseServiceAbstract implements IBas
32
27
  * @param workflowId - Workflow Id
33
28
  */
34
29
  get(projectId: string, workflowId: string): Promise<Workflow>;
35
- /**
36
- * @deprecated This method is deprecated and will be removed in a future version.
37
- * Use get instead.
38
- */
39
- getOne: (projectId: string, workflowId: string) => Promise<Workflow>;
40
30
  /**
41
31
  * Update a workflow
42
32
  *
@@ -45,6 +35,16 @@ export declare class WorkflowService extends BaseServiceAbstract implements IBas
45
35
  * @param model - Workflow
46
36
  */
47
37
  update(projectId: string, workflowId: string, model: Workflow): Promise<Workflow>;
38
+ /**
39
+ * Upload workflow asset
40
+ *
41
+ * @param projectId - Project Id
42
+ * @param workflowId - Workflow Id
43
+ * @param fileName - Name of file including extension
44
+ * @param arrayBuffer - data to upload
45
+ */
46
+ uploadAsset(projectId: string, workflowId: string, fileName: string, arrayBuffer: ArrayBuffer): Promise<void>;
47
+ protected uploadAssetWithHash(projectId: string, workflowId: string, fileName: string, arrayBuffer: ArrayBuffer, hash: string): Promise<void>;
48
48
  /**
49
49
  * Delete a workflow
50
50
  *
@@ -59,9 +59,4 @@ export declare class WorkflowService extends BaseServiceAbstract implements IBas
59
59
  * @param callsign - Robot callsign
60
60
  */
61
61
  getDeployedWorkflows(projectId: string, callsign: string): Promise<Workflow[]>;
62
- /**
63
- * @deprecated This method is deprecated and will be removed in a future version.
64
- * Use getDeployedWorkflow instead.
65
- */
66
- getDeployedOnRobot: (projectId: string, callsign: string) => Promise<Workflow[]>;
67
62
  }
@@ -6,24 +6,10 @@ const RocosError_1 = require("../models/RocosError");
6
6
  const BaseServiceAbstract_1 = require("./BaseServiceAbstract");
7
7
  const RocosLogger_1 = require("../logger/RocosLogger");
8
8
  const formatServiceUrl_1 = require("../helpers/formatServiceUrl");
9
+ const getSha256Hex_1 = require("../helpers/getSha256Hex");
9
10
  class WorkflowService extends BaseServiceAbstract_1.BaseServiceAbstract {
10
11
  constructor(config) {
11
12
  super(config);
12
- /**
13
- * @deprecated This method is deprecated and will be removed in a future version.
14
- * Use list instead.
15
- */
16
- this.getAll = this.list;
17
- /**
18
- * @deprecated This method is deprecated and will be removed in a future version.
19
- * Use get instead.
20
- */
21
- this.getOne = this.get;
22
- /**
23
- * @deprecated This method is deprecated and will be removed in a future version.
24
- * Use getDeployedWorkflow instead.
25
- */
26
- this.getDeployedOnRobot = this.getDeployedWorkflows;
27
13
  this.logger = RocosLogger_1.RocosLogger.getInstance(`WorkflowService(${this.config.url})`);
28
14
  }
29
15
  getError(e) {
@@ -68,6 +54,37 @@ class WorkflowService extends BaseServiceAbstract_1.BaseServiceAbstract {
68
54
  async update(projectId, workflowId, model) {
69
55
  return this.callPut((0, formatServiceUrl_1.formatServiceUrl)(api_1.API_PROJECT_WORKFLOW_ID_URL, { url: this.config.url, projectId, workflowId }, this.config.insecure), model, `Failed to update workflow for ${projectId}, workflowId ${workflowId}.`);
70
56
  }
57
+ /**
58
+ * Upload workflow asset
59
+ *
60
+ * @param projectId - Project Id
61
+ * @param workflowId - Workflow Id
62
+ * @param fileName - Name of file including extension
63
+ * @param arrayBuffer - data to upload
64
+ */
65
+ async uploadAsset(projectId, workflowId, fileName, arrayBuffer) {
66
+ const hash = await (0, getSha256Hex_1.getSha256Hex)(arrayBuffer);
67
+ return this.uploadAssetWithHash(projectId, workflowId, fileName, arrayBuffer, hash);
68
+ }
69
+ async uploadAssetWithHash(projectId, workflowId, fileName, arrayBuffer, hash) {
70
+ // Get asset upload link
71
+ const createAssetResponse = await this.callPost((0, formatServiceUrl_1.formatServiceUrl)(api_1.API_PROJECT_WORKFLOW_ASSET_URL, { url: this.config.url, projectId, workflowId }, this.config.insecure), { name: fileName, type: 'file', hash }, `Failed to create asset for ${projectId}, workflowId ${workflowId}.`);
72
+ const { postContentLink } = createAssetResponse;
73
+ if (!postContentLink)
74
+ throw new Error('postContentLink is undefined');
75
+ // Get Google upload location
76
+ const postFileResponse = await fetch(postContentLink, {
77
+ method: 'POST',
78
+ headers: { 'x-goog-resumable': 'start' },
79
+ });
80
+ const putLocation = postFileResponse.headers.get('location');
81
+ if (!putLocation)
82
+ throw new Error('putLocation is undefined');
83
+ // Upload file to Google
84
+ const uploadResponse = await fetch(putLocation, { method: 'PUT', body: arrayBuffer });
85
+ if (uploadResponse.status !== 200)
86
+ throw new Error(`Failed to upload file: ${uploadResponse.statusText}`);
87
+ }
71
88
  /**
72
89
  * Delete a workflow
73
90
  *
@@ -0,0 +1,4 @@
1
+ import { WorkflowService } from './WorkflowService';
2
+ export declare class WorkflowServiceNode extends WorkflowService {
3
+ uploadAsset(projectId: string, workflowId: string, fileName: string, arrayBuffer: ArrayBuffer): Promise<void>;
4
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WorkflowServiceNode = void 0;
4
+ const WorkflowService_1 = require("./WorkflowService");
5
+ const getSha256HexNode_1 = require("../helpers/getSha256HexNode");
6
+ class WorkflowServiceNode extends WorkflowService_1.WorkflowService {
7
+ async uploadAsset(projectId, workflowId, fileName, arrayBuffer) {
8
+ const hash = await (0, getSha256HexNode_1.getSha256HexNode)(arrayBuffer);
9
+ return this.uploadAssetWithHash(projectId, workflowId, fileName, arrayBuffer, hash);
10
+ }
11
+ }
12
+ exports.WorkflowServiceNode = WorkflowServiceNode;
package/esm/RocosSDK.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { AssetStorageService, AuthService, CallerService, CommandService, ConfigGroupService, ControlService, DashboardService, EvaluatorService, EventService, FileAccessorService, FunctionService, IntegrationService, MapService, ProfileService, ProjectService, RTPWebRTCService, RobotService, ScheduleService, SearchService, SpotProvisioningService, StreamService, TelemetryService, TimeSyncerService, UserService, WebRTCSignallingService, WorkflowService } from './services';
2
- import { IBaseService, IDebugLevel, IRocosSDKConfig, ServiceEnum } from './models';
2
+ import { AuthorisedConfig, IBaseService, IDebugLevel, IRocosSDKConfig, ServiceEnum } from './models';
3
3
  import { IRocosSDK } from './IRocosSDK';
4
4
  import { Logger } from 'loglevel';
5
5
  export declare class RocosSDK implements IRocosSDK {
@@ -145,4 +145,5 @@ export declare class RocosSDK implements IRocosSDK {
145
145
  */
146
146
  enableDebugMode(on: boolean): void;
147
147
  setDebugLevel(level: IDebugLevel): void;
148
+ protected overrideConfig(service: ServiceEnum): AuthorisedConfig;
148
149
  }
package/esm/RocosSDK.js CHANGED
@@ -24,84 +24,85 @@ export class RocosSDK {
24
24
  getService(name) {
25
25
  if (!this.services?.[name]) {
26
26
  this.logger.info(`Service ${name} does not exist, creating it now.`);
27
+ const config = this.overrideConfig(name);
27
28
  switch (name) {
28
29
  case ServiceEnum.AUTH:
29
- this.services[name] = new AuthService(this.config);
30
+ this.services[name] = new AuthService(config);
30
31
  break;
31
32
  case ServiceEnum.TELEMETRY:
32
- this.services[name] = new TelemetryService(this.config);
33
+ this.services[name] = new TelemetryService(config);
33
34
  break;
34
35
  case ServiceEnum.ROBOT:
35
- this.services[name] = new RobotService(this.config);
36
+ this.services[name] = new RobotService(config);
36
37
  break;
37
38
  case ServiceEnum.EVENT:
38
- this.services[name] = new EventService(this.config);
39
+ this.services[name] = new EventService(config);
39
40
  break;
40
41
  case ServiceEnum.PROJECT:
41
- this.services[name] = new ProjectService(this.config);
42
+ this.services[name] = new ProjectService(config);
42
43
  break;
43
44
  case ServiceEnum.CALLER:
44
- this.services[name] = new CallerService(this.config);
45
+ this.services[name] = new CallerService(config);
45
46
  break;
46
47
  case ServiceEnum.COMMAND:
47
- this.services[name] = new CommandService(this.config);
48
+ this.services[name] = new CommandService(config);
48
49
  break;
49
50
  case ServiceEnum.CONTROL:
50
- this.services[name] = new ControlService(this.config);
51
+ this.services[name] = new ControlService(config);
51
52
  break;
52
53
  case ServiceEnum.SEARCH:
53
- this.services[name] = new SearchService(this.config);
54
+ this.services[name] = new SearchService(config);
54
55
  break;
55
56
  case ServiceEnum.CONFIG_GROUP:
56
- this.services[name] = new ConfigGroupService(this.config);
57
+ this.services[name] = new ConfigGroupService(config);
57
58
  break;
58
59
  case ServiceEnum.DASHBOARD:
59
- this.services[name] = new DashboardService(this.config);
60
+ this.services[name] = new DashboardService(config);
60
61
  break;
61
62
  case ServiceEnum.FUNCTION:
62
- this.services[name] = new FunctionService(this.config);
63
+ this.services[name] = new FunctionService(config);
63
64
  break;
64
65
  case ServiceEnum.STREAM:
65
- this.services[name] = new StreamService(this.config);
66
+ this.services[name] = new StreamService(config);
66
67
  break;
67
68
  case ServiceEnum.USER:
68
- this.services[name] = new UserService(this.config);
69
+ this.services[name] = new UserService(config);
69
70
  break;
70
71
  case ServiceEnum.TIME_SYNCER:
71
- this.services[name] = new TimeSyncerService(this.config);
72
+ this.services[name] = new TimeSyncerService(config);
72
73
  break;
73
74
  case ServiceEnum.WORKFLOW:
74
- this.services[name] = new WorkflowService(this.config);
75
+ this.services[name] = new WorkflowService(config);
75
76
  break;
76
77
  case ServiceEnum.ASSET_STORAGE:
77
- this.services[name] = new AssetStorageService(this.config);
78
+ this.services[name] = new AssetStorageService(config);
78
79
  break;
79
80
  case ServiceEnum.PROFILE:
80
- this.services[name] = new ProfileService(this.config);
81
+ this.services[name] = new ProfileService(config);
81
82
  break;
82
83
  case ServiceEnum.RTP_WEBRTC:
83
- this.services[name] = new RTPWebRTCService(this.config);
84
+ this.services[name] = new RTPWebRTCService(config);
84
85
  break;
85
86
  case ServiceEnum.WEBRTC_SIGNALLING:
86
- this.services[name] = new WebRTCSignallingService(this.config);
87
+ this.services[name] = new WebRTCSignallingService(config);
87
88
  break;
88
89
  case ServiceEnum.FILE_ACCESSOR:
89
- this.services[name] = new FileAccessorService(this.config);
90
+ this.services[name] = new FileAccessorService(config);
90
91
  break;
91
92
  case ServiceEnum.SCHEDULE:
92
- this.services[name] = new ScheduleService(this.config);
93
+ this.services[name] = new ScheduleService(config);
93
94
  break;
94
95
  case ServiceEnum.SPOT_PROVISIONER:
95
- this.services[name] = new SpotProvisioningService(this.config);
96
+ this.services[name] = new SpotProvisioningService(config);
96
97
  break;
97
98
  case ServiceEnum.INTEGRATION:
98
- this.services[name] = new IntegrationService(this.config);
99
+ this.services[name] = new IntegrationService(config);
99
100
  break;
100
101
  case ServiceEnum.MAP:
101
- this.services[name] = new MapService(this.config);
102
+ this.services[name] = new MapService(config);
102
103
  break;
103
104
  case ServiceEnum.EVALUATOR:
104
- this.services[name] = new EvaluatorService(this.config);
105
+ this.services[name] = new EvaluatorService(config);
105
106
  break;
106
107
  }
107
108
  }
@@ -309,4 +310,15 @@ export class RocosSDK {
309
310
  setDebugLevel(level) {
310
311
  RocosLogger.setLevel(level);
311
312
  }
313
+ overrideConfig(service) {
314
+ const override = this.config.overrides?.[service];
315
+ if (!override)
316
+ return this.config;
317
+ // strip out the overrides from the config
318
+ const { overrides: _, ...config } = this.config;
319
+ return {
320
+ ...config,
321
+ ...this.config.overrides?.[service],
322
+ };
323
+ }
312
324
  }
@@ -10,8 +10,9 @@ export class CallerStream extends CallerStreamAbstract {
10
10
  super(config);
11
11
  this.logger = RocosLogger.getInstance(`CallerStream(${this.identifier})`);
12
12
  const protocol = config.insecure ? 'http' : 'https';
13
+ const port = config.port ? `:${config.port}` : '';
13
14
  const transport = new GrpcWebFetchTransport({
14
- baseUrl: `${protocol}://${this.url}`,
15
+ baseUrl: `${protocol}://${this.url}${port}`,
15
16
  });
16
17
  this.client = new WebServiceCallerClient(transport);
17
18
  }
@@ -9,8 +9,9 @@ export class CommandStream extends CommandStreamAbstract {
9
9
  super(config);
10
10
  this.logger = RocosLogger.getInstance(`CommandStream(${this.identifier})`);
11
11
  const protocol = config.insecure ? 'http' : 'https';
12
+ const port = config.port ? `:${config.port}` : '';
12
13
  const transport = new GrpcWebFetchTransport({
13
- baseUrl: `${protocol}://${this.url}`,
14
+ baseUrl: `${protocol}://${this.url}${port}`,
14
15
  });
15
16
  this.client = new CommandClient(transport);
16
17
  }
@@ -10,8 +10,9 @@ export class ControlStream extends ControlStreamAbstract {
10
10
  super(config);
11
11
  this.logger = RocosLogger.getInstance(`ControlStream(${this.identifier})`);
12
12
  const protocol = config.insecure ? 'http' : 'https';
13
+ const port = config.port ? `:${config.port}` : '';
13
14
  const transport = new GrpcWebFetchTransport({
14
- baseUrl: `${protocol}://${this.url}`,
15
+ baseUrl: `${protocol}://${this.url}${port}`,
15
16
  });
16
17
  this.client = new RobotControlClient(transport);
17
18
  }
@@ -9,8 +9,9 @@ export class FileAccessorStream extends FileAccessorStreamAbstract {
9
9
  super(config);
10
10
  this.logger = RocosLogger.getInstance(`FileAccessorStream(${this.identifier})`);
11
11
  const protocol = config.insecure ? 'http' : 'https';
12
+ const port = config.port ? `:${config.port}` : '';
12
13
  const transport = new GrpcWebFetchTransport({
13
- baseUrl: `${protocol}://${this.url}`,
14
+ baseUrl: `${protocol}://${this.url}${port}`,
14
15
  });
15
16
  this.client = new FilagreeClient(transport);
16
17
  }
@@ -10,8 +10,9 @@ export class SearchStream extends SearchStreamAbstract {
10
10
  super(config);
11
11
  this.logger = RocosLogger.getInstance(`SearchStream(${this.identifier})`);
12
12
  const protocol = config.insecure ? 'http' : 'https';
13
+ const port = config.port ? `:${config.port}` : '';
13
14
  const transport = new GrpcWebFetchTransport({
14
- baseUrl: `${protocol}://${this.url}`,
15
+ baseUrl: `${protocol}://${this.url}${port}`,
15
16
  });
16
17
  this.client = new streamClient(transport);
17
18
  }
@@ -9,8 +9,9 @@ export class TelemetryStream extends TelemetryStreamAbstract {
9
9
  super(config);
10
10
  this.logger = RocosLogger.getInstance(`TelemetryStreamWeb(${this.identifier})`);
11
11
  const protocol = config.insecure ? 'http' : 'https';
12
+ const port = config.port ? `:${config.port}` : '';
12
13
  const transport = new GrpcWebFetchTransport({
13
- baseUrl: `${protocol}://${this.url}`,
14
+ baseUrl: `${protocol}://${this.url}${port}`,
14
15
  });
15
16
  this.client = new TelemetryGatewayClient(transport);
16
17
  }
@@ -10,8 +10,9 @@ export class WebRTCSignallingStream extends WebRTCSignallingStreamAbstract {
10
10
  super(config);
11
11
  this.logger = RocosLogger.getInstance(`WebRTCSignallingStream(${this.identifier})`);
12
12
  const protocol = config.insecure ? 'http' : 'https';
13
+ const port = config.port ? `:${config.port}` : '';
13
14
  const transport = new GrpcWebFetchTransport({
14
- baseUrl: `${protocol}://${this.url}`,
15
+ baseUrl: `${protocol}://${this.url}${port}`,
15
16
  });
16
17
  this.webRTCOperatorclient = new operatorClient(transport);
17
18
  }
@@ -130,4 +130,5 @@ export declare const API_OBSERVATIONS_URL = "https://{url}/projects/{projectId}/
130
130
  export declare const API_OBSERVATION_KEYS_URL = "https://{url}/projects/{projectId}/observations/keys";
131
131
  export declare const API_PROJECT_WORKFLOW_URL = "https://{url}/projects/{projectId}/automate/flows";
132
132
  export declare const API_PROJECT_WORKFLOW_ID_URL = "https://{url}/projects/{projectId}/automate/flows/{workflowId}";
133
+ export declare const API_PROJECT_WORKFLOW_ASSET_URL = "https://{url}/projects/{projectId}/automate/flows/{workflowId}/assets";
133
134
  export declare const API_PROJECT_DEPLOYED_WORKFLOW_URL = "https://{url}/projects/{projectId}/robots/{callsign}/automate/flows/deployments";
@@ -130,4 +130,5 @@ export const API_OBSERVATIONS_URL = 'https://{url}/projects/{projectId}/observat
130
130
  export const API_OBSERVATION_KEYS_URL = 'https://{url}/projects/{projectId}/observations/keys';
131
131
  export const API_PROJECT_WORKFLOW_URL = 'https://{url}/projects/{projectId}/automate/flows';
132
132
  export const API_PROJECT_WORKFLOW_ID_URL = 'https://{url}/projects/{projectId}/automate/flows/{workflowId}';
133
+ export const API_PROJECT_WORKFLOW_ASSET_URL = 'https://{url}/projects/{projectId}/automate/flows/{workflowId}/assets';
133
134
  export const API_PROJECT_DEPLOYED_WORKFLOW_URL = 'https://{url}/projects/{projectId}/robots/{callsign}/automate/flows/deployments';
@@ -0,0 +1 @@
1
+ export declare const getSha256Hex: (arrayBuffer: ArrayBuffer) => Promise<string>;
@@ -0,0 +1,5 @@
1
+ export const getSha256Hex = async (arrayBuffer) => {
2
+ const hashBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer);
3
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
4
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
5
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,14 @@
1
+ import crypto from 'crypto';
2
+ import { getSha256Hex } from './getSha256Hex';
3
+ Object.defineProperty(globalThis, 'crypto', {
4
+ value: {
5
+ subtle: crypto.webcrypto.subtle,
6
+ },
7
+ });
8
+ describe('getSha256Hex', () => {
9
+ it('should return the correct SHA-256 hash', async () => {
10
+ const buffer = new TextEncoder().encode('Hello, World!');
11
+ const hash = await getSha256Hex(buffer);
12
+ expect(hash).toBe('dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f');
13
+ });
14
+ });
@@ -0,0 +1 @@
1
+ export declare const getSha256HexNode: (arrayBuffer: ArrayBuffer) => Promise<string>;