@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.
- package/cjs/RocosSDK.d.ts +2 -1
- package/cjs/RocosSDK.js +38 -26
- package/cjs/api/streams/caller/CallerStream.js +2 -1
- package/cjs/api/streams/command/CommandStream.js +2 -1
- package/cjs/api/streams/control/ControlStream.js +2 -1
- package/cjs/api/streams/fileAccessor/FileAccessorStream.js +2 -1
- package/cjs/api/streams/search/SearchStream.js +2 -1
- package/cjs/api/streams/telemetry/TelemetryStream.js +2 -1
- package/cjs/api/streams/webRTCSignalling/WebRTCSignallingStream.js +2 -1
- package/cjs/constants/api.d.ts +1 -0
- package/cjs/constants/api.js +2 -1
- package/cjs/helpers/getSha256Hex.d.ts +1 -0
- package/cjs/helpers/getSha256Hex.js +9 -0
- package/cjs/helpers/getSha256Hex.spec.d.ts +1 -0
- package/cjs/helpers/getSha256Hex.spec.js +19 -0
- package/cjs/helpers/getSha256HexNode.d.ts +1 -0
- package/cjs/helpers/getSha256HexNode.js +13 -0
- package/cjs/helpers/getSha256HexNode.spec.d.ts +1 -0
- package/cjs/helpers/getSha256HexNode.spec.js +10 -0
- package/cjs/models/IRocosSDKConfig.d.ts +8 -4
- package/cjs/models/workflow/Workflow.d.ts +69 -11
- package/cjs/node/RocosSDKNode.d.ts +1 -2
- package/cjs/node/RocosSDKNode.js +54 -65
- package/cjs/services/AssetStorageService.js +1 -1
- package/cjs/services/BaseStreamService.js +2 -0
- package/cjs/services/WorkflowService.d.ts +11 -16
- package/cjs/services/WorkflowService.js +32 -15
- package/cjs/services/WorkflowServiceNode.d.ts +4 -0
- package/cjs/services/WorkflowServiceNode.js +12 -0
- package/esm/RocosSDK.d.ts +2 -1
- package/esm/RocosSDK.js +38 -26
- package/esm/api/streams/caller/CallerStream.js +2 -1
- package/esm/api/streams/command/CommandStream.js +2 -1
- package/esm/api/streams/control/ControlStream.js +2 -1
- package/esm/api/streams/fileAccessor/FileAccessorStream.js +2 -1
- package/esm/api/streams/search/SearchStream.js +2 -1
- package/esm/api/streams/telemetry/TelemetryStream.js +2 -1
- package/esm/api/streams/webRTCSignalling/WebRTCSignallingStream.js +2 -1
- package/esm/constants/api.d.ts +1 -0
- package/esm/constants/api.js +1 -0
- package/esm/helpers/getSha256Hex.d.ts +1 -0
- package/esm/helpers/getSha256Hex.js +5 -0
- package/esm/helpers/getSha256Hex.spec.d.ts +1 -0
- package/esm/helpers/getSha256Hex.spec.js +14 -0
- package/esm/helpers/getSha256HexNode.d.ts +1 -0
- package/esm/helpers/getSha256HexNode.js +6 -0
- package/esm/helpers/getSha256HexNode.spec.d.ts +1 -0
- package/esm/helpers/getSha256HexNode.spec.js +8 -0
- package/esm/models/IRocosSDKConfig.d.ts +8 -4
- package/esm/models/workflow/Workflow.d.ts +69 -11
- package/esm/node/RocosSDKNode.d.ts +1 -2
- package/esm/node/RocosSDKNode.js +26 -37
- package/esm/services/AssetStorageService.js +3 -3
- package/esm/services/BaseStreamService.js +2 -0
- package/esm/services/WorkflowService.d.ts +11 -16
- package/esm/services/WorkflowService.js +33 -16
- package/esm/services/WorkflowServiceNode.d.ts +4 -0
- package/esm/services/WorkflowServiceNode.js +8 -0
- package/package.json +1 -1
@@ -0,0 +1,6 @@
|
|
1
|
+
import crypto from 'crypto';
|
2
|
+
export const getSha256HexNode = async (arrayBuffer) => {
|
3
|
+
const hashBuffer = await crypto.subtle.digest('SHA-256', arrayBuffer);
|
4
|
+
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
5
|
+
return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
|
6
|
+
};
|
@@ -0,0 +1 @@
|
|
1
|
+
export {};
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { getSha256HexNode } from './getSha256HexNode';
|
2
|
+
describe('getSha256HexNode', () => {
|
3
|
+
it('should return the correct SHA-256 hash', async () => {
|
4
|
+
const buffer = new TextEncoder().encode('Hello, World!');
|
5
|
+
const hash = await getSha256HexNode(buffer);
|
6
|
+
expect(hash).toBe('dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f');
|
7
|
+
});
|
8
|
+
});
|
@@ -1,6 +1,9 @@
|
|
1
1
|
import { IStreamOptions } from './IStreamOptions';
|
2
|
-
|
3
|
-
|
2
|
+
import { ServiceEnum } from './ServiceEnum';
|
3
|
+
export type IRocosSDKConfig = AuthorisedConfig & {
|
4
|
+
overrides?: Partial<Record<ServiceEnum, Partial<AuthorisedConfig>>>;
|
5
|
+
};
|
6
|
+
interface ConfigBase {
|
4
7
|
url: string;
|
5
8
|
token?: string;
|
6
9
|
refreshToken?: string;
|
@@ -8,12 +11,13 @@ interface IRocosSDKConfigBase {
|
|
8
11
|
port?: number;
|
9
12
|
insecure?: boolean;
|
10
13
|
}
|
11
|
-
export interface IRocosSDKConfigApp extends
|
14
|
+
export interface IRocosSDKConfigApp extends ConfigBase {
|
12
15
|
appId: string;
|
13
16
|
appKey: string;
|
14
17
|
}
|
15
|
-
export interface IRocosSDKConfigToken extends
|
18
|
+
export interface IRocosSDKConfigToken extends ConfigBase {
|
16
19
|
token: string;
|
17
20
|
refreshToken?: string;
|
18
21
|
}
|
22
|
+
export type AuthorisedConfig = IRocosSDKConfigApp | IRocosSDKConfigToken;
|
19
23
|
export {};
|
@@ -1,12 +1,12 @@
|
|
1
|
-
export type ResourceType = 'Manifest' | 'AgentGraph' | 'Javascript' | 'NodeDefinition';
|
1
|
+
export type ResourceType = 'Manifest' | 'AgentGraph' | 'Javascript' | 'NodeDefinition' | 'Other';
|
2
2
|
export interface Resource {
|
3
3
|
type: ResourceType;
|
4
4
|
data: string;
|
5
|
-
contentLink: string;
|
6
5
|
hash: string;
|
7
6
|
link: string;
|
8
|
-
|
9
|
-
size
|
7
|
+
contentLink?: string;
|
8
|
+
size?: number;
|
9
|
+
path?: string;
|
10
10
|
}
|
11
11
|
export interface Resources {
|
12
12
|
[key: string]: Resource;
|
@@ -16,21 +16,79 @@ export interface Author {
|
|
16
16
|
name: string;
|
17
17
|
email: string;
|
18
18
|
}
|
19
|
+
interface ResponseBase {
|
20
|
+
id: string;
|
21
|
+
createdBy: string;
|
22
|
+
updatedBy: string;
|
23
|
+
dateCreated: number;
|
24
|
+
dateUpdated: number;
|
25
|
+
}
|
19
26
|
export interface WorkflowBase {
|
20
27
|
flowId: string;
|
21
28
|
name: string;
|
22
|
-
description
|
29
|
+
description?: string;
|
23
30
|
resources?: Resources;
|
24
31
|
type?: string;
|
25
32
|
}
|
26
|
-
export interface Workflow extends WorkflowBase {
|
27
|
-
id: string;
|
33
|
+
export interface Workflow extends WorkflowBase, ResponseBase {
|
28
34
|
projectId: string;
|
29
|
-
createdBy: string;
|
30
|
-
updatedBy: string;
|
31
35
|
author: Author;
|
32
|
-
dateCreated: number;
|
33
|
-
dateUpdated: number;
|
34
36
|
latestVersion: string;
|
35
37
|
type: string;
|
36
38
|
}
|
39
|
+
export interface DeployedFlow {
|
40
|
+
flowId: string;
|
41
|
+
flow?: Workflow;
|
42
|
+
deployed?: boolean;
|
43
|
+
}
|
44
|
+
export interface WorkflowList extends Omit<WorkflowBase, 'resources'>, ResponseBase {
|
45
|
+
type?: 'cloud';
|
46
|
+
author: {
|
47
|
+
id: string;
|
48
|
+
name: string;
|
49
|
+
email: string;
|
50
|
+
} | Record<string, never>;
|
51
|
+
}
|
52
|
+
export interface WorkflowRevision {
|
53
|
+
id: string;
|
54
|
+
version: number;
|
55
|
+
authorName: string;
|
56
|
+
createdBy: string;
|
57
|
+
dateCreated: number;
|
58
|
+
description: string;
|
59
|
+
selected?: boolean;
|
60
|
+
}
|
61
|
+
export interface ManifestResource {
|
62
|
+
path: string;
|
63
|
+
provider: string;
|
64
|
+
runtime: string;
|
65
|
+
options: string[];
|
66
|
+
}
|
67
|
+
export interface ManifestArgument {
|
68
|
+
default?: string;
|
69
|
+
description?: string;
|
70
|
+
type: string;
|
71
|
+
}
|
72
|
+
export interface Manifest {
|
73
|
+
main: [string, string];
|
74
|
+
signals?: {
|
75
|
+
main: {
|
76
|
+
args: string[];
|
77
|
+
entry: [string, string];
|
78
|
+
};
|
79
|
+
};
|
80
|
+
arguments?: unknown | Record<string, ManifestArgument>;
|
81
|
+
resources: ManifestResource[];
|
82
|
+
mode?: 'cloud';
|
83
|
+
}
|
84
|
+
export interface CreateAssetResponse {
|
85
|
+
id: string;
|
86
|
+
name: string;
|
87
|
+
path: string;
|
88
|
+
dateCreated: number;
|
89
|
+
hash: string;
|
90
|
+
postContentLink: string;
|
91
|
+
type: 'file';
|
92
|
+
workflow: string;
|
93
|
+
}
|
94
|
+
export {};
|
@@ -1,12 +1,11 @@
|
|
1
1
|
import { EvaluatorService, ScheduleService } from '../services';
|
2
|
+
import { IBaseService, ServiceEnum } from '../models';
|
2
3
|
import { CallerServiceNode } from '../services/CallerServiceNode';
|
3
4
|
import { CommandServiceNode } from '../services/CommandServiceNode';
|
4
5
|
import { ControlServiceNode } from '../services/ControlServiceNode';
|
5
6
|
import { FileAccessorServiceNode } from '../services/FileAccessorServiceNode';
|
6
|
-
import { IBaseService } from '../models/IBaseService';
|
7
7
|
import { RocosSDK } from '../RocosSDK';
|
8
8
|
import { SearchServiceNode } from '../services/SearchServiceNode';
|
9
|
-
import { ServiceEnum } from '../models/ServiceEnum';
|
10
9
|
import { TelemetryServiceNode } from '../services/TelemetryServiceNode';
|
11
10
|
export declare class RocosSDKNode extends RocosSDK {
|
12
11
|
getService<T extends IBaseService>(name: ServiceEnum): T;
|
package/esm/node/RocosSDKNode.js
CHANGED
@@ -1,96 +1,85 @@
|
|
1
|
-
import { MapService, ScheduleService, SpotProvisioningServiceNode } from '../services';
|
2
|
-
import {
|
3
|
-
import { AuthService } from '../services/AuthService';
|
1
|
+
import { AssetStorageService, AuthService, ConfigGroupService, DashboardService, EventService, FunctionService, IntegrationService, MapService, ProfileService, ProjectService, RobotService, ScheduleService, SpotProvisioningServiceNode, StreamService, UserService, } from '../services';
|
2
|
+
import { ServiceEnum } from '../models';
|
4
3
|
import { CallerServiceNode } from '../services/CallerServiceNode';
|
5
4
|
import { CommandServiceNode } from '../services/CommandServiceNode';
|
6
|
-
import { ConfigGroupService } from '../services/ConfigGroupService';
|
7
5
|
import { ControlServiceNode } from '../services/ControlServiceNode';
|
8
|
-
import { DashboardService } from '../services/DashboardService';
|
9
|
-
import { EventService } from '../services/EventService';
|
10
6
|
import { FileAccessorServiceNode } from '../services/FileAccessorServiceNode';
|
11
|
-
import { FunctionService } from '../services/FunctionService';
|
12
|
-
import { IntegrationService } from '../services/IntegrationService';
|
13
|
-
import { ProfileService } from '../services/ProfileService';
|
14
|
-
import { ProjectService } from '../services/ProjectService';
|
15
|
-
import { RobotService } from '../services/RobotService';
|
16
7
|
import { RocosSDK } from '../RocosSDK';
|
17
8
|
import { SearchServiceNode } from '../services/SearchServiceNode';
|
18
|
-
import { ServiceEnum } from '../models/ServiceEnum';
|
19
|
-
import { StreamService } from '../services/StreamService';
|
20
9
|
import { TelemetryServiceNode } from '../services/TelemetryServiceNode';
|
21
|
-
import {
|
22
|
-
import { WorkflowService } from '../services/WorkflowService';
|
10
|
+
import { WorkflowServiceNode } from '../services/WorkflowServiceNode';
|
23
11
|
export class RocosSDKNode extends RocosSDK {
|
24
12
|
// eslint-disable-next-line max-lines-per-function
|
25
13
|
getService(name) {
|
26
14
|
if (!this.services?.[name]) {
|
27
15
|
this.logger.info(`Service ${name} does not exist, creating it now.`);
|
16
|
+
const config = this.overrideConfig(name);
|
28
17
|
switch (name) {
|
29
18
|
case ServiceEnum.AUTH:
|
30
|
-
this.services[name] = new AuthService(
|
19
|
+
this.services[name] = new AuthService(config);
|
31
20
|
break;
|
32
21
|
case ServiceEnum.TELEMETRY:
|
33
|
-
this.services[name] = new TelemetryServiceNode(
|
22
|
+
this.services[name] = new TelemetryServiceNode(config);
|
34
23
|
break;
|
35
24
|
case ServiceEnum.ROBOT:
|
36
|
-
this.services[name] = new RobotService(
|
25
|
+
this.services[name] = new RobotService(config);
|
37
26
|
break;
|
38
27
|
case ServiceEnum.EVENT:
|
39
|
-
this.services[name] = new EventService(
|
28
|
+
this.services[name] = new EventService(config);
|
40
29
|
break;
|
41
30
|
case ServiceEnum.PROJECT:
|
42
|
-
this.services[name] = new ProjectService(
|
31
|
+
this.services[name] = new ProjectService(config);
|
43
32
|
break;
|
44
33
|
case ServiceEnum.CALLER:
|
45
|
-
this.services[name] = new CallerServiceNode(
|
34
|
+
this.services[name] = new CallerServiceNode(config);
|
46
35
|
break;
|
47
36
|
case ServiceEnum.COMMAND:
|
48
|
-
this.services[name] = new CommandServiceNode(
|
37
|
+
this.services[name] = new CommandServiceNode(config);
|
49
38
|
break;
|
50
39
|
case ServiceEnum.CONTROL:
|
51
|
-
this.services[name] = new ControlServiceNode(
|
40
|
+
this.services[name] = new ControlServiceNode(config);
|
52
41
|
break;
|
53
42
|
case ServiceEnum.SEARCH:
|
54
|
-
this.services[name] = new SearchServiceNode(
|
43
|
+
this.services[name] = new SearchServiceNode(config);
|
55
44
|
break;
|
56
45
|
case ServiceEnum.CONFIG_GROUP:
|
57
|
-
this.services[name] = new ConfigGroupService(
|
46
|
+
this.services[name] = new ConfigGroupService(config);
|
58
47
|
break;
|
59
48
|
case ServiceEnum.DASHBOARD:
|
60
|
-
this.services[name] = new DashboardService(
|
49
|
+
this.services[name] = new DashboardService(config);
|
61
50
|
break;
|
62
51
|
case ServiceEnum.FUNCTION:
|
63
|
-
this.services[name] = new FunctionService(
|
52
|
+
this.services[name] = new FunctionService(config);
|
64
53
|
break;
|
65
54
|
case ServiceEnum.STREAM:
|
66
|
-
this.services[name] = new StreamService(
|
55
|
+
this.services[name] = new StreamService(config);
|
67
56
|
break;
|
68
57
|
case ServiceEnum.USER:
|
69
|
-
this.services[name] = new UserService(
|
58
|
+
this.services[name] = new UserService(config);
|
70
59
|
break;
|
71
60
|
case ServiceEnum.WORKFLOW:
|
72
|
-
this.services[name] = new
|
61
|
+
this.services[name] = new WorkflowServiceNode(config);
|
73
62
|
break;
|
74
63
|
case ServiceEnum.ASSET_STORAGE:
|
75
|
-
this.services[name] = new AssetStorageService(
|
64
|
+
this.services[name] = new AssetStorageService(config);
|
76
65
|
break;
|
77
66
|
case ServiceEnum.PROFILE:
|
78
|
-
this.services[name] = new ProfileService(
|
67
|
+
this.services[name] = new ProfileService(config);
|
79
68
|
break;
|
80
69
|
case ServiceEnum.FILE_ACCESSOR:
|
81
|
-
this.services[name] = new FileAccessorServiceNode(
|
70
|
+
this.services[name] = new FileAccessorServiceNode(config);
|
82
71
|
break;
|
83
72
|
case ServiceEnum.SPOT_PROVISIONER:
|
84
|
-
this.services[name] = new SpotProvisioningServiceNode(
|
73
|
+
this.services[name] = new SpotProvisioningServiceNode(config);
|
85
74
|
break;
|
86
75
|
case ServiceEnum.SCHEDULE:
|
87
|
-
this.services[name] = new ScheduleService(
|
76
|
+
this.services[name] = new ScheduleService(config);
|
88
77
|
break;
|
89
78
|
case ServiceEnum.INTEGRATION:
|
90
|
-
this.services[name] = new IntegrationService(
|
79
|
+
this.services[name] = new IntegrationService(config);
|
91
80
|
break;
|
92
81
|
case ServiceEnum.MAP:
|
93
|
-
this.services[name] = new MapService(
|
82
|
+
this.services[name] = new MapService(config);
|
94
83
|
break;
|
95
84
|
}
|
96
85
|
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { API_PROJECT_ASSET_INTEGRATION_PATH_URL, API_PROJECT_ASSET_INTEGRATION_PROVIDERS_PATH_URL,
|
2
|
-
import {
|
1
|
+
import { API_PROJECT_ASSET_INTEGRATIONS_PATH_URL, API_PROJECT_ASSET_INTEGRATION_PATH_URL, API_PROJECT_ASSET_INTEGRATION_PROVIDERS_PATH_URL, API_PROJECT_ASSET_PATH_URL, API_PROJECT_ASSET_PROFILES_SYNC_DEFINITION_PATH_URL, API_PROJECT_ASSET_ROBOTS_SYNC_DEFINITION_PATH_URL, API_PROJECT_ASSET_URL, API_PROJECT_FLOW_ASSET_PATH_URL, API_PROJECT_MAPPED_ASSETS_PATH_URL, API_PROJECT_MISSION_ASSETS_PATH_URL, API_PROJECT_MISSION_ASSET_PATH_URL, API_PROJECT_ROBOT_ASSET_PATH_URL, } from '../constants/api';
|
2
|
+
import { RocosError, errorCodes } from '../models/RocosError';
|
3
3
|
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
4
4
|
import { RocosLogger } from '../logger/RocosLogger';
|
5
5
|
import { formatServiceUrl } from '../helpers/formatServiceUrl';
|
@@ -208,7 +208,7 @@ export class AssetStorageService extends BaseServiceAbstract {
|
|
208
208
|
* @param integration
|
209
209
|
*/
|
210
210
|
updateSyncIntegration(projectId, integrationId, integration) {
|
211
|
-
return this.callPut(formatServiceUrl(API_PROJECT_ASSET_INTEGRATION_PATH_URL, { url: this.config.url, projectId, integrationId
|
211
|
+
return this.callPut(formatServiceUrl(API_PROJECT_ASSET_INTEGRATION_PATH_URL, { url: this.config.url, projectId, integrationId }, this.config.insecure), integration, `Failed to update asset sync integrations for ${projectId}.`);
|
212
212
|
}
|
213
213
|
/**
|
214
214
|
* Delete a Sync Integration
|
@@ -14,6 +14,8 @@ export class BaseStreamService {
|
|
14
14
|
return this.status;
|
15
15
|
}
|
16
16
|
async initStream(stream) {
|
17
|
+
if (this.config.insecure)
|
18
|
+
return; // no need to init auth for insecure connections
|
17
19
|
const authService = RocosStore.getSDKInstance(this.config).getAuthService();
|
18
20
|
if (!this.config.token || !authService.isTokenValid(new Token(this.config.token))) {
|
19
21
|
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
|
}
|
@@ -1,26 +1,12 @@
|
|
1
|
-
import { API_PROJECT_DEPLOYED_WORKFLOW_URL, API_PROJECT_WORKFLOW_ID_URL, API_PROJECT_WORKFLOW_URL, } from '../constants/api';
|
1
|
+
import { API_PROJECT_DEPLOYED_WORKFLOW_URL, API_PROJECT_WORKFLOW_ASSET_URL, API_PROJECT_WORKFLOW_ID_URL, API_PROJECT_WORKFLOW_URL, } from '../constants/api';
|
2
2
|
import { RocosError, errorCodes } from '../models/RocosError';
|
3
3
|
import { BaseServiceAbstract } from './BaseServiceAbstract';
|
4
4
|
import { RocosLogger } from '../logger/RocosLogger';
|
5
5
|
import { formatServiceUrl } from '../helpers/formatServiceUrl';
|
6
|
+
import { getSha256Hex } from '../helpers/getSha256Hex';
|
6
7
|
export class WorkflowService extends BaseServiceAbstract {
|
7
8
|
constructor(config) {
|
8
9
|
super(config);
|
9
|
-
/**
|
10
|
-
* @deprecated This method is deprecated and will be removed in a future version.
|
11
|
-
* Use list instead.
|
12
|
-
*/
|
13
|
-
this.getAll = this.list;
|
14
|
-
/**
|
15
|
-
* @deprecated This method is deprecated and will be removed in a future version.
|
16
|
-
* Use get instead.
|
17
|
-
*/
|
18
|
-
this.getOne = this.get;
|
19
|
-
/**
|
20
|
-
* @deprecated This method is deprecated and will be removed in a future version.
|
21
|
-
* Use getDeployedWorkflow instead.
|
22
|
-
*/
|
23
|
-
this.getDeployedOnRobot = this.getDeployedWorkflows;
|
24
10
|
this.logger = RocosLogger.getInstance(`WorkflowService(${this.config.url})`);
|
25
11
|
}
|
26
12
|
getError(e) {
|
@@ -65,6 +51,37 @@ export class WorkflowService extends BaseServiceAbstract {
|
|
65
51
|
async update(projectId, workflowId, model) {
|
66
52
|
return this.callPut(formatServiceUrl(API_PROJECT_WORKFLOW_ID_URL, { url: this.config.url, projectId, workflowId }, this.config.insecure), model, `Failed to update workflow for ${projectId}, workflowId ${workflowId}.`);
|
67
53
|
}
|
54
|
+
/**
|
55
|
+
* Upload workflow asset
|
56
|
+
*
|
57
|
+
* @param projectId - Project Id
|
58
|
+
* @param workflowId - Workflow Id
|
59
|
+
* @param fileName - Name of file including extension
|
60
|
+
* @param arrayBuffer - data to upload
|
61
|
+
*/
|
62
|
+
async uploadAsset(projectId, workflowId, fileName, arrayBuffer) {
|
63
|
+
const hash = await getSha256Hex(arrayBuffer);
|
64
|
+
return this.uploadAssetWithHash(projectId, workflowId, fileName, arrayBuffer, hash);
|
65
|
+
}
|
66
|
+
async uploadAssetWithHash(projectId, workflowId, fileName, arrayBuffer, hash) {
|
67
|
+
// Get asset upload link
|
68
|
+
const createAssetResponse = await this.callPost(formatServiceUrl(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}.`);
|
69
|
+
const { postContentLink } = createAssetResponse;
|
70
|
+
if (!postContentLink)
|
71
|
+
throw new Error('postContentLink is undefined');
|
72
|
+
// Get Google upload location
|
73
|
+
const postFileResponse = await fetch(postContentLink, {
|
74
|
+
method: 'POST',
|
75
|
+
headers: { 'x-goog-resumable': 'start' },
|
76
|
+
});
|
77
|
+
const putLocation = postFileResponse.headers.get('location');
|
78
|
+
if (!putLocation)
|
79
|
+
throw new Error('putLocation is undefined');
|
80
|
+
// Upload file to Google
|
81
|
+
const uploadResponse = await fetch(putLocation, { method: 'PUT', body: arrayBuffer });
|
82
|
+
if (uploadResponse.status !== 200)
|
83
|
+
throw new Error(`Failed to upload file: ${uploadResponse.statusText}`);
|
84
|
+
}
|
68
85
|
/**
|
69
86
|
* Delete a workflow
|
70
87
|
*
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { WorkflowService } from './WorkflowService';
|
2
|
+
import { getSha256HexNode } from '../helpers/getSha256HexNode';
|
3
|
+
export class WorkflowServiceNode extends WorkflowService {
|
4
|
+
async uploadAsset(projectId, workflowId, fileName, arrayBuffer) {
|
5
|
+
const hash = await getSha256HexNode(arrayBuffer);
|
6
|
+
return this.uploadAssetWithHash(projectId, workflowId, fileName, arrayBuffer, hash);
|
7
|
+
}
|
8
|
+
}
|