alwaysai
Version:
The alwaysAI command-line interface (CLI)
87 lines (76 loc) • 2.85 kB
text/typescript
import { CliTerseError } from '@alwaysai/alwayscli';
import { SystemDomainName } from '@alwaysai/cloud-api';
import * as chalk from 'chalk';
import { PLEASE_REPORT_THIS_ERROR_MESSAGE } from '../../constants';
import { getSystemId, CliAuthenticationClient } from '../../infrastructure';
import { Spinner, logger } from '../../util';
export async function alwaysaiUserLoginYesComponent(props: {
alwaysaiUserEmail: string;
alwaysaiUserPassword: string;
}) {
const { alwaysaiUserEmail, alwaysaiUserPassword } = props;
const boldEmail = chalk.bold(alwaysaiUserEmail);
const webAuthUrl = chalk.bold(
`https://dashboard.${SystemDomainName(getSystemId())}/auth`
);
const spinner = Spinner(`Log in ${props.alwaysaiUserEmail}`);
try {
const { authenticationState } = await CliAuthenticationClient().signIn(
alwaysaiUserEmail,
alwaysaiUserPassword
);
switch (authenticationState) {
case 'AUTHENTICATED': {
spinner.succeed();
break;
}
case 'PASSWORD_RESET_REQUIRED': {
throw new CliTerseError(
`Password reset required. Please visit the following URL in a web browser:\n\n ${webAuthUrl}`
);
}
case 'NON_TEMPORARY_PASSWORD_REQUIRED': {
throw new CliTerseError(
`First-time login must be done on the web. Please complete the authentication process first in a web browser by visiting the following URL:\n\n ${webAuthUrl}\n\n`
);
}
case 'USER_CONFIRMATION_REQUIRED': {
throw new CliTerseError(
'Account not confirmed. Please check your inbox and follow instructions to confirm your account'
);
}
case 'INVALID_PASSWORD':
case 'INCORRECT_PASSWORD': {
throw new CliTerseError(
`Incorrect password for ${boldEmail}. Please try again or visit the following URL to reset your password:\n\n ${webAuthUrl}`
);
}
case 'USER_NOT_FOUND': {
throw new CliTerseError(`User not found for email ${boldEmail}`);
}
case 'CUSTOM_CHALLENGE':
case 'MFA_REQUIRED':
case 'MFA_SETUP':
case 'TOTP_REQUIRED':
case 'SELECT_MFA_TYPE': {
logger.error(
`Authentication client responded with authentication state "${authenticationState}".`
);
throw new CliTerseError(
`Authentication client responded with authentication state "${authenticationState}". ${PLEASE_REPORT_THIS_ERROR_MESSAGE}`
);
}
default: {
logger.error(
`Unexpected authentication state "${authenticationState}".`
);
throw new CliTerseError(
`Unexpected authentication state "${authenticationState}". ${PLEASE_REPORT_THIS_ERROR_MESSAGE}`
);
}
}
} catch (exception) {
spinner.fail();
throw exception;
}
}