@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.
- package/dist/commands/logs.js +102 -27
- package/dist/errors.d.ts +2 -0
- package/dist/errors.js +5 -2
- package/dist/services/http-server.d.ts +6 -3
- package/dist/services/http-server.js +15 -10
- package/package.json +3 -2
package/dist/commands/logs.js
CHANGED
|
@@ -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
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
.
|
|
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
|
-
|
|
53
|
-
|
|
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
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
if (
|
|
63
|
-
logger.
|
|
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
|
-
|
|
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,
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9ncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9sb2dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsOENBQXNCO0FBRXRCLDZFQUFvRDtBQUNwRCwyRkFBaUU7QUFDakUsc0NBQTJEO0FBQzNELDZFQUcyQztBQUMzQywwRUFBaUQ7QUFDakQsc0NBQTRFO0FBRzVFLE1BQU0sVUFBVSxHQUFHO0lBQ2pCLElBQUksRUFBRSxNQUFNO0lBQ1osSUFBSSxFQUFFLE1BQU07SUFDWixLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRixNQUFNLFVBQVUsR0FBRyxDQUFDLE1BQWMsRUFBRSxHQUFRLEVBQUUsRUFBRTtJQUM5QyxJQUFJO1FBQ0YsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUMzRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUN4QztBQUNILENBQUMsQ0FBQztBQUVGLFNBQVMsa0JBQWtCLENBQUMsSUFBYztJQUN4QyxJQUFJLElBQUksS0FBSyxTQUFTO1FBQUUsT0FBTztJQUUvQixJQUFJLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQy9DLE1BQU0sSUFBSSxzQkFBYSxDQUFDLDJDQUEyQyxDQUFDLENBQUM7S0FDdEU7U0FBTSxJQUFJLGFBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1FBQ3ZELE1BQU0sSUFBSSxzQkFBYSxDQUFDLG1EQUFtRCxDQUFDLENB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
|
package/dist/errors.d.ts
CHANGED
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,
|
|
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(
|
|
25
|
-
|
|
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 =>
|
|
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(
|
|
106
|
-
const
|
|
107
|
-
return handledAxios({
|
|
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}`,
|
|
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,
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUErQjtBQUMvQix1Q0FBeUI7QUFDekIsb0VBQTJDO0FBRTNDLHNDQUEyRDtBQUczRCxLQUFLLFVBQVUsWUFBWSxDQUN6QixrQkFBNEMsRUFDNUMsRUFBRSxZQUFZLEVBQTRCO0lBRTFDLElBQUk7UUFDRixPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7S0FDdkQ7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sS0FBSyxHQUFVLENBQUMsQ0FBQztRQUN2QixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFFakIsSUFBSSxLQUFLLFlBQVksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxNQUFNLE1BQU0sR0FBeUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO1lBQ2xGLE9BQU8sR0FBRyxNQUFNLEVBQUUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0U7UUFFRCxJQUFJLENBQUMsQ0FBQyxRQUFRLEVBQUUsTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUM5QixNQUFNLElBQUksd0JBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNwQzthQUFNO1lBQ0wsTUFBTSxJQUFJLHNCQUFhLENBQUMsR0FBRyxZQUFZLEtBQUssS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ2pGO0tBQ0Y7QUFDSCxDQUFDO0FBRUQsTUFBcUIsVUFBVTtJQUc3QixZQUFZLFNBQWlCLEVBQUUsU0FBaUIsRUFBRSxXQUFtQjtRQUNuRSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ2IsbUJBQW1CLEVBQUUsU0FBUztZQUM5QixhQUFhLEVBQUUsVUFBVSxXQUFXLEVBQUU7WUFDdEMsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQyxDQUFDO0lBQ0osQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsV0FBbUI7UUFDckUsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ25DLEdBQUcsRUFBRSxrRUFBa0U7WUFDdkUsTUFBTSxFQUFFLEtBQUs7WUFDYixZQUFZLEVBQUUsUUFBUTtTQUN2QixDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBbUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2pFLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNCLE1BQU0sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDMUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGdCQUFnQjtRQUNwQixPQUFPLFlBQVksQ0FDakI7WUFDRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxzQ0FBc0M7WUFDNUQsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsRUFDRDtZQUNFLFlBQVksRUFBRSw2REFBNkQ7U0FDNUUsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxhQUFxQjtRQUMzQyxPQUFPLFlBQVksQ0FJakI7WUFDRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyx1Q0FBdUM7WUFDN0QsTUFBTSxFQUFFLE1BQU07WUFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87WUFDckIsSUFBSSxFQUFFLEVBQUUsYUFBYSxFQUFFO1NBQ3hCLEVBQ0Q7WUFDRSxZQUFZLEVBQUUsdURBQXVEO1NBQ3RFLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsV0FBVztRQUNmLE9BQU8sWUFBWSxDQUNqQjtZQUNFLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLGdDQUFnQztZQUN0RCxNQUFNLEVBQUUsTUFBTTtZQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztTQUN0QixFQUNEO1lBQ0UsWUFBWSxFQUFFLHFEQUFxRDtTQUNwRSxDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLDJCQUEyQjtRQUMvQixPQUFPLFlBQVksQ0FLakI7WUFDRSxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxvREFBb0Q7WUFDMUUsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsRUFDRCxFQUFFLFlBQVksRUFBRSxnREFBZ0QsRUFBRSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFPLENBQUMsRUFDWixLQUFLLEVBQ0wsSUFBSSxFQUNKLEVBQUUsRUFDRixrQkFBa0IsR0FNbkI7UUFDQyxNQUFNLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLDZCQUE2QixDQUFDO1FBRTVELE9BQU8sQ0FDTCxNQUFNLFlBQVksQ0FDaEI7WUFDRSxtQ0FBbUM7WUFDbkMsR0FBRyxFQUFFLEdBQUcsSUFBSSxVQUFVLEtBQUssU0FBUyxJQUFJLE9BQU8sRUFBRSwwQkFBMEIsa0JBQWtCLEVBQUU7WUFDL0YsTUFBTSxFQUFFLEtBQUs7WUFDYixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsRUFDRCxFQUFFLFlBQVksRUFBRSx5QkFBeUIsRUFBRSxDQUM1QyxDQUNGLENBQUMsSUFBSSxDQUFDO0lBQ1QsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsV0FBbUI7UUFDL0MsT0FBTyxJQUFBLHdCQUFhLEVBQUMsV0FBVyxDQUFDLENBQUM7SUFDcEMsQ0FBQztDQUNGO0FBbkhELDZCQW1IQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/forest-cloud",
|
|
3
|
-
"version": "1.
|
|
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"
|