UNPKG

vtex

Version:

The platform for e-commerce apps

67 lines (66 loc) 3.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const chalk_1 = tslib_1.__importDefault(require("chalk")); const Registry_1 = require("../../api/clients/IOClients/infra/Registry"); const locator_1 = require("../../api/locator"); const logger_1 = tslib_1.__importDefault(require("../../api/logger")); const manifest_1 = require("../../api/manifest"); const prompts_1 = require("../../api/modules/prompts"); const SessionManager_1 = require("../../api/session/SessionManager"); const switch_1 = require("../auth/switch"); const switchToVendorMessage = (vendor) => { return `You are trying to deploy this app in an account that differs from the indicated vendor. Do you want to deploy in account ${chalk_1.default.blue(vendor)}?`; }; const promptDeploy = (app) => prompts_1.promptConfirm(`Are you sure you want to deploy app ${app}`); const deployRelease = async (app) => { const { vendor, name, version } = locator_1.parseLocator(app); const session = SessionManager_1.SessionManager.getSingleton(); if (vendor !== session.account) { const canSwitchToVendor = await prompts_1.promptConfirm(switchToVendorMessage(vendor)); if (!canSwitchToVendor) { return false; } await switch_1.switchAccount(vendor, {}); } const context = { account: vendor, workspace: 'master', authToken: session.token }; const registry = Registry_1.createRegistryClient(context); await registry.validateApp(`${vendor}.${name}`, version); return true; }; const prepareDeploy = async (app, originalAccount, originalWorkspace) => { var _a; app = manifest_1.ManifestValidator.validateApp(app); try { logger_1.default.debug('Starting to deploy app:', app); const deployed = await deployRelease(app); if (deployed) { logger_1.default.info('Successfully deployed', app); } } catch (e) { const data = (_a = e.response) === null || _a === void 0 ? void 0 : _a.data; const code = data === null || data === void 0 ? void 0 : data.code; if (code === 'app_is_not_rc') { logger_1.default.error(`App ${app} was already deployed.`); } else if (data === null || data === void 0 ? void 0 : data.message) { logger_1.default.error(data.message); } else { await switch_1.returnToPreviousAccount({ previousAccount: originalAccount, previousWorkspace: originalWorkspace }); throw e; } } await switch_1.returnToPreviousAccount({ previousAccount: originalAccount, previousWorkspace: originalWorkspace }); }; exports.default = async (optionalApp, options) => { const preConfirm = options.y || options.yes; const { account: originalAccount, workspace: originalWorkspace } = SessionManager_1.SessionManager.getSingleton(); const app = optionalApp || (await manifest_1.ManifestEditor.getManifestEditor()).appLocator; if (!preConfirm && !(await promptDeploy(app))) { return; } logger_1.default.debug(`Deploying app ${app}`); return prepareDeploy(app, originalAccount, originalWorkspace); };