@teqed/interact-ibmi
Version:
Menus for interacting with IBMi AS400 using node-odbc.
74 lines (73 loc) • 3.1 kB
JavaScript
/* This is the login module.
It asks for the user's name and password, which is used for logging in to the IBMi AS400. */
import chalk from 'chalk';
import ora from 'ora';
import getJobInfo from '../../util/odbc/get-job-info.js';
import { odbcLogin } from '../../util/odbc/odbc-util.js';
// import sequelizeLogin from '../../util/sequelize/connection.js';
import { genericGetCommand, genericPasswordMenu, genericPressEnterPrompt, } from '../generic/generic.js';
export default async () => {
const login = async function () {
console.clear();
console.log(chalk.bgBlue(
// eslint-disable-next-line max-len
`\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0Login IBMi\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0\u00A0`));
const loginSys = await genericGetCommand({
allowEmpty: false,
clearPromptOnDone: false,
default: `PUB400.COM`,
message: `System hostname:`,
});
const loginId = await genericGetCommand({
allowEmpty: false,
clearPromptOnDone: false,
message: `User ID:`,
});
const loginPw = await genericPasswordMenu({
clearPromptOnDone: false,
mask: `*`,
message: `Password:`,
});
const odbcLoginPromise = odbcLogin(loginId, loginPw, loginSys);
// const sequelizeLoginPromise = sequelizeLogin(loginId, loginPw, loginSys);
const spinner = ora(`Logging in to ODBC...`).start();
try {
await odbcLoginPromise;
spinner.succeed(`Logged in to ODBC!`);
void getJobInfo();
}
catch (error) {
// Play a sound.
process.stdout.write(`\u0007`);
try {
const nodeOdbcError = error;
if (nodeOdbcError.odbcErrors[0].code === 8_002) {
spinner.fail(chalk.red(`Login failed! Please check your username and password and try again.`));
await genericPressEnterPrompt();
return await login();
}
spinner.fail(chalk.red(`Login failed! Reason given:
${nodeOdbcError.odbcErrors[0].message}`));
await genericPressEnterPrompt();
return await login();
}
catch (error_) {
void error_;
// throw new Error(`Login failed!`, { cause: error_ as Error });
}
spinner.fail(`Login failed!`);
// throw new Error(`Login failed!`, { cause: error as Error });
}
/* const spinner2 = ora(`Logging in to Sequelize...`).start();
try {
await sequelizeLoginPromise;
spinner2.succeed(`Logged in to Sequelize!`);
// eslint-disable-next-line @typescript-eslint/no-implicit-any-catch
} catch (error) {
spinner2.fail(`Login failed!`);
throw new Error(`Login failed!`, { cause: error as Error });
} */
return { loginId, loginPw, loginSys };
};
return await login();
};