niledatabase
Version:
Command line interface for Nile databases
187 lines (186 loc) • 8.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.forceRelogin = forceRelogin;
exports.handleApiError = handleApiError;
exports.handleDatabaseError = handleDatabaseError;
exports.handleTenantError = handleTenantError;
exports.handleUserError = handleUserError;
const axios_1 = __importDefault(require("axios"));
const colors_1 = require("./colors");
const auth_1 = require("./auth");
const api_1 = require("./api");
/**
* Forces a re-login when authentication fails
*/
async function forceRelogin(configManager) {
configManager.removeToken(); // Clear the invalid token
console.log(colors_1.theme.warning('\nAuthentication failed. Forcing re-login...'));
const token = await auth_1.Auth.getAuthorizationToken(configManager);
if (token) {
if (configManager.getDebug()) {
console.log('Debug - Token received from auth flow');
}
configManager.setToken(token);
if (configManager.getDebug()) {
console.log('Debug - Token saved to config manager');
const savedToken = configManager.getToken();
console.log('Debug - Token retrieved from config manager:', savedToken ? 'present' : 'missing');
}
console.log(colors_1.theme.success('Successfully re-authenticated!'));
// Verify workspace access after re-authentication
const workspaceSlug = configManager.getWorkspace();
if (workspaceSlug) {
try {
const api = new api_1.NileAPI({
token,
controlPlaneUrl: configManager.getGlobalHost(),
debug: configManager.getDebug()
});
await api.getWorkspace(workspaceSlug);
}
catch (error) {
if (axios_1.default.isAxiosError(error) && error.response?.status === 403) {
console.error(colors_1.theme.error(`\nWorkspace '${workspaceSlug}' is not accessible with the new token.`));
console.error(colors_1.theme.warning('Please use a different workspace or contact your administrator.'));
process.exit(1);
}
throw error;
}
}
}
else {
console.error(colors_1.theme.error('Failed to re-authenticate'));
process.exit(1);
}
}
/**
* Handles API errors consistently across all commands
* @param error The error object
* @param operation Description of the operation that failed
* @param configManager The ConfigManager instance to use
*/
async function handleApiError(error, operation, configManager) {
if (axios_1.default.isAxiosError(error)) {
if (error.response?.status === 401 || error.message === 'Token is required') {
await forceRelogin(configManager);
// Retry the operation after re-login
const token = configManager.getToken();
if (!token) {
throw new Error('Failed to get token after re-login');
}
throw error;
}
else if (error.response?.data?.errors) {
console.error(colors_1.theme.error(`Failed to ${operation}:`), new Error(error.response.data.errors.join(', ')));
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`Failed to ${operation}:`), error);
}
else {
console.error(colors_1.theme.error(`Failed to ${operation}:`), error.message || 'Unknown error');
}
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`Failed to ${operation}:`), error);
}
else {
console.error(colors_1.theme.error(`Failed to ${operation}:`), error instanceof Error ? error.message : 'Unknown error');
}
process.exit(1);
}
/**
* Handles database-specific errors
* @param error The error object
* @param operation Description of the operation that failed
* @param configManager The ConfigManager instance to use
*/
async function handleDatabaseError(error, operation, configManager) {
if (axios_1.default.isAxiosError(error)) {
if (error.response?.status === 401 || error.message === 'Token is required') {
await forceRelogin(configManager);
// Retry the operation after re-login
throw error;
}
else if (error.response?.data?.errors) {
console.error(colors_1.theme.error(`Database operation failed: ${operation}`), new Error(error.response.data.errors.join(', ')));
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`Database operation failed: ${operation}`), error);
}
else {
console.error(colors_1.theme.error(`Database operation failed: ${operation}`), error.message || 'Unknown error');
}
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`Database operation failed: ${operation}`), error);
}
else {
console.error(colors_1.theme.error(`Database operation failed: ${operation}`), error instanceof Error ? error.message : 'Unknown error');
}
process.exit(1);
}
/**
* Handles tenant-specific errors
* @param error The error object
* @param operation Description of the operation that failed
* @param configManager The ConfigManager instance to use
*/
async function handleTenantError(error, operation, configManager) {
if (axios_1.default.isAxiosError(error)) {
if (error.response?.status === 401 || error.message === 'Token is required') {
await forceRelogin(configManager);
// Retry the operation after re-login
throw error;
}
else if (error.response?.data?.errors) {
console.error(colors_1.theme.error(`Tenant operation failed: ${operation}`), new Error(error.response.data.errors.join(', ')));
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`Tenant operation failed: ${operation}`), error);
}
else {
console.error(colors_1.theme.error(`Tenant operation failed: ${operation}`), error.message || 'Unknown error');
}
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`Tenant operation failed: ${operation}`), error);
}
else {
console.error(colors_1.theme.error(`Tenant operation failed: ${operation}`), error instanceof Error ? error.message : 'Unknown error');
}
process.exit(1);
}
/**
* Handles user-specific errors
* @param error The error object
* @param operation Description of the operation that failed
* @param configManager The ConfigManager instance to use
*/
async function handleUserError(error, operation, configManager) {
if (axios_1.default.isAxiosError(error)) {
if (error.response?.status === 401 || error.message === 'Token is required') {
await forceRelogin(configManager);
// Retry the operation after re-login
throw error;
}
else if (error.response?.data?.errors) {
console.error(colors_1.theme.error(`User operation failed: ${operation}`), new Error(error.response.data.errors.join(', ')));
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`User operation failed: ${operation}`), error);
}
else {
console.error(colors_1.theme.error(`User operation failed: ${operation}`), error.message || 'Unknown error');
}
}
else if (configManager.getDebug()) {
console.error(colors_1.theme.error(`User operation failed: ${operation}`), error);
}
else {
console.error(colors_1.theme.error(`User operation failed: ${operation}`), error instanceof Error ? error.message : 'Unknown error');
}
process.exit(1);
}