@celonis/content-cli 0.3.3 → 0.4.0

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 (43) hide show
  1. package/api/data-pool-api.js +34 -0
  2. package/api/node-api.js +7 -0
  3. package/api/package-api.js +55 -0
  4. package/api/package-dependencies-api.js +29 -0
  5. package/api/space-api.js +48 -0
  6. package/commands/data-pool.command.js +12 -1
  7. package/commands/package.command.js +11 -1
  8. package/content-cli-export.js +61 -0
  9. package/content-cli-import.js +61 -0
  10. package/content-cli-list.js +15 -1
  11. package/content-cli.js +2 -0
  12. package/interfaces/data-pool-manager.interfaces.js +12 -0
  13. package/interfaces/manifest-transport.js +12 -0
  14. package/lib/api/data-pool-api.d.ts +7 -0
  15. package/lib/api/node-api.d.ts +1 -0
  16. package/lib/api/package-api.d.ts +9 -1
  17. package/lib/api/package-dependencies-api.d.ts +4 -0
  18. package/lib/api/space-api.d.ts +9 -0
  19. package/lib/commands/data-pool.command.d.ts +1 -0
  20. package/lib/commands/package.command.d.ts +2 -0
  21. package/lib/content-cli-export.d.ts +4 -0
  22. package/lib/content-cli-import.d.ts +4 -0
  23. package/lib/content-cli-list.d.ts +1 -0
  24. package/lib/interfaces/batch-export-node-transport.d.ts +10 -0
  25. package/lib/interfaces/data-pool-manager.interfaces.d.ts +24 -0
  26. package/lib/interfaces/manifest-transport.d.ts +27 -0
  27. package/lib/interfaces/package-manager.interfaces.d.ts +10 -0
  28. package/lib/interfaces/save-space.interface.d.ts +2 -1
  29. package/lib/services/data-pool/data-pool-service.d.ts +8 -0
  30. package/lib/services/file-service.d.ts +3 -0
  31. package/lib/services/http-client-service.v2.d.ts +8 -0
  32. package/lib/services/package-manager/datamodel-service.d.ts +2 -1
  33. package/lib/services/package-manager/package-service.d.ts +21 -4
  34. package/lib/services/package-manager/space-service.d.ts +11 -0
  35. package/lib/services/package-manager/variable-service.d.ts +3 -2
  36. package/package.json +1 -1
  37. package/services/data-pool/data-pool-service.js +59 -0
  38. package/services/file-service.js +9 -1
  39. package/services/http-client-service.v2.js +91 -3
  40. package/services/package-manager/datamodel-service.js +6 -8
  41. package/services/package-manager/package-service.js +331 -34
  42. package/services/package-manager/space-service.js +61 -0
  43. package/services/package-manager/variable-service.js +2 -7
@@ -12,6 +12,12 @@ export interface ContentNodeTransport {
12
12
  assetMetadataTransport: AssetMetadataTransport;
13
13
  spaceId: string;
14
14
  }
15
+ export interface ActivatePackageTransport {
16
+ packageKey: string;
17
+ version: string;
18
+ publishMessage: string;
19
+ nodeIdsToExclude: string[];
20
+ }
15
21
  export interface DataModelTransport {
16
22
  id: string;
17
23
  name: string;
@@ -23,6 +29,10 @@ export interface PackageDependencyTransport {
23
29
  name: string;
24
30
  version: string;
25
31
  rootNodeId: string;
32
+ external: boolean;
33
+ draftId: string;
34
+ updateAvailable: boolean;
35
+ deleted: boolean;
26
36
  }
27
37
  export interface AssetMetadataTransport {
28
38
  hidden: boolean;
@@ -1,4 +1,5 @@
1
- export interface SaveSpace {
1
+ export interface SpaceTransport {
2
2
  id: string;
3
3
  name: string;
4
+ iconReference: string;
4
5
  }
@@ -0,0 +1,8 @@
1
+ declare class DataPoolService {
2
+ listDataPools(): Promise<void>;
3
+ findAndExportAllPools(): Promise<void>;
4
+ private findAllPools;
5
+ private exportListOfPools;
6
+ }
7
+ export declare const dataPoolService: DataPoolService;
8
+ export {};
@@ -1,6 +1,9 @@
1
+ import { ManifestNodeTransport } from "../interfaces/manifest-transport";
1
2
  export declare class FileService {
2
3
  static readonly fileDownloadedMessage = "File downloaded successfully. New filename: ";
3
4
  writeToFileWithGivenName(data: any, filename: string): void;
5
+ createDirectoryWithGivenName(dirName: string): void;
6
+ readManifestFile(importedFileName: string): Promise<ManifestNodeTransport[]>;
4
7
  private getSerializedFileContent;
5
8
  }
6
9
  export declare const fileService: FileService;
@@ -1,10 +1,18 @@
1
1
  declare class HttpClientServiceV2 {
2
2
  get(url: string): Promise<any>;
3
+ postFile(url: string, body: any, parameters?: {}): Promise<any>;
4
+ post(url: string, body: any): Promise<any>;
5
+ put(url: string, body: object): Promise<any>;
6
+ delete(url: string): Promise<any>;
7
+ downloadFile(url: string): Promise<any>;
8
+ private handleResponseStreamData;
3
9
  private resolveUrl;
10
+ private makeFileDownloadOptions;
4
11
  private handleResponse;
5
12
  private checkBadRequest;
6
13
  private handleBadRequest;
7
14
  private makeOptions;
15
+ private makeOptionsJson;
8
16
  private buildAuthorizationHeaders;
9
17
  }
10
18
  export declare const httpClientV2: HttpClientServiceV2;
@@ -1,7 +1,8 @@
1
1
  import { BatchExportNodeTransport } from "../../interfaces/batch-export-node-transport";
2
+ import { StudioDataModelTransport } from "../../interfaces/package-manager.interfaces";
2
3
  declare class DatamodelService {
3
4
  static readonly INSTANCE: DatamodelService;
4
- getDatamodelsForNodes(nodesListToExport: BatchExportNodeTransport[]): Promise<BatchExportNodeTransport[]>;
5
+ getDatamodelsForNodes(nodesListToExport: BatchExportNodeTransport[]): Promise<Map<string, StudioDataModelTransport[]>>;
5
6
  }
6
7
  export declare const dataModelService: DatamodelService;
7
8
  export {};
@@ -1,13 +1,30 @@
1
1
  import { BatchExportNodeTransport } from "../../interfaces/batch-export-node-transport";
2
2
  import { PackageDependencyTransport } from "../../interfaces/package-manager.interfaces";
3
+ import { ManifestNodeTransport } from "../../interfaces/manifest-transport";
3
4
  declare class PackageService {
4
5
  protected readonly fileDownloadedMessage = "File downloaded successfully. New filename: ";
5
6
  listPackages(): Promise<void>;
6
- findAndExportAllPackages(includeDependencies: boolean): Promise<void>;
7
- getPackagesDependenciesByPackageId(nodeIds: string[], draftIdByNodeId: Map<string, string>): Promise<Map<string, PackageDependencyTransport[]>>;
8
- getVersionOfPackages(nodes: BatchExportNodeTransport[]): Promise<BatchExportNodeTransport[]>;
9
- getPackagesWithDependencies(nodeIds: string[], draftIdByNodeId: Map<string, string>): Promise<PackageDependencyTransport[]>;
7
+ findAndExportListOfAllPackages(includeDependencies: boolean): Promise<void>;
8
+ batchImportPackages(spaceMappings: string[], exportedPackagesFile: string): Promise<void>;
9
+ private checkNodeForCircularDependency;
10
+ private importPackage;
11
+ private compareVersions;
12
+ private importPackageVersion;
13
+ private importDependencyPackages;
14
+ private checkIfPackageVersionHasBeenImported;
15
+ private createBodyForImport;
16
+ private getTargetSpaceForExportedPackage;
17
+ private updateDependencyVersions;
18
+ publishPackage(packageToImport: ManifestNodeTransport): Promise<void>;
19
+ batchExportPackages(packageKeys: string[], includeDependencies: boolean): Promise<void>;
20
+ getNodesWithActiveVersion(nodes: BatchExportNodeTransport[]): Promise<BatchExportNodeTransport[]>;
21
+ getPackagesWithDependencies(draftIdByNodeId: Map<string, string>, actionFlowPackageKeys: string[]): Promise<Map<string, PackageDependencyTransport[]>>;
22
+ private getDependencyPackages;
23
+ private nodeHasBeenResolvedBefore;
10
24
  private exportListOfPackages;
25
+ private exportPackagesAndAssets;
26
+ private exportToZip;
27
+ private exportManifestOfPackages;
11
28
  }
12
29
  export declare const packageService: PackageService;
13
30
  export {};
@@ -0,0 +1,11 @@
1
+ import { BatchExportNodeTransport } from "../../interfaces/batch-export-node-transport";
2
+ import { SpaceTransport } from "../../interfaces/save-space.interface";
3
+ declare class SpaceService {
4
+ static readonly INSTANCE: SpaceService;
5
+ private allSpaces;
6
+ getParentSpaces(nodes: BatchExportNodeTransport[]): Promise<BatchExportNodeTransport[]>;
7
+ createSpace(spaceName: string, spaceIcon: string): Promise<SpaceTransport>;
8
+ getAllSpaces(): Promise<SpaceTransport[]>;
9
+ }
10
+ export declare const spaceService: SpaceService;
11
+ export {};
@@ -1,6 +1,7 @@
1
- import { VariablesAssignments } from "../../interfaces/package-manager.interfaces";
1
+ import { PackageWithVariableAssignments } from "../../interfaces/package-manager.interfaces";
2
+ import { BatchExportNodeTransport } from "../../interfaces/batch-export-node-transport";
2
3
  declare class VariableService {
3
- getVariablesByNodeKey(): Promise<Map<string, VariablesAssignments[]>>;
4
+ getVariableAssignmentsForNodes(nodes: BatchExportNodeTransport[]): Promise<PackageWithVariableAssignments[]>;
4
5
  }
5
6
  export declare const variableService: VariableService;
6
7
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@celonis/content-cli",
3
- "version": "0.3.3",
3
+ "version": "0.4.0",
4
4
  "description": "CLI Tool to help manage content in Celonis EMS",
5
5
  "main": "content-cli.js",
6
6
  "bin": {
@@ -0,0 +1,59 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ (function (factory) {
11
+ if (typeof module === "object" && typeof module.exports === "object") {
12
+ var v = factory(require, exports);
13
+ if (v !== undefined) module.exports = v;
14
+ }
15
+ else if (typeof define === "function" && define.amd) {
16
+ define(["require", "exports", "../../api/data-pool-api", "../../util/logger", "uuid", "../file-service"], factory);
17
+ }
18
+ })(function (require, exports) {
19
+ "use strict";
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ const data_pool_api_1 = require("../../api/data-pool-api");
22
+ const logger_1 = require("../../util/logger");
23
+ const uuid_1 = require("uuid");
24
+ const file_service_1 = require("../file-service");
25
+ class DataPoolService {
26
+ listDataPools() {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ const dataPools = yield this.findAllPools();
29
+ dataPools.forEach(pool => {
30
+ logger_1.logger.info(`Pool Id: ${pool.id} - Pool Name: ${pool.name}`);
31
+ });
32
+ });
33
+ }
34
+ findAndExportAllPools() {
35
+ return __awaiter(this, void 0, void 0, function* () {
36
+ const dataPools = yield this.findAllPools();
37
+ this.exportListOfPools(dataPools);
38
+ });
39
+ }
40
+ findAllPools() {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ let page = 0;
43
+ const dataPools = [];
44
+ let tmpPage = yield data_pool_api_1.dataPoolApi.findAllPagedPools("100", page.toString());
45
+ while (tmpPage.pageNumber < tmpPage.totalCount) {
46
+ dataPools.push(...tmpPage.content);
47
+ tmpPage = yield data_pool_api_1.dataPoolApi.findAllPagedPools("100", (++page).toString());
48
+ }
49
+ return dataPools;
50
+ });
51
+ }
52
+ exportListOfPools(nodes) {
53
+ const filename = uuid_1.v4() + ".json";
54
+ file_service_1.fileService.writeToFileWithGivenName(JSON.stringify(nodes), filename);
55
+ logger_1.logger.info(file_service_1.FileService.fileDownloadedMessage + filename);
56
+ }
57
+ }
58
+ exports.dataPoolService = new DataPoolService();
59
+ });
@@ -4,19 +4,27 @@
4
4
  if (v !== undefined) module.exports = v;
5
5
  }
6
6
  else if (typeof define === "function" && define.amd) {
7
- define(["require", "exports", "fs", "path"], factory);
7
+ define(["require", "exports", "fs", "path", "yaml"], factory);
8
8
  }
9
9
  })(function (require, exports) {
10
10
  "use strict";
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const fs = require("fs");
13
13
  const path = require("path");
14
+ const YAML = require("yaml");
14
15
  class FileService {
15
16
  writeToFileWithGivenName(data, filename) {
16
17
  fs.writeFileSync(path.resolve(process.cwd(), filename), this.getSerializedFileContent(data), {
17
18
  encoding: "utf-8",
18
19
  });
19
20
  }
21
+ createDirectoryWithGivenName(dirName) {
22
+ fs.mkdirSync(path.resolve(process.cwd(), dirName));
23
+ }
24
+ readManifestFile(importedFileName) {
25
+ const manifest = YAML.parse(fs.readFileSync(path.resolve(importedFileName + "/manifest.yml"), { encoding: "utf-8" }));
26
+ return Promise.all(manifest);
27
+ }
20
28
  getSerializedFileContent(data) {
21
29
  return data;
22
30
  }
@@ -13,7 +13,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
13
13
  if (v !== undefined) module.exports = v;
14
14
  }
15
15
  else if (typeof define === "function" && define.amd) {
16
- define(["require", "exports", "../interfaces/profile.interface", "request", "./context.service", "../util/logger"], factory);
16
+ define(["require", "exports", "../interfaces/profile.interface", "request", "./context.service", "../util/logger", "querystring"], factory);
17
17
  }
18
18
  })(function (require, exports) {
19
19
  "use strict";
@@ -22,6 +22,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
22
22
  const request = require("request");
23
23
  const context_service_1 = require("./context.service");
24
24
  const logger_1 = require("../util/logger");
25
+ const querystring = require("querystring");
25
26
  class HttpClientServiceV2 {
26
27
  get(url) {
27
28
  return __awaiter(this, void 0, void 0, function* () {
@@ -34,9 +35,90 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
34
35
  });
35
36
  });
36
37
  }
38
+ postFile(url, body, parameters) {
39
+ return __awaiter(this, void 0, void 0, function* () {
40
+ return new Promise((resolve, reject) => {
41
+ request.post(this.resolveUrl(url) + "?" + querystring.stringify(parameters), this.makeOptions(context_service_1.contextService.getContext().profile, body), (err, res) => {
42
+ this.handleResponse(res, resolve, reject);
43
+ });
44
+ }).catch(e => {
45
+ throw new logger_1.FatalError(e);
46
+ });
47
+ });
48
+ }
49
+ post(url, body) {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ return new Promise((resolve, reject) => {
52
+ request.post(this.resolveUrl(url), this.makeOptionsJson(context_service_1.contextService.getContext().profile, JSON.stringify(body), "application/json;charset=utf-8"), (err, res) => {
53
+ this.handleResponse(res, resolve, reject);
54
+ });
55
+ }).catch(e => {
56
+ throw new logger_1.FatalError(e);
57
+ });
58
+ });
59
+ }
60
+ put(url, body) {
61
+ return __awaiter(this, void 0, void 0, function* () {
62
+ return new Promise((resolve, reject) => {
63
+ request.put(this.resolveUrl(url), this.makeOptionsJson(context_service_1.contextService.getContext().profile, JSON.stringify(body), "application/json;charset=utf-8"), (err, res) => {
64
+ this.handleResponse(res, resolve, reject);
65
+ });
66
+ }).catch(e => {
67
+ throw new logger_1.FatalError(e);
68
+ });
69
+ });
70
+ }
71
+ delete(url) {
72
+ return __awaiter(this, void 0, void 0, function* () {
73
+ return new Promise((resolve, reject) => {
74
+ request.delete(this.resolveUrl(url), this.makeOptionsJson(context_service_1.contextService.getContext().profile, "application/json;charset=utf-8"), (err, res) => {
75
+ this.handleResponse(res, resolve, reject);
76
+ });
77
+ }).catch(e => {
78
+ throw new logger_1.FatalError(e);
79
+ });
80
+ });
81
+ }
82
+ downloadFile(url) {
83
+ return __awaiter(this, void 0, void 0, function* () {
84
+ return new Promise((resolve, reject) => {
85
+ request
86
+ .post(this.resolveUrl(url), this.makeFileDownloadOptions(context_service_1.contextService.getContext().profile))
87
+ .on("response", (response) => {
88
+ const data = [];
89
+ response.on("data", (chunk) => {
90
+ data.push(chunk);
91
+ });
92
+ response.on("end", () => {
93
+ if (this.checkBadRequest(response.statusCode)) {
94
+ this.handleBadRequest(response.statusCode, data.toString(), reject);
95
+ }
96
+ else {
97
+ this.handleResponseStreamData(Buffer.concat(data), resolve, reject);
98
+ }
99
+ });
100
+ })
101
+ .on("error", error => reject(error));
102
+ });
103
+ });
104
+ }
105
+ handleResponseStreamData(data, resolve, reject) {
106
+ if (data) {
107
+ resolve(data);
108
+ return;
109
+ }
110
+ logger_1.logger.error("Could not get file stream from response");
111
+ reject();
112
+ }
37
113
  resolveUrl(url) {
38
114
  return context_service_1.contextService.getContext().profile.team.replace(/\/?$/, url);
39
115
  }
116
+ makeFileDownloadOptions(profile) {
117
+ return {
118
+ headers: this.buildAuthorizationHeaders(profile),
119
+ responseType: "binary",
120
+ };
121
+ }
40
122
  handleResponse(res, resolve, reject) {
41
123
  if (this.checkBadRequest(res.statusCode)) {
42
124
  this.handleBadRequest(res.statusCode, res.body, reject);
@@ -72,11 +154,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
72
154
  };
73
155
  return Object.assign(options, body);
74
156
  }
75
- buildAuthorizationHeaders(profile) {
157
+ makeOptionsJson(profile, body, contentType) {
158
+ return {
159
+ headers: this.buildAuthorizationHeaders(profile, contentType),
160
+ body: body
161
+ };
162
+ }
163
+ buildAuthorizationHeaders(profile, contentType) {
76
164
  const authenticationType = profile.authenticationType || profile_interface_1.AuthenticationType.BEARER;
77
165
  return {
78
166
  authorization: `${authenticationType} ${profile.apiToken}`,
79
- "content-type": "application/json",
167
+ "content-type": contentType !== null && contentType !== void 0 ? contentType : "application/json",
80
168
  };
81
169
  }
82
170
  }
@@ -22,14 +22,12 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
22
22
  class DatamodelService {
23
23
  getDatamodelsForNodes(nodesListToExport) {
24
24
  return __awaiter(this, void 0, void 0, function* () {
25
- const promises = [];
26
- nodesListToExport.forEach(node => {
27
- promises.push(new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
28
- node.datamodels = yield compute_pool_api_1.computePoolApi.findAssignedDatamodels(node.key);
29
- resolve(node);
30
- })));
31
- });
32
- return Promise.all(promises);
25
+ const dataModelsMap = new Map();
26
+ for (const node of nodesListToExport) {
27
+ const assignedDataModels = yield compute_pool_api_1.computePoolApi.findAssignedDatamodels(node.key);
28
+ dataModelsMap.set(node.key, assignedDataModels);
29
+ }
30
+ return dataModelsMap;
33
31
  });
34
32
  }
35
33
  }