n8n
Version:
n8n Workflow Automation Tool
125 lines • 4.5 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isUniqueConstraintError = void 0;
exports.sendSuccessResponse = sendSuccessResponse;
exports.sendErrorResponse = sendErrorResponse;
exports.reportError = reportError;
exports.send = send;
const di_1 = require("@n8n/di");
const n8n_core_1 = require("n8n-core");
const n8n_workflow_1 = require("n8n-workflow");
const node_stream_1 = require("node:stream");
const picocolors_1 = __importDefault(require("picocolors"));
const constants_1 = require("./constants");
const response_error_1 = require("./errors/response-errors/abstract/response.error");
function sendSuccessResponse(res, data, raw, responseCode, responseHeader) {
if (responseCode !== undefined) {
res.status(responseCode);
}
if (responseHeader) {
res.header(responseHeader);
}
if (data instanceof node_stream_1.Readable) {
data.pipe(res);
return;
}
if (raw === true) {
if (typeof data === 'string') {
res.send(data);
}
else {
res.json(data);
}
}
else {
res.json({
data,
});
}
}
function isResponseError(error) {
if (error instanceof response_error_1.ResponseError) {
return true;
}
if (error instanceof Error) {
return ('httpStatusCode' in error &&
typeof error.httpStatusCode === 'number' &&
'errorCode' in error &&
typeof error.errorCode === 'number');
}
return false;
}
function sendErrorResponse(res, error) {
let httpStatusCode = 500;
const response = {
code: 0,
message: error.message ?? 'Unknown error',
};
if (isResponseError(error)) {
if (constants_1.inDevelopment) {
di_1.Container.get(n8n_core_1.Logger).error(picocolors_1.default.red([error.httpStatusCode, error.message].join(' ')));
}
const { originalUrl } = res.req;
if (error.errorCode === 404 && originalUrl) {
const basePath = originalUrl.split('/')[1];
const isLegacyFormTrigger = originalUrl.includes(n8n_workflow_1.FORM_TRIGGER_PATH_IDENTIFIER);
const isFormTrigger = basePath.includes('form');
if (isFormTrigger || isLegacyFormTrigger) {
const isTestWebhook = basePath.includes('test');
res.status(404);
return res.render('form-trigger-404', { isTestWebhook });
}
}
if (error.errorCode === 409 && originalUrl && originalUrl.includes('form-waiting')) {
return res.render('form-trigger-409', {
message: error.message,
});
}
httpStatusCode = error.httpStatusCode;
if (error.errorCode) {
response.code = error.errorCode;
}
if (error.hint) {
response.hint = error.hint;
}
}
if (error instanceof n8n_workflow_1.NodeApiError) {
if (constants_1.inDevelopment) {
di_1.Container.get(n8n_core_1.Logger).error([picocolors_1.default.red(error.name), error.message].join(' '));
}
Object.assign(response, error);
}
if (error.stack && constants_1.inDevelopment) {
response.stacktrace = error.stack;
}
res.status(httpStatusCode).json(response);
}
const isUniqueConstraintError = (error) => ['unique', 'duplicate'].some((s) => error.message.toLowerCase().includes(s));
exports.isUniqueConstraintError = isUniqueConstraintError;
function reportError(error) {
if (!(error instanceof response_error_1.ResponseError) || error.httpStatusCode > 404) {
di_1.Container.get(n8n_core_1.ErrorReporter).error(error);
}
}
function send(processFunction, raw = false) {
return async (req, res) => {
try {
const data = await processFunction(req, res);
if (!res.headersSent)
sendSuccessResponse(res, data, raw);
}
catch (error) {
if (error instanceof Error) {
reportError(error);
if ((0, exports.isUniqueConstraintError)(error)) {
error.message = 'There is already an entry with this name';
}
}
sendErrorResponse(res, error);
}
};
}
//# sourceMappingURL=response-helper.js.map
;