@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.
- package/.eslintrc.js +53 -53
- package/.vscode/settings.json +5 -5
- package/README.md +5 -5
- package/bin/init +3 -3
- package/lib/api/apps.d.ts +13 -13
- package/lib/api/apps.js +85 -85
- package/lib/api/event-workflow-action-definition.d.ts +1 -1
- package/lib/api/event-workflow-action-definition.js +7 -7
- package/lib/api/event-workflow-template-definition.d.ts +6 -6
- package/lib/api/event-workflow-template-definition.js +20 -20
- package/lib/api/event-workflow-templates.d.ts +7 -7
- package/lib/api/event-workflow-templates.js +25 -25
- package/lib/apps/create-app/create.d.ts +1 -1
- package/lib/apps/create-app/create.js +60 -59
- package/lib/apps/create-app/setup-template.d.ts +1 -1
- package/lib/apps/create-app/setup-template.js +34 -34
- package/lib/apps/deploy-app/actions-deployer.d.ts +11 -11
- package/lib/apps/deploy-app/actions-deployer.js +114 -114
- package/lib/apps/deploy-app/app-deployer.d.ts +8 -8
- package/lib/apps/deploy-app/app-deployer.js +93 -93
- package/lib/apps/deploy-app/app-template-parsers.d.ts +7 -7
- package/lib/apps/deploy-app/app-template-parsers.js +38 -38
- package/lib/apps/deploy-app/deploy.d.ts +2 -2
- package/lib/apps/deploy-app/deploy.js +58 -58
- package/lib/apps/install-app/app-installer.d.ts +2 -2
- package/lib/apps/install-app/app-installer.js +120 -120
- package/lib/apps/upgrade-app/app-upgrader.d.ts +3 -3
- package/lib/apps/upgrade-app/app-upgrader.js +126 -126
- package/lib/auth/auth.d.ts +9 -9
- package/lib/auth/auth.js +2 -2
- package/lib/auth/login.d.ts +2 -2
- package/lib/auth/login.js +141 -141
- package/lib/cli.d.ts +5 -5
- package/lib/cli.js +524 -481
- package/lib/colors/color-loader.d.ts +2 -2
- package/lib/colors/color-loader.js +96 -96
- package/lib/common.d.ts +1 -1
- package/lib/common.js +5 -5
- package/lib/config/config.d.ts +6 -6
- package/lib/config/config.js +70 -70
- package/lib/config/configCommands.d.ts +3 -3
- package/lib/config/configCommands.js +34 -34
- package/lib/interfaces.d.ts +191 -191
- package/lib/interfaces.js +25 -25
- package/lib/loader-process/loader-process.d.ts +2 -2
- package/lib/loader-process/loader-process.js +120 -120
- package/lib/projects/interfaces.d.ts +77 -77
- package/lib/projects/interfaces.js +23 -23
- package/lib/projects/project-exporter.d.ts +2 -2
- package/lib/projects/project-exporter.js +187 -187
- package/lib/projects/project-uploader.d.ts +1 -1
- package/lib/projects/project-uploader.js +105 -105
- package/lib/types/allUploader.d.ts +1 -1
- package/lib/types/allUploader.js +24 -24
- package/lib/types/csv-parser.d.ts +1 -1
- package/lib/types/csv-parser.js +51 -51
- package/lib/types/interfaces.d.ts +55 -55
- package/lib/types/interfaces.js +1 -1
- package/lib/types/option-set-hierarchy-exporter.d.ts +1 -1
- package/lib/types/option-set-hierarchy-exporter.js +113 -113
- package/lib/types/option-set-hierarchy-parser.d.ts +2 -2
- package/lib/types/option-set-hierarchy-parser.js +140 -140
- package/lib/types/option-set-hierarchy-uploader.d.ts +1 -1
- package/lib/types/option-set-hierarchy-uploader.js +113 -113
- package/lib/types/option-set-merger.d.ts +1 -1
- package/lib/types/option-set-merger.js +105 -102
- package/lib/types/option-set-parser.d.ts +3 -1
- package/lib/types/option-set-parser.js +140 -50
- package/lib/types/option-set-uploader.d.ts +1 -1
- package/lib/types/option-set-uploader.js +98 -98
- package/lib/types/parse-types.d.ts +4 -4
- package/lib/types/parse-types.js +189 -189
- package/lib/types/rule-set-uploader.d.ts +1 -1
- package/lib/types/rule-set-uploader.js +172 -172
- package/lib/types/type-property-policy-uploader.d.ts +1 -1
- package/lib/types/type-property-policy-uploader.js +178 -178
- package/lib/types/types-extractor.d.ts +27 -27
- package/lib/types/types-extractor.js +318 -318
- package/lib/types/types-properties-merger.d.ts +1 -1
- package/lib/types/types-properties-merger.js +75 -75
- package/lib/types/types-uploader.d.ts +1 -1
- package/lib/types/types-uploader.js +239 -239
- package/lib/types/usage-info-uploader.d.ts +1 -1
- package/lib/types/usage-info-uploader.js +132 -132
- package/lib/users/user-exporter.d.ts +1 -0
- package/lib/users/user-exporter.js +41 -0
- package/lib/users/user-uploader.d.ts +1 -0
- package/lib/users/user-uploader.js +45 -0
- package/lib/workflow-template-definitions/workflow-template-definition-commands.d.ts +2 -2
- package/lib/workflow-template-definitions/workflow-template-definition-commands.js +10 -10
- package/lib/workflow-template-definitions/workflow-template-definition-deployer.d.ts +12 -12
- package/lib/workflow-template-definitions/workflow-template-definition-deployer.js +151 -151
- package/lib/workflow-templates/local-workflow-template-deployer.d.ts +11 -11
- package/lib/workflow-templates/local-workflow-template-deployer.js +102 -102
- package/lib/workflow-templates/workflow-template-commands.d.ts +4 -4
- package/lib/workflow-templates/workflow-template-commands.js +51 -51
- package/lib/workflow-templates/workflow-template-deployer.d.ts +4 -4
- package/lib/workflow-templates/workflow-template-deployer.js +26 -26
- package/package.json +72 -72
- package/publish.bat +5 -0
- package/publish.sh +4 -4
- package/src/api/apps.ts +96 -96
- package/src/api/event-workflow-action-definition.ts +7 -7
- package/src/api/event-workflow-template-definition.ts +22 -22
- package/src/api/event-workflow-templates.ts +28 -28
- package/src/apps/create-app/create.ts +74 -73
- package/src/apps/create-app/setup-template.ts +37 -37
- package/src/apps/deploy-app/actions-deployer.ts +140 -140
- package/src/apps/deploy-app/app-deployer.ts +105 -105
- package/src/apps/deploy-app/app-template-parsers.ts +43 -43
- package/src/apps/deploy-app/deploy.ts +65 -65
- package/src/apps/install-app/app-installer.ts +125 -125
- package/src/apps/upgrade-app/app-upgrader.ts +131 -131
- package/src/auth/auth.ts +9 -9
- package/src/auth/login.ts +155 -155
- package/src/cli.ts +540 -496
- package/src/colors/color-loader.ts +112 -112
- package/src/colors/colors.csv +866 -866
- package/src/common.ts +4 -4
- package/src/config/config.ts +74 -74
- package/src/config/configCommands.ts +37 -37
- package/src/interfaces.ts +200 -200
- package/src/loader-process/loader-process.ts +151 -151
- package/src/projects/interfaces.ts +72 -72
- package/src/projects/project-exporter.ts +224 -224
- package/src/projects/project-uploader.ts +130 -130
- package/src/types/allUploader.ts +28 -28
- package/src/types/csv-parser.ts +58 -58
- package/src/types/interfaces.ts +58 -58
- package/src/types/option-set-hierarchy-exporter.ts +124 -124
- package/src/types/option-set-hierarchy-parser.ts +168 -168
- package/src/types/option-set-hierarchy-uploader.ts +121 -121
- package/src/types/option-set-merger.ts +123 -122
- package/src/types/option-set-parser.ts +165 -59
- package/src/types/option-set-uploader.ts +107 -107
- package/src/types/parse-types.ts +226 -226
- package/src/types/rule-set-uploader.ts +186 -186
- package/src/types/type-property-policy-uploader.ts +191 -191
- package/src/types/types-extractor.ts +368 -368
- package/src/types/types-properties-merger.ts +89 -89
- package/src/types/types-uploader.ts +271 -271
- package/src/types/usage-info-uploader.ts +138 -138
- package/src/users/user-exporter.ts +52 -0
- package/src/users/user-uploader.ts +58 -0
- package/src/workflow-template-definitions/workflow-template-definition-commands.ts +12 -12
- package/src/workflow-template-definitions/workflow-template-definition-deployer.ts +184 -184
- package/src/workflow-templates/local-workflow-template-deployer.ts +125 -125
- package/src/workflow-templates/workflow-template-commands.ts +59 -59
- package/src/workflow-templates/workflow-template-deployer.ts +29 -29
- package/templates/docker_deploy.bat +1 -0
- package/templates/javascript/actions/example/action.js +37 -37
- package/templates/javascript/app.yml +52 -52
- package/templates/javascript/package.json +23 -23
- package/templates/typescript/Dockerfile +15 -14
- package/templates/typescript/README.md +10 -10
- package/templates/typescript/app.yml +50 -54
- package/templates/typescript/package-lock.json +14 -14
- package/templates/typescript/package.json +54 -52
- package/templates/typescript/src/actions/logItem.ts +26 -0
- package/templates/typescript/src/framework/action-dispatcher.ts +86 -0
- package/templates/typescript/src/framework/app-config.ts +27 -0
- package/templates/typescript/src/framework/handler.ts +11 -0
- package/templates/typescript/src/framework/index.ts +3 -0
- package/templates/typescript/src/framework/interfaces.ts +32 -0
- package/templates/typescript/src/framework/logger.ts +21 -0
- package/templates/typescript/{actions → src/framework}/mock-server.ts +7 -0
- package/templates/typescript/tsconfig.json +28 -27
- package/tsconfig.json +31 -30
- package/templates/typescript/actions/handler.ts +0 -62
- package/templates/typescript/actions/utils/logger.ts +0 -15
|
@@ -1,52 +1,54 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "test-app",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"description": "",
|
|
5
|
-
"main": "index.js",
|
|
6
|
-
"bin": {
|
|
7
|
-
"@contrail/contrail-cli": "bin/init",
|
|
8
|
-
"contrail": "bin/init"
|
|
9
|
-
},
|
|
10
|
-
"config": {
|
|
11
|
-
"wf": "/workflow-actions-prod"
|
|
12
|
-
},
|
|
13
|
-
"publishConfig": {
|
|
14
|
-
"access": "public"
|
|
15
|
-
},
|
|
16
|
-
"scripts": {
|
|
17
|
-
"build": "tsc",
|
|
18
|
-
"start": "nodemon --watch
|
|
19
|
-
"debug": "nodemon -r ts-node/register --inspect=127.0.0.1:60002 --watch 'actions/**/*.ts' --exec node
|
|
20
|
-
"lint": "eslint . --fix",
|
|
21
|
-
"test": "jest",
|
|
22
|
-
"test-watch": "jest --watch",
|
|
23
|
-
"docker-build": "docker build . -t \"${npm_package_name}:${npm_package_version}\"",
|
|
24
|
-
"docker-build:win": "docker build . -t \"%npm_package_name%:%npm_package_version%\"",
|
|
25
|
-
"docker-run-entry": "docker run -it --entrypoint=/bin/bash \"${npm_package_name}:${npm_package_version}\"",
|
|
26
|
-
"docker-run-entry:win": "docker run -it --entrypoint=/bin/bash \"%npm_package_name%:%npm_package_version%\"",
|
|
27
|
-
"docker-run": "docker run --env CONTRAIL_CLI_ENV=DEV -p 9000:8080 \"${npm_package_name}:${npm_package_version}\"",
|
|
28
|
-
"docker-run:win": "docker run --env CONTRAIL_CLI_ENV=DEV -p 9000:8080 \"%npm_package_name%:%npm_package_version%\"",
|
|
29
|
-
"docker-ecr-login": "aws ecr get-login-password | docker login --username AWS --password-stdin ${AWS_REGISTRY}",
|
|
30
|
-
"docker-ecr-login:win": "aws ecr get-login-password | docker login --username AWS --password-stdin %AWS_REGISTRY%",
|
|
31
|
-
"docker-tag": "docker tag ${npm_package_name}:${npm_package_version} \"${AWS_REGISTRY}${npm_package_config_wf}:${npm_package_name}.${npm_package_version}\"",
|
|
32
|
-
"docker-tag:win": "docker tag %npm_package_name%:%npm_package_version% %AWS_REGISTRY%%npm_package_config_wf%:%npm_package_name%.%npm_package_version%",
|
|
33
|
-
"docker-push": "docker push \"${AWS_REGISTRY}${npm_package_config_wf}:${npm_package_name}.${npm_package_version}\"",
|
|
34
|
-
"docker-push:win": "docker push \"%AWS_REGISTRY%%npm_package_config_wf%:%npm_package_name%.%npm_package_version%\""
|
|
35
|
-
},
|
|
36
|
-
"keywords": [],
|
|
37
|
-
"author": "",
|
|
38
|
-
"license": "ISC",
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"@contrail/sdk": "^1.1.
|
|
41
|
-
"chalk": "^4.0.0"
|
|
42
|
-
},
|
|
43
|
-
"devDependencies": {
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"jest": "^29.2.2",
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "test-app",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"@contrail/contrail-cli": "bin/init",
|
|
8
|
+
"contrail": "bin/init"
|
|
9
|
+
},
|
|
10
|
+
"config": {
|
|
11
|
+
"wf": "/workflow-actions-prod"
|
|
12
|
+
},
|
|
13
|
+
"publishConfig": {
|
|
14
|
+
"access": "public"
|
|
15
|
+
},
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsc",
|
|
18
|
+
"start": "nodemon --watch \"src/**/*.ts\" --exec ts-node src/framework/mock-server.ts",
|
|
19
|
+
"debug": "nodemon -r ts-node/register --inspect=127.0.0.1:60002 --watch 'actions/**/*.ts' --exec node src/framework/mock-server.ts",
|
|
20
|
+
"lint": "eslint . --fix",
|
|
21
|
+
"test": "jest",
|
|
22
|
+
"test-watch": "jest --watch",
|
|
23
|
+
"docker-build": "docker build . -t \"${npm_package_name}:${npm_package_version}\"",
|
|
24
|
+
"docker-build:win": "docker build . -t \"%npm_package_name%:%npm_package_version%\"",
|
|
25
|
+
"docker-run-entry": "docker run -it --entrypoint=/bin/bash \"${npm_package_name}:${npm_package_version}\"",
|
|
26
|
+
"docker-run-entry:win": "docker run -it --entrypoint=/bin/bash \"%npm_package_name%:%npm_package_version%\"",
|
|
27
|
+
"docker-run": "docker run --env CONTRAIL_CLI_ENV=DEV -p 9000:8080 \"${npm_package_name}:${npm_package_version}\"",
|
|
28
|
+
"docker-run:win": "docker run --env CONTRAIL_CLI_ENV=DEV -p 9000:8080 \"%npm_package_name%:%npm_package_version%\"",
|
|
29
|
+
"docker-ecr-login": "aws ecr get-login-password | docker login --username AWS --password-stdin ${AWS_REGISTRY}",
|
|
30
|
+
"docker-ecr-login:win": "aws ecr get-login-password | docker login --username AWS --password-stdin %AWS_REGISTRY%",
|
|
31
|
+
"docker-tag": "docker tag ${npm_package_name}:${npm_package_version} \"${AWS_REGISTRY}${npm_package_config_wf}:${npm_package_name}.${npm_package_version}\"",
|
|
32
|
+
"docker-tag:win": "docker tag %npm_package_name%:%npm_package_version% %AWS_REGISTRY%%npm_package_config_wf%:%npm_package_name%.%npm_package_version%",
|
|
33
|
+
"docker-push": "docker push \"${AWS_REGISTRY}${npm_package_config_wf}:${npm_package_name}.${npm_package_version}\"",
|
|
34
|
+
"docker-push:win": "docker push \"%AWS_REGISTRY%%npm_package_config_wf%:%npm_package_name%.%npm_package_version%\""
|
|
35
|
+
},
|
|
36
|
+
"keywords": [],
|
|
37
|
+
"author": "",
|
|
38
|
+
"license": "ISC",
|
|
39
|
+
"dependencies": {
|
|
40
|
+
"@contrail/sdk": "^1.1.54",
|
|
41
|
+
"chalk": "^4.0.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^18.14.6",
|
|
45
|
+
"body-parser": "^1.20.2",
|
|
46
|
+
"express": "^4.18.2",
|
|
47
|
+
"jest": "^29.2.2",
|
|
48
|
+
"js-yaml": "^4.1.0",
|
|
49
|
+
"nodemon": "^1.19.4",
|
|
50
|
+
"ts-jest": "^29.0.3",
|
|
51
|
+
"ts-node": "^7.0.1",
|
|
52
|
+
"typescript": "^4.7.4"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { login, Entities, setAppCredentials } from "@contrail/sdk";
|
|
2
|
+
import { AppActionCallBack, AppActionCallbackStatus } from "../framework";
|
|
3
|
+
import { Logger } from "../framework/logger";
|
|
4
|
+
|
|
5
|
+
export async function execute(event, config: any, logger: Logger): Promise<AppActionCallBack> {
|
|
6
|
+
logger.log('Starting Example Action');
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
logger.log('Loggin in');
|
|
10
|
+
// Fetch items from the SDK
|
|
11
|
+
await setAppCredentials(config.apiKey, config.orgSlug);
|
|
12
|
+
logger.log('Getting item from SDK');
|
|
13
|
+
|
|
14
|
+
const item = await new Entities().get({
|
|
15
|
+
entityName: 'item',
|
|
16
|
+
id: event.id,
|
|
17
|
+
})
|
|
18
|
+
logger.log('Got item: ', item);
|
|
19
|
+
|
|
20
|
+
return {
|
|
21
|
+
output: {
|
|
22
|
+
item,
|
|
23
|
+
},
|
|
24
|
+
status: AppActionCallbackStatus.SUCCESS
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WARNING: Do not modify this file, it is part of the generic runtime handling logic
|
|
3
|
+
* for VibeIQ app actions.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import { loadAppConfig } from "./app-config";
|
|
8
|
+
import { AppActionCallbackStatus, AppActionRequest, AppActionResponse } from "./interfaces";
|
|
9
|
+
import { Logger } from "./logger";
|
|
10
|
+
|
|
11
|
+
const APP_CONFIG = loadAppConfig();
|
|
12
|
+
const appName = APP_CONFIG.appIdentifier;
|
|
13
|
+
|
|
14
|
+
export class ActionDispatcher {
|
|
15
|
+
|
|
16
|
+
public static async dispatchActionRequest(data: AppActionRequest) : Promise<AppActionResponse> {
|
|
17
|
+
const logger = new Logger();
|
|
18
|
+
const event = (typeof data.event === 'string')
|
|
19
|
+
? JSON.parse(data.event)
|
|
20
|
+
: data.event;
|
|
21
|
+
|
|
22
|
+
return ActionDispatcher.delegateToHandler(event, data, logger);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
private static async delegateToHandler(event, data: AppActionRequest, logger: Logger) : Promise<AppActionResponse>{
|
|
26
|
+
try {
|
|
27
|
+
const handler = ActionDispatcher.getActionHandler(data);
|
|
28
|
+
let actionResults = await handler(event, data, logger)
|
|
29
|
+
let body: any = {
|
|
30
|
+
logs: logger.allEntries,
|
|
31
|
+
taskId: data.taskId,
|
|
32
|
+
status: AppActionCallbackStatus.SUCCESS,
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
if(typeof actionResults === 'string'){
|
|
36
|
+
body.output = { message: actionResults }
|
|
37
|
+
} else if(typeof actionResults === 'object'){
|
|
38
|
+
if(actionResults.output){
|
|
39
|
+
body.output = actionResults.output;
|
|
40
|
+
}
|
|
41
|
+
if(actionResults.status) {
|
|
42
|
+
body.status = actionResults.status;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
statusCode: 200,
|
|
47
|
+
body
|
|
48
|
+
}
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.log("Error caught in handling action: ", error)
|
|
51
|
+
return {
|
|
52
|
+
statusCode: 500,
|
|
53
|
+
body: {
|
|
54
|
+
output: {
|
|
55
|
+
errorMessage: error.message,
|
|
56
|
+
},
|
|
57
|
+
taskId: data.taskId,
|
|
58
|
+
logs: logger.allEntries,
|
|
59
|
+
status: AppActionCallbackStatus.FAILURE,
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** Retrives the handler function for the requested action
|
|
66
|
+
*/
|
|
67
|
+
private static getActionHandler(data: AppActionRequest): (event, data, logger) => any {
|
|
68
|
+
try {
|
|
69
|
+
const actionPath = data.action;
|
|
70
|
+
const actionName = actionPath.substring(appName.length + 1, actionPath.length);
|
|
71
|
+
console.log('action: ', actionPath, actionName);
|
|
72
|
+
const handlerFile = require(`../actions/${actionName}`);
|
|
73
|
+
if(!handlerFile) {
|
|
74
|
+
throw new Error(`Handler file could not be located for action : ${data.action}`);
|
|
75
|
+
}
|
|
76
|
+
const handlerFunction = handlerFile.execute;
|
|
77
|
+
if(!handlerFunction) {
|
|
78
|
+
throw new Error(`Handler function 'execute' could not be located for action : ${data.action}`);
|
|
79
|
+
}
|
|
80
|
+
return handlerFunction;
|
|
81
|
+
} catch (error) {
|
|
82
|
+
console.log("Error caught in getActionHandler: ", error)
|
|
83
|
+
throw new Error(`Could not locate handler function for requested action: ${data.action}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WARNING: Do not modify this file, it is part of the generic runtime handling logic
|
|
3
|
+
* for VibeIQ app actions.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import fs from 'fs';
|
|
8
|
+
const yaml = require('js-yaml');
|
|
9
|
+
|
|
10
|
+
export function loadAppConfig(){
|
|
11
|
+
const TARGET_DIR = process.cwd();
|
|
12
|
+
console.log("TARGET_DIR: ", TARGET_DIR)
|
|
13
|
+
try {
|
|
14
|
+
const separator = getSeparatorByPlatform();
|
|
15
|
+
const doc = yaml.load(fs.readFileSync(TARGET_DIR + separator + 'app.yml', 'utf8'));
|
|
16
|
+
console.log(doc);
|
|
17
|
+
return doc;
|
|
18
|
+
} catch (e) {
|
|
19
|
+
throw new Error(`ERROR PARSING YAML: ${e}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getSeparatorByPlatform() {
|
|
24
|
+
const isWin = process.platform === 'win32';
|
|
25
|
+
const separator = isWin ? '\\' : '/';
|
|
26
|
+
return separator;
|
|
27
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WARNING: Do not modify this file, it is part of the generic runtime handling logic
|
|
3
|
+
* for VibeIQ app actions.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
import { AppActionRequest, AppActionResponse, ActionDispatcher } from '.';
|
|
8
|
+
|
|
9
|
+
export async function execute(data: AppActionRequest): Promise<AppActionResponse> {
|
|
10
|
+
return ActionDispatcher.dispatchActionRequest(data);
|
|
11
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WARNING: Do not modify this file, it is part of the generic runtime handling logic
|
|
3
|
+
* for VibeIQ app actions.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export interface AppActionRequest {
|
|
7
|
+
action: string;
|
|
8
|
+
apiKey: string;
|
|
9
|
+
orgSlug: string;
|
|
10
|
+
taskId: string;
|
|
11
|
+
event: any;
|
|
12
|
+
[key:string] : any;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
export interface AppActionResponse {
|
|
17
|
+
statusCode: number;
|
|
18
|
+
body: AppActionCallBack;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export interface AppActionCallBack {
|
|
22
|
+
output?: any;
|
|
23
|
+
status?: AppActionCallbackStatus;
|
|
24
|
+
logs?: Array<string>;
|
|
25
|
+
taskId?: string;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
export enum AppActionCallbackStatus {
|
|
30
|
+
FAILURE = 'FAILURE',
|
|
31
|
+
SUCCESS = 'SUCCESS'
|
|
32
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WARNING: Do not modify this file, it is part of the generic runtime handling logic
|
|
3
|
+
* for VibeIQ app actions.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
export class Logger {
|
|
8
|
+
allEntries : Array<string> = [];
|
|
9
|
+
public log(...args){
|
|
10
|
+
console.log(...args);
|
|
11
|
+
this.allEntries.push(new Date().toISOString() + ': ' + args.join(''));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public getEntries(){
|
|
15
|
+
return this.allEntries.join('\n');
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public clearEntries(){
|
|
19
|
+
this.allEntries = [];
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,4 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WARNING: Do not modify this file, it is part of the generic runtime handling logic
|
|
3
|
+
* for VibeIQ app actions.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
|
|
1
7
|
import { execute } from './handler';
|
|
8
|
+
|
|
2
9
|
const express = require('express');
|
|
3
10
|
const bodyParser = require('body-parser');
|
|
4
11
|
const app = express();
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"module": "commonjs",
|
|
5
|
-
"declaration": true,
|
|
6
|
-
"esModuleInterop": true,
|
|
7
|
-
"outDir": "dist",
|
|
8
|
-
"strict": false,
|
|
9
|
-
"experimentalDecorators": true,
|
|
10
|
-
"strictPropertyInitialization": false,
|
|
11
|
-
"noImplicitAny": false,
|
|
12
|
-
"emitDecoratorMetadata": true,
|
|
13
|
-
"skipLibCheck": true,
|
|
14
|
-
"moduleResolution": "node",
|
|
15
|
-
"lib": [
|
|
16
|
-
"es5",
|
|
17
|
-
"ES2015",
|
|
18
|
-
"ES2016",
|
|
19
|
-
"ES2017",
|
|
20
|
-
"ES2020",
|
|
21
|
-
"dom",
|
|
22
|
-
"esnext.asynciterable"
|
|
23
|
-
]
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "commonjs",
|
|
5
|
+
"declaration": true,
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"outDir": "dist",
|
|
8
|
+
"strict": false,
|
|
9
|
+
"experimentalDecorators": true,
|
|
10
|
+
"strictPropertyInitialization": false,
|
|
11
|
+
"noImplicitAny": false,
|
|
12
|
+
"emitDecoratorMetadata": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"moduleResolution": "node",
|
|
15
|
+
"lib": [
|
|
16
|
+
"es5",
|
|
17
|
+
"ES2015",
|
|
18
|
+
"ES2016",
|
|
19
|
+
"ES2017",
|
|
20
|
+
"ES2020",
|
|
21
|
+
"dom",
|
|
22
|
+
"esnext.asynciterable"
|
|
23
|
+
],
|
|
24
|
+
"types": ["node"]
|
|
25
|
+
},
|
|
26
|
+
"include": ["src"],
|
|
27
|
+
"exclude": ["node_modules", "**/__tests__/*"]
|
|
28
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,31 +1,32 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "es2017",
|
|
4
|
-
"module": "esnext",
|
|
5
|
-
"declaration": true,
|
|
6
|
-
"esModuleInterop": true,
|
|
7
|
-
"outDir": "./lib",
|
|
8
|
-
"strict": false,
|
|
9
|
-
"experimentalDecorators": true,
|
|
10
|
-
"strictPropertyInitialization": false,
|
|
11
|
-
"noImplicitAny": false,
|
|
12
|
-
"emitDecoratorMetadata": true,
|
|
13
|
-
"skipLibCheck": true,
|
|
14
|
-
"moduleResolution": "node",
|
|
15
|
-
"lib": [
|
|
16
|
-
"es5",
|
|
17
|
-
"ES2015",
|
|
18
|
-
"ES2016",
|
|
19
|
-
"ES2017",
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"
|
|
30
|
-
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "es2017",
|
|
4
|
+
"module": "esnext",
|
|
5
|
+
"declaration": true,
|
|
6
|
+
"esModuleInterop": true,
|
|
7
|
+
"outDir": "./lib",
|
|
8
|
+
"strict": false,
|
|
9
|
+
"experimentalDecorators": true,
|
|
10
|
+
"strictPropertyInitialization": false,
|
|
11
|
+
"noImplicitAny": false,
|
|
12
|
+
"emitDecoratorMetadata": true,
|
|
13
|
+
"skipLibCheck": true,
|
|
14
|
+
"moduleResolution": "node",
|
|
15
|
+
"lib": [
|
|
16
|
+
"es5",
|
|
17
|
+
"ES2015",
|
|
18
|
+
"ES2016",
|
|
19
|
+
"ES2017",
|
|
20
|
+
"ES2020",
|
|
21
|
+
"dom",
|
|
22
|
+
"esnext.asynciterable"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"include": [
|
|
26
|
+
"src"
|
|
27
|
+
],
|
|
28
|
+
"exclude": [
|
|
29
|
+
"node_modules",
|
|
30
|
+
"**/__tests__/*"
|
|
31
|
+
]
|
|
31
32
|
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { login } from '@contrail/sdk';
|
|
2
|
-
import { Logger } from './utils/logger';
|
|
3
|
-
|
|
4
|
-
export async function execute(data) {
|
|
5
|
-
const logger = new Logger();
|
|
6
|
-
const event = (typeof data.event === 'string')
|
|
7
|
-
? JSON.parse(data.event)
|
|
8
|
-
: data.event;
|
|
9
|
-
data = JSON.parse(JSON.stringify(data));
|
|
10
|
-
logger.log(JSON.stringify(data, null, 2));
|
|
11
|
-
if (!data.apiHost || !data.userName || !data.password) {
|
|
12
|
-
// not really. This is just to demo how to retrieve an app config
|
|
13
|
-
const message = 'This action requires an api host, a username, and a password to run';
|
|
14
|
-
const body = {
|
|
15
|
-
message,
|
|
16
|
-
logs: [message]
|
|
17
|
-
};
|
|
18
|
-
return {
|
|
19
|
-
statusCode: 400,
|
|
20
|
-
body
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
await login({ apiKey: data.apiKey, orgSlug: data.orgSlug });
|
|
26
|
-
const results = {};
|
|
27
|
-
|
|
28
|
-
logger.log('Sending message: ', event);
|
|
29
|
-
const response = await fetch(data.apiHost, {
|
|
30
|
-
headers: { 'Content-Type': 'application/json' }
|
|
31
|
-
});
|
|
32
|
-
if (!response.ok) {
|
|
33
|
-
logger.log('Webhook event failed to publish');
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
logger.log('Published!');
|
|
37
|
-
}
|
|
38
|
-
logger.log('Response: ', JSON.stringify(response));
|
|
39
|
-
|
|
40
|
-
results['logs'] = logger.getEntries();
|
|
41
|
-
|
|
42
|
-
logger.log('returning: ' + JSON.stringify(results));
|
|
43
|
-
return {
|
|
44
|
-
statusCode: 200,
|
|
45
|
-
body: JSON.stringify(results)
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
} catch (e) {
|
|
49
|
-
logger.log('returning failure: ' + e.message);
|
|
50
|
-
const body = {
|
|
51
|
-
message: 'failed',
|
|
52
|
-
error: e.message,
|
|
53
|
-
logs: logger.getEntries()
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
return {
|
|
57
|
-
statusCode: 400,
|
|
58
|
-
body: JSON.stringify(body),
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export class Logger {
|
|
2
|
-
allEntries = [];
|
|
3
|
-
public log(...args){
|
|
4
|
-
console.log(...args);
|
|
5
|
-
this.allEntries.push(args);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
public getEntries(){
|
|
9
|
-
return this.allEntries.join('\n');
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
public clearEntries(){
|
|
13
|
-
this.allEntries = [];
|
|
14
|
-
}
|
|
15
|
-
}
|