@forestadmin/forest-cloud 1.2.0 → 1.3.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.
@@ -3,6 +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
+ const joi_1 = __importDefault(require("joi"));
6
7
  const action_runner_1 = __importDefault(require("../dialogs/action-runner"));
7
8
  const check_latest_version_1 = __importDefault(require("../dialogs/check-latest-version"));
8
9
  const errors_1 = require("../errors");
@@ -23,20 +24,40 @@ const displayLog = (logger, log) => {
23
24
  }
24
25
  };
25
26
  function validateTailOption(tail) {
26
- if (tail !== undefined) {
27
- if (!Number.isInteger(Number(tail))) {
28
- throw new errors_1.BusinessError('The --tail (-n) option must be an integer');
29
- }
30
- else if (Number(tail) < 0) {
31
- throw new errors_1.BusinessError('The --tail (-n) option must be a positive integer');
32
- }
33
- else if (Number(tail) === 0) {
34
- throw new errors_1.BusinessError('The --tail (-n) option must be greater than 0');
35
- }
36
- else if (Number(tail) > 1000) {
37
- throw new errors_1.BusinessError('The --tail (-n) option must be equal or less than 1000');
38
- }
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');
39
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
+ function isRunningWithOptions(options) {
60
+ return !!(options.tail || options.from || options.to);
40
61
  }
41
62
  exports.default = (program, context) => {
42
63
  const { logger, getCurrentVersion, login, getEnvironmentVariables, buildHttpServer } = context;
@@ -45,30 +66,84 @@ exports.default = (program, context) => {
45
66
  .option('-e, --env-secret <string>', 'Environment secret, you can find it in your environment settings.' +
46
67
  ' (you can also pass it with environment variable FOREST_ENV_SECRET)')
47
68
  .option('-n, --tail <integer>', 'Number of lines to show from the end of the logs in the last hour.' +
48
- ' Default is 30, Max is 1000')
49
- .description('Display logs of the customizations published on your agent.')
69
+ ' Default is 30, Max is 1000. Use from option to get older logs.')
70
+ .option('-f, --from <timestamp>', 'Minimum timestamp for requested logs. Default is the last month (now-1M)')
71
+ .option('-t, --to <timestamp>', 'Maximum timestamp for requested logs. Default is now')
72
+ .description('Display logs of the customizations published on your agent')
50
73
  .action((0, action_runner_1.default)(logger.spinner, async (options) => {
51
74
  validateTailOption(options.tail);
52
- const tail = options.tail ?? 30;
53
- await (0, check_latest_version_1.default)(logger.spinner, getCurrentVersion(), http_server_1.default.getLatestVersion);
75
+ validateFromOption(options.from);
76
+ validateToOption(options.to);
77
+ const { spinner } = logger;
78
+ const tail = Number(options.tail ?? 30);
79
+ const from = options.from ?? 'now-1M';
80
+ const to = options.to ?? 'now';
81
+ await (0, check_latest_version_1.default)(spinner, getCurrentVersion(), http_server_1.default.getLatestVersion);
54
82
  const vars = await (0, shared_1.loginIfMissingAuthAndReturnEnvironmentVariables)(login, logger, getEnvironmentVariables);
55
83
  vars.FOREST_ENV_SECRET = options.envSecret || vars.FOREST_ENV_SECRET;
56
84
  (0, environment_variables_1.validateMissingForestEnvSecret)(vars.FOREST_ENV_SECRET, 'logs');
57
85
  (0, environment_variables_1.validateEnvironmentVariables)(vars);
58
- const { logs } = await buildHttpServer(vars).getLogs(tail);
86
+ let logs;
87
+ try {
88
+ logs = await buildHttpServer(vars).getLogs({
89
+ from,
90
+ to,
91
+ limit: tail,
92
+ // we want to get the logs from the oldest to the newest when we have a from option
93
+ orderByRecentFirst: !options.from,
94
+ });
95
+ }
96
+ catch (e) {
97
+ if (e instanceof errors_1.ValidationError) {
98
+ logger.spinner.warn(`Given Options: from=${from}, to=${to}, tail=${tail}`);
99
+ }
100
+ throw e;
101
+ }
102
+ let message;
103
+ let orderDetails;
104
+ if (options.from && options.to) {
105
+ orderDetails = '- Logs are returned from the oldest to the newest';
106
+ message = `between "${from}" and "${to}"`;
107
+ }
108
+ else if (options.from) {
109
+ orderDetails = '- Logs are returned from the oldest to the newest';
110
+ message = `since "${from}"`;
111
+ }
112
+ else if (options.to) {
113
+ orderDetails = '- Logs are returned from the newest to the oldest';
114
+ message = `until "${to}"`;
115
+ }
116
+ else {
117
+ orderDetails = '- Logs are returned from the newest to the oldest';
118
+ message = 'in the last month';
119
+ }
120
+ const helperMessage = 'To see more logs or change the time range, use --help for all options';
59
121
  if (logs?.length > 0) {
60
- const pluralize = logs.length > 1 ? 's' : '';
61
- const baseMessage = `Requested ${tail} log${pluralize} in the last hour`;
62
- if (logs.length === Number(tail)) {
63
- logger.spinner.succeed(baseMessage);
122
+ logger.log('...you have probably more logs...');
123
+ logs.forEach(log => displayLog(logger, log));
124
+ if (isRunningWithOptions(options))
125
+ logger.log('...you have probably more logs...');
126
+ const pluralize = tail > 1 ? 's' : '';
127
+ const baseMessage = `Requested ${tail} log${pluralize} ${message} ${orderDetails}`;
128
+ const fromToMessage = `You have received logs from ${logs[0].timestamp} to ${logs[logs.length - 1].timestamp}`;
129
+ if (logs.length === tail) {
130
+ spinner.succeed(`${baseMessage}\n${fromToMessage}\n`);
131
+ logger.log(`${helperMessage}`);
64
132
  }
65
133
  else {
66
- logger.spinner.succeed(`${baseMessage}, but only ${logs.length} were found`);
134
+ spinner.succeed(`${baseMessage}, but only ${logs.length} were found\n${fromToMessage}`);
135
+ }
136
+ }
137
+ else {
138
+ spinner.warn(`No logs found ${message}`);
139
+ if (!isRunningWithOptions(options)) {
140
+ const defaultMessage = 'By default, the last 30 logs from the past month are displayed.';
141
+ logger.log(`${defaultMessage} ${helperMessage}`);
142
+ }
143
+ else {
144
+ logger.log(helperMessage);
67
145
  }
68
- logs.forEach(log => displayLog(logger, log));
69
146
  }
70
- else
71
- logger.spinner.warn('No logs found in the last hour');
72
147
  }));
73
148
  };
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBRUEsNkVBQW9EO0FBQ3BELDJGQUFpRTtBQUNqRSxzQ0FBMEM7QUFDMUMsNkVBRzJDO0FBQzNDLDBFQUFpRDtBQUNqRCxzQ0FBNEU7QUFHNUUsTUFBTSxVQUFVLEdBQUc7SUFDakIsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLENBQUMsTUFBYyxFQUFFLEdBQVEsRUFBRSxFQUFFO0lBQzlDLElBQUk7UUFDRixNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzNEO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ3hDO0FBQ0gsQ0FBQyxDQUFDO0FBRUYsU0FBUyxrQkFBa0IsQ0FBQyxJQUFjO0lBQ3hDLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtRQUN0QixJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNuQyxNQUFNLElBQUksc0JBQWEsQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1NBQ3RFO2FBQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzNCLE1BQU0sSUFBSSxzQkFBYSxDQUFDLG1EQUFtRCxDQUFDLENBQUM7U0FDOUU7YUFBTSxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDN0IsTUFBTSxJQUFJLHNCQUFhLENB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
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsOENBQXNCO0FBRXRCLDZFQUFvRDtBQUNwRCwyRkFBaUU7QUFDakUsc0NBQTJEO0FBQzNELDZFQUcyQztBQUMzQywwRUFBaUQ7QUFDakQsc0NBQTRFO0FBRzVFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQWMsRUFBRSxHQUFRLEVBQUUsRUFBRTtJQUM5QyxJQUFJO1FBQ0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMzRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN4QztBQUNILENBQUMsQ0FBQztBQUVGLFNBQVMsa0JBQWtCLENBQUMsSUFBYztJQUN4QyxJQUFJLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTztJQUUvQixJQUFJLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxzQkFBYSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7S0FDdEU7U0FBTSxJQUFJLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3ZELE1BQU0sSUFBSSxzQkFBYSxDQUFDLG1EQUFtRCxDQUFDLENB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
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
@@ -21,9 +21,12 @@ export default class HttpServer {
21
21
  email: string;
22
22
  };
23
23
  }>;
24
- getLogs(tail?: number | string): Promise<{
25
- logs: Log[];
26
- }>;
24
+ getLogs({ limit, from, to, orderByRecentFirst, }: {
25
+ limit: number;
26
+ from: string;
27
+ to: string;
28
+ orderByRecentFirst: boolean;
29
+ }): Promise<Log[]>;
27
30
  static getLatestVersion(packageName: string): Promise<string>;
28
31
  }
29
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,17 +106,18 @@ class HttpServer {
102
106
  headers: this.headers,
103
107
  }, { errorMessage: `Failed to retrieve last published code details` });
104
108
  }
105
- async getLogs(tail) {
106
- const potentialTail = tail ? `?limit=${tail}` : '';
107
- return handledAxios({
108
- url: `${this.serverUrl}/api/full-hosted-agent/logs${potentialTail}`,
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}`,
109
114
  method: 'GET',
110
115
  headers: this.headers,
111
- }, { errorMessage: `Failed to retrieve logs` });
116
+ }, { errorMessage: `Failed to retrieve logs` })).logs;
112
117
  }
113
118
  static async getLatestVersion(packageName) {
114
119
  return (0, latest_version_1.default)(packageName);
115
120
  }
116
121
  }
117
122
  exports.default = HttpServer;
118
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUErQjtBQUMvQix1Q0FBeUI7QUFDekIsb0VBQTJDO0FBRTNDLHNDQUEwQztBQUcxQyxLQUFLLFVBQVUsWUFBWSxDQUN6QixrQkFBNEMsRUFDNUMsRUFBRSxZQUFZLEVBQTRCO0lBRTFDLElBQUk7UUFDRixPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDdkQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sS0FBSyxHQUFVLENBQUMsQ0FBQztRQUV2QixJQUFJLE9BQU8sQ0FBQztRQUVaLElBQUksS0FBSyxZQUFZLEtBQUssQ0FBQyxVQUFVLEVBQUU7WUFDckMsTUFBTSxNQUFNLEdBQXlDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztZQUNsRixPQUFPLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFNBQVMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDbkU7UUFFRCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNwRCxNQUFNLElBQUksc0JBQWEsQ0FBQyxHQUFHLFlBQVksS0FBSyxLQUFLLENBQUMsT0FBTyxHQUFHLGNBQWMsRUFBRSxDQUFDLENBQUM7S0FDL0U7QUFDSCxDQUFDO0FBRUQsTUFBcUIsVUFBVTtJQUc3QixZQUFZLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQjtRQUNuRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENB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
123
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUErQjtBQUMvQix1Q0FBeUI7QUFDekIsb0VBQTJDO0FBRTNDLHNDQUEyRDtBQUczRCxLQUFLLFVBQVUsWUFBWSxDQUN6QixrQkFBNEMsRUFDNUMsRUFBRSxZQUFZLEVBQTRCO0lBRTFDLElBQUk7UUFDRixPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDdkQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sS0FBSyxHQUFVLENBQUMsQ0FBQztRQUN2QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxLQUFLLFlBQVksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBeUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO1lBQ2xGLE9BQU8sR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0U7UUFFRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUM5QixNQUFNLElBQUksd0JBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0wsTUFBTSxJQUFJLHNCQUFhLENBQUMsR0FBRyxZQUFZLEtBQUssS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFBcUIsVUFBVTtJQUc3QixZQUFZ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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forestadmin/forest-cloud",
3
- "version": "1.2.0",
3
+ "version": "1.3.1",
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"