UNPKG

@forestadmin/forest-cloud

Version:

Utility to bootstrap and publish forest admin cloud projects customization

126 lines 9.86 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 () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __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.defaultEnvs = void 0; exports.getEnvironmentVariables = getEnvironmentVariables; exports.validateServerUrl = validateServerUrl; exports.validateSubscriptionUrl = validateSubscriptionUrl; exports.validateMissingForestEnvSecret = validateMissingForestEnvSecret; exports.validateEnvironmentVariables = validateEnvironmentVariables; 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, }; } 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:']); } function validateSubscriptionUrl(subscriptionUrl) { validateUrl(subscriptionUrl, 'FOREST_SUBSCRIPTION_URL', ['wss:']); } 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.'); } } 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); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtdmFyaWFibGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NlcnZpY2VzL2Vudmlyb25tZW50LXZhcmlhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QkEsMERBNEJDO0FBMEJELDhDQUVDO0FBRUQsMERBRUM7QUFFRCx3RUFXQztBQUVELG9FQW1CQztBQXBIRCx1Q0FBeUI7QUFDekIsK0NBQTRDO0FBQzVDLHFDQUFrQztBQUNsQyxnREFBd0I7QUFFeEIsc0NBQTBDO0FBRTFDLE1BQU0sb0JBQW9CLEdBQUcsS0FBSyxFQUFFLGFBQXFCLEVBQTBCLEVBQUU7SUFDbkYsTUFBTSxTQUFTLEdBQUcsY0FBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRXJFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFBRSxPQUFPLElBQUEsbUJBQVEsRUFBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFakUsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUM7QUFFVyxRQUFBLFdBQVcsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3ZDLGlCQUFpQixFQUFFLDZCQUE2QjtJQUNoRCx1QkFBdUIsRUFBRSx5Q0FBeUM7SUFDbEUsNEJBQTRCLEVBQUUsR0FBRztJQUNqQyxVQUFVLEVBQUUsSUFBQSxpQkFBTyxHQUFFO0NBQ3RCLENBQUMsQ0FBQztBQUVJLEtBQUssVUFBVSx1QkFBdUI7SUFDM0MsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxVQUFVLElBQUksbUJBQVcsQ0FBQyxVQUFVLENBQUM7SUFFbkUsTUFBTSxpQkFBaUIsR0FDckIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFB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