@forestadmin/forest-cloud 1.0.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.
Files changed (45) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +21 -0
  3. package/dist/build-command.d.ts +2 -0
  4. package/dist/build-command.js +48 -0
  5. package/dist/command.d.ts +3 -0
  6. package/dist/command.js +12 -0
  7. package/dist/dialogs/action-runner.d.ts +3 -0
  8. package/dist/dialogs/action-runner.js +28 -0
  9. package/dist/dialogs/ask-to-overwrite-customizations.d.ts +4 -0
  10. package/dist/dialogs/ask-to-overwrite-customizations.js +30 -0
  11. package/dist/dialogs/check-latest-version.d.ts +4 -0
  12. package/dist/dialogs/check-latest-version.js +24 -0
  13. package/dist/errors.d.ts +8 -0
  14. package/dist/errors.js +18 -0
  15. package/dist/index.d.ts +3 -0
  16. package/dist/index.js +3 -0
  17. package/dist/login.d.ts +3 -0
  18. package/dist/login.js +23 -0
  19. package/dist/make-commands.d.ts +5 -0
  20. package/dist/make-commands.js +136 -0
  21. package/dist/services/access-file.d.ts +2 -0
  22. package/dist/services/access-file.js +20 -0
  23. package/dist/services/bootstrap-path-manager.d.ts +18 -0
  24. package/dist/services/bootstrap-path-manager.js +48 -0
  25. package/dist/services/bootstrap.d.ts +4 -0
  26. package/dist/services/bootstrap.js +79 -0
  27. package/dist/services/dist-path-manager.d.ts +7 -0
  28. package/dist/services/dist-path-manager.js +19 -0
  29. package/dist/services/environment-variables.d.ts +6 -0
  30. package/dist/services/environment-variables.js +92 -0
  31. package/dist/services/event-subscriber.d.ts +12 -0
  32. package/dist/services/event-subscriber.js +66 -0
  33. package/dist/services/http-server.d.ts +25 -0
  34. package/dist/services/http-server.js +110 -0
  35. package/dist/services/packager.d.ts +3 -0
  36. package/dist/services/packager.js +17 -0
  37. package/dist/services/publish.d.ts +4 -0
  38. package/dist/services/publish.js +47 -0
  39. package/dist/services/update-typings.d.ts +6 -0
  40. package/dist/services/update-typings.js +50 -0
  41. package/dist/templates/env.txt +2 -0
  42. package/dist/templates/index.txt +19 -0
  43. package/dist/types.d.ts +87 -0
  44. package/dist/types.js +3 -0
  45. package/package.json +62 -0
package/README.md ADDED
@@ -0,0 +1,21 @@
1
+ This package needs to be installed to bootstrap and publish your cloud customizations.
2
+ It is used as a dev-dependency of the cloud-customizer
3
+
4
+ # available commands
5
+
6
+ ## bootstrap
7
+
8
+ **Mandatory option:** `-e, --env-secret <environment-secret-key>`
9
+
10
+ - Login to forestadmin
11
+ - Creates a new folder "cloud-customizer"
12
+ - Setup .env file with FOREST_ENV_SECRET and authentication token
13
+ - Generate typings from your database
14
+
15
+ ## update-typings
16
+
17
+ Generate typings from the structure of the database and the code customizations.
18
+
19
+ ## login
20
+
21
+ Ask user to authenticate and refresh the authentication token.
@@ -0,0 +1,2 @@
1
+ export default function buildCommands(): import("commander").Command;
2
+ //# sourceMappingURL=build-command.d.ts.map
@@ -0,0 +1,48 @@
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 fs_1 = __importDefault(require("fs"));
7
+ const ora_1 = __importDefault(require("ora"));
8
+ const os_1 = __importDefault(require("os"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const login_1 = __importDefault(require("./login"));
11
+ const make_commands_1 = __importDefault(require("./make-commands"));
12
+ const bootstrap_path_manager_1 = __importDefault(require("./services/bootstrap-path-manager"));
13
+ const dist_path_manager_1 = __importDefault(require("./services/dist-path-manager"));
14
+ const environment_variables_1 = require("./services/environment-variables");
15
+ const event_subscriber_1 = __importDefault(require("./services/event-subscriber"));
16
+ const http_server_1 = __importDefault(require("./services/http-server"));
17
+ const buildHttpServer = (envs) => {
18
+ return new http_server_1.default(envs.FOREST_SERVER_URL, envs.FOREST_ENV_SECRET, envs.FOREST_AUTH_TOKEN);
19
+ };
20
+ const buildEventSubscriber = (envs) => {
21
+ return new event_subscriber_1.default(envs.FOREST_SUBSCRIPTION_URL, envs.FOREST_AUTH_TOKEN);
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
+ function getCurrentVersion() {
31
+ // It does't work when bootstrapping the project
32
+ const { version } = JSON.parse(fs_1.default.readFileSync(path_1.default.join(__dirname, 'package.json'), 'utf-8'));
33
+ return version;
34
+ }
35
+ function buildCommands() {
36
+ return (0, make_commands_1.default)({
37
+ getEnvironmentVariables: environment_variables_1.getEnvironmentVariables,
38
+ buildHttpServer,
39
+ buildEventSubscriber,
40
+ login: login_1.default,
41
+ logger,
42
+ getCurrentVersion,
43
+ bootstrapPathManager: new bootstrap_path_manager_1.default(os_1.default.tmpdir(), os_1.default.homedir()),
44
+ distPathManager: new dist_path_manager_1.default(),
45
+ });
46
+ }
47
+ exports.default = buildCommands;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9idWlsZC1jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNENBQXdCO0FBQ3hCLDhDQUFzQjtBQUN0Qiw0Q0FBb0I7QUFDcEIsZ0RBQXdCO0FBRXhCLG9EQUE0QjtBQUM1QixvRUFBMkM7QUFDM0MsK0ZBQXFFO0FBQ3JFLHFGQUEyRDtBQUMzRCw0RUFBMkU7QUFDM0UsbUZBQTBEO0FBQzFELHlFQUFnRDtBQUdoRCxNQUFNLGVBQWUsR0FBRyxDQUFDLElBQTBCLEVBQWMsRUFBRTtJQUNqRSxPQUFPLElBQUkscUJBQVUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBQ2hHLENBQUMsQ0FBQztBQUVGLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUEwQixFQUFtQixFQUFFO0lBQzNFLE9BQU8sSUFBSSwwQkFBZSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUNuRixDQUFDLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBVztJQUNyQixPQUFPLEVBQUUsSUFBQSxhQUFHLEdBQUU7SUFDZCxzQ0FBc0M7SUFDdEMsR0FBRyxFQUFFLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztJQUN6QyxzQ0FBc0M7SUFDdEMsS0FBSyxFQUFFLENBQUMsSUFBYSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztDQUM5QyxDQUFDO0FBRUYsU0FBUyxpQkFBaUI7SUFDeEIsZ0RBQWdEO0lBQ2hELE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUM1QixZQUFNLENBQUMsWUFBWSxDQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUNuRSxDQUFDO0lBRUYsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQXdCLGFBQWE7SUFDbkMsT0FBTyxJQUFBLHVCQUFZLEVBQUM7UUFDbEIsdUJBQXVCLEVBQXZCLCtDQUF1QjtRQUN2QixlQUFlO1FBQ2Ysb0JBQW9CO1FBQ3BCLEtBQUssRUFBTCxlQUFLO1FBQ0wsTUFBTTtRQUNOLGlCQUFpQjtRQUNqQixvQkFBb0IsRUFBRSxJQUFJLGdDQUFvQixDQUFDLFlBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxZQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDekUsZUFBZSxFQUFFLElBQUksMkJBQWUsRUFBRTtLQUN2QyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBWEQsZ0NBV0MifQ==
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /* istanbul ignore file */
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ const dotenv_1 = require("dotenv");
9
+ const build_command_1 = __importDefault(require("./build-command"));
10
+ (0, dotenv_1.configDotenv)();
11
+ (0, build_command_1.default)().parseAsync();
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21tYW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsMEJBQTBCOzs7OztBQUUxQixtQ0FBc0M7QUFFdEMsb0VBQTJDO0FBRTNDLElBQUEscUJBQVksR0FBRSxDQUFDO0FBQ2YsSUFBQSx1QkFBWSxHQUFFLENBQUMsVUFBVSxFQUFFLENBQUMifQ==
@@ -0,0 +1,3 @@
1
+ import { Spinner } from '../types';
2
+ export default function actionRunner(spinner: Spinner, fn: (...args: any[]) => Promise<any>): (...args: any[]) => Promise<void>;
3
+ //# sourceMappingURL=action-runner.d.ts.map
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const errors_1 = require("../errors");
4
+ function actionRunner(spinner, fn) {
5
+ return async (...args) => {
6
+ try {
7
+ await fn(...args);
8
+ }
9
+ catch (e) {
10
+ const error = e;
11
+ if (error instanceof errors_1.BusinessError) {
12
+ spinner.fail(error.message);
13
+ // we must exit the process with a non-zero code to indicate an error
14
+ // when chaining commands, the process will continue if we don't exit
15
+ process.exitCode = 1;
16
+ }
17
+ else {
18
+ spinner.fail('An unexpected error occurred.\nPlease reach out for help in our Developers community (https://community.forestadmin.com/)');
19
+ throw error;
20
+ }
21
+ }
22
+ finally {
23
+ spinner.stop();
24
+ }
25
+ };
26
+ }
27
+ exports.default = actionRunner;
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLXJ1bm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWFsb2dzL2FjdGlvbi1ydW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxzQ0FBMEM7QUFHMUMsU0FBd0IsWUFBWSxDQUFDLE9BQWdCLEVBQUUsRUFBNkI7SUFDbEYsT0FBTyxLQUFLLEVBQUUsR0FBRyxJQUFJLEVBQUUsRUFBRTtRQUN2QixJQUFJO1lBQ0YsTUFBTSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztTQUNuQjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsTUFBTSxLQUFLLEdBQVUsQ0FBQyxDQUFDO1lBRXZCLElBQUksS0FBSyxZQUFZLHNCQUFhLEVBQUU7Z0JBQ2xDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QixxRUFBcUU7Z0JBQ3JFLHFFQUFxRTtnQkFDckUsT0FBTyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7YUFDdEI7aUJBQU07Z0JBQ0wsT0FBTyxDQUFDLElBQUksQ0FDViwySEFBMkgsQ0FDNUgsQ0FBQztnQkFDRixNQUFNLEtBQUssQ0FBQzthQUNiO1NBQ0Y7Z0JBQVM7WUFDUixPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDLENBQUM7QUFDSixDQUFDO0FBdEJELCtCQXNCQyJ9
@@ -0,0 +1,4 @@
1
+ import HttpServer from '../services/http-server';
2
+ import { Spinner } from '../types';
3
+ export default function askToOverwriteCustomizations(spinner: Spinner, getLastPublishedCodeDetails: typeof HttpServer.prototype.getLastPublishedCodeDetails): Promise<boolean>;
4
+ //# sourceMappingURL=ask-to-overwrite-customizations.d.ts.map
@@ -0,0 +1,30 @@
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 readline_1 = __importDefault(require("readline"));
7
+ async function askToOverwriteCustomizations(spinner, getLastPublishedCodeDetails) {
8
+ const details = await getLastPublishedCodeDetails();
9
+ if (!details)
10
+ return true;
11
+ const { relativeDate, user } = details;
12
+ spinner.warn('There is already deployed customization code on your project');
13
+ spinner.info(`Last code pushed ${relativeDate}, by ${user.name} (${user.email})`);
14
+ spinner.stop();
15
+ return new Promise(resolve => {
16
+ const rl = readline_1.default.createInterface({
17
+ input: process.stdin,
18
+ output: process.stdout,
19
+ });
20
+ rl.question(`Do you really want to overwrite these customizations? (yes/no) `, answer => {
21
+ if (answer.toLowerCase() !== 'yes' && answer.toLowerCase() !== 'y') {
22
+ resolve(false);
23
+ }
24
+ rl.close();
25
+ resolve(true);
26
+ });
27
+ });
28
+ }
29
+ exports.default = askToOverwriteCustomizations;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNrLXRvLW92ZXJ3cml0ZS1jdXN0b21pemF0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWFsb2dzL2Fzay10by1vdmVyd3JpdGUtY3VzdG9taXphdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx3REFBZ0M7QUFLakIsS0FBSyxVQUFVLDRCQUE0QixDQUN4RCxPQUFnQixFQUNoQiwyQkFBb0Y7SUFFcEYsTUFBTSxPQUFPLEdBQUcsTUFBTSwyQkFBMkIsRUFBRSxDQUFDO0lBRXBELElBQUksQ0FBQyxPQUFPO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFFMUIsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFFdkMsT0FBTyxDQUFDLElBQUksQ0FBQyw4REFBOEQsQ0FBQyxDQUFDO0lBQzdFLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFlBQVksUUFBUSxJQUFJLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2xGLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVmLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxFQUFFLEdBQUcsa0JBQVEsQ0FBQyxlQUFlLENBQUM7WUFDbEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO1lBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtTQUN2QixDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsUUFBUSxDQUFDLGlFQUFpRSxFQUFFLE1BQU0sQ0FBQyxFQUFFO1lBQ3RGLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxLQUFLLEtBQUssSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxFQUFFO2dCQUNsRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDaEI7WUFFRCxFQUFFLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDWCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUE3QkQsK0NBNkJDIn0=
@@ -0,0 +1,4 @@
1
+ import HttpServer from '../services/http-server';
2
+ import { Spinner } from '../types';
3
+ export default function checkLatestVersion(spinner: Spinner, customerVersion: string, getLatestVersion: typeof HttpServer.getLatestVersion): Promise<void>;
4
+ //# sourceMappingURL=check-latest-version.d.ts.map
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const errors_1 = require("../errors");
4
+ async function checkLatestVersion(spinner, customerVersion, getLatestVersion) {
5
+ let version;
6
+ try {
7
+ version = await getLatestVersion('@forestadmin/forest-cloud');
8
+ }
9
+ catch (e) {
10
+ spinner.info('Unable to check the latest version of @forestadmin/forest-cloud');
11
+ return;
12
+ }
13
+ // if major version is different
14
+ if (version.split('.')[0] !== customerVersion.split('.')[0]) {
15
+ throw new errors_1.CloudToolkitVersionError(`Your version of @forestadmin/forest-cloud is outdated. Latest version is ${version}.` +
16
+ '\nPlease update it to the latest major version to be able to use our services.');
17
+ }
18
+ else if (customerVersion !== version) {
19
+ spinner.warn(`Your version of @forestadmin/forest-cloud is outdated. Latest version is ${version}.` +
20
+ '\nPlease update it.');
21
+ }
22
+ }
23
+ exports.default = checkLatestVersion;
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stbGF0ZXN0LXZlcnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGlhbG9ncy9jaGVjay1sYXRlc3QtdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHNDQUFxRDtBQUl0QyxLQUFLLFVBQVUsa0JBQWtCLENBQzlDLE9BQWdCLEVBQ2hCLGVBQXVCLEVBQ3ZCLGdCQUFvRDtJQUVwRCxJQUFJLE9BQWUsQ0FBQztJQUVwQixJQUFJO1FBQ0YsT0FBTyxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQUMvRDtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxDQUFDLElBQUksQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO1FBRWhGLE9BQU87S0FDUjtJQUVELGdDQUFnQztJQUNoQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssZUFBZSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUMzRCxNQUFNLElBQUksaUNBQXdCLENBQ2hDLDRFQUE0RSxPQUFPLEdBQUc7WUFDcEYsZ0ZBQWdGLENBQ25GLENBQUM7S0FDSDtTQUFNLElBQUksZUFBZSxLQUFLLE9BQU8sRUFBRTtRQUN0QyxPQUFPLENBQUMsSUFBSSxDQUNWLDRFQUE0RSxPQUFPLEdBQUc7WUFDcEYscUJBQXFCLENBQ3hCLENBQUM7S0FDSDtBQUNILENBQUM7QUEzQkQscUNBMkJDIn0=
@@ -0,0 +1,8 @@
1
+ export declare class BusinessError extends Error {
2
+ }
3
+ export declare class CustomizationError extends BusinessError {
4
+ constructor(message: string, stack?: string);
5
+ }
6
+ export declare class CloudToolkitVersionError extends BusinessError {
7
+ }
8
+ //# sourceMappingURL=errors.d.ts.map
package/dist/errors.js ADDED
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CloudToolkitVersionError = exports.CustomizationError = exports.BusinessError = void 0;
4
+ /* eslint-disable max-classes-per-file */
5
+ class BusinessError extends Error {
6
+ }
7
+ exports.BusinessError = BusinessError;
8
+ class CustomizationError extends BusinessError {
9
+ constructor(message, stack) {
10
+ super(message);
11
+ this.stack = stack;
12
+ }
13
+ }
14
+ exports.CustomizationError = CustomizationError;
15
+ class CloudToolkitVersionError extends BusinessError {
16
+ }
17
+ exports.CloudToolkitVersionError = CloudToolkitVersionError;
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Vycm9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBeUM7QUFDekMsTUFBYSxhQUFjLFNBQVEsS0FBSztDQUFHO0FBQTNDLHNDQUEyQztBQUMzQyxNQUFhLGtCQUFtQixTQUFRLGFBQWE7SUFDbkQsWUFBWSxPQUFlLEVBQUUsS0FBYztRQUN6QyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUNyQixDQUFDO0NBQ0Y7QUFMRCxnREFLQztBQUNELE1BQWEsd0JBQXlCLFNBQVEsYUFBYTtDQUFHO0FBQTlELDREQUE4RCJ9
@@ -0,0 +1,3 @@
1
+ import { Agent } from './types';
2
+ export { Agent };
3
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,3 @@
1
+ import { Logger } from './types';
2
+ export default function login({ spinner, log, error }: Logger): Promise<void>;
3
+ //# sourceMappingURL=login.d.ts.map
package/dist/login.js ADDED
@@ -0,0 +1,23 @@
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 child_process_1 = require("child_process");
7
+ const path_1 = __importDefault(require("path"));
8
+ async function login({ spinner, log, error }) {
9
+ spinner.stop();
10
+ return new Promise((resolve, reject) => {
11
+ const pathForest = path_1.default.join(__dirname, '..', 'node_modules', '.bin', 'forest');
12
+ const process = (0, child_process_1.exec)(`node ${pathForest} login`);
13
+ process.stdout.on('data', log);
14
+ process.stderr.on('data', error);
15
+ process.on('close', () => {
16
+ spinner.start();
17
+ resolve();
18
+ });
19
+ process.on('error', reject);
20
+ });
21
+ }
22
+ exports.default = login;
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbG9naW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpREFBcUM7QUFDckMsZ0RBQXdCO0FBSVQsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFVO0lBQ2pFLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUVmLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDM0MsTUFBTSxVQUFVLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBQSxvQkFBSSxFQUFDLFFBQVEsVUFBVSxRQUFRLENBQUMsQ0FBQztRQUNqRCxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDL0IsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtZQUN2QixPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDaEIsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQWRELHdCQWNDIn0=
@@ -0,0 +1,5 @@
1
+ import { Command } from 'commander';
2
+ import { EnvironmentVariables, Logger, Login, MakeCommands } from './types';
3
+ export declare const getOrRefreshEnvironmentVariables: (login: Login, logger: Logger, getEnvironmentVariables: () => Promise<EnvironmentVariables>) => Promise<EnvironmentVariables>;
4
+ export default function makeCommands({ bootstrapPathManager, distPathManager, buildEventSubscriber, buildHttpServer, logger, getEnvironmentVariables, login, getCurrentVersion, }: MakeCommands): Command;
5
+ //# sourceMappingURL=make-commands.d.ts.map
@@ -0,0 +1,136 @@
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.getOrRefreshEnvironmentVariables = void 0;
7
+ const commander_1 = require("commander");
8
+ const action_runner_1 = __importDefault(require("./dialogs/action-runner"));
9
+ const ask_to_overwrite_customizations_1 = __importDefault(require("./dialogs/ask-to-overwrite-customizations"));
10
+ const check_latest_version_1 = __importDefault(require("./dialogs/check-latest-version"));
11
+ const errors_1 = require("./errors");
12
+ const bootstrap_1 = __importDefault(require("./services/bootstrap"));
13
+ const environment_variables_1 = require("./services/environment-variables");
14
+ const http_server_1 = __importDefault(require("./services/http-server"));
15
+ const packager_1 = __importDefault(require("./services/packager"));
16
+ const publish_1 = __importDefault(require("./services/publish"));
17
+ const update_typings_1 = require("./services/update-typings");
18
+ const getOrRefreshEnvironmentVariables = async (login, logger, getEnvironmentVariables) => {
19
+ let vars = await getEnvironmentVariables();
20
+ if (!vars.FOREST_AUTH_TOKEN) {
21
+ await login(logger);
22
+ vars = await getEnvironmentVariables();
23
+ }
24
+ return vars;
25
+ };
26
+ exports.getOrRefreshEnvironmentVariables = getOrRefreshEnvironmentVariables;
27
+ const validateAndBuildHttpServer = (envs, buildHttpServer) => {
28
+ (0, environment_variables_1.validateEnvironmentVariables)(envs);
29
+ return buildHttpServer(envs);
30
+ };
31
+ const validateAndBuildEventSubscriber = (envs, buildEventSubscriber) => {
32
+ (0, environment_variables_1.validateEnvironmentVariables)(envs);
33
+ return buildEventSubscriber(envs);
34
+ };
35
+ function makeCommands({ bootstrapPathManager, distPathManager, buildEventSubscriber, buildHttpServer, logger, getEnvironmentVariables, login, getCurrentVersion, }) {
36
+ // it's very important to use a new instance of Command each time for testing purposes
37
+ const program = new commander_1.Command();
38
+ const { spinner, log } = logger;
39
+ program.option('-v, --version', 'output the version number').action((0, action_runner_1.default)(spinner, async () => {
40
+ // we want to display before to display the warning
41
+ const version = getCurrentVersion();
42
+ log(version);
43
+ await (0, check_latest_version_1.default)(spinner, version, http_server_1.default.getLatestVersion);
44
+ }));
45
+ program
46
+ .command('update-typings')
47
+ .description('Update your typings file to synchronize code autocompletion with your datasource ' +
48
+ '(whenever its schema changes)')
49
+ .action((0, action_runner_1.default)(spinner, async () => {
50
+ await (0, check_latest_version_1.default)(spinner, getCurrentVersion(), http_server_1.default.getLatestVersion);
51
+ spinner.start('Updating typings');
52
+ const vars = await (0, exports.getOrRefreshEnvironmentVariables)(login, logger, getEnvironmentVariables);
53
+ (0, environment_variables_1.validateEnvironmentVariables)(vars);
54
+ const introspection = await validateAndBuildHttpServer(vars, buildHttpServer).getIntrospection();
55
+ await (0, update_typings_1.updateTypingsWithCustomizations)(introspection, distPathManager, bootstrapPathManager);
56
+ spinner.succeed('Your typings have been updated');
57
+ }));
58
+ program
59
+ .command('bootstrap')
60
+ .description('Bootstrap your project')
61
+ .option('-e, --env-secret <string>', 'Environment secret, you can find it in your environment settings')
62
+ .action((0, action_runner_1.default)(spinner, async (options) => {
63
+ spinner.start('Bootstrapping project');
64
+ const vars = await (0, exports.getOrRefreshEnvironmentVariables)(login, logger, getEnvironmentVariables);
65
+ const secret = options.envSecret || vars.FOREST_ENV_SECRET;
66
+ if (!secret) {
67
+ throw new errors_1.BusinessError('Your forest env secret is missing.' +
68
+ ' Please provide it with the `bootstrap --env-secret <your-secret-key>` command or' +
69
+ ' add it to your .env file or in environment variables.');
70
+ }
71
+ spinner.succeed('Environment found');
72
+ spinner.stop();
73
+ const httpServer = validateAndBuildHttpServer({ ...vars, FOREST_ENV_SECRET: secret }, buildHttpServer);
74
+ if (!(await (0, ask_to_overwrite_customizations_1.default)(spinner, httpServer.getLastPublishedCodeDetails.bind(httpServer)))) {
75
+ throw new errors_1.BusinessError('Operation aborted');
76
+ }
77
+ spinner.start();
78
+ await (0, bootstrap_1.default)(secret, httpServer, bootstrapPathManager);
79
+ spinner.succeed('Project successfully bootstrapped. You can start creating your customizations!');
80
+ }));
81
+ program
82
+ .command('login')
83
+ .description('Login to your project')
84
+ .action((0, action_runner_1.default)(spinner, async () => {
85
+ await (0, check_latest_version_1.default)(spinner, getCurrentVersion(), http_server_1.default.getLatestVersion);
86
+ spinner.start('Logging in');
87
+ const vars = await getEnvironmentVariables();
88
+ (0, environment_variables_1.validateServerUrl)(vars.FOREST_SERVER_URL);
89
+ await login(logger);
90
+ spinner.succeed('You are now logged in');
91
+ }));
92
+ program
93
+ .command('publish')
94
+ .description('Publish your code customizations')
95
+ .option('-f, --force', 'Force the publication without asking for confirmation')
96
+ .action((0, action_runner_1.default)(spinner, async (options) => {
97
+ await (0, check_latest_version_1.default)(spinner, getCurrentVersion(), http_server_1.default.getLatestVersion);
98
+ spinner.start('Publishing code customizations');
99
+ const vars = await (0, exports.getOrRefreshEnvironmentVariables)(login, logger, getEnvironmentVariables);
100
+ const httpServer = validateAndBuildHttpServer(vars, buildHttpServer);
101
+ if (!options.force &&
102
+ !(await (0, ask_to_overwrite_customizations_1.default)(spinner, httpServer.getLastPublishedCodeDetails.bind(httpServer)))) {
103
+ throw new errors_1.BusinessError('Operation aborted');
104
+ }
105
+ spinner.start('Publishing code customizations (operation cannot be cancelled)');
106
+ const subscriptionId = await (0, publish_1.default)(httpServer, distPathManager);
107
+ const subscriber = validateAndBuildEventSubscriber(vars, buildEventSubscriber);
108
+ try {
109
+ const { error } = await subscriber.subscribeToCodeCustomization(subscriptionId);
110
+ if (error) {
111
+ spinner.fail(`Something went wrong: ${error}`);
112
+ }
113
+ else {
114
+ spinner.succeed('Code customizations published');
115
+ }
116
+ }
117
+ catch (error) {
118
+ throw new errors_1.BusinessError(error.message);
119
+ }
120
+ finally {
121
+ subscriber.destroy();
122
+ }
123
+ }));
124
+ program
125
+ .command('package')
126
+ .description('Package your code customizations')
127
+ .action((0, action_runner_1.default)(spinner, async () => {
128
+ await (0, check_latest_version_1.default)(spinner, getCurrentVersion(), http_server_1.default.getLatestVersion);
129
+ spinner.start('Packaging code');
130
+ await (0, packager_1.default)(distPathManager);
131
+ spinner.succeed('Code customizations packaged and ready for publish');
132
+ }));
133
+ return program;
134
+ }
135
+ exports.default = makeCommands;
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFrZS1jb21tYW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWtlLWNvbW1hbmRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHlDQUFvQztBQUVwQyw0RUFBbUQ7QUFDbkQsZ0hBQXFGO0FBQ3JGLDBGQUFnRTtBQUNoRSxxQ0FBeUM7QUFDekMscUVBQTZDO0FBQzdDLDRFQUFtRztBQUVuRyx5RUFBZ0Q7QUFDaEQsbUVBQXdEO0FBQ3hELGlFQUF5QztBQUN6Qyw4REFBNEU7QUFVckUsTUFBTSxnQ0FBZ0MsR0FBRyxLQUFLLEVBQ25ELEtBQVksRUFDWixNQUFjLEVBQ2QsdUJBQTRELEVBQzdCLEVBQUU7SUFDakMsSUFBSSxJQUFJLEdBQUcsTUFBTSx1QkFBdUIsRUFBRSxDQUFDO0lBRTNDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUU7UUFDM0IsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsSUFBSSxHQUFHLE1BQU0sdUJBQXVCLEVBQUUsQ0FBQztLQUN4QztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQyxDQUFDO0FBYlcsUUFBQSxnQ0FBZ0Msb0NBYTNDO0FBRUYsTUFBTSwwQkFBMEIsR0FBRyxDQUNqQyxJQUEwQixFQUMxQixlQUFnQyxFQUNwQixFQUFFO0lBQ2QsSUFBQSxvREFBNEIsRUFBQyxJQUFJLENBQUMsQ0FBQztJQUVuQyxPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUM7QUFFRixNQUFNLCtCQUErQixHQUFHLENBQ3RDLElBQTBCLEVBQzFCLG9CQUEwQyxFQUN6QixFQUFFO0lBQ25CLElBQUEsb0RBQTRCLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFFbkMsT0FBTyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUM7QUFFRixTQUF3QixZQUFZLENBQUMsRUFDbkMsb0JBQW9CLEVBQ3BCLGVBQWUsRUFD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
@@ -0,0 +1,2 @@
1
+ export declare function throwIfNoBuiltCode(path: string): Promise<void>;
2
+ //# sourceMappingURL=access-file.d.ts.map
@@ -0,0 +1,20 @@
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.throwIfNoBuiltCode = void 0;
7
+ const promises_1 = __importDefault(require("fs/promises"));
8
+ const errors_1 = require("../errors");
9
+ // eslint-disable-next-line import/prefer-default-export
10
+ async function throwIfNoBuiltCode(path) {
11
+ try {
12
+ await promises_1.default.access(path);
13
+ }
14
+ catch (e) {
15
+ throw new errors_1.BusinessError(`No built customization found at ${path}.\n` +
16
+ 'Please build your code to build your customizations');
17
+ }
18
+ }
19
+ exports.throwIfNoBuiltCode = throwIfNoBuiltCode;
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXNzLWZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvYWNjZXNzLWZpbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsMkRBQTZCO0FBRTdCLHNDQUEwQztBQUUxQyx3REFBd0Q7QUFDakQsS0FBSyxVQUFVLGtCQUFrQixDQUFDLElBQVk7SUFDbkQsSUFBSTtRQUNGLE1BQU0sa0JBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDdkI7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE1BQU0sSUFBSSxzQkFBYSxDQUNyQixtQ0FBbUMsSUFBSSxLQUFLO1lBQzFDLHFEQUFxRCxDQUN4RCxDQUFDO0tBQ0g7QUFDSCxDQUFDO0FBVEQsZ0RBU0MifQ==
@@ -0,0 +1,18 @@
1
+ export default class BootstrapPathManager {
2
+ private readonly _tmp;
3
+ private readonly _home;
4
+ private readonly basePath;
5
+ constructor(tmp: string, home: string, basePath?: string);
6
+ get home(): string;
7
+ get tmp(): string;
8
+ get zip(): string;
9
+ get extracted(): string;
10
+ get cloudCustomizer(): string;
11
+ get typings(): string;
12
+ get typingsDuringBootstrap(): string;
13
+ get index(): string;
14
+ get env(): string;
15
+ get dotEnvTemplate(): string;
16
+ get indexTemplate(): string;
17
+ }
18
+ //# sourceMappingURL=bootstrap-path-manager.d.ts.map
@@ -0,0 +1,48 @@
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 path_1 = __importDefault(require("path"));
7
+ class BootstrapPathManager {
8
+ constructor(tmp, home, basePath) {
9
+ this._tmp = tmp;
10
+ this._home = home;
11
+ this.basePath = basePath ?? '.';
12
+ }
13
+ get home() {
14
+ return this._home;
15
+ }
16
+ get tmp() {
17
+ return this._tmp;
18
+ }
19
+ get zip() {
20
+ return path_1.default.join(this.tmp, 'cloud-customizer.zip');
21
+ }
22
+ get extracted() {
23
+ return path_1.default.join(this.tmp, 'cloud-customizer-main');
24
+ }
25
+ get cloudCustomizer() {
26
+ return path_1.default.join(this.basePath, 'cloud-customizer');
27
+ }
28
+ get typings() {
29
+ return path_1.default.join(this.basePath, 'typings.d.ts');
30
+ }
31
+ get typingsDuringBootstrap() {
32
+ return path_1.default.join(this.cloudCustomizer, 'typings.d.ts');
33
+ }
34
+ get index() {
35
+ return path_1.default.join(this.cloudCustomizer, 'src', 'index.ts');
36
+ }
37
+ get env() {
38
+ return path_1.default.join(this.cloudCustomizer, '.env');
39
+ }
40
+ get dotEnvTemplate() {
41
+ return path_1.default.join(__dirname, '..', 'templates', 'env.txt');
42
+ }
43
+ get indexTemplate() {
44
+ return path_1.default.join(__dirname, '..', 'templates', 'index.txt');
45
+ }
46
+ }
47
+ exports.default = BootstrapPathManager;
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLXBhdGgtbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXJ2aWNlcy9ib290c3RyYXAtcGF0aC1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsZ0RBQXdCO0FBRXhCLE1BQXFCLG9CQUFvQjtJQUt2QyxZQUFZLEdBQVcsRUFBRSxJQUFZLEVBQUUsUUFBaUI7UUFDdEQsSUFBSSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDaEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksR0FBRyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxHQUFHO1FBQ0wsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQ2xELENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsS0FBSyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQzlELENBQUM7Q0FDRjtBQXRERCx1Q0FzREMifQ==
@@ -0,0 +1,4 @@
1
+ import BootstrapPathManager from './bootstrap-path-manager';
2
+ import HttpServer from './http-server';
3
+ export default function bootstrap(envSecret: string, httpServer: HttpServer, paths: BootstrapPathManager): Promise<void>;
4
+ //# sourceMappingURL=bootstrap.d.ts.map
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const adm_zip_1 = __importDefault(require("adm-zip"));
30
+ const fs = __importStar(require("fs"));
31
+ const fsP = __importStar(require("fs/promises"));
32
+ const http_server_1 = __importDefault(require("./http-server"));
33
+ const update_typings_1 = require("./update-typings");
34
+ const errors_1 = require("../errors");
35
+ async function tryToClearBootstrap(paths) {
36
+ try {
37
+ await Promise.all([
38
+ fsP.rm(paths.zip, { force: true }),
39
+ fsP.rm(paths.extracted, { force: true, recursive: true }),
40
+ fsP.rm(paths.cloudCustomizer, { force: false, recursive: true }),
41
+ ]);
42
+ }
43
+ catch (e) {
44
+ return `\nPlease remove cloud-customizer folder and re-run bootstrap command.`;
45
+ }
46
+ }
47
+ async function generateDotEnv(envSecret, paths) {
48
+ const envTemplate = await fsP.readFile(paths.dotEnvTemplate, 'utf-8');
49
+ let replaced = envTemplate.replace('<FOREST_ENV_SECRET_TO_REPLACE>', envSecret);
50
+ replaced = replaced.replace('<TOKEN_PATH_TO_REPLACE>', paths.home);
51
+ await fsP.writeFile(paths.env, replaced);
52
+ }
53
+ async function bootstrap(envSecret, httpServer, paths) {
54
+ if (fs.existsSync(paths.cloudCustomizer)) {
55
+ throw new errors_1.BusinessError('You have already a cloud-customizer folder');
56
+ }
57
+ try {
58
+ await http_server_1.default.downloadCloudCustomizerTemplate(paths.zip);
59
+ const zip = new adm_zip_1.default(paths.zip);
60
+ zip.extractAllTo(paths.tmp, false);
61
+ await Promise.all([
62
+ fsP.rename(paths.extracted, paths.cloudCustomizer),
63
+ fsP.rm(paths.zip, { force: true }),
64
+ ]);
65
+ // create the .env file if it does not exist
66
+ // we do not overwrite it because it may contain sensitive data
67
+ if (!fs.existsSync(paths.env))
68
+ await generateDotEnv(envSecret, paths);
69
+ await fsP.writeFile(paths.index, await fsP.readFile(paths.indexTemplate));
70
+ const introspection = await httpServer.getIntrospection();
71
+ await (0, update_typings_1.updateTypings)(introspection, paths);
72
+ }
73
+ catch (error) {
74
+ const potentialErrorMessage = await tryToClearBootstrap(paths);
75
+ throw new errors_1.BusinessError(`Bootstrap failed: ${error.message}.${potentialErrorMessage || ''}`);
76
+ }
77
+ }
78
+ exports.default = bootstrap;
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9vdHN0cmFwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Jvb3RzdHJhcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsc0RBQTZCO0FBQzdCLHVDQUF5QjtBQUN6QixpREFBbUM7QUFHbkMsZ0VBQXVDO0FBQ3ZDLHFEQUFpRDtBQUNqRCxzQ0FBMEM7QUFFMUMsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEtBQTJCO0lBQzVELElBQUk7UUFDRixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDaEIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ2xDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1lBQ3pELEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ2pFLENBQUMsQ0FBQztLQUNKO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLHVFQUF1RSxDQUFDO0tBQ2hGO0FBQ0gsQ0FBQztBQUVELEtBQUssVUFBVSxjQUFjLENBQUMsU0FBaUIsRUFBRSxLQUEyQjtJQUMxRSxNQUFNLFdBQVcsR0FBRyxNQUFNLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN0RSxJQUFJLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLGdDQUFnQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ2hGLFFBQVEsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuRSxNQUFNLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRWMsS0FBSyxVQUFVLFNBQVMsQ0FDckMsU0FBaUIsRUFDakIsVUFBc0IsRUFDdEIsS0FBMkI7SUFFM0IsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsRUFBRTtRQUN4QyxNQUFNLElBQUksc0JBQWEsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0tBQ3ZFO0lBRUQsSUFBSTtRQUNGLE1BQU0scUJBQVUsQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFNUQsTUFBTSxHQUFHLEdBQVcsSUFBSSxpQkFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxQyxHQUFHLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2hCLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDO1lBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNuQyxDQUFDLENBQUM7UUFFSCw0Q0FBNEM7UUFDNUMsK0RBQStEO1FBQy9ELElBQUksQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUM7WUFBRSxNQUFNLGNBQWMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDdEUsTUFBTSxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTFFLE1BQU0sYUFBYSxHQUFHLE1BQU0sVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFFMUQsTUFBTSxJQUFBLDhCQUFhLEVBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQzNDO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxNQUFNLHFCQUFxQixHQUFHLE1BQU0sbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDL0QsTUFBTSxJQUFJLHNCQUFhLENBQUMscUJBQXFCLEtBQUssQ0FBQyxPQUFPLElBQUkscUJBQXFCLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztLQUM5RjtBQUNILENBQUM7QUEvQkQsNEJBK0JDIn0=
@@ -0,0 +1,7 @@
1
+ export default class DistPathManager {
2
+ private readonly cloudCustomizerPath;
3
+ constructor(cloudCustomizerPath?: string);
4
+ get zip(): string;
5
+ get distCodeCustomizations(): string;
6
+ }
7
+ //# sourceMappingURL=dist-path-manager.d.ts.map