@forestadmin/forest-cloud
Version:
Utility to bootstrap and publish forest admin cloud projects customization
161 lines • 11.7 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 () {
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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