UNPKG

@forestadmin/forest-cloud

Version:

Utility to bootstrap and publish forest admin cloud projects customization

161 lines 11.7 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 }); const axios = __importStar(require("axios")); const fs = __importStar(require("fs")); const latest_version_1 = __importDefault(require("./latest-version")); const errors_1 = require("../errors"); async function handledAxios(axiosRequestConfig, { errorMessage }) { try { return (await axios.default(axiosRequestConfig)).data; } catch (e) { const error = e; let details = ''; if (error instanceof axios.AxiosError) { const errors = error.response?.data?.errors; details = errors?.map(innerError => `🚨 ${innerError.detail}`).join(`\n`); } const loginAgainMessage = " You can try to login again by running 'npx @forestadmin/forest-cloud@latest login'"; if (error.code === 'ERR_INVALID_CHAR' && error?.message.includes('"Authorization"')) { throw new errors_1.BusinessError(`${error.message}\nYour authentication token seems incorrect.${loginAgainMessage}`); } if (e.response?.status === 400) { throw new errors_1.ValidationError(details); } else { const baseMessage = `${errorMessage}: ${error.message}\n${details}`.trim(); if (e.response?.status === 401 || e.response?.status === 403) { throw new errors_1.BusinessError(`${baseMessage}\n${loginAgainMessage}`); } throw new errors_1.BusinessError(baseMessage); } } } class HttpServer { constructor(serverUrl, secretKey, bearerToken) { this.serverUrl = serverUrl; this.headers = { 'forest-secret-key': secretKey, Authorization: `Bearer ${bearerToken}`, 'Content-Type': 'application/json', }; } static async downloadCloudCustomizerTemplate(destination) { const response = await axios.default({ url: 'https://github.com/ForestAdmin/cloud-customizer/archive/main.zip', method: 'get', responseType: 'stream', }); const stream = fs.createWriteStream(destination); response.data.pipe(stream); await new Promise((resolve, reject) => { stream.on('finish', resolve); stream.on('error', reject); }); } async getDatasources() { return handledAxios({ url: `${this.serverUrl}/api/full-hosted-agent/forest-cloud/datasources`, method: 'GET', headers: this.headers, }, { errorMessage: 'Failed to retrieve database schema from Forest Admin server', }); } async postUploadRequest(contentLength) { return handledAxios({ url: `${this.serverUrl}/api/full-hosted-agent/upload-request`, method: 'POST', headers: this.headers, data: { contentLength }, }, { errorMessage: 'Failed to request upload url from Forest Admin server', }); } async postPublish() { return handledAxios({ url: `${this.serverUrl}/api/full-hosted-agent/publish`, method: 'POST', headers: this.headers, }, { errorMessage: 'Failed to request publication of code customization', }); } async getLastPublishedCodeDetails() { return handledAxios({ url: `${this.serverUrl}/api/full-hosted-agent/last-published-code-details`, method: 'GET', headers: this.headers, }, { errorMessage: `Failed to retrieve last published code details` }); } async getLogs({ limit, from, to, orderByRecentFirst, }) { const base = `${this.serverUrl}/api/full-hosted-agent/logs`; return (await handledAxios({ url: `${base}?limit=${limit}&from=${from}&to=${to}&order-by-recent-first=${orderByRecentFirst}`, method: 'GET', headers: this.headers, }, { errorMessage: `Failed to retrieve logs` })).logs; } static async getLatestVersion(packageName) { return (0, latest_version_1.default)(packageName); } async getOrCreateNewDevelopmentEnvironment() { try { return await handledAxios({ url: `${this.serverUrl}/api/full-hosted-agent/development-environment-for-user`, method: 'POST', headers: this.headers, data: { endpoint: `http://localhost:${process.env.PORT ?? 3351}` }, }, { errorMessage: 'Failed to create development environment for the current user', }); } catch (_e) { return await handledAxios({ url: `${this.serverUrl}/api/full-hosted-agent/development-environment-for-user`, method: 'GET', headers: this.headers, }, { errorMessage: 'Failed to get development environment for the current user', }); } } } exports.default = HttpServer; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cC1zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2VydmljZXMvaHR0cC1zZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSw2Q0FBK0I7QUFDL0IsdUNBQXlCO0FBRXpCLHNFQUE2QztBQUM3QyxzQ0FBMkQ7QUFFM0QsS0FBSyxVQUFVLFlBQVksQ0FDekIsa0JBQTRDLEVBQzVDLEVBQUUsWUFBWSxFQUE0QjtJQUUxQyxJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEQsQ0FBQztJQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDWCxNQUFNLEtBQUssR0FBNkIsQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUVqQixJQUFJLEtBQUssWUFBWSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEMsTUFBTSxNQUFNLEdBQXlDLEtBQUssQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQztZQUNsRixPQUFPLEdBQUcsTUFBTSxFQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVFLENBQUM7UUFFRCxNQUFNLGlCQUFpQixHQUNyQixxRkFBcUYsQ0FBQztRQUV4RixJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssa0JBQWtCLElBQUksS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsRUFBRSxDQUFDO1lBQ3BGLE1BQU0sSUFBSSxzQkFBYSxDQUNyQixHQUFHLEtBQUssQ0FBQyxPQUFPLCtDQUErQyxpQkFBaUIsRUFBRSxDQUNuRixDQUFDO1FB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