@contrail/cli 1.0.67 → 1.0.69

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 (170) hide show
  1. package/.eslintrc.js +53 -53
  2. package/.vscode/settings.json +5 -5
  3. package/README.md +5 -5
  4. package/bin/init +3 -3
  5. package/lib/api/apps.d.ts +13 -13
  6. package/lib/api/apps.js +85 -85
  7. package/lib/api/event-workflow-action-definition.d.ts +1 -1
  8. package/lib/api/event-workflow-action-definition.js +7 -7
  9. package/lib/api/event-workflow-template-definition.d.ts +6 -6
  10. package/lib/api/event-workflow-template-definition.js +20 -20
  11. package/lib/api/event-workflow-templates.d.ts +7 -7
  12. package/lib/api/event-workflow-templates.js +25 -25
  13. package/lib/apps/create-app/create.d.ts +1 -1
  14. package/lib/apps/create-app/create.js +60 -59
  15. package/lib/apps/create-app/setup-template.d.ts +1 -1
  16. package/lib/apps/create-app/setup-template.js +34 -34
  17. package/lib/apps/deploy-app/actions-deployer.d.ts +11 -11
  18. package/lib/apps/deploy-app/actions-deployer.js +114 -114
  19. package/lib/apps/deploy-app/app-deployer.d.ts +8 -8
  20. package/lib/apps/deploy-app/app-deployer.js +93 -93
  21. package/lib/apps/deploy-app/app-template-parsers.d.ts +7 -7
  22. package/lib/apps/deploy-app/app-template-parsers.js +38 -38
  23. package/lib/apps/deploy-app/deploy.d.ts +2 -2
  24. package/lib/apps/deploy-app/deploy.js +58 -58
  25. package/lib/apps/install-app/app-installer.d.ts +2 -2
  26. package/lib/apps/install-app/app-installer.js +120 -120
  27. package/lib/apps/upgrade-app/app-upgrader.d.ts +3 -3
  28. package/lib/apps/upgrade-app/app-upgrader.js +126 -126
  29. package/lib/auth/auth.d.ts +9 -9
  30. package/lib/auth/auth.js +2 -2
  31. package/lib/auth/login.d.ts +2 -2
  32. package/lib/auth/login.js +141 -141
  33. package/lib/cli.d.ts +5 -5
  34. package/lib/cli.js +524 -481
  35. package/lib/colors/color-loader.d.ts +2 -2
  36. package/lib/colors/color-loader.js +96 -96
  37. package/lib/common.d.ts +1 -1
  38. package/lib/common.js +5 -5
  39. package/lib/config/config.d.ts +6 -6
  40. package/lib/config/config.js +70 -70
  41. package/lib/config/configCommands.d.ts +3 -3
  42. package/lib/config/configCommands.js +34 -34
  43. package/lib/interfaces.d.ts +191 -191
  44. package/lib/interfaces.js +25 -25
  45. package/lib/loader-process/loader-process.d.ts +2 -2
  46. package/lib/loader-process/loader-process.js +120 -120
  47. package/lib/projects/interfaces.d.ts +77 -77
  48. package/lib/projects/interfaces.js +23 -23
  49. package/lib/projects/project-exporter.d.ts +2 -2
  50. package/lib/projects/project-exporter.js +187 -187
  51. package/lib/projects/project-uploader.d.ts +1 -1
  52. package/lib/projects/project-uploader.js +105 -105
  53. package/lib/types/allUploader.d.ts +1 -1
  54. package/lib/types/allUploader.js +24 -24
  55. package/lib/types/csv-parser.d.ts +1 -1
  56. package/lib/types/csv-parser.js +51 -51
  57. package/lib/types/interfaces.d.ts +55 -55
  58. package/lib/types/interfaces.js +1 -1
  59. package/lib/types/option-set-hierarchy-exporter.d.ts +1 -1
  60. package/lib/types/option-set-hierarchy-exporter.js +113 -113
  61. package/lib/types/option-set-hierarchy-parser.d.ts +2 -2
  62. package/lib/types/option-set-hierarchy-parser.js +140 -140
  63. package/lib/types/option-set-hierarchy-uploader.d.ts +1 -1
  64. package/lib/types/option-set-hierarchy-uploader.js +113 -113
  65. package/lib/types/option-set-merger.d.ts +1 -1
  66. package/lib/types/option-set-merger.js +105 -102
  67. package/lib/types/option-set-parser.d.ts +3 -1
  68. package/lib/types/option-set-parser.js +140 -50
  69. package/lib/types/option-set-uploader.d.ts +1 -1
  70. package/lib/types/option-set-uploader.js +98 -98
  71. package/lib/types/parse-types.d.ts +4 -4
  72. package/lib/types/parse-types.js +189 -189
  73. package/lib/types/rule-set-uploader.d.ts +1 -1
  74. package/lib/types/rule-set-uploader.js +172 -172
  75. package/lib/types/type-property-policy-uploader.d.ts +1 -1
  76. package/lib/types/type-property-policy-uploader.js +178 -178
  77. package/lib/types/types-extractor.d.ts +27 -27
  78. package/lib/types/types-extractor.js +318 -318
  79. package/lib/types/types-properties-merger.d.ts +1 -1
  80. package/lib/types/types-properties-merger.js +75 -75
  81. package/lib/types/types-uploader.d.ts +1 -1
  82. package/lib/types/types-uploader.js +239 -239
  83. package/lib/types/usage-info-uploader.d.ts +1 -1
  84. package/lib/types/usage-info-uploader.js +132 -132
  85. package/lib/users/user-exporter.d.ts +1 -0
  86. package/lib/users/user-exporter.js +41 -0
  87. package/lib/users/user-uploader.d.ts +1 -0
  88. package/lib/users/user-uploader.js +45 -0
  89. package/lib/workflow-template-definitions/workflow-template-definition-commands.d.ts +2 -2
  90. package/lib/workflow-template-definitions/workflow-template-definition-commands.js +10 -10
  91. package/lib/workflow-template-definitions/workflow-template-definition-deployer.d.ts +12 -12
  92. package/lib/workflow-template-definitions/workflow-template-definition-deployer.js +151 -151
  93. package/lib/workflow-templates/local-workflow-template-deployer.d.ts +11 -11
  94. package/lib/workflow-templates/local-workflow-template-deployer.js +102 -102
  95. package/lib/workflow-templates/workflow-template-commands.d.ts +4 -4
  96. package/lib/workflow-templates/workflow-template-commands.js +51 -51
  97. package/lib/workflow-templates/workflow-template-deployer.d.ts +4 -4
  98. package/lib/workflow-templates/workflow-template-deployer.js +26 -26
  99. package/package.json +72 -72
  100. package/publish.bat +5 -0
  101. package/publish.sh +4 -4
  102. package/src/api/apps.ts +96 -96
  103. package/src/api/event-workflow-action-definition.ts +7 -7
  104. package/src/api/event-workflow-template-definition.ts +22 -22
  105. package/src/api/event-workflow-templates.ts +28 -28
  106. package/src/apps/create-app/create.ts +74 -73
  107. package/src/apps/create-app/setup-template.ts +37 -37
  108. package/src/apps/deploy-app/actions-deployer.ts +140 -140
  109. package/src/apps/deploy-app/app-deployer.ts +105 -105
  110. package/src/apps/deploy-app/app-template-parsers.ts +43 -43
  111. package/src/apps/deploy-app/deploy.ts +65 -65
  112. package/src/apps/install-app/app-installer.ts +125 -125
  113. package/src/apps/upgrade-app/app-upgrader.ts +131 -131
  114. package/src/auth/auth.ts +9 -9
  115. package/src/auth/login.ts +155 -155
  116. package/src/cli.ts +540 -496
  117. package/src/colors/color-loader.ts +112 -112
  118. package/src/colors/colors.csv +866 -866
  119. package/src/common.ts +4 -4
  120. package/src/config/config.ts +74 -74
  121. package/src/config/configCommands.ts +37 -37
  122. package/src/interfaces.ts +200 -200
  123. package/src/loader-process/loader-process.ts +151 -151
  124. package/src/projects/interfaces.ts +72 -72
  125. package/src/projects/project-exporter.ts +224 -224
  126. package/src/projects/project-uploader.ts +130 -130
  127. package/src/types/allUploader.ts +28 -28
  128. package/src/types/csv-parser.ts +58 -58
  129. package/src/types/interfaces.ts +58 -58
  130. package/src/types/option-set-hierarchy-exporter.ts +124 -124
  131. package/src/types/option-set-hierarchy-parser.ts +168 -168
  132. package/src/types/option-set-hierarchy-uploader.ts +121 -121
  133. package/src/types/option-set-merger.ts +123 -122
  134. package/src/types/option-set-parser.ts +165 -59
  135. package/src/types/option-set-uploader.ts +107 -107
  136. package/src/types/parse-types.ts +226 -226
  137. package/src/types/rule-set-uploader.ts +186 -186
  138. package/src/types/type-property-policy-uploader.ts +191 -191
  139. package/src/types/types-extractor.ts +368 -368
  140. package/src/types/types-properties-merger.ts +89 -89
  141. package/src/types/types-uploader.ts +271 -271
  142. package/src/types/usage-info-uploader.ts +138 -138
  143. package/src/users/user-exporter.ts +52 -0
  144. package/src/users/user-uploader.ts +58 -0
  145. package/src/workflow-template-definitions/workflow-template-definition-commands.ts +12 -12
  146. package/src/workflow-template-definitions/workflow-template-definition-deployer.ts +184 -184
  147. package/src/workflow-templates/local-workflow-template-deployer.ts +125 -125
  148. package/src/workflow-templates/workflow-template-commands.ts +59 -59
  149. package/src/workflow-templates/workflow-template-deployer.ts +29 -29
  150. package/templates/docker_deploy.bat +1 -0
  151. package/templates/javascript/actions/example/action.js +37 -37
  152. package/templates/javascript/app.yml +52 -52
  153. package/templates/javascript/package.json +23 -23
  154. package/templates/typescript/Dockerfile +15 -14
  155. package/templates/typescript/README.md +10 -10
  156. package/templates/typescript/app.yml +50 -54
  157. package/templates/typescript/package-lock.json +14 -14
  158. package/templates/typescript/package.json +54 -52
  159. package/templates/typescript/src/actions/logItem.ts +26 -0
  160. package/templates/typescript/src/framework/action-dispatcher.ts +86 -0
  161. package/templates/typescript/src/framework/app-config.ts +27 -0
  162. package/templates/typescript/src/framework/handler.ts +11 -0
  163. package/templates/typescript/src/framework/index.ts +3 -0
  164. package/templates/typescript/src/framework/interfaces.ts +32 -0
  165. package/templates/typescript/src/framework/logger.ts +21 -0
  166. package/templates/typescript/{actions → src/framework}/mock-server.ts +7 -0
  167. package/templates/typescript/tsconfig.json +28 -27
  168. package/tsconfig.json +31 -30
  169. package/templates/typescript/actions/handler.ts +0 -62
  170. package/templates/typescript/actions/utils/logger.ts +0 -15
@@ -1,151 +1,151 @@
1
- import inquirer from 'inquirer';
2
- import chalk from 'chalk';
3
- import { getInstalledApps, getWorkflowTemplateDefinitionsForApp } from '../api/apps';
4
- import { createWorkflowTemplate } from '../api/event-workflow-templates';
5
- import { createWorkflowTemplateDefinition, deleteWorkflowTemplateDefinition, updateWorkflowTemplateDefinition as apiUpdateWorkflowTemplateDefinition } from '../api/event-workflow-template-definition';
6
- import { getActionDeclarationIdentifier, getActionsForApp } from '../apps/deploy-app/actions-deployer';
7
- export class WorkflowTemplateDefinitionDeployer {
8
- async cliInstallWorkflowTemplateDefinitions() {
9
- const installedApps = await getInstalledApps();
10
- if (!installedApps.length) {
11
- console.log('%s \nNo apps are currently installed. You must install an app before installing its associated workflow template definitions.', chalk.red.bold('WORKFLOW DEFINITION'));
12
- return;
13
- }
14
- const answers = await inquirer.prompt([{
15
- type: 'list',
16
- name: 'appIdentifier',
17
- message: 'Which app\'s workflow would you like to install?',
18
- choices: installedApps.map(x => x.app.identifier)
19
- }]);
20
- const app = installedApps.find(x => x.app.identifier === answers.appIdentifier).app;
21
- const workflowTemplateDefinitions = await getWorkflowTemplateDefinitionsForApp({ appId: app.id });
22
- for (const definition of workflowTemplateDefinitions) {
23
- console.log(chalk.yellow.bold(`- ${definition.name}`));
24
- }
25
- await this.installWorkflowTemplateDefinitions(workflowTemplateDefinitions);
26
- }
27
- async installWorkflowTemplateDefinitions(workflowTemplateDefinitions) {
28
- let answers = await inquirer.prompt([{
29
- type: 'checkbox',
30
- name: 'workflowTemplateDefinitionsToInstall',
31
- message: 'Which workflow templates would you like to install?',
32
- choices: workflowTemplateDefinitions.map(x => { return { value: x.identifier, name: x.name }; }),
33
- }]);
34
- const workflowTemplateDefinitionsToInstall = workflowTemplateDefinitions.filter(x => answers.workflowTemplateDefinitionsToInstall.includes(x.identifier));
35
- answers = await inquirer.prompt([{
36
- type: 'confirm',
37
- name: 'makeActive',
38
- message: 'Should the workflows be active ?(yes)',
39
- default: true,
40
- }]);
41
- const makeActive = answers.makeActive;
42
- for (const definition of workflowTemplateDefinitionsToInstall) {
43
- const newObject = {
44
- name: definition.name,
45
- triggerKey: definition.triggerKey,
46
- workflowDefinition: definition.workflowDefinition,
47
- isActive: makeActive,
48
- supportingAppId: definition.supportingAppId,
49
- };
50
- await createWorkflowTemplate(newObject);
51
- }
52
- console.log('%s \nInstalled workflows', chalk.green.bold('WORKFLOW DEFINITION'));
53
- }
54
- async listWorkflowTemplateDefinitions() {
55
- const installedApps = await getInstalledApps();
56
- const workflowTemplateDefinitions = [];
57
- for (const appOrg of installedApps) {
58
- workflowTemplateDefinitions.push(...await (await getWorkflowTemplateDefinitionsForApp({ appId: appOrg.appId })).map(x => {
59
- return {
60
- appName: appOrg.app.name,
61
- workflowName: x.name,
62
- };
63
- }));
64
- }
65
- console.log('(app name) workflow name');
66
- console.log('------------------------');
67
- console.log(chalk.green.bold(workflowTemplateDefinitions.map(x => `(${x.appName}) ${x.workflowName} `).join('\n')));
68
- }
69
- async deployWorkflowTemplateDefinitions(appDeclaration, app) {
70
- // FETCH ALL WORKFLOWS FROM THE API.
71
- const existingWorkflows = await getWorkflowTemplateDefinitionsForApp({ appId: app.id });
72
- // UPSERT / DELETE BASED ON WORKFLOW IDENTIFIER
73
- console.log('%s \tDeploying workflow definitions.', chalk.yellow.bold('WORKFLOW DEFINITION'));
74
- if (appDeclaration.workflows) {
75
- const localWorkflows = Object.keys(appDeclaration.workflows);
76
- if ((localWorkflows === null || localWorkflows === void 0 ? void 0 : localWorkflows.length) > 0) {
77
- for (const workflowKey of localWorkflows) {
78
- await this.deployWorkflow(workflowKey, appDeclaration.workflows[workflowKey], app, existingWorkflows);
79
- }
80
- }
81
- // remove old templates that were removed by the app publisher
82
- const localIdentifiers = localWorkflows.map(x => this.getWorkflowDeclarationIdentifier(x, app));
83
- const workflowTemplateDefinitionsToDelete = existingWorkflows.filter(x => !localIdentifiers.includes(x.identifier));
84
- for (const templateToDelete of workflowTemplateDefinitionsToDelete) {
85
- await deleteWorkflowTemplateDefinition(templateToDelete.id);
86
- }
87
- }
88
- }
89
- async deployWorkflow(workflowKey, workflow, app, existingWorkflows) {
90
- console.log(`%s \tDeploying workflow definitions: ${workflowKey}`, chalk.yellow.bold('WORKFLOW DEFINITION'));
91
- const identifier = this.getWorkflowDeclarationIdentifier(workflowKey, app);
92
- const existingDefinition = existingWorkflows.find(ad => ad.identifier === identifier);
93
- if (existingDefinition) {
94
- return await this.updateWorkflowTemplateDefinition(existingDefinition, workflow, app);
95
- }
96
- return await this.createNewWorkflowDefinition(workflowKey, workflow, app);
97
- }
98
- async createNewWorkflowDefinition(workflowKey, workflowDeclaration, app) {
99
- await this.populateActionIds(workflowDeclaration, app);
100
- const newObject = {
101
- identifier: this.getWorkflowDeclarationIdentifier(workflowKey, app),
102
- name: workflowDeclaration.name,
103
- ownerKey: `app:${app.id}`,
104
- triggerKey: workflowDeclaration.triggerKey,
105
- workflowDefinition: workflowDeclaration.workflowDefinition,
106
- public: workflowDeclaration.public,
107
- isActive: workflowDeclaration.isActive,
108
- messageGroupId: workflowDeclaration.messageGroupId,
109
- parallelWorkerCount: workflowDeclaration.parallelWorkerCount,
110
- };
111
- const workflowTemplate = await createWorkflowTemplateDefinition(newObject);
112
- console.log(`%s Created new workflow definition definitions: ${workflowKey}`, chalk.yellow.bold('WORKFLOW DEFINITION'));
113
- return workflowTemplate;
114
- }
115
- async populateActionIds(workflowDefinition, app) {
116
- var _a;
117
- const availableAppActions = await getActionsForApp(app);
118
- if (!((_a = workflowDefinition.workflowDefinition) === null || _a === void 0 ? void 0 : _a.paths)) {
119
- return;
120
- }
121
- for (const path of workflowDefinition.workflowDefinition.paths) {
122
- if (!(path === null || path === void 0 ? void 0 : path.actionDefinitionConfigs)) {
123
- continue;
124
- }
125
- for (const actionConfiguration of path.actionDefinitionConfigs) {
126
- const actionKey = actionConfiguration.action;
127
- const action = availableAppActions.find(action => action.identifier === getActionDeclarationIdentifier(actionKey, app));
128
- if (!action) {
129
- throw new Error(`Could not find action ${actionKey} declared in workflow definition ${workflowDefinition.name}`);
130
- }
131
- actionConfiguration.id = action.id;
132
- }
133
- }
134
- }
135
- async updateWorkflowTemplateDefinition(existingWorkflowDefinition, workflowDefinition, app) {
136
- await this.populateActionIds(workflowDefinition, app);
137
- const updates = Object.assign(new Object(), {
138
- name: workflowDefinition.name,
139
- triggerKey: workflowDefinition.triggerKey,
140
- workflowDefinition: workflowDefinition.workflowDefinition,
141
- messageGroupId: workflowDefinition.messageGroupId,
142
- parallelWorkerCount: workflowDefinition.parallelWorkerCount,
143
- });
144
- const updatedWorkflowDefinition = await apiUpdateWorkflowTemplateDefinition({ id: existingWorkflowDefinition.id, updates });
145
- console.log(`%s Updated existing workflow definition: ${updatedWorkflowDefinition.identifier}`, chalk.yellow.bold('WORKFLOW DEFINITION'));
146
- return updatedWorkflowDefinition;
147
- }
148
- getWorkflowDeclarationIdentifier(actionKey, app) {
149
- return app.identifier + ':' + actionKey;
150
- }
151
- }
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import { getInstalledApps, getWorkflowTemplateDefinitionsForApp } from '../api/apps';
4
+ import { createWorkflowTemplate } from '../api/event-workflow-templates';
5
+ import { createWorkflowTemplateDefinition, deleteWorkflowTemplateDefinition, updateWorkflowTemplateDefinition as apiUpdateWorkflowTemplateDefinition } from '../api/event-workflow-template-definition';
6
+ import { getActionDeclarationIdentifier, getActionsForApp } from '../apps/deploy-app/actions-deployer';
7
+ export class WorkflowTemplateDefinitionDeployer {
8
+ async cliInstallWorkflowTemplateDefinitions() {
9
+ const installedApps = await getInstalledApps();
10
+ if (!installedApps.length) {
11
+ console.log('%s \nNo apps are currently installed. You must install an app before installing its associated workflow template definitions.', chalk.red.bold('WORKFLOW DEFINITION'));
12
+ return;
13
+ }
14
+ const answers = await inquirer.prompt([{
15
+ type: 'list',
16
+ name: 'appIdentifier',
17
+ message: 'Which app\'s workflow would you like to install?',
18
+ choices: installedApps.map(x => x.app.identifier)
19
+ }]);
20
+ const app = installedApps.find(x => x.app.identifier === answers.appIdentifier).app;
21
+ const workflowTemplateDefinitions = await getWorkflowTemplateDefinitionsForApp({ appId: app.id });
22
+ for (const definition of workflowTemplateDefinitions) {
23
+ console.log(chalk.yellow.bold(`- ${definition.name}`));
24
+ }
25
+ await this.installWorkflowTemplateDefinitions(workflowTemplateDefinitions);
26
+ }
27
+ async installWorkflowTemplateDefinitions(workflowTemplateDefinitions) {
28
+ let answers = await inquirer.prompt([{
29
+ type: 'checkbox',
30
+ name: 'workflowTemplateDefinitionsToInstall',
31
+ message: 'Which workflow templates would you like to install?',
32
+ choices: workflowTemplateDefinitions.map(x => { return { value: x.identifier, name: x.name }; }),
33
+ }]);
34
+ const workflowTemplateDefinitionsToInstall = workflowTemplateDefinitions.filter(x => answers.workflowTemplateDefinitionsToInstall.includes(x.identifier));
35
+ answers = await inquirer.prompt([{
36
+ type: 'confirm',
37
+ name: 'makeActive',
38
+ message: 'Should the workflows be active ?(yes)',
39
+ default: true,
40
+ }]);
41
+ const makeActive = answers.makeActive;
42
+ for (const definition of workflowTemplateDefinitionsToInstall) {
43
+ const newObject = {
44
+ name: definition.name,
45
+ triggerKey: definition.triggerKey,
46
+ workflowDefinition: definition.workflowDefinition,
47
+ isActive: makeActive,
48
+ supportingAppId: definition.supportingAppId,
49
+ };
50
+ await createWorkflowTemplate(newObject);
51
+ }
52
+ console.log('%s \nInstalled workflows', chalk.green.bold('WORKFLOW DEFINITION'));
53
+ }
54
+ async listWorkflowTemplateDefinitions() {
55
+ const installedApps = await getInstalledApps();
56
+ const workflowTemplateDefinitions = [];
57
+ for (const appOrg of installedApps) {
58
+ workflowTemplateDefinitions.push(...await (await getWorkflowTemplateDefinitionsForApp({ appId: appOrg.appId })).map(x => {
59
+ return {
60
+ appName: appOrg.app.name,
61
+ workflowName: x.name,
62
+ };
63
+ }));
64
+ }
65
+ console.log('(app name) workflow name');
66
+ console.log('------------------------');
67
+ console.log(chalk.green.bold(workflowTemplateDefinitions.map(x => `(${x.appName}) ${x.workflowName} `).join('\n')));
68
+ }
69
+ async deployWorkflowTemplateDefinitions(appDeclaration, app) {
70
+ // FETCH ALL WORKFLOWS FROM THE API.
71
+ const existingWorkflows = await getWorkflowTemplateDefinitionsForApp({ appId: app.id });
72
+ // UPSERT / DELETE BASED ON WORKFLOW IDENTIFIER
73
+ console.log('%s \tDeploying workflow definitions.', chalk.yellow.bold('WORKFLOW DEFINITION'));
74
+ if (appDeclaration.workflows) {
75
+ const localWorkflows = Object.keys(appDeclaration.workflows);
76
+ if ((localWorkflows === null || localWorkflows === void 0 ? void 0 : localWorkflows.length) > 0) {
77
+ for (const workflowKey of localWorkflows) {
78
+ await this.deployWorkflow(workflowKey, appDeclaration.workflows[workflowKey], app, existingWorkflows);
79
+ }
80
+ }
81
+ // remove old templates that were removed by the app publisher
82
+ const localIdentifiers = localWorkflows.map(x => this.getWorkflowDeclarationIdentifier(x, app));
83
+ const workflowTemplateDefinitionsToDelete = existingWorkflows.filter(x => !localIdentifiers.includes(x.identifier));
84
+ for (const templateToDelete of workflowTemplateDefinitionsToDelete) {
85
+ await deleteWorkflowTemplateDefinition(templateToDelete.id);
86
+ }
87
+ }
88
+ }
89
+ async deployWorkflow(workflowKey, workflow, app, existingWorkflows) {
90
+ console.log(`%s \tDeploying workflow definitions: ${workflowKey}`, chalk.yellow.bold('WORKFLOW DEFINITION'));
91
+ const identifier = this.getWorkflowDeclarationIdentifier(workflowKey, app);
92
+ const existingDefinition = existingWorkflows.find(ad => ad.identifier === identifier);
93
+ if (existingDefinition) {
94
+ return await this.updateWorkflowTemplateDefinition(existingDefinition, workflow, app);
95
+ }
96
+ return await this.createNewWorkflowDefinition(workflowKey, workflow, app);
97
+ }
98
+ async createNewWorkflowDefinition(workflowKey, workflowDeclaration, app) {
99
+ await this.populateActionIds(workflowDeclaration, app);
100
+ const newObject = {
101
+ identifier: this.getWorkflowDeclarationIdentifier(workflowKey, app),
102
+ name: workflowDeclaration.name,
103
+ ownerKey: `app:${app.id}`,
104
+ triggerKey: workflowDeclaration.triggerKey,
105
+ workflowDefinition: workflowDeclaration.workflowDefinition,
106
+ public: workflowDeclaration.public,
107
+ isActive: workflowDeclaration.isActive,
108
+ messageGroupId: workflowDeclaration.messageGroupId,
109
+ parallelWorkerCount: workflowDeclaration.parallelWorkerCount,
110
+ };
111
+ const workflowTemplate = await createWorkflowTemplateDefinition(newObject);
112
+ console.log(`%s Created new workflow definition definitions: ${workflowKey}`, chalk.yellow.bold('WORKFLOW DEFINITION'));
113
+ return workflowTemplate;
114
+ }
115
+ async populateActionIds(workflowDefinition, app) {
116
+ var _a;
117
+ const availableAppActions = await getActionsForApp(app);
118
+ if (!((_a = workflowDefinition.workflowDefinition) === null || _a === void 0 ? void 0 : _a.paths)) {
119
+ return;
120
+ }
121
+ for (const path of workflowDefinition.workflowDefinition.paths) {
122
+ if (!(path === null || path === void 0 ? void 0 : path.actionDefinitionConfigs)) {
123
+ continue;
124
+ }
125
+ for (const actionConfiguration of path.actionDefinitionConfigs) {
126
+ const actionKey = actionConfiguration.action;
127
+ const action = availableAppActions.find(action => action.identifier === getActionDeclarationIdentifier(actionKey, app));
128
+ if (!action) {
129
+ throw new Error(`Could not find action ${actionKey} declared in workflow definition ${workflowDefinition.name}`);
130
+ }
131
+ actionConfiguration.id = action.id;
132
+ }
133
+ }
134
+ }
135
+ async updateWorkflowTemplateDefinition(existingWorkflowDefinition, workflowDefinition, app) {
136
+ await this.populateActionIds(workflowDefinition, app);
137
+ const updates = Object.assign(new Object(), {
138
+ name: workflowDefinition.name,
139
+ triggerKey: workflowDefinition.triggerKey,
140
+ workflowDefinition: workflowDefinition.workflowDefinition,
141
+ messageGroupId: workflowDefinition.messageGroupId,
142
+ parallelWorkerCount: workflowDefinition.parallelWorkerCount,
143
+ });
144
+ const updatedWorkflowDefinition = await apiUpdateWorkflowTemplateDefinition({ id: existingWorkflowDefinition.id, updates });
145
+ console.log(`%s Updated existing workflow definition: ${updatedWorkflowDefinition.identifier}`, chalk.yellow.bold('WORKFLOW DEFINITION'));
146
+ return updatedWorkflowDefinition;
147
+ }
148
+ getWorkflowDeclarationIdentifier(actionKey, app) {
149
+ return app.identifier + ':' + actionKey;
150
+ }
151
+ }
@@ -1,11 +1,11 @@
1
- import { WorkflowTemplate, WorkflowTemplateDeclaration } from '../interfaces';
2
- export declare class LocalWorkflowTemplateDeployer {
3
- deployWorkflows(wtDeclaration: WorkflowTemplateDeclaration): Promise<void>;
4
- deployWorkflowTemplate(workflowKey: string, workflow: WorkflowTemplate, existingWorkflows: Array<any>): Promise<any>;
5
- private createNewWorkflowTemplate;
6
- private populateActionIds;
7
- private updateWorkflowTemplate;
8
- deleteWorkflowTemplates(wtDeclaration: WorkflowTemplateDeclaration): Promise<void>;
9
- }
10
- export declare function getWorkflowTemplateIdentifier(workflowKey: string): string;
11
- export declare function getActionByIdentifier(identifier: string): Promise<any>;
1
+ import { WorkflowTemplate, WorkflowTemplateDeclaration } from '../interfaces';
2
+ export declare class LocalWorkflowTemplateDeployer {
3
+ deployWorkflows(wtDeclaration: WorkflowTemplateDeclaration): Promise<void>;
4
+ deployWorkflowTemplate(workflowKey: string, workflow: WorkflowTemplate, existingWorkflows: Array<any>): Promise<any>;
5
+ private createNewWorkflowTemplate;
6
+ private populateActionIds;
7
+ private updateWorkflowTemplate;
8
+ deleteWorkflowTemplates(wtDeclaration: WorkflowTemplateDeclaration): Promise<void>;
9
+ }
10
+ export declare function getWorkflowTemplateIdentifier(workflowKey: string): string;
11
+ export declare function getActionByIdentifier(identifier: string): Promise<any>;
@@ -1,102 +1,102 @@
1
- import chalk from 'chalk';
2
- import { getEventWorkflowActionDefinition } from '../api/event-workflow-action-definition';
3
- import { createWorkflowTemplate, deleteWorkflowTemplate, getExistingWorkflowTemplates, updateWorkflowTemplate as apiUpdateWorkflowTemplate } from '../api/event-workflow-templates';
4
- export class LocalWorkflowTemplateDeployer {
5
- async deployWorkflows(wtDeclaration) {
6
- // FETCH ALL WORKFLOWS FROM THE API.
7
- const existingWorkflows = await getExistingWorkflowTemplates();
8
- // UPSERT / DELETE BASED ON WORKFLOW TEMPLATES IDENTIFIER
9
- console.log('%s \tDeploying workflow templates.', chalk.yellow.bold('WORKFLOW TEMPLATES'));
10
- for (const workflowKey of Object.keys(wtDeclaration.workflows)) {
11
- await this.deployWorkflowTemplate(workflowKey, wtDeclaration.workflows[workflowKey], existingWorkflows);
12
- }
13
- }
14
- async deployWorkflowTemplate(workflowKey, workflow, existingWorkflows) {
15
- console.log(`%s \tDeploying workflow: ${workflowKey}`, chalk.yellow.bold('WORKFLOW TEMPLATES'));
16
- const identifier = getWorkflowTemplateIdentifier(workflowKey);
17
- const existingTemplate = existingWorkflows.find(ad => ad.identifier === identifier);
18
- if (existingTemplate) {
19
- return await this.updateWorkflowTemplate(workflowKey, existingTemplate, workflow);
20
- }
21
- return await this.createNewWorkflowTemplate(workflowKey, workflow);
22
- }
23
- async createNewWorkflowTemplate(workflowKey, workflowTemplate) {
24
- await this.populateActionIds(workflowTemplate, workflowKey);
25
- const newObject = {
26
- identifier: getWorkflowTemplateIdentifier(workflowKey),
27
- name: workflowTemplate.name,
28
- triggerKey: workflowTemplate.triggerKey,
29
- workflowDefinition: workflowTemplate.workflowDefinition,
30
- isActive: workflowTemplate.isActive,
31
- supportingAppId: workflowTemplate.supportingAppId,
32
- messageGroupId: workflowTemplate.messageGroupId,
33
- parallelWorkerCount: workflowTemplate.parallelWorkerCount,
34
- };
35
- const newWorkflowTemplate = await createWorkflowTemplate(newObject);
36
- console.log(`%s Created new workflow definition: ${workflowKey}`, chalk.yellow.bold('WORKFLOW TEMPLATES'));
37
- return newWorkflowTemplate;
38
- }
39
- async populateActionIds(workflowTemplate, workflowKey) {
40
- var _a;
41
- if (!((_a = workflowTemplate === null || workflowTemplate === void 0 ? void 0 : workflowTemplate.workflowDefinition) === null || _a === void 0 ? void 0 : _a.paths)) {
42
- return;
43
- }
44
- for (const path of workflowTemplate.workflowDefinition.paths) {
45
- if (!(path === null || path === void 0 ? void 0 : path.actionDefinitionConfigs)) {
46
- continue;
47
- }
48
- for (const actionConfiguration of path.actionDefinitionConfigs) {
49
- const actionKey = actionConfiguration.action;
50
- try {
51
- const actionEntity = await getActionByIdentifier(actionKey);
52
- actionConfiguration.id = actionEntity.id;
53
- }
54
- catch (e) {
55
- console.log(e);
56
- }
57
- if (!actionConfiguration.id) {
58
- throw new Error(`Could not find action ${actionKey} declared in ${workflowKey}`);
59
- }
60
- }
61
- }
62
- }
63
- async updateWorkflowTemplate(workflowKey, existingWorkflowTemplate, workflowTemplate) {
64
- await this.populateActionIds(workflowTemplate, workflowKey);
65
- const updates = Object.assign(new Object(), {
66
- name: workflowTemplate.name,
67
- triggerKey: workflowTemplate.triggerKey,
68
- workflowDefinition: workflowTemplate.workflowDefinition
69
- });
70
- const updatedWorkflowTemplate = await apiUpdateWorkflowTemplate({ id: existingWorkflowTemplate.id, updates });
71
- console.log(`%s Updated existing workflow template: ${updatedWorkflowTemplate.identifier}`, chalk.yellow.bold('WORKFLOW TEMPLATES'));
72
- return updatedWorkflowTemplate;
73
- }
74
- async deleteWorkflowTemplates(wtDeclaration) {
75
- // FETCH ALL WORKFLOWS FROM THE API.
76
- const existingWorkflows = await getExistingWorkflowTemplates();
77
- // UPSERT / DELETE BASED ON WORKFLOW TEMPLATES IDENTIFIER
78
- console.log('%s \tDELETING workflow templates.', chalk.yellow.bold('WORKFLOW TEMPLATES'));
79
- for (const workflowKey of Object.keys(wtDeclaration.workflows)) {
80
- const identifier = getWorkflowTemplateIdentifier(workflowKey);
81
- const existingTemplate = existingWorkflows.find(ad => ad.identifier === identifier);
82
- if (existingTemplate) {
83
- try {
84
- await deleteWorkflowTemplate(identifier);
85
- }
86
- catch (e) {
87
- console.log('%s \tFAILED to delete workflow template %s.', chalk.red.bold('WORKFLOW TEMPLATES'), identifier);
88
- }
89
- }
90
- else {
91
- console.log('%s \tUnable to locate workflow template %s.', chalk.yellow.bold('WORKFLOW TEMPLATES'), identifier);
92
- }
93
- }
94
- }
95
- }
96
- export function getWorkflowTemplateIdentifier(workflowKey) {
97
- return workflowKey;
98
- }
99
- export async function getActionByIdentifier(identifier) {
100
- const result = await getEventWorkflowActionDefinition({ identifier });
101
- return result.length > 0 ? result[0] : {};
102
- }
1
+ import chalk from 'chalk';
2
+ import { getEventWorkflowActionDefinition } from '../api/event-workflow-action-definition';
3
+ import { createWorkflowTemplate, deleteWorkflowTemplate, getExistingWorkflowTemplates, updateWorkflowTemplate as apiUpdateWorkflowTemplate } from '../api/event-workflow-templates';
4
+ export class LocalWorkflowTemplateDeployer {
5
+ async deployWorkflows(wtDeclaration) {
6
+ // FETCH ALL WORKFLOWS FROM THE API.
7
+ const existingWorkflows = await getExistingWorkflowTemplates();
8
+ // UPSERT / DELETE BASED ON WORKFLOW TEMPLATES IDENTIFIER
9
+ console.log('%s \tDeploying workflow templates.', chalk.yellow.bold('WORKFLOW TEMPLATES'));
10
+ for (const workflowKey of Object.keys(wtDeclaration.workflows)) {
11
+ await this.deployWorkflowTemplate(workflowKey, wtDeclaration.workflows[workflowKey], existingWorkflows);
12
+ }
13
+ }
14
+ async deployWorkflowTemplate(workflowKey, workflow, existingWorkflows) {
15
+ console.log(`%s \tDeploying workflow: ${workflowKey}`, chalk.yellow.bold('WORKFLOW TEMPLATES'));
16
+ const identifier = getWorkflowTemplateIdentifier(workflowKey);
17
+ const existingTemplate = existingWorkflows.find(ad => ad.identifier === identifier);
18
+ if (existingTemplate) {
19
+ return await this.updateWorkflowTemplate(workflowKey, existingTemplate, workflow);
20
+ }
21
+ return await this.createNewWorkflowTemplate(workflowKey, workflow);
22
+ }
23
+ async createNewWorkflowTemplate(workflowKey, workflowTemplate) {
24
+ await this.populateActionIds(workflowTemplate, workflowKey);
25
+ const newObject = {
26
+ identifier: getWorkflowTemplateIdentifier(workflowKey),
27
+ name: workflowTemplate.name,
28
+ triggerKey: workflowTemplate.triggerKey,
29
+ workflowDefinition: workflowTemplate.workflowDefinition,
30
+ isActive: workflowTemplate.isActive,
31
+ supportingAppId: workflowTemplate.supportingAppId,
32
+ messageGroupId: workflowTemplate.messageGroupId,
33
+ parallelWorkerCount: workflowTemplate.parallelWorkerCount,
34
+ };
35
+ const newWorkflowTemplate = await createWorkflowTemplate(newObject);
36
+ console.log(`%s Created new workflow definition: ${workflowKey}`, chalk.yellow.bold('WORKFLOW TEMPLATES'));
37
+ return newWorkflowTemplate;
38
+ }
39
+ async populateActionIds(workflowTemplate, workflowKey) {
40
+ var _a;
41
+ if (!((_a = workflowTemplate === null || workflowTemplate === void 0 ? void 0 : workflowTemplate.workflowDefinition) === null || _a === void 0 ? void 0 : _a.paths)) {
42
+ return;
43
+ }
44
+ for (const path of workflowTemplate.workflowDefinition.paths) {
45
+ if (!(path === null || path === void 0 ? void 0 : path.actionDefinitionConfigs)) {
46
+ continue;
47
+ }
48
+ for (const actionConfiguration of path.actionDefinitionConfigs) {
49
+ const actionKey = actionConfiguration.action;
50
+ try {
51
+ const actionEntity = await getActionByIdentifier(actionKey);
52
+ actionConfiguration.id = actionEntity.id;
53
+ }
54
+ catch (e) {
55
+ console.log(e);
56
+ }
57
+ if (!actionConfiguration.id) {
58
+ throw new Error(`Could not find action ${actionKey} declared in ${workflowKey}`);
59
+ }
60
+ }
61
+ }
62
+ }
63
+ async updateWorkflowTemplate(workflowKey, existingWorkflowTemplate, workflowTemplate) {
64
+ await this.populateActionIds(workflowTemplate, workflowKey);
65
+ const updates = Object.assign(new Object(), {
66
+ name: workflowTemplate.name,
67
+ triggerKey: workflowTemplate.triggerKey,
68
+ workflowDefinition: workflowTemplate.workflowDefinition
69
+ });
70
+ const updatedWorkflowTemplate = await apiUpdateWorkflowTemplate({ id: existingWorkflowTemplate.id, updates });
71
+ console.log(`%s Updated existing workflow template: ${updatedWorkflowTemplate.identifier}`, chalk.yellow.bold('WORKFLOW TEMPLATES'));
72
+ return updatedWorkflowTemplate;
73
+ }
74
+ async deleteWorkflowTemplates(wtDeclaration) {
75
+ // FETCH ALL WORKFLOWS FROM THE API.
76
+ const existingWorkflows = await getExistingWorkflowTemplates();
77
+ // UPSERT / DELETE BASED ON WORKFLOW TEMPLATES IDENTIFIER
78
+ console.log('%s \tDELETING workflow templates.', chalk.yellow.bold('WORKFLOW TEMPLATES'));
79
+ for (const workflowKey of Object.keys(wtDeclaration.workflows)) {
80
+ const identifier = getWorkflowTemplateIdentifier(workflowKey);
81
+ const existingTemplate = existingWorkflows.find(ad => ad.identifier === identifier);
82
+ if (existingTemplate) {
83
+ try {
84
+ await deleteWorkflowTemplate(identifier);
85
+ }
86
+ catch (e) {
87
+ console.log('%s \tFAILED to delete workflow template %s.', chalk.red.bold('WORKFLOW TEMPLATES'), identifier);
88
+ }
89
+ }
90
+ else {
91
+ console.log('%s \tUnable to locate workflow template %s.', chalk.yellow.bold('WORKFLOW TEMPLATES'), identifier);
92
+ }
93
+ }
94
+ }
95
+ }
96
+ export function getWorkflowTemplateIdentifier(workflowKey) {
97
+ return workflowKey;
98
+ }
99
+ export async function getActionByIdentifier(identifier) {
100
+ const result = await getEventWorkflowActionDefinition({ identifier });
101
+ return result.length > 0 ? result[0] : {};
102
+ }
@@ -1,4 +1,4 @@
1
- export declare function deleteWorkflowTemplates(): Promise<void>;
2
- export declare function localDeleteWorkflowTemplate(): Promise<void>;
3
- export declare function localDeployWorkflowTemplate(): Promise<void>;
4
- export declare function listWorkflowTemplate(): Promise<void>;
1
+ export declare function deleteWorkflowTemplates(): Promise<void>;
2
+ export declare function localDeleteWorkflowTemplate(): Promise<void>;
3
+ export declare function localDeployWorkflowTemplate(): Promise<void>;
4
+ export declare function listWorkflowTemplate(): Promise<void>;