zcatalyst-cli 1.17.6 → 1.18.0-beta.1
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/docs/commands/event/generate/job.toml +7 -0
- package/docs/commands/functions/shell.toml +4 -0
- package/docs/endpoints/lib/job-scheduling.toml +3 -0
- package/docs/internal/command.toml +5 -0
- package/docs/shell/dependencies/tunnel-server.toml +4 -0
- package/docs/shell/index.toml +7 -0
- package/lib/appsail-utils.js +3 -3
- package/lib/authentication/index.js +1 -0
- package/lib/command_needs/rc.js +1 -1
- package/lib/commands/appsail/add.js +1 -0
- package/lib/commands/client/setup.js +1 -0
- package/lib/commands/event/generate/job.js +82 -0
- package/lib/commands/functions/add.js +1 -0
- package/lib/commands/functions/delete.js +2 -4
- package/lib/commands/functions/setup.js +1 -0
- package/lib/commands/functions/shell.js +98 -1
- package/lib/commands/index.js +1 -0
- package/lib/commands/init.js +2 -6
- package/lib/commands/login.js +1 -0
- package/lib/commands/logout.js +1 -0
- package/lib/commands/pull.js +1 -0
- package/lib/commands/serve.js +2 -8
- package/lib/commands/whoami.js +1 -0
- package/lib/deploy/features/appsail/index.js +19 -17
- package/lib/deploy/features/appsail/utils.js +4 -5
- package/lib/endpoints/index.js +15 -1
- package/lib/endpoints/lib/appsail.js +7 -1
- package/lib/endpoints/lib/job-scheduling.js +61 -0
- package/lib/endpoints/lib/sdk.js +2 -2
- package/lib/endpoints/lib/tunnel.js +66 -0
- package/lib/express_middlewares/logger.js +2 -4
- package/lib/fn-utils/lib/common.js +2 -3
- package/lib/fn-utils/lib/java.js +1 -1
- package/lib/fn-utils/lib/python.js +2 -2
- package/lib/fn-watcher.js +1 -1
- package/lib/init/dependencies/python/ensure-python.js +6 -8
- package/lib/init/features/appsail/index.js +14 -10
- package/lib/init/features/functions/index.js +4 -0
- package/lib/init/features/functions/languages/python.js +21 -5
- package/lib/internal/api.js +17 -1
- package/lib/internal/command.js +28 -5
- package/lib/port-resolver.js +1 -1
- package/lib/repl-server.js +9 -0
- package/lib/serve/features/appsail.js +2 -3
- package/lib/serve/index.js +1 -2
- package/lib/serve/server/index.js +8 -9
- package/lib/serve/server/lib/appsail/index.js +24 -34
- package/lib/serve/server/lib/java/aio_server/lib/catalyst-cli-java-runtime-1.0.0.jar +0 -0
- package/lib/serve/server/lib/java/aio_server/lib/catalyst-function-sdk-1.0.0.jar +0 -0
- package/lib/serve/server/lib/java/aio_server/lib/catalyst-java-runtime-1.0.0.jar +0 -0
- package/lib/serve/server/lib/java/index.js +2 -2
- package/lib/serve/server/lib/master/appsail.js +53 -0
- package/lib/serve/server/lib/master/functions.js +34 -0
- package/lib/serve/server/lib/master/index.js +155 -0
- package/lib/{express_middlewares/unknownReqProxy.js → serve/server/lib/master/unknown-req-proxy.js} +4 -7
- package/lib/serve/server/lib/master/utils.js +130 -0
- package/lib/serve/server/lib/master/web-client.js +39 -0
- package/lib/serve/server/lib/node/index.js +3 -3
- package/lib/serve/server/lib/python/index.js +6 -3
- package/lib/shell/dependencies/http-functions.js +21 -8
- package/lib/shell/dependencies/invoker/bio/java/JavabioInvoker.java +28 -32
- package/lib/shell/dependencies/invoker/bio/java/lib/catalyst-function-sdk-1.0.0.jar +0 -0
- package/lib/shell/dependencies/invoker/bio/node.mjs +2 -2
- package/lib/shell/dependencies/invoker/cron/java/JavacronInvoker.java +62 -13
- package/lib/shell/dependencies/invoker/cron/java/lib/catalyst-function-sdk-1.0.0.jar +0 -0
- package/lib/shell/dependencies/invoker/cron/node.mjs +28 -24
- package/lib/shell/dependencies/invoker/event/java/JavaeventInvoker.java +41 -6
- package/lib/shell/dependencies/invoker/event/java/lib/catalyst-function-sdk-1.0.0.jar +0 -0
- package/lib/shell/dependencies/invoker/event/node.mjs +23 -9
- package/lib/shell/dependencies/invoker/integ/java/JavaintegInvoker.java +3 -3
- package/lib/shell/dependencies/invoker/integ/java/lib/catalyst-function-sdk-1.0.0.jar +0 -0
- package/lib/shell/dependencies/invoker/integ/node.mjs +6 -6
- package/lib/shell/dependencies/invoker/job/java/JavajobInvoker.java +254 -0
- package/lib/shell/dependencies/invoker/job/java/lib/catalyst-function-sdk-1.0.0.jar +0 -0
- package/lib/shell/dependencies/invoker/job/java/lib/org.json.jar +0 -0
- package/lib/shell/dependencies/invoker/job/node.mjs +93 -0
- package/lib/shell/dependencies/local-function.js +399 -200
- package/lib/shell/dependencies/tunnel-server.js +173 -0
- package/lib/shell/index.js +62 -2
- package/lib/shell/prepare/languages/index.js +4 -4
- package/lib/shell/prepare/languages/java.js +1 -2
- package/lib/shell/prepare/languages/python.js +10 -16
- package/lib/throbber/index.js +6 -1
- package/lib/userConfig.js +7 -1
- package/lib/util_modules/config/index.js +1 -1
- package/lib/util_modules/config/lib/{appSail.js → appsail.js} +61 -9
- package/lib/util_modules/config/lib/client.js +6 -8
- package/lib/util_modules/config/lib/functions.js +6 -8
- package/lib/util_modules/constants/index.js +3 -1
- package/lib/util_modules/constants/lib/default.js +1 -1
- package/lib/util_modules/constants/lib/fn-type.js +2 -1
- package/lib/util_modules/constants/lib/needed-scopes.js +61 -0
- package/lib/util_modules/constants/lib/placeholders.js +6 -0
- package/lib/util_modules/constants/lib/ref-mapping.js +2 -1
- package/lib/util_modules/constants/lib/remote-mapping.js +2 -1
- package/lib/util_modules/constants/lib/scopes.js +9 -1
- package/lib/util_modules/constants/lib/template.js +9 -4
- package/lib/util_modules/constants/lib/urls.js +16 -0
- package/lib/util_modules/fs/lib/async.js +7 -2
- package/lib/util_modules/fs/lib/sync.js +12 -1
- package/lib/util_modules/server.js +2 -4
- package/lib/winston.js +17 -11
- package/package.json +1 -1
- package/templates/event/job.json +30 -0
- package/templates/init/functions/java/job/.classpath +6 -0
- package/templates/init/functions/java/job/.project +17 -0
- package/templates/init/functions/java/job/catalyst-config.json +11 -0
- package/templates/init/functions/java/job/sample.java +34 -0
- package/templates/init/functions/node/aio/package.json +1 -1
- package/templates/init/functions/node/bio/package.json +1 -1
- package/templates/init/functions/node/cron/package.json +1 -1
- package/templates/init/functions/node/event/package.json +1 -1
- package/templates/init/functions/node/integ/cliq/package.json +1 -1
- package/templates/init/functions/node/integ/convokraft/package.json +1 -1
- package/templates/init/functions/node/{stream → job}/catalyst-config.json +3 -2
- package/templates/init/functions/node/{stream → job}/package.json +1 -1
- package/templates/init/functions/node/job/sample.js +28 -0
- package/templates/init/functions/node/job/types/job.d.ts +66 -0
- package/templates/init/functions/python/job/catalyst-config.json +11 -0
- package/templates/init/functions/python/job/requirements.txt +1 -0
- package/templates/init/functions/python/job/sample.py +23 -0
- package/templates/init.txt +13 -0
- package/lib/serve/server/lib/master.js +0 -317
- package/templates/init/functions/node/stream/sample.js +0 -15
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -13,7 +36,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
36
|
};
|
|
14
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
38
|
const path_1 = require("path");
|
|
16
|
-
const http_1 =
|
|
39
|
+
const http_1 = __importStar(require("http"));
|
|
17
40
|
const error_1 = __importDefault(require("../../error"));
|
|
18
41
|
const fn_utils_1 = require("../../fn-utils");
|
|
19
42
|
const credential_1 = __importDefault(require("../../internal/credential"));
|
|
@@ -28,10 +51,375 @@ const logger_1 = require("../../util_modules/logger");
|
|
|
28
51
|
const project_1 = require("../../util_modules/project");
|
|
29
52
|
const shell_1 = require("../../util_modules/shell");
|
|
30
53
|
const http_functions_1 = require("../dependencies/http-functions");
|
|
54
|
+
const events_1 = __importDefault(require("events"));
|
|
31
55
|
const ensure_java_userconfig_1 = require("../../fn-utils/lib/ensure-java-userconfig");
|
|
56
|
+
const server_1 = require("../../util_modules/server");
|
|
32
57
|
class LocalFunction {
|
|
33
58
|
constructor(repl, target) {
|
|
34
59
|
var _a, _b, _c;
|
|
60
|
+
this.localFnEvents = new events_1.default();
|
|
61
|
+
this.killed = false;
|
|
62
|
+
this._call = (shell = true) => (rawData = {}) => {
|
|
63
|
+
let data;
|
|
64
|
+
try {
|
|
65
|
+
if (shell) {
|
|
66
|
+
if (typeof rawData === 'string') {
|
|
67
|
+
const content = fs_1.SYNC.readJSONFile((0, path_1.resolve)(runtime_store_1.default.get('cwd'), rawData));
|
|
68
|
+
if (content === undefined) {
|
|
69
|
+
return new error_1.default('content is undefined for provided file path');
|
|
70
|
+
}
|
|
71
|
+
rawData = content;
|
|
72
|
+
}
|
|
73
|
+
switch (this.target.type) {
|
|
74
|
+
case constants_1.FN_TYPE.cron: {
|
|
75
|
+
data = { data: rawData };
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
case constants_1.FN_TYPE.event:
|
|
79
|
+
if (!('event_bus_details' in rawData)) {
|
|
80
|
+
(0, logger_1.info)('For event function kindly use event:generate command to generate the input json.');
|
|
81
|
+
(0, logger_1.info)('You can also provide event details as per documentation.');
|
|
82
|
+
return new error_1.default('Event bus details missing');
|
|
83
|
+
}
|
|
84
|
+
data = rawData;
|
|
85
|
+
break;
|
|
86
|
+
default: {
|
|
87
|
+
data = rawData;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
data = rawData;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
(0, logger_1.info)('the input must be in the form of json or a path to a file containing json data.');
|
|
97
|
+
return new error_1.default('Invalid input');
|
|
98
|
+
}
|
|
99
|
+
return (() => __awaiter(this, void 0, void 0, function* () {
|
|
100
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
101
|
+
const projectRoot = runtime_store_1.default.get('project.root');
|
|
102
|
+
const accessToken = yield credential_1.default.getAccessToken();
|
|
103
|
+
const slaveOptions = [];
|
|
104
|
+
const debugPort = runtime_store_1.default.get('context.port.debug.' + constants_1.FN_TYPE.basic, null);
|
|
105
|
+
yield fs_1.ASYNC.ensureFile(this.responseFile, true);
|
|
106
|
+
yield fs_1.ASYNC.ensureFile(this.metaFile, true);
|
|
107
|
+
if (this.target.type === constants_1.FN_TYPE.job) {
|
|
108
|
+
const jobDetails = data;
|
|
109
|
+
const jobMetaDetails = {
|
|
110
|
+
headers: Object.assign(Object.assign({}, (_a = jobDetails.job_meta_details) === null || _a === void 0 ? void 0 : _a.headers), {
|
|
111
|
+
'x-zc-projectid': (0, project_1.getProjectId)(),
|
|
112
|
+
'x-zc-project-domain': (0, project_1.getDomainPrefix)() + '.' + constants_1.ORIGIN.app.replace('https://', ''),
|
|
113
|
+
'x-zc-project-key': (0, project_1.getDomainKey)(),
|
|
114
|
+
'x-zc-environment': (0, project_1.getEnvName)(),
|
|
115
|
+
'x-zc-user-cred-type': 'token',
|
|
116
|
+
'x-zc-user-cred-token': accessToken,
|
|
117
|
+
'x-zc-admin-cred-type': 'token',
|
|
118
|
+
'x-zc-admin-cred-token': accessToken,
|
|
119
|
+
'x-zc-user-type': 'admin'
|
|
120
|
+
}),
|
|
121
|
+
params: ((_b = jobDetails.job_meta_details) === null || _b === void 0 ? void 0 : _b.params) || {},
|
|
122
|
+
jobpool_details: ((_c = jobDetails.job_meta_details) === null || _c === void 0 ? void 0 : _c.jobpool_details) || {
|
|
123
|
+
type: 'Function',
|
|
124
|
+
project_details: {
|
|
125
|
+
project_name: (0, project_1.getProjectName)(),
|
|
126
|
+
id: (0, project_1.getProjectId)()
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
jobDetails.job_meta_details = jobMetaDetails;
|
|
131
|
+
jobDetails.capacity = jobDetails.capacity || {
|
|
132
|
+
memory: '256'
|
|
133
|
+
};
|
|
134
|
+
data = jobDetails;
|
|
135
|
+
}
|
|
136
|
+
const slaveFnTarget = { index: this.target.index, name: this.target.name };
|
|
137
|
+
if ((_d = this.target.stack) === null || _d === void 0 ? void 0 : _d.startsWith(runtime_1.default.language.node.value)) {
|
|
138
|
+
if (debugPort !== null) {
|
|
139
|
+
slaveOptions.push('--inspect-brk=' + debugPort);
|
|
140
|
+
}
|
|
141
|
+
slaveOptions.push(this.nodeInvoker);
|
|
142
|
+
slaveOptions.push(JSON.stringify(slaveFnTarget));
|
|
143
|
+
slaveOptions.push(JSON.stringify(data));
|
|
144
|
+
slaveOptions.push(JSON.stringify({
|
|
145
|
+
'x-zc-projectid': (0, project_1.getProjectId)(),
|
|
146
|
+
'x-zc-project-domain': (0, project_1.getDomainPrefix)() + '.' + constants_1.ORIGIN.app.replace('https://', ''),
|
|
147
|
+
'x-zc-project-key': (0, project_1.getDomainKey)(),
|
|
148
|
+
'x-zc-environment': (0, project_1.getEnvName)()
|
|
149
|
+
}));
|
|
150
|
+
slaveOptions.push(JSON.stringify({
|
|
151
|
+
'x-zc-user-cred-type': 'token',
|
|
152
|
+
'x-zc-user-cred-token': accessToken,
|
|
153
|
+
'x-zc-admin-cred-type': 'token',
|
|
154
|
+
'x-zc-admin-cred-token': accessToken,
|
|
155
|
+
'x-zc-user-type': 'admin'
|
|
156
|
+
}));
|
|
157
|
+
slaveOptions.push(JSON.stringify((0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build)));
|
|
158
|
+
this.slave = (0, shell_1.spawn)('node', slaveOptions, {
|
|
159
|
+
cwd: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name),
|
|
160
|
+
stdio: 'pipe',
|
|
161
|
+
env: Object.assign({ X_ZOHO_CATALYST_IS_LOCAL: 'true', X_ZOHO_CATALYST_FUNCTION_LOADED: 'true', X_ZOHO_CATALYST_ACCOUNTS_URL: constants_1.ORIGIN.auth, X_ZOHO_CATALYST_CONSOLE_URL: constants_1.ORIGIN.admin, X_ZOHO_CATALYST_RESOURCE_ID: (_e = this.target) === null || _e === void 0 ? void 0 : _e.id, CATALYST_PROJECT_TIMEZONE: (0, project_1.getProjectTimezone)(Intl.DateTimeFormat().resolvedOptions().timeZone) }, this.target.env_var)
|
|
162
|
+
}).RAW();
|
|
163
|
+
}
|
|
164
|
+
else if ((_f = this.target.stack) === null || _f === void 0 ? void 0 : _f.startsWith(runtime_1.default.language.java.value)) {
|
|
165
|
+
const javaInvokerDir = (0, path_1.parse)(this.javaInvoker).dir;
|
|
166
|
+
slaveOptions.push('-cp');
|
|
167
|
+
slaveOptions.push(javaInvokerDir +
|
|
168
|
+
fn_utils_1.fnUtils.java.classPathSep +
|
|
169
|
+
(0, path_1.join)(javaInvokerDir, 'lib', '*'));
|
|
170
|
+
if (debugPort !== null) {
|
|
171
|
+
slaveOptions.push('-Xdebug');
|
|
172
|
+
slaveOptions.push('-Xrunjdwp:transport=dt_socket,address=' +
|
|
173
|
+
debugPort +
|
|
174
|
+
',server=y,suspend=y');
|
|
175
|
+
}
|
|
176
|
+
slaveOptions.push((0, path_1.basename)(this.javaInvoker));
|
|
177
|
+
slaveOptions.push(javaInvokerDir);
|
|
178
|
+
slaveOptions.push(JSON.stringify(slaveFnTarget));
|
|
179
|
+
slaveOptions.push(JSON.stringify(data));
|
|
180
|
+
slaveOptions.push(JSON.stringify({
|
|
181
|
+
'x-zc-projectid': (0, project_1.getProjectId)(),
|
|
182
|
+
'x-zc-project-domain': (0, project_1.getDomainPrefix)() + '.' + constants_1.ORIGIN.app.replace('https://', ''),
|
|
183
|
+
'x-zc-project-key': (0, project_1.getDomainKey)(),
|
|
184
|
+
'x-zc-environment': (0, project_1.getEnvName)()
|
|
185
|
+
}));
|
|
186
|
+
slaveOptions.push(JSON.stringify({
|
|
187
|
+
'x-zc-user-cred-type': 'token',
|
|
188
|
+
'x-zc-user-cred-token': accessToken,
|
|
189
|
+
'x-zc-admin-cred-type': 'token',
|
|
190
|
+
'x-zc-admin-cred-token': accessToken,
|
|
191
|
+
'x-zc-user-type': 'admin'
|
|
192
|
+
}));
|
|
193
|
+
const configKey = `${this.target.stack}.bin`;
|
|
194
|
+
const userConfigCmd = userConfig_1.default.get(configKey);
|
|
195
|
+
const spawnCommand = (0, ensure_java_userconfig_1.getJavaSpawnCommand)(userConfigCmd, 'java', this.target.stack);
|
|
196
|
+
this.slave = (0, shell_1.spawn)(spawnCommand, slaveOptions, {
|
|
197
|
+
cwd: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name),
|
|
198
|
+
stdio: 'pipe',
|
|
199
|
+
env: Object.assign({ X_ZOHO_CATALYST_IS_LOCAL: 'true', X_ZOHO_CATALYST_FUNCTION_LOADED: 'true', X_ZOHO_CATALYST_ACCOUNTS_URL: constants_1.ORIGIN.auth, X_ZOHO_CATALYST_CONSOLE_URL: constants_1.ORIGIN.admin, X_ZOHO_CATALYST_RESOURCE_ID: (_g = this.target) === null || _g === void 0 ? void 0 : _g.id, CATALYST_PROJECT_TIMEZONE: (0, project_1.getProjectTimezone)(Intl.DateTimeFormat().resolvedOptions().timeZone) }, this.target.env_var)
|
|
200
|
+
}).RAW();
|
|
201
|
+
}
|
|
202
|
+
else if ((_h = this.target.stack) === null || _h === void 0 ? void 0 : _h.startsWith(runtime_1.default.language.python.value)) {
|
|
203
|
+
const stackVersion = (_j = this.target.stack) === null || _j === void 0 ? void 0 : _j.replace('python_', '');
|
|
204
|
+
const runtimesDir = constants_1.ENVPATH.runtimes.data;
|
|
205
|
+
const httpPort = parseInt(runtime_store_1.default.get('context.port.http.' + constants_1.REMOTE_REF.functions.type[constants_1.FN_TYPE.basic]), 10);
|
|
206
|
+
const runTimePort = yield port_resolver_1.default.getFreePort(httpPort, 20, false);
|
|
207
|
+
yield fs_1.ASYNC.ensureFile(this.responseFile, true);
|
|
208
|
+
yield fs_1.ASYNC.ensureFile(this.metaFile, true);
|
|
209
|
+
slaveOptions.push('-u');
|
|
210
|
+
slaveOptions.push((0, path_1.join)(runtimesDir, runtime_1.default.language.python.value, `zcatalyst_runtime_${stackVersion.replace('_', '')}`, 'main.py'));
|
|
211
|
+
this.slave = (0, shell_1.spawn)(userConfig_1.default.get(`python${stackVersion}.bin`), slaveOptions, {
|
|
212
|
+
cwd: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name),
|
|
213
|
+
stdio: 'pipe',
|
|
214
|
+
env: Object.assign({ X_ZOHO_CATALYST_IS_LOCAL: 'true', X_ZOHO_CATALYST_FUNCTION_LOADED: 'true', X_ZOHO_CATALYST_ACCOUNTS_URL: constants_1.ORIGIN.auth, X_ZOHO_CATALYST_CONSOLE_URL: constants_1.ORIGIN.admin, X_ZOHO_CATALYST_RESOURCE_ID: (_k = this.target) === null || _k === void 0 ? void 0 : _k.id, X_ZOHO_CATALYST_CODE_LOCATION: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name), X_ZOHO_CATALYST_SERVER_LISTEN_PORT: runTimePort.toString(), X_ZOHO_DATA_URL: `http://localhost:${runTimePort}/data`, X_ZOHO_CALLBACK_URL: `http://localhost:${runTimePort}/callback`, CATALYST_PROJECT_TIMEZONE: (0, project_1.getProjectTimezone)(Intl.DateTimeFormat().resolvedOptions().timeZone), X_ZOHO_ADMIN_CRED_TOKEN: 'dummy', X_ZOHO_PROJECT_SECRET_KEY: 'dummy', X_ZOHO_CATALYST_ORG: (0, project_1.getEnvId)(), X_ZOHO_CATALYST_ENVIRONMENT: 'Local', X_ZOHO_JOBMETA_JOBID: 'dummy', CATALYST_FUNCTION_TYPE: constants_1.REMOTE_REF.functions.type[this.target.type] }, this.target.env_var)
|
|
215
|
+
}).RAW();
|
|
216
|
+
this.slave.once('spawn', () => __awaiter(this, void 0, void 0, function* () {
|
|
217
|
+
var _o;
|
|
218
|
+
const jsonData = data;
|
|
219
|
+
jsonData.timestamp = Date.now();
|
|
220
|
+
const writeResponse = (response, status) => {
|
|
221
|
+
fs_1.SYNC.writeFile(this.responseFile, response);
|
|
222
|
+
fs_1.SYNC.writeFile(this.metaFile, JSON.stringify({ response: { statusCode: status } }));
|
|
223
|
+
};
|
|
224
|
+
if (this.target.type === constants_1.FN_TYPE.job) {
|
|
225
|
+
const jobDetailsServer = new http_1.Server((serverReq, serverRes) => __awaiter(this, void 0, void 0, function* () {
|
|
226
|
+
var _p, _q, _r;
|
|
227
|
+
if ((_p = serverReq.url) === null || _p === void 0 ? void 0 : _p.includes('data')) {
|
|
228
|
+
serverRes.writeHead(200);
|
|
229
|
+
serverRes.write(JSON.stringify({
|
|
230
|
+
data: jsonData
|
|
231
|
+
}));
|
|
232
|
+
serverRes.end();
|
|
233
|
+
}
|
|
234
|
+
else if ((_q = serverReq.url) === null || _q === void 0 ? void 0 : _q.includes('callback')) {
|
|
235
|
+
const reqData = yield new Promise((resolve) => {
|
|
236
|
+
const data = [];
|
|
237
|
+
serverReq.on('data', (chunk) => data.push(chunk));
|
|
238
|
+
serverReq.on('end', () => resolve(JSON.parse(Buffer.concat(data).toString())));
|
|
239
|
+
});
|
|
240
|
+
switch (reqData.job_status) {
|
|
241
|
+
case 200: {
|
|
242
|
+
writeResponse('SUCCESS', 200);
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case 532: {
|
|
246
|
+
writeResponse('CODE_EXCEPTION', 532);
|
|
247
|
+
break;
|
|
248
|
+
}
|
|
249
|
+
case 530: {
|
|
250
|
+
writeResponse('FAILURE', 530);
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case 500: {
|
|
254
|
+
writeResponse('INTERNAL_SERVER_ERROR', 500);
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
serverRes.writeHead(200);
|
|
259
|
+
serverRes.end();
|
|
260
|
+
return;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
(0, logger_1.debug)(`Invalid request: (${serverReq.method}) ${serverReq.url}`);
|
|
264
|
+
writeResponse('INTERNAL_SERVER_ERROR', 500);
|
|
265
|
+
(_r = this.slave) === null || _r === void 0 ? void 0 : _r.kill('SIGINT');
|
|
266
|
+
return;
|
|
267
|
+
}
|
|
268
|
+
}));
|
|
269
|
+
const jobConnDestroyer = new server_1.ConnectionDestroyer(jobDetailsServer);
|
|
270
|
+
jobDetailsServer.listen(runTimePort, () => {
|
|
271
|
+
(0, logger_1.debug)('server listening on port :' + runTimePort);
|
|
272
|
+
});
|
|
273
|
+
(_o = this.slave) === null || _o === void 0 ? void 0 : _o.once('exit', () => {
|
|
274
|
+
jobConnDestroyer.destroy();
|
|
275
|
+
});
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
const reqJson = JSON.stringify(jsonData);
|
|
279
|
+
yield (0, http_functions_1.checkIfRuntimeServerRunning)(runTimePort.toString());
|
|
280
|
+
const req = http_1.default
|
|
281
|
+
.request(`http://127.0.0.1:${runTimePort}`, {
|
|
282
|
+
headers: {
|
|
283
|
+
'x-zc-projectid': (0, project_1.getProjectId)(),
|
|
284
|
+
'x-zc-project-domain': (0, project_1.getDomainPrefix)() +
|
|
285
|
+
'.' +
|
|
286
|
+
constants_1.ORIGIN.app.replace('https://', ''),
|
|
287
|
+
'x-zc-project-key': (0, project_1.getDomainKey)(),
|
|
288
|
+
'x-zc-environment': (0, project_1.getEnvName)(),
|
|
289
|
+
'x-zc-user-cred-type': 'token',
|
|
290
|
+
'x-zc-user-cred-token': accessToken,
|
|
291
|
+
'x-zc-admin-cred-type': 'token',
|
|
292
|
+
'x-zc-admin-cred-token': accessToken,
|
|
293
|
+
'x-zc-user-type': 'admin',
|
|
294
|
+
'Content-Length': reqJson.length
|
|
295
|
+
}
|
|
296
|
+
}, (resp) => {
|
|
297
|
+
var _a;
|
|
298
|
+
if ([
|
|
299
|
+
constants_1.REMOTE_REF.functions.type.cron,
|
|
300
|
+
constants_1.REMOTE_REF.functions.type.event
|
|
301
|
+
].includes(this.target.type + '')) {
|
|
302
|
+
switch (resp.statusCode) {
|
|
303
|
+
case 200: {
|
|
304
|
+
writeResponse('SUCCESS', 200);
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
case 532: {
|
|
308
|
+
writeResponse('CODE_EXCEPTION', 532);
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
case 530: {
|
|
312
|
+
writeResponse('FAILURE', 530);
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
case 500: {
|
|
316
|
+
writeResponse('INTERNAL_SERVER_ERROR', 500);
|
|
317
|
+
break;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
(_a = this.slave) === null || _a === void 0 ? void 0 : _a.kill('SIGTERM');
|
|
321
|
+
return;
|
|
322
|
+
}
|
|
323
|
+
resp.on('data', (data) => {
|
|
324
|
+
const respStr = data.toString();
|
|
325
|
+
fs_1.SYNC.writeFile(this.responseFile, respStr);
|
|
326
|
+
});
|
|
327
|
+
resp.on('close', () => {
|
|
328
|
+
var _a;
|
|
329
|
+
const metaJson = {
|
|
330
|
+
response: { statusCode: resp.statusCode }
|
|
331
|
+
};
|
|
332
|
+
fs_1.SYNC.writeFile(this.metaFile, JSON.stringify(metaJson));
|
|
333
|
+
(_a = this.slave) === null || _a === void 0 ? void 0 : _a.kill('SIGTERM');
|
|
334
|
+
});
|
|
335
|
+
})
|
|
336
|
+
.on('error', (err) => {
|
|
337
|
+
var _a;
|
|
338
|
+
(0, logger_1.debug)(err);
|
|
339
|
+
(_a = this.slave) === null || _a === void 0 ? void 0 : _a.kill('SIGTERM');
|
|
340
|
+
});
|
|
341
|
+
req.write(reqJson);
|
|
342
|
+
req.end();
|
|
343
|
+
}));
|
|
344
|
+
}
|
|
345
|
+
if (this.slave === null) {
|
|
346
|
+
throw new error_1.default('Slave listening started before initializing', {
|
|
347
|
+
exit: 2
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
(_l = this.slave.stdout) === null || _l === void 0 ? void 0 : _l.on('data', (message) => {
|
|
351
|
+
(0, shell_1.clearLine)(process.stdout);
|
|
352
|
+
(0, logger_1.info)(message.toString());
|
|
353
|
+
});
|
|
354
|
+
(_m = this.slave.stderr) === null || _m === void 0 ? void 0 : _m.on('data', (message) => {
|
|
355
|
+
const errorStr = js_1.JS.trim(message.toString());
|
|
356
|
+
(0, shell_1.clearLine)(process.stdout);
|
|
357
|
+
(0, logger_1.info)(errorStr);
|
|
358
|
+
});
|
|
359
|
+
this.slave.on('exit', (code, sig) => __awaiter(this, void 0, void 0, function* () {
|
|
360
|
+
(0, logger_1.debug)(`local fn slave exit: ${code}, ${sig}`);
|
|
361
|
+
if (code === 0) {
|
|
362
|
+
(0, logger_1.info)(`[CLI] Function ${this.target.name} execution complete`);
|
|
363
|
+
(0, logger_1.info)();
|
|
364
|
+
const response = yield fs_1.ASYNC.readFile(this.responseFile);
|
|
365
|
+
let meta;
|
|
366
|
+
try {
|
|
367
|
+
meta = JSON.parse((yield fs_1.ASYNC.readFile(this.metaFile))).response;
|
|
368
|
+
}
|
|
369
|
+
catch (err) {
|
|
370
|
+
meta = {};
|
|
371
|
+
}
|
|
372
|
+
switch (this.target.type) {
|
|
373
|
+
case constants_1.FN_TYPE.basic:
|
|
374
|
+
(0, logger_1.info)(`[response - ${this.target.name}] ${response + ''}`);
|
|
375
|
+
(0, logger_1.info)(`[status - ${this.target.name}] ${(meta.statusCode || 200) + ''}`);
|
|
376
|
+
this.localFnEvents.emit('response', {
|
|
377
|
+
data: response,
|
|
378
|
+
status: meta.statsCode
|
|
379
|
+
});
|
|
380
|
+
break;
|
|
381
|
+
case constants_1.FN_TYPE.cron:
|
|
382
|
+
case constants_1.FN_TYPE.event:
|
|
383
|
+
(0, logger_1.info)(`[status - ${this.target.name}] ${response || 'Unknown'}`);
|
|
384
|
+
if (!response) {
|
|
385
|
+
(0, logger_1.info)(`[CLI] Make sure to close the ${this.target.name} (${this.target.type}) function.`);
|
|
386
|
+
}
|
|
387
|
+
this.localFnEvents.emit('response', {
|
|
388
|
+
status: meta.statusCode
|
|
389
|
+
});
|
|
390
|
+
break;
|
|
391
|
+
case constants_1.FN_TYPE.integration:
|
|
392
|
+
(0, logger_1.info)(`[response - ${this.target.name}] ${response + ''}`);
|
|
393
|
+
try {
|
|
394
|
+
this.localFnEvents.emit('response', JSON.parse(response || ''));
|
|
395
|
+
}
|
|
396
|
+
catch (er) {
|
|
397
|
+
(0, logger_1.debug)('Invalid integration response: ', er);
|
|
398
|
+
}
|
|
399
|
+
break;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
(code === 130 || sig === 'SIGINT') &&
|
|
404
|
+
(0, logger_1.info)(`[CLI] Function ${this.target.name} interrupted`);
|
|
405
|
+
(code === 143 ||
|
|
406
|
+
sig === 'SIGTERM' ||
|
|
407
|
+
sig === 'SIGQUIT' ||
|
|
408
|
+
sig === 'SIGKILL') &&
|
|
409
|
+
(0, logger_1.info)(`[CLI] Function ${this.target.name} process killed`);
|
|
410
|
+
this.localFnEvents.listenerCount('error') > 0 &&
|
|
411
|
+
this.localFnEvents.emit('error', new error_1.default(`Function(${this.target.name}) process exited with ${code ? 'status: ' + code : 'signal: ' + sig}`, {
|
|
412
|
+
skipHelp: true
|
|
413
|
+
}));
|
|
414
|
+
}
|
|
415
|
+
this.repl.showPrompt();
|
|
416
|
+
}));
|
|
417
|
+
this.slave.on('error', (err) => {
|
|
418
|
+
this.localFnEvents.emit('error', err);
|
|
419
|
+
});
|
|
420
|
+
return this.slave;
|
|
421
|
+
}))();
|
|
422
|
+
};
|
|
35
423
|
if (target.type === undefined ||
|
|
36
424
|
!Object.values(constants_1.FN_TYPE).includes(target.type)) {
|
|
37
425
|
throw new error_1.default('target type is not defined', { exit: 2 });
|
|
@@ -66,209 +454,12 @@ class LocalFunction {
|
|
|
66
454
|
}, 1000);
|
|
67
455
|
});
|
|
68
456
|
}
|
|
69
|
-
_call(rawData = {}) {
|
|
70
|
-
let data;
|
|
71
|
-
try {
|
|
72
|
-
data = JSON.stringify(rawData);
|
|
73
|
-
if (!data.startsWith('{') || !data.endsWith('}')) {
|
|
74
|
-
const content = fs_1.SYNC.readFile((0, path_1.resolve)(runtime_store_1.default.get('cwd'), data.slice(1, data.length - 1)));
|
|
75
|
-
if (content === undefined) {
|
|
76
|
-
return new error_1.default('content is undefined for provided file path');
|
|
77
|
-
}
|
|
78
|
-
data = content;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
catch (e) {
|
|
82
|
-
(0, logger_1.info)('the input must be in the form of json or a path to a file containing json data.');
|
|
83
|
-
return new error_1.default('Invalid input');
|
|
84
|
-
}
|
|
85
|
-
if (this.target.type === constants_1.FN_TYPE.event && !data.includes('event_bus_details')) {
|
|
86
|
-
(0, logger_1.info)('For event function kindly use event:generate command to generate the input json.');
|
|
87
|
-
(0, logger_1.info)('You can also provide event details as per documentation.');
|
|
88
|
-
return new error_1.default('Event bus details missing');
|
|
89
|
-
}
|
|
90
|
-
return (() => __awaiter(this, void 0, void 0, function* () {
|
|
91
|
-
var _a, _b, _c, _d, _e, _f;
|
|
92
|
-
const projectRoot = runtime_store_1.default.get('project.root');
|
|
93
|
-
const accessToken = yield credential_1.default.getAccessToken();
|
|
94
|
-
const slaveOptions = [];
|
|
95
|
-
const debugPort = runtime_store_1.default.get('context.port.debug.' + constants_1.FN_TYPE.basic, null);
|
|
96
|
-
yield fs_1.ASYNC.ensureFile(this.responseFile, true);
|
|
97
|
-
yield fs_1.ASYNC.ensureFile(this.metaFile, true);
|
|
98
|
-
const slaveFnTarget = { index: this.target.index, name: this.target.name };
|
|
99
|
-
if ((_a = this.target.stack) === null || _a === void 0 ? void 0 : _a.startsWith(runtime_1.default.language.node.value)) {
|
|
100
|
-
if (debugPort !== null) {
|
|
101
|
-
slaveOptions.push('--inspect-brk=' + debugPort);
|
|
102
|
-
}
|
|
103
|
-
slaveOptions.push(this.nodeInvoker);
|
|
104
|
-
slaveOptions.push(JSON.stringify(slaveFnTarget));
|
|
105
|
-
slaveOptions.push(data);
|
|
106
|
-
slaveOptions.push(JSON.stringify({
|
|
107
|
-
'x-zc-projectid': (0, project_1.getProjectId)(),
|
|
108
|
-
'x-zc-project-domain': (0, project_1.getDomainPrefix)() + '.' + constants_1.ORIGIN.app.replace('https://', ''),
|
|
109
|
-
'x-zc-project-key': (0, project_1.getDomainKey)(),
|
|
110
|
-
'x-zc-environment': (0, project_1.getEnvName)()
|
|
111
|
-
}));
|
|
112
|
-
slaveOptions.push(JSON.stringify({
|
|
113
|
-
'x-zc-user-cred-type': 'token',
|
|
114
|
-
'x-zc-user-cred-token': accessToken,
|
|
115
|
-
'x-zc-admin-cred-type': 'token',
|
|
116
|
-
'x-zc-admin-cred-token': accessToken,
|
|
117
|
-
'x-zc-user-type': 'admin'
|
|
118
|
-
}));
|
|
119
|
-
slaveOptions.push(JSON.stringify((0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build)));
|
|
120
|
-
this.slave = (0, shell_1.spawn)('node', slaveOptions, {
|
|
121
|
-
cwd: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name),
|
|
122
|
-
stdio: 'pipe',
|
|
123
|
-
env: Object.assign({ X_ZOHO_CATALYST_IS_LOCAL: 'true', X_ZOHO_CATALYST_FUNCTION_LOADED: 'true', X_ZOHO_CATALYST_ACCOUNTS_URL: constants_1.ORIGIN.auth, X_ZOHO_CATALYST_CONSOLE_URL: constants_1.ORIGIN.admin, CATALYST_PROJECT_TIMEZONE: (0, project_1.getProjectTimezone)(Intl.DateTimeFormat().resolvedOptions().timeZone) }, this.target.env_var)
|
|
124
|
-
}).RAW();
|
|
125
|
-
}
|
|
126
|
-
else if ((_b = this.target.stack) === null || _b === void 0 ? void 0 : _b.startsWith(runtime_1.default.language.java.value)) {
|
|
127
|
-
const javaInvokerDir = (0, path_1.parse)(this.javaInvoker).dir;
|
|
128
|
-
slaveOptions.push('-cp');
|
|
129
|
-
slaveOptions.push(javaInvokerDir + fn_utils_1.fnUtils.java.classPathSep + (0, path_1.join)(javaInvokerDir, 'lib', '*'));
|
|
130
|
-
if (debugPort !== null) {
|
|
131
|
-
slaveOptions.push('-Xdebug');
|
|
132
|
-
slaveOptions.push('-Xrunjdwp:transport=dt_socket,address=' + debugPort + ',server=y,suspend=y');
|
|
133
|
-
}
|
|
134
|
-
slaveOptions.push((0, path_1.basename)(this.javaInvoker));
|
|
135
|
-
slaveOptions.push(javaInvokerDir);
|
|
136
|
-
slaveOptions.push(JSON.stringify(slaveFnTarget));
|
|
137
|
-
slaveOptions.push(data);
|
|
138
|
-
slaveOptions.push(JSON.stringify({
|
|
139
|
-
'x-zc-projectid': (0, project_1.getProjectId)(),
|
|
140
|
-
'x-zc-project-domain': (0, project_1.getDomainPrefix)() + '.' + constants_1.ORIGIN.app.replace('https://', ''),
|
|
141
|
-
'x-zc-project-key': (0, project_1.getDomainKey)(),
|
|
142
|
-
'x-zc-environment': (0, project_1.getEnvName)()
|
|
143
|
-
}));
|
|
144
|
-
slaveOptions.push(JSON.stringify({
|
|
145
|
-
'x-zc-user-cred-type': 'token',
|
|
146
|
-
'x-zc-user-cred-token': accessToken,
|
|
147
|
-
'x-zc-admin-cred-type': 'token',
|
|
148
|
-
'x-zc-admin-cred-token': accessToken,
|
|
149
|
-
'x-zc-user-type': 'admin'
|
|
150
|
-
}));
|
|
151
|
-
const configKey = `${this.target.stack}.bin`;
|
|
152
|
-
const userConfigCmd = userConfig_1.default.get(configKey);
|
|
153
|
-
const spawnCommand = (0, ensure_java_userconfig_1.getJavaSpawnCommand)(userConfigCmd, 'java', this.target.stack);
|
|
154
|
-
this.slave = (0, shell_1.spawn)(spawnCommand, slaveOptions, {
|
|
155
|
-
cwd: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name),
|
|
156
|
-
stdio: 'pipe',
|
|
157
|
-
env: Object.assign({ X_ZOHO_CATALYST_IS_LOCAL: 'true', X_ZOHO_CATALYST_FUNCTION_LOADED: 'true', X_ZOHO_CATALYST_ACCOUNTS_URL: constants_1.ORIGIN.auth, X_ZOHO_CATALYST_CONSOLE_URL: constants_1.ORIGIN.admin, CATALYST_PROJECT_TIMEZONE: (0, project_1.getProjectTimezone)(Intl.DateTimeFormat().resolvedOptions().timeZone) }, this.target.env_var)
|
|
158
|
-
}).RAW();
|
|
159
|
-
}
|
|
160
|
-
else if ((_c = this.target.stack) === null || _c === void 0 ? void 0 : _c.startsWith(runtime_1.default.language.python.value)) {
|
|
161
|
-
const stackVersion = (_d = this.target.stack) === null || _d === void 0 ? void 0 : _d.replace('python_', '');
|
|
162
|
-
const runtimesDir = constants_1.ENVPATH.runtimes.data;
|
|
163
|
-
const httpPort = parseInt(runtime_store_1.default.get('context.port.http.' + constants_1.REMOTE_REF.functions.type[constants_1.FN_TYPE.basic]), 10);
|
|
164
|
-
const runTimePort = yield port_resolver_1.default.getFreePort(httpPort, 20, false);
|
|
165
|
-
yield fs_1.ASYNC.ensureFile(this.responseFile, true);
|
|
166
|
-
yield fs_1.ASYNC.ensureFile(this.metaFile, true);
|
|
167
|
-
slaveOptions.push('-u');
|
|
168
|
-
slaveOptions.push((0, path_1.join)(runtimesDir, runtime_1.default.language.python.value, `zcatalyst_runtime_${stackVersion.replace('_', '')}`, 'main.py'));
|
|
169
|
-
this.slave = (0, shell_1.spawn)(userConfig_1.default.get(`python${stackVersion}.bin`), slaveOptions, {
|
|
170
|
-
cwd: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name),
|
|
171
|
-
stdio: 'pipe',
|
|
172
|
-
env: Object.assign({ X_ZOHO_CATALYST_IS_LOCAL: 'true', X_ZOHO_CATALYST_FUNCTION_LOADED: 'true', X_ZOHO_CATALYST_ACCOUNTS_URL: constants_1.ORIGIN.auth, X_ZOHO_CATALYST_CONSOLE_URL: constants_1.ORIGIN.admin, X_ZOHO_CATALYST_CODE_LOCATION: (0, path_1.join)(projectRoot, constants_1.FOLDERNAME.build, constants_1.FOLDERNAME.functions, this.target.name), X_ZOHO_CATALYST_SERVER_LISTEN_PORT: runTimePort.toString(), CATALYST_PROJECT_TIMEZONE: (0, project_1.getProjectTimezone)(Intl.DateTimeFormat().resolvedOptions().timeZone) }, this.target.env_var)
|
|
173
|
-
}).RAW();
|
|
174
|
-
this.slave.on('spawn', () => __awaiter(this, void 0, void 0, function* () {
|
|
175
|
-
const jsonData = JSON.parse(data);
|
|
176
|
-
jsonData.timestamp = Date.now();
|
|
177
|
-
const reqJson = JSON.stringify(jsonData);
|
|
178
|
-
yield (0, http_functions_1.checkIfRuntimeServerRunning)(runTimePort.toString());
|
|
179
|
-
const req = http_1.default
|
|
180
|
-
.request(`http://127.0.0.1:${runTimePort}`, {
|
|
181
|
-
headers: {
|
|
182
|
-
'x-zc-projectid': (0, project_1.getProjectId)(),
|
|
183
|
-
'x-zc-project-domain': (0, project_1.getDomainPrefix)() +
|
|
184
|
-
'.' +
|
|
185
|
-
constants_1.ORIGIN.app.replace('https://', ''),
|
|
186
|
-
'x-zc-project-key': (0, project_1.getDomainKey)(),
|
|
187
|
-
'x-zc-environment': (0, project_1.getEnvName)(),
|
|
188
|
-
'x-zc-user-cred-type': 'token',
|
|
189
|
-
'x-zc-user-cred-token': accessToken,
|
|
190
|
-
'x-zc-admin-cred-type': 'token',
|
|
191
|
-
'x-zc-admin-cred-token': accessToken,
|
|
192
|
-
'x-zc-user-type': 'admin',
|
|
193
|
-
'Content-Length': reqJson.length
|
|
194
|
-
}
|
|
195
|
-
}, (resp) => {
|
|
196
|
-
resp.on('data', (data) => {
|
|
197
|
-
const respStr = data.toString();
|
|
198
|
-
fs_1.SYNC.writeFile(this.responseFile, respStr);
|
|
199
|
-
});
|
|
200
|
-
resp.on('close', () => {
|
|
201
|
-
var _a;
|
|
202
|
-
const metaJson = { response: { statusCode: resp.statusCode } };
|
|
203
|
-
fs_1.SYNC.writeFile(this.metaFile, JSON.stringify(metaJson));
|
|
204
|
-
(_a = this.slave) === null || _a === void 0 ? void 0 : _a.kill('SIGINT');
|
|
205
|
-
});
|
|
206
|
-
})
|
|
207
|
-
.on('error', (err) => {
|
|
208
|
-
var _a;
|
|
209
|
-
console.log(err);
|
|
210
|
-
(_a = this.slave) === null || _a === void 0 ? void 0 : _a.kill('SIGINT');
|
|
211
|
-
});
|
|
212
|
-
req.write(reqJson);
|
|
213
|
-
req.end();
|
|
214
|
-
}));
|
|
215
|
-
}
|
|
216
|
-
if (this.slave === null) {
|
|
217
|
-
throw new error_1.default('Slave listening started before initialising', {
|
|
218
|
-
exit: 2
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
(_e = this.slave.stdout) === null || _e === void 0 ? void 0 : _e.on('data', (message) => {
|
|
222
|
-
(0, shell_1.clearLine)(process.stdout);
|
|
223
|
-
(0, logger_1.info)(message.toString());
|
|
224
|
-
});
|
|
225
|
-
(_f = this.slave.stderr) === null || _f === void 0 ? void 0 : _f.on('data', (message) => {
|
|
226
|
-
const errorStr = js_1.JS.trim(message.toString());
|
|
227
|
-
(0, shell_1.clearLine)(process.stdout);
|
|
228
|
-
(0, logger_1.info)(errorStr);
|
|
229
|
-
});
|
|
230
|
-
this.slave.on('exit', (code) => __awaiter(this, void 0, void 0, function* () {
|
|
231
|
-
if (code !== null && code !== 130) {
|
|
232
|
-
(0, logger_1.info)('[cli] Function execution complete');
|
|
233
|
-
(0, logger_1.info)();
|
|
234
|
-
const response = yield fs_1.ASYNC.readFile(this.responseFile);
|
|
235
|
-
let meta;
|
|
236
|
-
try {
|
|
237
|
-
meta = JSON.parse((yield fs_1.ASYNC.readFile(this.metaFile))).response;
|
|
238
|
-
}
|
|
239
|
-
catch (err) {
|
|
240
|
-
meta = {};
|
|
241
|
-
}
|
|
242
|
-
switch (this.target.type) {
|
|
243
|
-
case constants_1.FN_TYPE.basic:
|
|
244
|
-
(0, logger_1.info)('[response]');
|
|
245
|
-
(0, logger_1.info)(response);
|
|
246
|
-
(0, logger_1.info)('[status]');
|
|
247
|
-
(0, logger_1.info)(meta.statusCode || 200);
|
|
248
|
-
break;
|
|
249
|
-
case constants_1.FN_TYPE.cron:
|
|
250
|
-
case constants_1.FN_TYPE.event:
|
|
251
|
-
(0, logger_1.info)('[status]');
|
|
252
|
-
(0, logger_1.info)(response);
|
|
253
|
-
break;
|
|
254
|
-
case constants_1.FN_TYPE.integration:
|
|
255
|
-
(0, logger_1.info)('[response]');
|
|
256
|
-
(0, logger_1.info)(response);
|
|
257
|
-
break;
|
|
258
|
-
default:
|
|
259
|
-
break;
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
this.repl.showPrompt();
|
|
263
|
-
}));
|
|
264
|
-
return this.slave;
|
|
265
|
-
}))();
|
|
266
|
-
}
|
|
267
457
|
shutdown() {
|
|
268
458
|
return __awaiter(this, void 0, void 0, function* () {
|
|
269
459
|
return new Promise((res) => {
|
|
270
460
|
if (this.slave) {
|
|
271
|
-
this.
|
|
461
|
+
this.killed = true;
|
|
462
|
+
this.slave.kill('SIGTERM');
|
|
272
463
|
}
|
|
273
464
|
if (this.watcher) {
|
|
274
465
|
this.watcher.close().then(res).catch(res);
|
|
@@ -279,5 +470,13 @@ class LocalFunction {
|
|
|
279
470
|
});
|
|
280
471
|
});
|
|
281
472
|
}
|
|
473
|
+
once(event, fn) {
|
|
474
|
+
this.localFnEvents.once(event, fn);
|
|
475
|
+
return this;
|
|
476
|
+
}
|
|
477
|
+
removeListener(event, fn) {
|
|
478
|
+
this.localFnEvents.removeListener(event, fn);
|
|
479
|
+
return this;
|
|
480
|
+
}
|
|
282
481
|
}
|
|
283
482
|
exports.default = LocalFunction;
|