UNPKG

@forestadmin/forest-cloud

Version:

Utility to bootstrap and publish forest admin cloud projects customization

116 lines 9.55 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateEnvironmentVariables = exports.validateMissingForestEnvSecret = exports.validateSubscriptionUrl = exports.validateServerUrl = exports.getEnvironmentVariables = exports.defaultEnvs = void 0; const fs = __importStar(require("fs")); const promises_1 = require("node:fs/promises"); const node_os_1 = require("node:os"); const path_1 = __importDefault(require("path")); const errors_1 = require("../errors"); const getTokenFromToolbelt = async (baseTokenPath) => { const tokenPath = path_1.default.join(baseTokenPath, '.forest.d', '.forestrc'); if (fs.existsSync(tokenPath)) return (0, promises_1.readFile)(tokenPath, 'utf8'); return null; }; exports.defaultEnvs = Object.freeze({ FOREST_SERVER_URL: 'https://api.forestadmin.com', FOREST_SUBSCRIPTION_URL: 'wss://api.forestadmin.com/subscriptions', NODE_TLS_REJECT_UNAUTHORIZED: '1', TOKEN_PATH: (0, node_os_1.homedir)(), }); async function getEnvironmentVariables() { const tokenPath = process.env.TOKEN_PATH || exports.defaultEnvs.TOKEN_PATH; const FOREST_SERVER_URL = process.env.FOREST_SERVER_URL || process.env.FOREST_URL || exports.defaultEnvs.FOREST_SERVER_URL; let FOREST_SUBSCRIPTION_URL; if (FOREST_SERVER_URL !== exports.defaultEnvs.FOREST_SERVER_URL && !process.env.FOREST_SUBSCRIPTION_URL) { // for lumberjacks: if FOREST_SERVER_URL is not default, we can guess the subscription url FOREST_SUBSCRIPTION_URL = `${FOREST_SERVER_URL.replace(/^https?:\/\//, 'wss://').replace(/\/$/, '')}/subscriptions`; } else { FOREST_SUBSCRIPTION_URL = process.env.FOREST_SUBSCRIPTION_URL || exports.defaultEnvs.FOREST_SUBSCRIPTION_URL; } return { FOREST_ENV_SECRET: process.env.FOREST_ENV_SECRET, TOKEN_PATH: tokenPath, FOREST_SERVER_URL, FOREST_SUBSCRIPTION_URL, FOREST_AUTH_TOKEN: process.env.FOREST_AUTH_TOKEN || (await getTokenFromToolbelt(tokenPath)), NODE_TLS_REJECT_UNAUTHORIZED: process.env.NODE_TLS_REJECT_UNAUTHORIZED || exports.defaultEnvs.NODE_TLS_REJECT_UNAUTHORIZED, }; } exports.getEnvironmentVariables = getEnvironmentVariables; function validateUrl(url, variableName, protocols) { if (!url) { throw new errors_1.BusinessError(`Missing ${variableName}. Please check your .env file.`); } let givenUrl; try { givenUrl = new URL(url); } catch (err) { throw new errors_1.BusinessError(`${variableName} is invalid. Please check your .env file.\n${err.message}`); } if (!protocols.includes(givenUrl.protocol)) { throw new errors_1.BusinessError(`${variableName} is invalid, it must start with '${protocols .map(protocol => `${protocol}//`) .join("' or '")}'. Please check your .env file.`); } } function validateServerUrl(serverUrl) { validateUrl(serverUrl, 'FOREST_SERVER_URL', ['http:', 'https:']); } exports.validateServerUrl = validateServerUrl; function validateSubscriptionUrl(subscriptionUrl) { validateUrl(subscriptionUrl, 'FOREST_SUBSCRIPTION_URL', ['wss:']); } exports.validateSubscriptionUrl = validateSubscriptionUrl; function validateMissingForestEnvSecret(forestEnvSecret, fromCommand) { if (!forestEnvSecret) { throw new errors_1.BusinessError('Your forest env secret is missing.' + ` Please provide it with the \`${fromCommand} --env-secret <your-secret-key>\` command or` + ' add it to your .env file or in environment variables.'); } } exports.validateMissingForestEnvSecret = validateMissingForestEnvSecret; function validateEnvironmentVariables(env) { if (!env.FOREST_ENV_SECRET) { throw new errors_1.BusinessError('Missing FOREST_ENV_SECRET. Please check your .env file.'); } if (typeof env.FOREST_ENV_SECRET !== 'string' || !/^[0-9a-f]{64}$/.test(env.FOREST_ENV_SECRET)) { throw new errors_1.BusinessError('FOREST_ENV_SECRET is invalid. Please check your .env file.\n\tYou can retrieve its value from environment settings on Forest Admin.'); } if (!env.FOREST_AUTH_TOKEN) { throw new errors_1.BusinessError('Missing authentication token. Your TOKEN_PATH is probably wrong on .env file.'); } validateServerUrl(env.FOREST_SERVER_URL); validateSubscriptionUrl(env.FOREST_SUBSCRIPTION_URL); } exports.validateEnvironmentVariables = validateEnvironmentVariables; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtdmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Vudmlyb25tZW50LXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwrQ0FBNEM7QUFDNUMscUNBQWtDO0FBQ2xDLGdEQUF3QjtBQUV4QixzQ0FBMEM7QUFHMUMsTUFBTSxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsYUFBcUIsRUFBMEIsRUFBRTtJQUNuRixNQUFNLFNBQVMsR0FBRyxjQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFckUsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQztRQUFFLE9BQU8sSUFBQSxtQkFBUSxFQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUVqRSxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVXLFFBQUEsV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDdkMsaUJBQWlCLEVBQUUsNkJBQTZCO0lBQ2hELHVCQUF1QixFQUFFLHlDQUF5QztJQUNsRSw0QkFBNEIsRUFBRSxHQUFHO0lBQ2pDLFVBQVUsRUFBRSxJQUFBLGlCQUFPLEdBQUU7Q0FDdEIsQ0FBQyxDQUFDO0FBRUksS0FBSyxVQUFVLHVCQUF1QjtJQUMzQyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxtQkFBVyxDQUFDLFVBQVUsQ0FBQztJQUVuRSxNQUFNLGlCQUFpQixHQUNyQixPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLG1CQUFXLENBQUMsaUJBQWlCLENBQUM7SUFFM0YsSUFBSSx1QkFBdUIsQ0FBQztJQUU1QixJQUFJLGlCQUFpQixLQUFL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