@forestadmin/forest-cloud
Version:
Utility to bootstrap and publish forest admin cloud projects customization
116 lines • 9.55 kB
JavaScript
;
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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