zcatalyst-cli 1.15.0-beta.5 → 1.15.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/docs/serve/server/index.toml +5 -0
  2. package/docs/serve/server/lib/appsail/index.toml +4 -0
  3. package/lib/archiver.js +8 -3
  4. package/lib/client-utils.js +5 -1
  5. package/lib/commands/iac/pack.js +9 -8
  6. package/lib/deploy/features/appsail/index.js +15 -5
  7. package/lib/deploy/features/client.js +1 -1
  8. package/lib/deploy/features/functions/index.js +7 -4
  9. package/lib/endpoints/lib/applogic.js +14 -2
  10. package/lib/endpoints/lib/appsail.js +11 -2
  11. package/lib/endpoints/lib/client.js +11 -2
  12. package/lib/endpoints/lib/functions.js +14 -2
  13. package/lib/express_middlewares/logger.js +6 -2
  14. package/lib/fn-utils/lib/common.js +78 -48
  15. package/lib/fn-utils/lib/java.js +10 -10
  16. package/lib/fn-utils/lib/python.js +1 -1
  17. package/lib/init/features/appsail/index.js +2 -2
  18. package/lib/internal/api.js +33 -8
  19. package/lib/option-filter.js +4 -4
  20. package/lib/port-resolver.js +24 -11
  21. package/lib/progress.js +3 -2
  22. package/lib/prompt/types/file-path.js +3 -1
  23. package/lib/serve/features/appsail.js +14 -3
  24. package/lib/serve/features/index.js +1 -1
  25. package/lib/serve/index.js +7 -2
  26. package/lib/serve/server/index.js +317 -123
  27. package/lib/serve/server/lib/appsail/index.js +28 -10
  28. package/lib/serve/server/lib/appsail/start.js +4 -15
  29. package/lib/serve/server/lib/master.js +10 -10
  30. package/lib/serve/server/lib/web_client/index.js +5 -5
  31. package/lib/shell/dependencies/http-functions.js +11 -15
  32. package/lib/shell/prepare/languages/java.js +9 -4
  33. package/lib/util_modules/constants/lib/default.js +4 -1
  34. package/lib/util_modules/constants/lib/scopes.js +1 -0
  35. package/lib/util_modules/fs/lib/async.js +11 -17
  36. package/lib/util_modules/fs/lib/sync.js +5 -1
  37. package/package.json +1 -1
  38. package/templates/init/functions/java/integ/convokraft/FallbackHandler.java +1 -0
  39. package/templates/init/functions/node/integ/convokraft/fallback.js +1 -0
  40. package/templates/init/functions/python/integ/convokraft/fallback_handler.py +2 -1
  41. package/templates/init/functions/node/.DS_Store +0 -0
  42. package/templates/init/functions/node/integ/.DS_Store +0 -0
  43. package/templates/init/functions/node/integ/convokraft/.DS_Store +0 -0
@@ -92,6 +92,7 @@ const proxyResponseHandler = (systemRoutes) => (proxyRes, req, res) => {
92
92
  }
93
93
  };
94
94
  function spinUpMaster(listenPort, otherServerDetails) {
95
+ var _a;
95
96
  return __awaiter(this, void 0, void 0, function* () {
96
97
  const projectDetails = {
97
98
  id: (0, project_2.getProjectId)(),
@@ -104,7 +105,7 @@ function spinUpMaster(listenPort, otherServerDetails) {
104
105
  const customProxyUrl = (0, option_1.getOptionValue)('proxy');
105
106
  const app = (0, express_1.default)();
106
107
  let systemRoutes;
107
- app.use(logger_1.default);
108
+ app.use((0, logger_1.default)((_a = otherServerDetails.appSail) === null || _a === void 0 ? void 0 : _a.at(0)));
108
109
  app.use(cookie_parser_1.default);
109
110
  app.use((0, project_1.default)(projectDetails));
110
111
  app.use(authenticator_1.default);
@@ -153,9 +154,10 @@ function spinUpMaster(listenPort, otherServerDetails) {
153
154
  .on('close', () => (0, logger_2.debug)('proxy closed'));
154
155
  const proxyDestroyer = new server_js_1.ConnectionDestroyer(proxy);
155
156
  Object.keys(otherServerDetails).forEach((targ) => {
157
+ var _a, _b, _c, _d;
156
158
  switch (targ) {
157
159
  case 'client': {
158
- otherServerDetails.client.forEach((clientDetails) => {
160
+ (_a = otherServerDetails.client) === null || _a === void 0 ? void 0 : _a.forEach((clientDetails) => {
159
161
  const appTarget = `http://127.0.0.1:${clientDetails.httpPort}/app/`;
160
162
  app.use('/app', (req, res) => {
161
163
  const target = clientDetails.target;
@@ -193,7 +195,7 @@ function spinUpMaster(listenPort, otherServerDetails) {
193
195
  break;
194
196
  }
195
197
  case 'server': {
196
- otherServerDetails.server.forEach((serverDetail) => {
198
+ (_b = otherServerDetails.server) === null || _b === void 0 ? void 0 : _b.forEach((serverDetail) => {
197
199
  var _a;
198
200
  app.use('/server/' + ((_a = serverDetail.target) === null || _a === void 0 ? void 0 : _a.name), (req, res) => {
199
201
  proxy.web(req, res, {
@@ -204,7 +206,7 @@ function spinUpMaster(listenPort, otherServerDetails) {
204
206
  break;
205
207
  }
206
208
  case 'functions': {
207
- otherServerDetails.functions.forEach((fnDetails) => {
209
+ (_c = otherServerDetails.functions) === null || _c === void 0 ? void 0 : _c.forEach((fnDetails) => {
208
210
  const fnTarget = fnDetails.target;
209
211
  app.use(`/server/${fnTarget.name}`, (req, res) => {
210
212
  proxy.web(req, res, {
@@ -244,12 +246,11 @@ function spinUpMaster(listenPort, otherServerDetails) {
244
246
  break;
245
247
  }
246
248
  case 'appSail': {
247
- otherServerDetails.appSail.forEach((appSailDetails) => {
248
- var _a;
249
- app.use('/appsail/' +
250
- ((_a = appSailDetails.target.appSail) === null || _a === void 0 ? void 0 : _a.name), (req, res) => {
249
+ (_d = otherServerDetails.appSail) === null || _d === void 0 ? void 0 : _d.forEach((appSailDetails) => {
250
+ app.use('/', (req, res) => {
251
251
  proxy.web(req, res, {
252
- target: `http://127.0.0.1:${appSailDetails.target.port}`,
252
+ target: `http://127.0.0.1:${appSailDetails.target.port
253
+ .appsail}`,
253
254
  ws: true
254
255
  });
255
256
  });
@@ -274,7 +275,6 @@ function spinUpMaster(listenPort, otherServerDetails) {
274
275
  expressServer.maxConnections = 100;
275
276
  process.on('SIGINT', () => expressDestroyer.destroy(false));
276
277
  expressServer.on('close', () => __awaiter(this, void 0, void 0, function* () {
277
- (0, logger_2.info)('Shutting down server');
278
278
  yield proxyDestroyer.destroy().catch((err) => (0, logger_2.debug)(err));
279
279
  }));
280
280
  expressServer.on('upgrade', (...upgradeParam) => {
@@ -48,7 +48,9 @@ exports.default = (details, masterPort) => __awaiter(void 0, void 0, void 0, fun
48
48
  ];
49
49
  throw err;
50
50
  });
51
+ (0, logger_1.info)();
51
52
  (0, logger_1.labeled)(`Client[${target.name}]`, `Plugin : "${runtime_store_1.default.get(`context.client.plugins.start${target.source ? '.' + target.source : ''}`)}" is used for ${details.type} serve`).MESSAGE();
53
+ (0, logger_1.info)();
52
54
  return event;
53
55
  }
54
56
  const clientListener = yield (0, server_js_1.default)(details.httpPort, target.source, {
@@ -57,11 +59,9 @@ exports.default = (details, masterPort) => __awaiter(void 0, void 0, void 0, fun
57
59
  notFoundPage: target.notFoundPage
58
60
  });
59
61
  clientListener.addListener('start', () => {
60
- var _a, _b;
61
- const appUrl = 'http://localhost:' + masterPort;
62
- const label = `${details.type}[${(_a = details.target) === null || _a === void 0 ? void 0 : _a.name}]`;
63
- (0, logger_1.labeled)(label, `URL : ${appUrl}/app/`).MESSAGE();
64
- ((_b = details.target.opts) === null || _b === void 0 ? void 0 : _b.open) && (0, open_1.default)(appUrl).catch();
62
+ var _a;
63
+ return ((_a = details.target.opts) === null || _a === void 0 ? void 0 : _a.open) &&
64
+ (0, open_1.default)('http://localhost:' + masterPort).catch();
65
65
  });
66
66
  return clientListener;
67
67
  });
@@ -32,6 +32,8 @@ const logger_2 = require("../../util_modules/logger");
32
32
  const project_2 = require("../../util_modules/project");
33
33
  const shell_1 = require("../../util_modules/shell");
34
34
  const request_1 = __importDefault(require("request"));
35
+ const option_1 = require("../../util_modules/option");
36
+ const server_1 = require("../../util_modules/server");
35
37
  const logUrl = (name, pthName, httpPort, masterPort) => {
36
38
  (0, logger_2.labeled)(`functions(${name})`, 'URL => http://localhost:' + (masterPort === -1 ? httpPort : masterPort) + pthName).MESSAGE();
37
39
  };
@@ -323,6 +325,9 @@ class HttpFunctions {
323
325
  (_a = target.watcher) === null || _a === void 0 ? void 0 : _a.emit('next');
324
326
  }, 1000);
325
327
  });
328
+ if ((0, option_1.getCurrentCommand)() === 'functions:shell') {
329
+ logUrl(target.name, new url_1.URL(target.url).pathname, httpPort, masterPort);
330
+ }
326
331
  });
327
332
  if (this.repl !== undefined) {
328
333
  this.repl.showPrompt();
@@ -335,10 +340,8 @@ class HttpFunctions {
335
340
  start() {
336
341
  return __awaiter(this, void 0, void 0, function* () {
337
342
  const server = yield this._spinUpServer();
338
- server.on('connection', (socket) => {
339
- socket.unref();
340
- });
341
- HttpFunctions.server = server;
343
+ const connDestroyer = new server_1.ConnectionDestroyer(server);
344
+ this.connDestroyer = connDestroyer;
342
345
  return server;
343
346
  });
344
347
  }
@@ -349,20 +352,13 @@ class HttpFunctions {
349
352
  slave.kill('SIGINT');
350
353
  });
351
354
  this.q.destroy(() => __awaiter(this, void 0, void 0, function* () {
352
- yield Promise.all(this.targets.map((target) => __awaiter(this, void 0, void 0, function* () { var _a; return (_a = target.watcher) === null || _a === void 0 ? void 0 : _a.close(); })));
353
- if (HttpFunctions.server !== null) {
354
- HttpFunctions.server.close((err) => {
355
- (0, logger_2.debug)(err);
356
- res();
357
- });
358
- }
359
- else {
360
- res();
361
- }
355
+ var _a;
356
+ yield Promise.all(this.targets.map((target) => __awaiter(this, void 0, void 0, function* () { var _b; return (_b = target.watcher) === null || _b === void 0 ? void 0 : _b.close(); })));
357
+ yield ((_a = this.connDestroyer) === null || _a === void 0 ? void 0 : _a.destroy());
358
+ res();
362
359
  }));
363
360
  });
364
361
  });
365
362
  }
366
363
  }
367
- HttpFunctions.server = null;
368
364
  exports.default = HttpFunctions;
@@ -21,6 +21,7 @@ const constants_1 = require("../../../util_modules/constants");
21
21
  const fs_1 = require("../../../util_modules/fs");
22
22
  const fs_2 = require("fs");
23
23
  const throbber_1 = __importDefault(require("../../../throbber"));
24
+ const error_1 = __importDefault(require("../../../error"));
24
25
  exports.default = (targets) => __awaiter(void 0, void 0, void 0, function* () {
25
26
  if (targets === undefined || targets.length === 0) {
26
27
  return;
@@ -55,14 +56,18 @@ exports.default = (targets) => __awaiter(void 0, void 0, void 0, function* () {
55
56
  const javaInvoker = (0, path_1.join)(__dirname, '../../../serve/server/lib/java/aio_server/JavaaioServer.java');
56
57
  (0, java_1.ensureJavaInvoker)(javaServer, javaInvoker);
57
58
  const serverFiles = yield fs_1.ASYNC.walk((0, path_1.dirname)(javaServer));
58
- yield Promise.all(serverFiles.map((file) => {
59
- return fs_1.ASYNC.copyFile(file, (0, path_1.join)(targetBuildPath, (0, path_1.relative)((0, path_1.dirname)(javaServer), file.replace('lib' + path_1.sep, ''))), fs_2.constants.COPYFILE_EXCL).catch((err) => {
59
+ yield Promise.all(serverFiles.map((file) => __awaiter(void 0, void 0, void 0, function* () {
60
+ try {
61
+ return fs_1.ASYNC.copyFile(file.path, (0, path_1.join)(targetBuildPath, (0, path_1.relative)((0, path_1.dirname)(javaServer), file.path.replace('lib' + path_1.sep, ''))), fs_2.constants.COPYFILE_EXCL);
62
+ }
63
+ catch (e) {
64
+ const err = error_1.default.getErrorInstance(e).original;
60
65
  if (err.code !== 'EEXIST') {
61
66
  throbber.remove('function_serve_' + target.name);
62
67
  throw err;
63
68
  }
64
- });
65
- }));
69
+ }
70
+ })));
66
71
  }
67
72
  yield (0, common_1.copyModDirPerm)((0, path_1.join)(target.source, constants_1.FOLDERNAME.output), targetBuildPath, '555', {
68
73
  replace: false
@@ -12,10 +12,13 @@ exports.default = Object.freeze({
12
12
  serve_port: {
13
13
  http: {
14
14
  master: 3000,
15
+ appsail: {
16
+ master: 3000,
17
+ service: 3060
18
+ },
15
19
  advancedio: 3010,
16
20
  basicio: 3040,
17
21
  client: 3050,
18
- appsail: 3060,
19
22
  browser_logic: 3100
20
23
  },
21
24
  debug: {
@@ -47,6 +47,7 @@ exports.default = Object.freeze({
47
47
  notification_web: 'ZohoCatalyst.notifications.web',
48
48
  search_read: 'ZohoCatalyst.search.READ',
49
49
  zia: 'ZohoCatalyst.mlkit.READ',
50
+ zia_hub: 'ZiaHub.deployment.READ',
50
51
  circuits_execute: 'ZohoCatalyst.circuits.execute',
51
52
  circuits_exe_read: 'ZohoCatalyst.circuits.execution.READ',
52
53
  circuits_exe_delete: 'ZohoCatalyst.circuits.execution.DELETE',
@@ -12,7 +12,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
12
12
  return (mod && mod.__esModule) ? mod : { "default": mod };
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.chmod = exports.writeJSONFile = exports.readJSONFile = exports.emptyDir = exports.findAndReplace = exports.rename = exports.copyDir = exports.copyFiles = exports.copyFile = exports.deleteDir = exports.deleteFile = exports.ensureDir = exports.ensureFile = exports.walk = exports.dirList = exports.writeFile = exports.tempFile = exports.readFile = exports.isFile = exports.fileExists = exports.dirExists = exports.isPathExists = void 0;
15
+ exports.chmod = exports.writeJSONFile = exports.readJSONFile = exports.emptyDir = exports.findAndReplace = exports.rename = exports.copyDir = exports.copyFiles = exports.copyFile = exports.deleteDir = exports.deleteFile = exports.ensureDir = exports.ensureFile = exports.walk = exports.dirList = exports.writeFile = exports.tempFile = exports.readFile = exports.fileExists = exports.dirExists = exports.isPathExists = void 0;
16
16
  const fs_extra_1 = __importDefault(require("fs-extra"));
17
17
  const minimatch_1 = __importDefault(require("minimatch"));
18
18
  const os_1 = __importDefault(require("os"));
@@ -39,13 +39,6 @@ function fileExists(pth) {
39
39
  });
40
40
  }
41
41
  exports.fileExists = fileExists;
42
- function isFile(pth) {
43
- return __awaiter(this, void 0, void 0, function* () {
44
- const stats = yield fs_extra_1.default.stat((0, utils_js_1.untildify)(pth)).catch(() => false);
45
- return stats && stats.isFile();
46
- });
47
- }
48
- exports.isFile = isFile;
49
42
  function readFile(pth, type) {
50
43
  return __awaiter(this, void 0, void 0, function* () {
51
44
  if (!(yield fileExists(pth))) {
@@ -94,15 +87,16 @@ function walk(dir, { filter = {
94
87
  excludeDir: true
95
88
  }, depth = -1, includeDirPaths = false } = {}) {
96
89
  return __awaiter(this, void 0, void 0, function* () {
90
+ const stats = yield fs_extra_1.default.lstat(dir);
97
91
  if (depth === 0) {
98
- return includeDirPaths ? [dir] : [];
92
+ return includeDirPaths ? [{ path: dir, stats }] : [];
99
93
  }
100
- const isDir = yield fs_extra_1.default.stat(dir).then((stat) => stat.isDirectory());
94
+ const isDir = stats.isDirectory() && !stats.isSymbolicLink();
101
95
  const files = isDir ? yield fs_extra_1.default.readdir(dir) : [path_1.default.basename(dir)];
102
96
  const folderContentPromise = files.map((entry) => __awaiter(this, void 0, void 0, function* () {
103
97
  const entryPath = isDir ? path_1.default.join(dir, entry) : dir;
104
- const stats = yield fs_extra_1.default.stat(entryPath);
105
- const isEntryPthDir = stats.isDirectory();
98
+ const entryPathStats = yield fs_extra_1.default.lstat(entryPath);
99
+ const isEntryPthDir = entryPathStats.isDirectory() && !entryPathStats.isSymbolicLink();
106
100
  let excludeMatch = false;
107
101
  if (!(isEntryPthDir && !filter.excludeDir)) {
108
102
  for (const glob of filter.exclude || []) {
@@ -114,10 +108,10 @@ function walk(dir, { filter = {
114
108
  }
115
109
  return isEntryPthDir && depth !== 0
116
110
  ? walk(entryPath, { filter, depth: depth - 1, includeDirPaths })
117
- : [entryPath];
111
+ : [{ path: entryPath, stats: entryPathStats }];
118
112
  }));
119
113
  const folderContents = yield Promise.all(folderContentPromise);
120
- return folderContents.reduce((all, folderContent) => all.concat(folderContent), includeDirPaths ? [dir] : []);
114
+ return folderContents.reduce((all, folderContent) => all.concat(folderContent), includeDirPaths ? [{ path: dir, stats }] : []);
121
115
  });
122
116
  }
123
117
  exports.walk = walk;
@@ -193,7 +187,7 @@ const findAndReplace = (pth) => (templates, finalWords) => __awaiter(void 0, voi
193
187
  }
194
188
  const files = yield walk(pth);
195
189
  yield Promise.all(files.map((file) => __awaiter(void 0, void 0, void 0, function* () {
196
- let content = yield readFile(file);
190
+ let content = yield readFile(file.path);
197
191
  if (content === undefined) {
198
192
  return Promise.resolve();
199
193
  }
@@ -205,7 +199,7 @@ const findAndReplace = (pth) => (templates, finalWords) => __awaiter(void 0, voi
205
199
  else {
206
200
  content = content.replace(new RegExp(templates, 'g'), finalWords);
207
201
  }
208
- return writeFile(file, content);
202
+ return writeFile(file.path, content);
209
203
  })));
210
204
  });
211
205
  exports.findAndReplace = findAndReplace;
@@ -239,7 +233,7 @@ function chmod(path, mode, { checkPath = true, recursive = false } = {}) {
239
233
  if (recursive && (yield dirExists(path))) {
240
234
  const paths = yield walk(path, { includeDirPaths: true, depth: 1 });
241
235
  paths.shift();
242
- yield Promise.all(paths.map((_path) => chmod(_path, mode, { recursive, checkPath })));
236
+ yield Promise.all(paths.map((_path) => chmod(_path.path, mode, { recursive, checkPath })));
243
237
  }
244
238
  return fs_extra_1.default.chmod(path, mode);
245
239
  });
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.writeJSONFile = exports.readJSONFile = exports.emptyDir = exports.copyDir = exports.copyFiles = exports.copyFile = exports.deleteTempDir = exports.tempFile = exports.deleteDir = exports.isPathInside = exports.isPathOutside = exports.renameFile = exports.modifyFileName = exports.appendFile = exports.writeFile = exports.ensureFile = exports.ensureDir = exports.readFile = exports.deleteFile = exports.getAllFiles = exports.getAllDirs = exports.dirExists = exports.fileExists = exports.getReadStream = exports.getWriteStream = void 0;
6
+ exports.writeJSONFile = exports.readJSONFile = exports.emptyDir = exports.copyDir = exports.copyFiles = exports.copyFile = exports.deleteTempDir = exports.tempFile = exports.deleteDir = exports.isPathInside = exports.isPathOutside = exports.renameFile = exports.modifyFileName = exports.appendFile = exports.writeFile = exports.ensureFile = exports.ensureDir = exports.readFile = exports.deleteFile = exports.getAllFiles = exports.getAllDirs = exports.dirExists = exports.fileExists = exports.readSymLink = exports.getReadStream = exports.getWriteStream = void 0;
7
7
  const fs_extra_1 = __importDefault(require("fs-extra"));
8
8
  const os_1 = __importDefault(require("os"));
9
9
  const path_1 = __importDefault(require("path"));
@@ -15,6 +15,10 @@ function getReadStream(pth) {
15
15
  return fs_extra_1.default.createReadStream(pth);
16
16
  }
17
17
  exports.getReadStream = getReadStream;
18
+ function readSymLink(pth) {
19
+ return fs_extra_1.default.readlinkSync(pth);
20
+ }
21
+ exports.readSymLink = readSymLink;
18
22
  function fileExists(pth) {
19
23
  try {
20
24
  const stats = fs_extra_1.default.statSync(pth);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zcatalyst-cli",
3
- "version": "1.15.0-beta.5",
3
+ "version": "1.15.0-beta.7",
4
4
  "description": "Command Line Tool for CATALYST",
5
5
  "main": "./lib/index.js",
6
6
  "bin": {
@@ -7,6 +7,7 @@ public class FallbackHandler {
7
7
  JSONObject jsonResponse = new JSONObject();
8
8
  LOGGER.info("Fallback Handler : : TODO : "+ reqBody.get("todo"));
9
9
  jsonResponse.put("message", "Fallback Response: Please define this question and try again");
10
+ jsonResponse.put("status", "handled");
10
11
  return jsonResponse;
11
12
  }
12
13
  }
@@ -5,6 +5,7 @@ export default function handleFallback(request) {
5
5
  logger.info('Handling fallback request');
6
6
 
7
7
  return {
8
+ "status" : "handled",
8
9
  "message": "Fallback Response: Please define this question and try again"
9
10
  };
10
11
  }
@@ -11,5 +11,6 @@ def handle_fallback_request(req_body):
11
11
  logging.info('Handling fallback request')
12
12
 
13
13
  return {
14
- 'message': 'Fallback Response: Please define this question and try again'
14
+ 'message': 'Fallback Response: Please define this question and try again',
15
+ 'status':'handled'
15
16
  }