cnpmcore
Version:
Private NPM Registry for Enterprise
59 lines • 5.53 kB
JavaScript
import { PackageSyncerService } from "../../core/service/PackageSyncerService.js";
const DEFAULT_SERVER_ERROR_STATUS = 500;
export async function ErrorHandler(ctx, next) {
try {
await next();
}
catch (err) {
if (err.name === 'PackageNotFoundError') {
if (err.syncPackage) {
// create sync task
const syncPackage = err.syncPackage;
const packageSyncerService = await ctx.getEggObject(PackageSyncerService);
const task = await packageSyncerService.createTask(syncPackage.fullname, {
authorIp: ctx.ip,
authorId: ctx.userId,
tips: `Sync cause by "${syncPackage.fullname}" missing, request URL "${ctx.href}"`,
});
ctx.logger.info('[middleware:ErrorHandler][syncPackage] create sync package "%s" task %s', syncPackage.fullname, task.taskId);
}
if (err.redirectToSourceRegistry) {
// redirect to sourceRegistry
ctx.redirect(`${err.redirectToSourceRegistry}${ctx.url}`);
return;
}
}
else if (err.name === 'ControllerRedirectError' && err.location) {
ctx.redirect(err.location);
return;
}
// http status, default is DEFAULT_SERVER_ERROR_STATUS
ctx.status = typeof err.status === 'number' && err.status >= 200 ? err.status : DEFAULT_SERVER_ERROR_STATUS;
// don't log NotImplementedError
if (ctx.status >= DEFAULT_SERVER_ERROR_STATUS && err.name !== 'NotImplementedError') {
ctx.logger.error(err);
}
let message = err.message;
// convert ctx.tValidate error
if (err.name === 'UnprocessableEntityError' && err.currentSchema && err.errors[0]?.message) {
// {
// instancePath: '/password',
// schemaPath: '#/properties/password/minLength',
// keyword: 'minLength',
// message: 'must NOT have fewer than 8 characters'
// }
const item = err.errors[0];
if (item.instancePath) {
message = `${item.instancePath.slice(1)}: ${item.message}`;
}
else {
message = item.message;
}
}
// error body format https://github.com/npm/npm-registry-fetch/blob/main/errors.js#L45
ctx.body = {
error: err.code ? `[${String(err.code).toUpperCase()}] ${message}` : message,
};
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYXBwL3BvcnQvbWlkZGxld2FyZS9FcnJvckhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsTUFBTSwyQkFBMkIsR0FBRyxHQUFHLENBQUM7QUFFeEMsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsR0FBWSxFQUFFLElBQVU7SUFDekQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLHNCQUFzQixFQUFFLENBQUM7WUFDeEMsSUFBSSxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3BCLG1CQUFtQjtnQkFDbkIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQztnQkFDcEMsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDMUUsTUFBTSxJQUFJLEdBQUcsTUFBTSxvQkFBb0IsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRTtvQkFDdkUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQWdCO29CQUM5QixJQUFJLEVBQUUsa0JBQWtCLFdBQVcsQ0FBQyxRQUFRLDJCQUEyQixHQUFHLENBQUMsSUFBSSxHQUFHO2lCQUNuRixDQUFDLENBQUM7Z0JBQ0gsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2IseUVBQXlFLEVBQ3pFLFdBQVcsQ0FBQyxRQUFRLEVBQ3BCLElBQUksQ0FBQyxNQUFNLENBQ1osQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO2dCQUNqQyw2QkFBNkI7Z0JBQzdCLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLENBQUMsd0JBQXdCLEdBQUcsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7Z0JBQzFELE9BQU87WUFDVCxDQUFDO1FBQ0gsQ0FBQzthQUFNLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyx5QkFBeUIsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFFRCxzREFBc0Q7UUFDdEQsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLEdBQUcsQ0FBQyxNQUFNLEtBQUssUUFBUSxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQztRQUM1RyxnQ0FBZ0M7UUFDaEMsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLDJCQUEyQixJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUsscUJBQXFCLEVBQUUsQ0FBQztZQUNwRixHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QixDQUFDO1FBQ0QsSUFBSSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUMxQiw4QkFBOEI7UUFDOUIsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLDBCQUEwQixJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUMzRixJQUFJO1lBQ0osK0JBQStCO1lBQy9CLG1EQUFtRDtZQUNuRCwwQkFBMEI7WUFDMUIscURBQXFEO1lBQ3JELElBQUk7WUFDSixNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUN0QixPQUFPLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDN0QsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBQ0Qsc0ZBQXNGO1FBQ3RGLEdBQUcsQ0FBQyxJQUFJLEdBQUc7WUFDVCxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxLQUFLLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPO1NBQzdFLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQyJ9