UNPKG

vtex

Version:

The platform for e-commerce apps

104 lines (103 loc) 4.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const tslib_1 = require("tslib"); const toolbelt_message_renderer_1 = require("@vtex/toolbelt-message-renderer"); const chalk_1 = tslib_1.__importDefault(require("chalk")); const enquirer_1 = tslib_1.__importDefault(require("enquirer")); const ToolbeltConfig_1 = require("../../api/clients/IOClients/apps/ToolbeltConfig"); const ErrorKinds_1 = require("../../api/error/ErrorKinds"); const ErrorReport_1 = require("../../api/error/ErrorReport"); const SessionManager_1 = require("../../api/session/SessionManager"); const logger_1 = tslib_1.__importDefault(require("../../api/logger")); const prompts_1 = require("../../api/modules/prompts"); const create_1 = require("../../api/modules/workspace/create"); const welcome_1 = tslib_1.__importDefault(require("./welcome")); const promptUsePreviousLogin = (account, userLogged, workspace) => { const details = `${chalk_1.default.green(userLogged)} @ ${chalk_1.default.green(account)} / ${chalk_1.default.green(workspace)}`; return prompts_1.promptConfirm(`Do you want to use the previous login details? (${details})`); }; const promptUsePreviousAccount = (previousAccount) => { return prompts_1.promptConfirm(`Use previous account? (${chalk_1.default.blue(previousAccount)})`); }; const promptDesiredAccount = async () => { // @ts-ignore const { account } = await enquirer_1.default.prompt({ type: 'input', result: s => s.trim(), message: 'Account:', name: 'account', validate: s => /^\s*[\w-]+\s*$/.test(s) || 'Please enter a valid account.', }); return account; }; const notifyRelease = async () => { try { const messageRenderer = toolbelt_message_renderer_1.TemplateRenderer.getSingleton(); const configClient = ToolbeltConfig_1.ToolbeltConfig.createClient(); const { messages } = await configClient.getGlobalConfig(); console.log(messageRenderer.renderNode(messages.releaseNotes)); } catch (err) { ErrorReport_1.ErrorReport.createAndMaybeRegisterOnTelemetry({ kind: ErrorKinds_1.ErrorKinds.TOOLBELT_CONFIG_MESSAGES_ERROR, originalError: err, }).logErrorForUser({ coreLogLevelDefault: 'debug' }); } }; const getTargetLogin = async ({ account: optionAccount, workspace: optionWorkspace }) => { const { account: previousAccount, workspace: previousWorkspace, userLogged: previousUserLogged, } = SessionManager_1.SessionManager.getSingleton(); const targetWorkspace = optionWorkspace || 'master'; if (optionAccount) { return { targetAccount: optionAccount, targetWorkspace }; } if (!previousAccount) { return { targetAccount: await promptDesiredAccount(), targetWorkspace }; } if (previousWorkspace && !optionWorkspace) { if (await promptUsePreviousLogin(previousAccount, previousUserLogged, previousWorkspace)) { return { targetAccount: previousAccount, targetWorkspace: previousWorkspace }; } } else if (await promptUsePreviousAccount(previousAccount)) { return { targetAccount: previousAccount, targetWorkspace }; } return { targetAccount: await promptDesiredAccount(), targetWorkspace }; }; const shouldShowAnnouncement = (target, ops) => { if (ops.includes('all') || ops.includes(target)) { return true; } return false; }; exports.default = async (opts) => { const { allowUseCachedToken = false, postLoginOps = ['all'] } = opts; const { targetAccount, targetWorkspace } = await getTargetLogin(opts); const sessionManager = SessionManager_1.SessionManager.getSingleton(); try { await sessionManager.login(targetAccount, { targetWorkspace, useCachedToken: allowUseCachedToken, workspaceCreation: { promptCreation: true, creator: create_1.workspaceCreator, onError: create_1.handleErrorCreatingWorkspace, }, }); logger_1.default.debug('Login successful', sessionManager.userLogged, targetAccount, sessionManager.token, targetWorkspace); logger_1.default.info(`Logged into ${chalk_1.default.blue(sessionManager.account)} as ${chalk_1.default.green(sessionManager.userLogged)} at workspace ${chalk_1.default.green(sessionManager.workspace)}`); if (shouldShowAnnouncement('welcomeDashboard', postLoginOps)) { await welcome_1.default(); } if (shouldShowAnnouncement('releaseNotify', postLoginOps)) { await notifyRelease(); } } catch (err) { if (err.statusCode === 404) { logger_1.default.error('Account/Workspace not found'); } else { throw err; } } };