serverless
Version:
Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more
78 lines (66 loc) • 2.25 kB
JavaScript
;
const _ = require('lodash');
const resolveAuthMode = require('@serverless/utils/auth/resolve-mode');
const promptWithHistory = require('@serverless/utils/inquirer/prompt-with-history');
const login = require('../../commands/login/console');
const { showOnboardingWelcome } = require('./utils');
const loginOrRegisterQuestion = async (context) => {
let message;
if (context.initial.isInServiceContext) {
message = 'Press [Enter] to create a free Serverless Console account';
} else {
message = 'Do you want to login/register to Serverless Console?';
}
return promptWithHistory({
message,
type: 'confirm',
name: 'shouldLoginOrRegister',
stepHistory: context.stepHistory,
});
};
const steps = {
loginOrRegister: async (context) => {
const shouldLoginOrRegister =
context.options.org || context.configuration.org || (await loginOrRegisterQuestion(context));
if (shouldLoginOrRegister) await login(context);
},
};
module.exports = {
async isApplicable(context) {
const { isConsole, configuration, serviceDir } = context;
if (!isConsole) {
context.inapplicabilityReasonCode = 'NON_CONSOLE_CONTEXT';
return false;
}
if (!serviceDir) {
context.inapplicabilityReasonCode = 'NOT_IN_SERVICE_DIRECTORY';
return false;
}
if (await resolveAuthMode()) {
context.inapplicabilityReasonCode = 'ALREADY_LOGGED_IN';
return false;
}
if (
_.get(configuration, 'provider') !== 'aws' &&
_.get(configuration, 'provider.name') !== 'aws'
) {
context.inapplicabilityReasonCode = 'NON_AWS_PROVIDER';
return false;
}
const runtime = _.get(configuration.provider, 'runtime') || 'nodejs14.x';
if (!runtime.startsWith('nodejs')) {
context.inapplicabilityReasonCode = 'UNSUPPORTED_RUNTIME';
return false;
}
return true;
},
async run(context) {
const isOrgProvided = context.options.org || context.configuration.org;
if (context.initial.isInServiceContext && !context.initial.isConsoleEnabled && !isOrgProvided) {
showOnboardingWelcome(context);
}
return steps.loginOrRegister(context);
},
steps,
configuredQuestions: ['shouldLoginOrRegister'],
};