@forestadmin/forest-cloud 1.1.6 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const fs_1 = __importDefault(require("fs"));
7
- const ora_1 = __importDefault(require("ora"));
8
7
  const os_1 = __importDefault(require("os"));
9
8
  const path_1 = __importDefault(require("path"));
9
+ const logger_1 = __importDefault(require("./logger"));
10
10
  const login_1 = __importDefault(require("./login"));
11
11
  const make_commands_1 = __importDefault(require("./make-commands"));
12
12
  const bootstrap_path_manager_1 = __importDefault(require("./services/bootstrap-path-manager"));
@@ -20,13 +20,6 @@ const buildHttpServer = (envs) => {
20
20
  const buildEventSubscriber = (envs) => {
21
21
  return new event_subscriber_1.default(envs.FOREST_SUBSCRIPTION_URL, envs.FOREST_AUTH_TOKEN);
22
22
  };
23
- const logger = {
24
- spinner: (0, ora_1.default)(),
25
- // eslint-disable-next-line no-console
26
- log: (text) => console.log(text),
27
- // eslint-disable-next-line no-console
28
- error: (text) => console.error(text),
29
- };
30
23
  function getCurrentVersion() {
31
24
  const { version } = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, '..', 'package.json'), 'utf-8'));
32
25
  return version;
@@ -37,11 +30,11 @@ function buildCommands() {
37
30
  buildHttpServer,
38
31
  buildEventSubscriber,
39
32
  login: login_1.default,
40
- logger,
33
+ logger: (0, logger_1.default)(),
41
34
  getCurrentVersion,
42
35
  bootstrapPathManager: new bootstrap_path_manager_1.default(os_1.default.tmpdir(), os_1.default.homedir()),
43
36
  distPathManager: new dist_path_manager_1.default(),
44
37
  });
45
38
  }
46
39
  exports.default = buildCommands;
47
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYnVpbGQtY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBd0I7QUFDeEIsOENBQXNCO0FBQ3RCLDRDQUFvQjtBQUNwQixnREFBd0I7QUFFeEIsb0RBQTRCO0FBQzVCLG9FQUEyQztBQUMzQywrRkFBcUU7QUFDckUscUZBQTJEO0FBQzNELDRFQUEyRTtBQUMzRSxtRkFBMEQ7QUFDMUQseUVBQWdEO0FBR2hELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBMEIsRUFBYyxFQUFFO0lBQ2pFLE9BQU8sSUFBSSxxQkFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDaEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQTBCLEVBQW1CLEVBQUU7SUFDM0UsT0FBTyxJQUFJLDBCQUFlLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25GLENBQUMsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFXO0lBQ3JCLE9BQU8sRUFBRSxJQUFBLGFBQUcsR0FBRTtJQUNkLHNDQUFzQztJQUN0QyxHQUFHLEVBQUUsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO0lBQ3pDLHNDQUFzQztJQUN0QyxLQUFLLEVBQUUsQ0FBQyxJQUFhLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO0NBQzlDLENBQUM7QUFFRixTQUFTLGlCQUFpQjtJQUN4QixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FDNUIsWUFBTSxDQUFDLFlBQVksQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsY0FBYyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQ3pFLENBQUM7SUFFRixPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBRUQsU0FBd0IsYUFBYTtJQUNuQyxPQUFPLElBQUEsdUJBQVksRUFBQztRQUNsQix1QkFBdUIsRUFBdkIsK0NBQXVCO1FBQ3ZCLGVBQWU7UUFDZixvQkFBb0I7UUFDcEIsS0FBSyxFQUFMLGVBQUs7UUFDTCxNQUFNO1FBQ04saUJBQWlCO1FBQ2pCLG9CQUFvQixFQUFFLElBQUksZ0NBQW9CLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6RSxlQUFlLEVBQUUsSUFBSSwyQkFBZSxFQUFFO0tBQ3ZDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFYRCxnQ0FXQyJ9
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYnVpbGQtY29tbWFuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBd0I7QUFDeEIsNENBQW9CO0FBQ3BCLGdEQUF3QjtBQUV4QixzREFBb0M7QUFDcEMsb0RBQTRCO0FBQzVCLG9FQUEyQztBQUMzQywrRkFBcUU7QUFDckUscUZBQTJEO0FBQzNELDRFQUEyRTtBQUMzRSxtRkFBMEQ7QUFDMUQseUVBQWdEO0FBR2hELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBMEIsRUFBYyxFQUFFO0lBQ2pFLE9BQU8sSUFBSSxxQkFBVSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7QUFDaEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQTBCLEVBQW1CLEVBQUU7SUFDM0UsT0FBTyxJQUFJLDBCQUFlLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ25GLENBQUMsQ0FBQztBQUVGLFNBQVMsaUJBQWlCO0lBQ3hCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM1QixZQUFNLENBQUMsWUFBWSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FDekUsQ0FBQztJQUVGLE9BQU8sT0FBTyxDQUFDO0FBQ2pCLENBQUM7QUFFRCxTQUF3QixhQUFhO0lBQ25DLE9BQU8sSUFBQSx1QkFBWSxFQUFDO1FBQ2xCLHVCQUF1QixFQUF2QiwrQ0FBdUI7UUFDdkIsZUFBZTtRQUNmLG9CQUFvQjtRQUNwQixLQUFLLEVBQUwsZUFBSztRQUNMLE1BQU0sRUFBRSxJQUFBLGdCQUFZLEdBQUU7UUFDdEIsaUJBQWlCO1FBQ2pCLG9CQUFvQixFQUFFLElBQUksZ0NBQW9CLENBQUMsWUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLFlBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN6RSxlQUFlLEVBQUUsSUFBSSwyQkFBZSxFQUFFO0tBQ3ZDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFYRCxnQ0FXQyJ9
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const action_runner_1 = __importDefault(require("../dialogs/action-runner"));
7
- const errors_1 = require("../errors");
8
7
  const bootstrap_1 = __importDefault(require("../services/bootstrap"));
9
8
  const environment_variables_1 = require("../services/environment-variables");
10
9
  const shared_1 = require("../shared");
@@ -14,20 +13,16 @@ exports.default = (program, context) => {
14
13
  .command('bootstrap')
15
14
  .description('Bootstrap your project')
16
15
  .argument('<name>', 'The name of your project folder')
17
- .option('-e, --env-secret <string>', 'Environment secret, you can find it in your environment settings')
16
+ .option('-e, --env-secret <string>', 'Environment secret, you can find it in your environment settings.' +
17
+ ' (you can also pass it with environment variable FOREST_ENV_SECRET)')
18
18
  .action((0, action_runner_1.default)(logger.spinner, async (folderName, options) => {
19
19
  logger.spinner.start('Bootstrapping project');
20
20
  bootstrapPathManager.folderName = folderName;
21
21
  const vars = await (0, shared_1.loginIfMissingAuthAndReturnEnvironmentVariables)(login, logger, getEnvironmentVariables);
22
22
  vars.FOREST_ENV_SECRET = options.envSecret || vars.FOREST_ENV_SECRET;
23
- if (!vars.FOREST_ENV_SECRET) {
24
- throw new errors_1.BusinessError('Your forest env secret is missing.' +
25
- ' Please provide it with the `bootstrap --env-secret <your-secret-key>` command or' +
26
- ' add it to your .env file or in environment variables.');
27
- }
23
+ (0, environment_variables_1.validateMissingForestEnvSecret)(vars.FOREST_ENV_SECRET, 'bootstrap');
28
24
  (0, environment_variables_1.validateEnvironmentVariables)(vars);
29
25
  logger.spinner.succeed('Environment found');
30
- logger.spinner.stop();
31
26
  const httpServer = buildHttpServer(vars);
32
27
  await (0, shared_1.askToOverwriteCustomizationsOrAbortCommand)(logger, httpServer);
33
28
  logger.spinner.start();
@@ -35,4 +30,4 @@ exports.default = (program, context) => {
35
30
  logger.spinner.succeed('Project successfully bootstrapped. You can start creating your customizations!');
36
31
  }));
37
32
  };
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLDZFQUFvRDtBQUNwRCxzQ0FBMEM7QUFDMUMsc0VBQThDO0FBQzlDLDZFQUFpRjtBQUNqRixzQ0FHbUI7QUFHbkIsa0JBQWUsQ0FBQyxPQUFnQixFQUFFLE9BQXFCLEVBQUUsRUFBRTtJQUN6RCxNQUFNLEVBQUUsTUFBTSxFQUFFLGVBQWUsRUFBRSxvQkFBb0IsRUFBRSxLQUFLLEVBQUUsdUJBQXVCLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFbEcsT0FBTztTQUNKLE9BQU8sQ0FBQyxXQUFXLENBQUM7U0FDcEIsV0FBVyxDQUFDLHdCQUF3QixDQUFDO1NBQ3JDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsaUNBQWlDLENBQUM7U0FDckQsTUFBTSxDQUNMLDJCQUEyQixFQUMzQixrRUFBa0UsQ0FDbkU7U0FDQSxNQUFNLENBQ0wsSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQWtCLEVBQUUsT0FBOEIsRUFBRSxFQUFFO1FBQ3hGLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU3QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsd0RBQStDLEVBQ2hFLEtBQUssRUFDTCxNQUFNLEVBQ04sdUJBQXVCLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFFckUsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMzQixNQUFNLElBQUksc0JBQWEsQ0FDckIsb0NBQW9DO2dCQUNsQyxtRkFBbUY7Z0JBQ25GLHdEQUF3RCxDQUMzRCxDQUFDO1NBQ0g7UUFFRCxJQUFBLG9EQUE0QixFQUFDLElBQUksQ0FBQyxDQUFDO1FBRW5DLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDNUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUV0QixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsTUFBTSxJQUFBLG1EQUEwQyxFQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVyRSxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBQSxtQkFBUyxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN4RCxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDcEIsZ0ZBQWdGLENBQ2pGLENBQUM7SUFDSixDQUFDLENBQUMsQ0FDSCxDQUFDO0FBQ04sQ0FBQyxDQUFDIn0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLDZFQUFvRDtBQUNwRCxzRUFBOEM7QUFDOUMsNkVBRzJDO0FBQzNDLHNDQUdtQjtBQUduQixrQkFBZSxDQUFDLE9BQWdCLEVBQUUsT0FBcUIsRUFBRSxFQUFFO0lBQ3pELE1BQU0sRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSx1QkFBdUIsRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUVsRyxPQUFPO1NBQ0osT0FBTyxDQUFDLFdBQVcsQ0FBQztTQUNwQixXQUFXLENBQUMsd0JBQXdCLENBQUM7U0FDckMsUUFBUSxDQUFDLFFBQVEsRUFBRSxpQ0FBaUMsQ0FBQztTQUNyRCxNQUFNLENBQ0wsMkJBQTJCLEVBQzNCLG1FQUFtRTtRQUNqRSxxRUFBcUUsQ0FDeEU7U0FDQSxNQUFNLENBQ0wsSUFBQSx1QkFBWSxFQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQWtCLEVBQUUsT0FBOEIsRUFBRSxFQUFFO1FBQ3hGLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDOUMsb0JBQW9CLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUU3QyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUEsd0RBQStDLEVBQ2hFLEtBQUssRUFDTCxNQUFNLEVBQ04sdUJBQXVCLENBQ3hCLENBQUM7UUFFRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDckUsSUFBQSxzREFBOEIsRUFBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFcEUsSUFBQSxvREFBNEIsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUVuQyxNQUFNLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sVUFBVSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxNQUFNLElBQUEsbURBQTBDLEVBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDdkIsTUFBTSxJQUFBLG1CQUFTLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3hELE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUNwQixnRkFBZ0YsQ0FDakYsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7QUFDTixDQUFDLENBQUMifQ==
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ import { MakeCommands } from '../types';
3
+ declare const _default: (program: Command, context: MakeCommands) => void;
4
+ export default _default;
5
+ //# sourceMappingURL=logs.d.ts.map
@@ -0,0 +1,135 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const joi_1 = __importDefault(require("joi"));
7
+ const action_runner_1 = __importDefault(require("../dialogs/action-runner"));
8
+ const check_latest_version_1 = __importDefault(require("../dialogs/check-latest-version"));
9
+ const errors_1 = require("../errors");
10
+ const environment_variables_1 = require("../services/environment-variables");
11
+ const http_server_1 = __importDefault(require("../services/http-server"));
12
+ const shared_1 = require("../shared");
13
+ const levelToLog = {
14
+ Info: 'info',
15
+ Warn: 'warn',
16
+ Error: 'error',
17
+ };
18
+ const displayLog = (logger, log) => {
19
+ try {
20
+ logger[levelToLog[log.level]](log.message, log.timestamp);
21
+ }
22
+ catch (e) {
23
+ logger.log(log.message, log.timestamp);
24
+ }
25
+ };
26
+ function validateTailOption(tail) {
27
+ if (tail === undefined)
28
+ return;
29
+ if (joi_1.default.number().integer().validate(tail).error) {
30
+ throw new errors_1.BusinessError('The --tail (-n) option must be an integer');
31
+ }
32
+ else if (joi_1.default.number().positive().validate(tail).error) {
33
+ throw new errors_1.BusinessError('The --tail (-n) option must be a positive integer');
34
+ }
35
+ else if (joi_1.default.number().max(1000).validate(tail).error) {
36
+ throw new errors_1.BusinessError('The --tail (-n) option must be equal or less than 1000');
37
+ }
38
+ }
39
+ function fromAndToValidator() {
40
+ const dateMatchValidator = joi_1.default.string().regex(/^now(-)\d+(s|m|H|h|d|w|M|y)(\/d)?$/);
41
+ return joi_1.default.alternatives([joi_1.default.date(), dateMatchValidator]).optional();
42
+ }
43
+ function validateFromOption(from) {
44
+ if (!from)
45
+ return;
46
+ if (fromAndToValidator().validate(from).error) {
47
+ throw new errors_1.BusinessError('The --from (-f) option must be a valid timestamp.' +
48
+ ' You must enter a date (e.g: 2021-01-01T00:00:00.000Z) or' +
49
+ ' match a relative date (e.g. now-1d)');
50
+ }
51
+ }
52
+ function validateToOption(to) {
53
+ if (joi_1.default.alternatives(fromAndToValidator(), joi_1.default.string().valid('now')).validate(to).error) {
54
+ throw new errors_1.BusinessError('The --to (-t) option must be a valid timestamp.' +
55
+ ' You must enter a date (e.g: 2021-01-01T00:00:00.000Z) or' +
56
+ 'match a relative date (e.g. now-1d)');
57
+ }
58
+ }
59
+ exports.default = (program, context) => {
60
+ const { logger, getCurrentVersion, login, getEnvironmentVariables, buildHttpServer } = context;
61
+ program
62
+ .command('logs')
63
+ .option('-e, --env-secret <string>', 'Environment secret, you can find it in your environment settings.' +
64
+ ' (you can also pass it with environment variable FOREST_ENV_SECRET)')
65
+ .option('-n, --tail <integer>', 'Number of lines to show from the end of the logs in the last hour.' +
66
+ ' Default is 30, Max is 1000. Use from option to get older logs.')
67
+ .option('-f, --from <timestamp>', 'Minimum timestamp for requested logs. Default is the last hour (now-1h)')
68
+ .option('-t, --to <timestamp>', 'Maximum timestamp for requested logs. Default is now')
69
+ .description('Display logs of the customizations published on your agent')
70
+ .action((0, action_runner_1.default)(logger.spinner, async (options) => {
71
+ validateTailOption(options.tail);
72
+ validateFromOption(options.from);
73
+ validateToOption(options.to);
74
+ const { spinner } = logger;
75
+ const tail = Number(options.tail ?? 30);
76
+ const from = options.from ?? 'now-1h';
77
+ const to = options.to ?? 'now';
78
+ await (0, check_latest_version_1.default)(spinner, getCurrentVersion(), http_server_1.default.getLatestVersion);
79
+ const vars = await (0, shared_1.loginIfMissingAuthAndReturnEnvironmentVariables)(login, logger, getEnvironmentVariables);
80
+ vars.FOREST_ENV_SECRET = options.envSecret || vars.FOREST_ENV_SECRET;
81
+ (0, environment_variables_1.validateMissingForestEnvSecret)(vars.FOREST_ENV_SECRET, 'logs');
82
+ (0, environment_variables_1.validateEnvironmentVariables)(vars);
83
+ let logs;
84
+ try {
85
+ logs = await buildHttpServer(vars).getLogs({
86
+ from,
87
+ to,
88
+ limit: tail,
89
+ // we want to get the logs from the oldest to the newest when we have a from option
90
+ orderByRecentFirst: !options.from,
91
+ });
92
+ }
93
+ catch (e) {
94
+ if (e instanceof errors_1.ValidationError) {
95
+ logger.spinner.warn(`Given Options: from=${from}, to=${to}, tail=${tail}`);
96
+ }
97
+ throw e;
98
+ }
99
+ let message;
100
+ let orderDetails;
101
+ if (options.from && options.to) {
102
+ orderDetails = '- Logs are returned from the oldest to the newest';
103
+ message = `between "${from}" and "${to}"`;
104
+ }
105
+ else if (options.from) {
106
+ orderDetails = '- Logs are returned from the oldest to the newest';
107
+ message = `since "${from}"`;
108
+ }
109
+ else {
110
+ orderDetails = '- Logs are returned from the newest to the oldest';
111
+ message = `until "${to}"`;
112
+ }
113
+ const helperMessage = `You can increase your tail option to get more logs or ` +
114
+ 'increase/decrease your from and to options to get older or newer logs';
115
+ if (logs?.length > 0) {
116
+ logs.forEach(log => displayLog(logger, log));
117
+ const pluralize = tail > 1 ? 's' : '';
118
+ const baseMessage = `Requested ${tail} log${pluralize} ${message} ${orderDetails}`;
119
+ const fromToMessage = `You have received logs from ${logs[0].timestamp} to ${logs[logs.length - 1].timestamp}`;
120
+ if (logs.length === tail) {
121
+ logger.log('...you have probably more logs...');
122
+ logger.log(`${helperMessage}\n`);
123
+ spinner.succeed(`${baseMessage}\n${fromToMessage}`);
124
+ }
125
+ else {
126
+ spinner.succeed(`${baseMessage}, but only ${logs.length} were found\n${fromToMessage}`);
127
+ }
128
+ }
129
+ else {
130
+ spinner.warn(`No logs found ${message}`);
131
+ logger.log(helperMessage);
132
+ }
133
+ }));
134
+ };
135
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsOENBQXNCO0FBRXRCLDZFQUFvRDtBQUNwRCwyRkFBaUU7QUFDakUsc0NBQTJEO0FBQzNELDZFQUcyQztBQUMzQywwRUFBaUQ7QUFDakQsc0NBQTRFO0FBRzVFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQWMsRUFBRSxHQUFRLEVBQUUsRUFBRTtJQUM5QyxJQUFJO1FBQ0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMzRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN4QztBQUNILENBQUMsQ0FBQztBQUVGLFNBQVMsa0JBQWtCLENBQUMsSUFBYztJQUN4QyxJQUFJLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTztJQUUvQixJQUFJLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxzQkFBYSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7S0FDdEU7U0FBTSxJQUFJLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3ZELE1BQU0sSUFBSSxzQkFBYSxDQUFDLG1EQUFtRCxDQUFDLENB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
@@ -8,7 +8,7 @@ const check_latest_version_1 = __importDefault(require("../dialogs/check-latest-
8
8
  const http_server_1 = __importDefault(require("../services/http-server"));
9
9
  exports.default = (program, context) => {
10
10
  const { logger, getCurrentVersion } = context;
11
- program.option('-v, --version', 'output the version number').action((0, action_runner_1.default)(logger.spinner, async () => {
11
+ program.option('-v, --version', 'Output the version number').action((0, action_runner_1.default)(logger.spinner, async () => {
12
12
  // we want to display before to display the warning
13
13
  const version = getCurrentVersion();
14
14
  logger.log(version);
package/dist/errors.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export declare class BusinessError extends Error {
2
2
  }
3
+ export declare class ValidationError extends BusinessError {
4
+ }
3
5
  export declare class CustomizationError extends BusinessError {
4
6
  constructor(message: string, stack?: string);
5
7
  }
package/dist/errors.js CHANGED
@@ -1,10 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CloudToolkitVersionError = exports.CustomizationError = exports.BusinessError = void 0;
3
+ exports.CloudToolkitVersionError = exports.CustomizationError = exports.ValidationError = exports.BusinessError = void 0;
4
4
  /* eslint-disable max-classes-per-file */
5
5
  class BusinessError extends Error {
6
6
  }
7
7
  exports.BusinessError = BusinessError;
8
+ class ValidationError extends BusinessError {
9
+ }
10
+ exports.ValidationError = ValidationError;
8
11
  class CustomizationError extends BusinessError {
9
12
  constructor(message, stack) {
10
13
  super(message);
@@ -15,4 +18,4 @@ exports.CustomizationError = CustomizationError;
15
18
  class CloudToolkitVersionError extends BusinessError {
16
19
  }
17
20
  exports.CloudToolkitVersionError = CloudToolkitVersionError;
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsTUFBYSxhQUFjLFNBQVEsS0FBSztDQUFHO0FBQTNDLHNDQUEyQztBQUMzQyxNQUFhLGtCQUFtQixTQUFRLGFBQWE7SUFDbkQsWUFBWSxPQUFlLEVBQUUsS0FBYztRQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFMRCxnREFLQztBQUNELE1BQWEsd0JBQXlCLFNBQVEsYUFBYTtDQUFHO0FBQTlELDREQUE4RCJ9
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsTUFBYSxhQUFjLFNBQVEsS0FBSztDQUFHO0FBQTNDLHNDQUEyQztBQUMzQyxNQUFhLGVBQWdCLFNBQVEsYUFBYTtDQUFHO0FBQXJELDBDQUFxRDtBQUNyRCxNQUFhLGtCQUFtQixTQUFRLGFBQWE7SUFDbkQsWUFBWSxPQUFlLEVBQUUsS0FBYztRQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFMRCxnREFLQztBQUNELE1BQWEsd0JBQXlCLFNBQVEsYUFBYTtDQUFHO0FBQTlELDREQUE4RCJ9
@@ -0,0 +1,10 @@
1
+ import { Logger } from './types';
2
+ export declare const loggerPrefix: {
3
+ Debug: string;
4
+ Info: string;
5
+ Warn: string;
6
+ Error: string;
7
+ };
8
+ declare const _default: () => Logger;
9
+ export default _default;
10
+ //# sourceMappingURL=logger.d.ts.map
package/dist/logger.js ADDED
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.loggerPrefix = void 0;
7
+ const ora_1 = __importDefault(require("ora"));
8
+ exports.loggerPrefix = {
9
+ Debug: '\x1b[34mdebug:\x1b[0m',
10
+ Info: '\x1b[32minfo:\x1b[0m',
11
+ Warn: '\x1b[33mwarning:\x1b[0m',
12
+ Error: '\x1b[31merror:\x1b[0m',
13
+ };
14
+ exports.default = () => {
15
+ const addPrefix = (text, prefix) => {
16
+ if (!prefix)
17
+ return text;
18
+ return `${prefix} | ${text}`;
19
+ };
20
+ const write = (text, outputType) => {
21
+ if (outputType === 'stderr')
22
+ process.stderr.write(text);
23
+ else
24
+ process.stdout.write(text);
25
+ };
26
+ const log = (text, prefix) => {
27
+ write(`${addPrefix(text, prefix)}\n`);
28
+ };
29
+ const logLevel = (level, text, prefix) => {
30
+ log(`${exports.loggerPrefix[level]} ${text}`, prefix);
31
+ };
32
+ return {
33
+ spinner: (0, ora_1.default)(),
34
+ write: (text, outputType) => write(text, outputType),
35
+ log: (text, prefix) => log(text, prefix),
36
+ info: (text, prefix) => logLevel('Info', text, prefix),
37
+ error: (text, prefix) => logLevel('Error', text, prefix),
38
+ warn: (text, prefix) => logLevel('Warn', text, prefix),
39
+ debug: (text, prefix) => logLevel('Debug', text, prefix),
40
+ };
41
+ };
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4Q0FBc0I7QUFJVCxRQUFBLFlBQVksR0FBRztJQUMxQixLQUFLLEVBQUUsdUJBQXVCO0lBQzlCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsSUFBSSxFQUFFLHlCQUF5QjtJQUMvQixLQUFLLEVBQUUsdUJBQXVCO0NBQy9CLENBQUM7QUFFRixrQkFBZSxHQUFXLEVBQUU7SUFDMUIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxJQUFZLEVBQUUsTUFBYyxFQUFFLEVBQUU7UUFDakQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUV6QixPQUFPLEdBQUcsTUFBTSxNQUFNLElBQUksRUFBRSxDQUFDO0lBQy9CLENBQUMsQ0FBQztJQUVGLE1BQU0sS0FBSyxHQUFHLENBQUMsSUFBWSxFQUFFLFVBQWdDLEVBQUUsRUFBRTtRQUMvRCxJQUFJLFVBQVUsS0FBSyxRQUFRO1lBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7O1lBQ25ELE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2xDLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBYSxFQUFFLE1BQWUsRUFBRSxFQUFFO1FBQzdDLEtBQUssQ0FBQyxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLENBQUMsQ0FBQztJQUVGLE1BQU0sUUFBUSxHQUFHLENBQUMsS0FBYSxFQUFFLElBQWEsRUFBRSxNQUFlLEVBQUUsRUFBRTtRQUNqRSxHQUFHLENBQUMsR0FBRyxvQkFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hELENBQUMsQ0FBQztJQUVGLE9BQU87UUFDTCxPQUFPLEVBQUUsSUFBQSxhQUFHLEdBQUU7UUFDZCxLQUFLLEVBQUUsQ0FBQyxJQUFZLEVBQUUsVUFBZ0MsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxVQUFVLENBQUM7UUFDbEYsR0FBRyxFQUFFLENBQUMsSUFBYSxFQUFFLE1BQWUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7UUFDMUQsSUFBSSxFQUFFLENBQUMsSUFBYSxFQUFFLE1BQWUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQ3hFLEtBQUssRUFBRSxDQUFDLElBQWEsRUFBRSxNQUFlLEVBQUUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztRQUMxRSxJQUFJLEVBQUUsQ0FBQyxJQUFhLEVBQUUsTUFBZSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUM7UUFDeEUsS0FBSyxFQUFFLENBQUMsSUFBYSxFQUFFLE1BQWUsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO0tBQzNFLENBQUM7QUFDSixDQUFDLENBQUMifQ==
package/dist/login.js CHANGED
@@ -5,14 +5,16 @@ async function login(logger) {
5
5
  return new Promise((resolve, reject) => {
6
6
  let hasLoginSuccess = false;
7
7
  const pathForest = require.resolve('forest-cli/bin/run');
8
- const process = (0, child_process_1.exec)(`node ${pathForest} login`);
9
- process.stderr.on('data', logger.error);
10
- process.stdout.on('data', data => {
8
+ const subProcess = (0, child_process_1.exec)(`node ${pathForest} login`);
9
+ subProcess.stderr.on('data', data => {
10
+ logger.write(data, 'stderr');
11
+ });
12
+ subProcess.stdout.on('data', data => {
11
13
  if (data.includes('Login successful'))
12
14
  hasLoginSuccess = true;
13
- logger.log(data);
15
+ logger.write(data, 'stdout');
14
16
  });
15
- process.on('close', () => {
17
+ subProcess.on('close', () => {
16
18
  if (!hasLoginSuccess)
17
19
  return reject(new Error('Login failed'));
18
20
  resolve();
@@ -20,4 +22,4 @@ async function login(logger) {
20
22
  });
21
23
  }
22
24
  exports.default = login;
23
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBcUM7QUFJdEIsS0FBSyxVQUFVLEtBQUssQ0FBQyxNQUFjO0lBQ2hELE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDM0MsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFBLG9CQUFJLEVBQUMsUUFBUSxVQUFVLFFBQVEsQ0FBQyxDQUFDO1FBQ2pELE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFeEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQztnQkFBRSxlQUFlLEdBQUcsSUFBSSxDQUFDO1lBQzlELE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGVBQWU7Z0JBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUMvRCxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBakJELHdCQWlCQyJ9
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpREFBcUM7QUFJdEIsS0FBSyxVQUFVLEtBQUssQ0FBQyxNQUFjO0lBQ2hELE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDM0MsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6RCxNQUFNLFVBQVUsR0FBRyxJQUFBLG9CQUFJLEVBQUMsUUFBUSxVQUFVLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNsQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsa0JBQWtCLENBQUM7Z0JBQUUsZUFBZSxHQUFHLElBQUksQ0FBQztZQUM5RCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUVILFVBQVUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUMxQixJQUFJLENBQUMsZUFBZTtnQkFBRSxPQUFPLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1lBQy9ELE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFuQkQsd0JBbUJDIn0=
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const commander_1 = require("commander");
7
7
  const bootstrap_1 = __importDefault(require("./commands/bootstrap"));
8
8
  const login_1 = __importDefault(require("./commands/login"));
9
+ const logs_1 = __importDefault(require("./commands/logs"));
9
10
  const package_1 = __importDefault(require("./commands/package"));
10
11
  const publish_1 = __importDefault(require("./commands/publish"));
11
12
  const update_typings_1 = __importDefault(require("./commands/update-typings"));
@@ -13,13 +14,26 @@ const version_1 = __importDefault(require("./commands/version"));
13
14
  function makeCommands(context) {
14
15
  // it's very important to use a new instance of Command each time for testing purposes
15
16
  const program = new commander_1.Command();
17
+ program.configureOutput({
18
+ writeOut: context.logger.log,
19
+ writeErr: message => {
20
+ if (message.startsWith('error:')) {
21
+ const messageWithoutError = message.slice(6);
22
+ context.logger.error(messageWithoutError);
23
+ }
24
+ else {
25
+ context.logger.error(message);
26
+ }
27
+ },
28
+ });
16
29
  (0, bootstrap_1.default)(program, context);
30
+ (0, login_1.default)(program, context);
31
+ (0, logs_1.default)(program, context);
17
32
  (0, package_1.default)(program, context);
18
33
  (0, publish_1.default)(program, context);
19
34
  (0, update_typings_1.default)(program, context);
20
- (0, login_1.default)(program, context);
21
35
  (0, version_1.default)(program, context);
22
36
  return program;
23
37
  }
24
38
  exports.default = makeCommands;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlLWNvbW1hbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQW9DO0FBRXBDLHFFQUF3RDtBQUN4RCw2REFBZ0Q7QUFDaEQsaUVBQW9EO0FBQ3BELGlFQUFvRDtBQUNwRCwrRUFBaUU7QUFDakUsaUVBQW9EO0FBR3BELFNBQXdCLFlBQVksQ0FBQyxPQUFxQjtJQUN4RCxzRkFBc0Y7SUFDdEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxtQkFBTyxFQUFFLENBQUM7SUFFOUIsSUFBQSxtQkFBb0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsSUFBQSxpQkFBa0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsSUFBQSxpQkFBa0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsSUFBQSx3QkFBd0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsSUFBQSxlQUFnQixFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxJQUFBLGlCQUFrQixFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUVyQyxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDO0FBWkQsK0JBWUMifQ==
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlLWNvbW1hbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQW9DO0FBRXBDLHFFQUF3RDtBQUN4RCw2REFBZ0Q7QUFDaEQsMkRBQThDO0FBQzlDLGlFQUFvRDtBQUNwRCxpRUFBb0Q7QUFDcEQsK0VBQWlFO0FBQ2pFLGlFQUFvRDtBQUdwRCxTQUF3QixZQUFZLENBQUMsT0FBcUI7SUFDeEQsc0ZBQXNGO0lBQ3RGLE1BQU0sT0FBTyxHQUFHLElBQUksbUJBQU8sRUFBRSxDQUFDO0lBRTlCLE9BQU8sQ0FBQyxlQUFlLENBQUM7UUFDdEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRztRQUM1QixRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7WUFDbEIsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUNoQyxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLG1CQUFtQixDQUFDLENBQUM7YUFDM0M7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7YUFDL0I7UUFDSCxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsSUFBQSxtQkFBb0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkMsSUFBQSxlQUFnQixFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuQyxJQUFBLGNBQWUsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbEMsSUFBQSxpQkFBa0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsSUFBQSxpQkFBa0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDckMsSUFBQSx3QkFBd0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDM0MsSUFBQSxpQkFBa0IsRUFBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFFckMsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQXpCRCwrQkF5QkMifQ==
@@ -8,5 +8,6 @@ export declare const defaultEnvs: Readonly<{
8
8
  export declare function getEnvironmentVariables(): Promise<EnvironmentVariables>;
9
9
  export declare function validateServerUrl(serverUrl: string): void;
10
10
  export declare function validateSubscriptionUrl(subscriptionUrl: string): void;
11
+ export declare function validateMissingForestEnvSecret(forestEnvSecret: string, fromCommand: 'logs' | 'bootstrap'): void;
11
12
  export declare function validateEnvironmentVariables(env: EnvironmentVariables): void;
12
13
  //# sourceMappingURL=environment-variables.d.ts.map
@@ -26,7 +26,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.validateEnvironmentVariables = exports.validateSubscriptionUrl = exports.validateServerUrl = exports.getEnvironmentVariables = exports.defaultEnvs = void 0;
29
+ exports.validateEnvironmentVariables = exports.validateMissingForestEnvSecret = exports.validateSubscriptionUrl = exports.validateServerUrl = exports.getEnvironmentVariables = exports.defaultEnvs = void 0;
30
30
  const fs = __importStar(require("fs"));
31
31
  const promises_1 = require("node:fs/promises");
32
32
  const node_os_1 = require("node:os");
@@ -81,6 +81,14 @@ function validateSubscriptionUrl(subscriptionUrl) {
81
81
  validateUrl(subscriptionUrl, 'FOREST_SUBSCRIPTION_URL', ['wss:']);
82
82
  }
83
83
  exports.validateSubscriptionUrl = validateSubscriptionUrl;
84
+ function validateMissingForestEnvSecret(forestEnvSecret, fromCommand) {
85
+ if (!forestEnvSecret) {
86
+ throw new errors_1.BusinessError('Your forest env secret is missing.' +
87
+ ` Please provide it with the \`${fromCommand} --env-secret <your-secret-key>\` command or` +
88
+ ' add it to your .env file or in environment variables.');
89
+ }
90
+ }
91
+ exports.validateMissingForestEnvSecret = validateMissingForestEnvSecret;
84
92
  function validateEnvironmentVariables(env) {
85
93
  if (!env.FOREST_ENV_SECRET) {
86
94
  throw new errors_1.BusinessError('Missing FOREST_ENV_SECRET. Please check your .env file.');
@@ -97,4 +105,4 @@ function validateEnvironmentVariables(env) {
97
105
  validateSubscriptionUrl(env.FOREST_SUBSCRIPTION_URL);
98
106
  }
99
107
  exports.validateEnvironmentVariables = validateEnvironmentVariables;
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtdmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Vudmlyb25tZW50LXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwrQ0FBNEM7QUFDNUMscUNBQWtDO0FBQ2xDLGdEQUF3QjtBQUV4QixzQ0FBMEM7QUFHMUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsYUFBcUIsRUFBMEIsRUFBRTtJQUNuRixNQUFNLFNBQVMsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFckUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sSUFBQSxtQkFBUSxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVqRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVXLFFBQUEsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdkMsaUJBQWlCLEVBQUUsNkJBQTZCO0lBQ2hELHVCQUF1QixFQUFFLHlDQUF5QztJQUNsRSw0QkFBNEIsRUFBRSxHQUFHO0lBQ2pDLFVBQVUsRUFBRSxJQUFBLGlCQUFPLEdBQUU7Q0FDdEIsQ0FBQyxDQUFDO0FBRUksS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxtQkFBVyxDQUFDLFVBQVUsQ0FBQztJQUVuRSxPQUFPO1FBQ0wsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7UUFDaEQsVUFBVSxFQUFFLFNBQVM7UUFDckIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxtQkFBVyxDQUFDLGlCQUFpQjtRQUNqRix1QkFB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
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtdmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Vudmlyb25tZW50LXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwrQ0FBNEM7QUFDNUMscUNBQWtDO0FBQ2xDLGdEQUF3QjtBQUV4QixzQ0FBMEM7QUFHMUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsYUFBcUIsRUFBMEIsRUFBRTtJQUNuRixNQUFNLFNBQVMsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFckUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sSUFBQSxtQkFBUSxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVqRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVXLFFBQUEsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdkMsaUJBQWlCLEVBQUUsNkJBQTZCO0lBQ2hELHVCQUF1QixFQUFFLHlDQUF5QztJQUNsRSw0QkFBNEIsRUFBRSxHQUFHO0lBQ2pDLFVBQVUsRUFBRSxJQUFBLGlCQUFPLEdBQUU7Q0FDdEIsQ0FBQyxDQUFDO0FBRUksS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxtQkFBVyxDQUFDLFVBQVUsQ0FBQztJQUVuRSxPQUFPO1FBQ0wsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUI7UUFDaEQsVUFBVSxFQUFFLFNBQVM7UUFDckIsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxtQkFBVyxDQUFDLGlCQUFpQjtRQUNqRix1QkFB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
@@ -1,4 +1,5 @@
1
1
  import { Table } from '@forestadmin/datasource-sql';
2
+ import { Log } from '../types';
2
3
  export default class HttpServer {
3
4
  private readonly serverUrl;
4
5
  private readonly headers;
@@ -20,6 +21,12 @@ export default class HttpServer {
20
21
  email: string;
21
22
  };
22
23
  }>;
24
+ getLogs({ limit, from, to, orderByRecentFirst, }: {
25
+ limit: number;
26
+ from: string;
27
+ to: string;
28
+ orderByRecentFirst: boolean;
29
+ }): Promise<Log[]>;
23
30
  static getLatestVersion(packageName: string): Promise<string>;
24
31
  }
25
32
  //# sourceMappingURL=http-server.d.ts.map
@@ -36,13 +36,17 @@ async function handledAxios(axiosRequestConfig, { errorMessage }) {
36
36
  }
37
37
  catch (e) {
38
38
  const error = e;
39
- let details;
39
+ let details = '';
40
40
  if (error instanceof axios.AxiosError) {
41
41
  const errors = error.response?.data?.errors;
42
- details = errors?.map(innerError => `\n 🚨 ${innerError.detail}`);
42
+ details = errors?.map(innerError => `🚨 ${innerError.detail}`).join(`\n`);
43
+ }
44
+ if (e.response?.status === 400) {
45
+ throw new errors_1.ValidationError(details);
46
+ }
47
+ else {
48
+ throw new errors_1.BusinessError(`${errorMessage}: ${error.message}\n${details}`.trim());
43
49
  }
44
- const detailsOrEmpty = details ? ` ${details}` : '';
45
- throw new errors_1.BusinessError(`${errorMessage}: ${error.message}${detailsOrEmpty}`);
46
50
  }
47
51
  }
48
52
  class HttpServer {
@@ -102,9 +106,18 @@ class HttpServer {
102
106
  headers: this.headers,
103
107
  }, { errorMessage: `Failed to retrieve last published code details` });
104
108
  }
109
+ async getLogs({ limit, from, to, orderByRecentFirst, }) {
110
+ const base = `${this.serverUrl}/api/full-hosted-agent/logs`;
111
+ return (await handledAxios({
112
+ // eslint-disable-next-line max-len
113
+ url: `${base}?limit=${limit}&from=${from}&to=${to}&order-by-recent-first=${orderByRecentFirst}`,
114
+ method: 'GET',
115
+ headers: this.headers,
116
+ }, { errorMessage: `Failed to retrieve logs` })).logs;
117
+ }
105
118
  static async getLatestVersion(packageName) {
106
119
  return (0, latest_version_1.default)(packageName);
107
120
  }
108
121
  }
109
122
  exports.default = HttpServer;
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUErQjtBQUMvQix1Q0FBeUI7QUFDekIsb0VBQTJDO0FBRTNDLHNDQUEwQztBQUUxQyxLQUFLLFVBQVUsWUFBWSxDQUN6QixrQkFBNEMsRUFDNUMsRUFBRSxZQUFZLEVBQTRCO0lBRTFDLElBQUk7UUFDRixPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDdkQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sS0FBSyxHQUFVLENBQUMsQ0FBQztRQUV2QixJQUFJLE9BQU8sQ0FBQztRQUVaLElBQUksS0FBSyxZQUFZLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQXlDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztZQUNsRixPQUFPLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDbkU7UUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLElBQUksc0JBQWEsQ0FBQyxHQUFHLFlBQVksS0FBSyxLQUFLLENBQUMsT0FBTyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUM7S0FDL0U7QUFDSCxDQUFDO0FBRUQsTUFBcUIsVUFBVTtJQUc3QixZQUFZLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQjtRQUNuRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENB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
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUErQjtBQUMvQix1Q0FBeUI7QUFDekIsb0VBQTJDO0FBRTNDLHNDQUEyRDtBQUczRCxLQUFLLFVBQVUsWUFBWSxDQUN6QixrQkFBNEMsRUFDNUMsRUFBRSxZQUFZLEVBQTRCO0lBRTFDLElBQUk7UUFDRixPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDdkQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sS0FBSyxHQUFVLENBQUMsQ0FBQztRQUN2QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxLQUFLLFlBQVksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBeUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO1lBQ2xGLE9BQU8sR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0U7UUFFRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUM5QixNQUFNLElBQUksd0JBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0wsTUFBTSxJQUFJLHNCQUFhLENBQUMsR0FBRyxZQUFZLEtBQUssS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFBcUIsVUFBVTtJQUc3QixZQUFZ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
package/dist/shared.js CHANGED
@@ -10,7 +10,8 @@ const loginIfMissingAuthAndReturnEnvironmentVariables = async (login, logger, ge
10
10
  const vars = await getEnvironmentVariables();
11
11
  if (vars.FOREST_AUTH_TOKEN)
12
12
  return vars;
13
- // we want to show the spinner only if we need to login
13
+ // must be sure to stop the spinner before calling login
14
+ // because the spinner will clear the process.stdout
14
15
  logger.spinner.stop();
15
16
  await login(logger);
16
17
  return getEnvironmentVariables();
@@ -22,4 +23,4 @@ const askToOverwriteCustomizationsOrAbortCommand = async (logger, httpServer) =>
22
23
  }
23
24
  };
24
25
  exports.askToOverwriteCustomizationsOrAbortCommand = askToOverwriteCustomizationsOrAbortCommand;
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxnSEFBcUY7QUFDckYscUNBQXlDO0FBSWxDLE1BQU0sK0NBQStDLEdBQUcsS0FBSyxFQUNsRSxLQUFZLEVBQ1osTUFBYyxFQUNkLHVCQUE0RCxFQUM3QixFQUFFO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sdUJBQXVCLEVBQUUsQ0FBQztJQUM3QyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4Qyx1REFBdUQ7SUFDdkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVwQixPQUFPLHVCQUF1QixFQUFFLENBQUM7QUFDbkMsQ0FBQyxDQUFDO0FBYlcsUUFBQSwrQ0FBK0MsbURBYTFEO0FBRUssTUFBTSwwQ0FBMEMsR0FBRyxLQUFLLEVBQzdELE1BQWMsRUFDZCxVQUFzQixFQUNQLEVBQUU7SUFDakIsSUFDRSxDQUFDLENBQUMsTUFBTSxJQUFBLHlDQUE0QixFQUNsQyxNQUFNLENBQUMsT0FBTyxFQUNkLFVBQVUsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3hELENBQUMsRUFDRjtRQUNBLE1BQU0sSUFBSSxzQkFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7S0FDOUM7QUFDSCxDQUFDLENBQUM7QUFaVyxRQUFBLDBDQUEwQyw4Q0FZckQifQ==
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxnSEFBcUY7QUFDckYscUNBQXlDO0FBSWxDLE1BQU0sK0NBQStDLEdBQUcsS0FBSyxFQUNsRSxLQUFZLEVBQ1osTUFBYyxFQUNkLHVCQUE0RCxFQUM3QixFQUFFO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLE1BQU0sdUJBQXVCLEVBQUUsQ0FBQztJQUM3QyxJQUFJLElBQUksQ0FBQyxpQkFBaUI7UUFBRSxPQUFPLElBQUksQ0FBQztJQUV4Qyx3REFBd0Q7SUFDeEQsb0RBQW9EO0lBQ3BELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEIsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFcEIsT0FBTyx1QkFBdUIsRUFBRSxDQUFDO0FBQ25DLENBQUMsQ0FBQztBQWRXLFFBQUEsK0NBQStDLG1EQWMxRDtBQUVLLE1BQU0sMENBQTBDLEdBQUcsS0FBSyxFQUM3RCxNQUFjLEVBQ2QsVUFBc0IsRUFDUCxFQUFFO0lBQ2pCLElBQ0UsQ0FBQyxDQUFDLE1BQU0sSUFBQSx5Q0FBNEIsRUFDbEMsTUFBTSxDQUFDLE9BQU8sRUFDZCxVQUFVLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN4RCxDQUFDLEVBQ0Y7UUFDQSxNQUFNLElBQUksc0JBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0tBQzlDO0FBQ0gsQ0FBQyxDQUFDO0FBWlcsUUFBQSwwQ0FBMEMsOENBWXJEIn0=
package/dist/types.d.ts CHANGED
@@ -80,10 +80,19 @@ export type Spinner = {
80
80
  };
81
81
  export type Logger = {
82
82
  spinner: Spinner;
83
- log: (text?: string) => void;
84
- error: (text?: string) => void;
83
+ write: (text: string, outputType?: 'stderr' | 'stdout') => void;
84
+ log: (text?: string, prefix?: string) => void;
85
+ info: (text?: string, prefix?: string) => void;
86
+ error: (text?: string, prefix?: string) => void;
87
+ warn: (text?: string, prefix?: string) => void;
88
+ debug: (text?: string, prefix?: string) => void;
85
89
  };
86
90
  export type Login = (logger: Logger) => Promise<void>;
87
91
  export type BuildHttpServer = (envs: EnvironmentVariables) => HttpServer;
88
92
  export type BuildEventSubscriber = (vars: EnvironmentVariables) => EventSubscriber;
93
+ export type Log = {
94
+ message: string;
95
+ timestamp: string;
96
+ level?: 'Info' | 'Warn' | 'Error';
97
+ };
89
98
  //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/forest-cloud",
3
- "version": "1.1.6",
3
+ "version": "1.3.0",
4
4
  "description": "Utility to bootstrap and publish forest admin cloud projects customization",
5
5
  "dependencies": {
6
6
  "@forestadmin/agent": "1.38.3",
@@ -21,7 +21,8 @@
21
21
  "ora": "^3.2.0",
22
22
  "sqlite3": "^5.1.7",
23
23
  "subscriptions-transport-ws": "^0.9.19",
24
- "ws": "^8.16.0"
24
+ "ws": "^8.16.0",
25
+ "joi": "^17.12.2"
25
26
  },
26
27
  "publishConfig": {
27
28
  "access": "public"
@@ -56,7 +57,6 @@
56
57
  ],
57
58
  "devDependencies": {
58
59
  "@types/adm-zip": "^0.5.5",
59
- "log-symbols": "^4.1.0",
60
60
  "nodemon": "^3.0.3"
61
61
  }
62
62
  }