feat(API): Set up error tracking using Sentry (#4394)
* feat(cli): Setup error tracking using Sentry * make error reporting available in the workflows package * address some of the PR comments * create a ErrorReporterProxy like LoggerProxy * remove the `captureError` helper. use ErrorReporterProxy directly * fix linting issues * remove ErrorReporterProxy warnings in tests * check for NODE_ENV === 'production' instead * IErrorReporter -> ErrorReporter * ErrorReporterProxy.getInstance() -> ErrorReporter * allow capturing stacks in warnings as well * make n8n debugging consistent with `npm start` * IReportingOptions -> ReportingOptions * use consistent signature for `error` and `warn` * use Logger instead of console.log
This commit is contained in:
committed by
GitHub
parent
0edd4bcc87
commit
41cb0eec6e
@@ -1,6 +1,6 @@
|
||||
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
||||
import { createTransport, Transporter } from 'nodemailer';
|
||||
import { LoggerProxy as Logger } from 'n8n-workflow';
|
||||
import { ErrorReporterProxy as ErrorReporter, LoggerProxy as Logger } from 'n8n-workflow';
|
||||
import * as config from '../../../config';
|
||||
import { MailData, SendEmailResult, UserManagementMailerImplementation } from './Interfaces';
|
||||
|
||||
@@ -24,22 +24,15 @@ export class NodeMailer implements UserManagementMailerImplementation {
|
||||
const user = config.getEnv('userManagement.emails.smtp.auth.user');
|
||||
const pass = config.getEnv('userManagement.emails.smtp.auth.pass');
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
this.transport.verify((error: Error) => {
|
||||
if (!error) {
|
||||
resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
const message = [];
|
||||
|
||||
if (!host) message.push('SMTP host not defined (N8N_SMTP_HOST).');
|
||||
if (!user) message.push('SMTP user not defined (N8N_SMTP_USER).');
|
||||
if (!pass) message.push('SMTP pass not defined (N8N_SMTP_PASS).');
|
||||
|
||||
reject(new Error(message.length ? message.join(' ') : error.message));
|
||||
});
|
||||
});
|
||||
try {
|
||||
await this.transport.verify();
|
||||
} catch (error) {
|
||||
const message: string[] = [];
|
||||
if (!host) message.push('SMTP host not defined (N8N_SMTP_HOST).');
|
||||
if (!user) message.push('SMTP user not defined (N8N_SMTP_USER).');
|
||||
if (!pass) message.push('SMTP pass not defined (N8N_SMTP_PASS).');
|
||||
throw message.length ? new Error(message.join(' '), { cause: error }) : error;
|
||||
}
|
||||
}
|
||||
|
||||
async sendMail(mailData: MailData): Promise<SendEmailResult> {
|
||||
@@ -62,6 +55,7 @@ export class NodeMailer implements UserManagementMailerImplementation {
|
||||
`Email sent successfully to the following recipients: ${mailData.emailRecipients.toString()}`,
|
||||
);
|
||||
} catch (error) {
|
||||
ErrorReporter.error(error);
|
||||
Logger.error('Failed to send email', { recipients: mailData.emailRecipients, error });
|
||||
return {
|
||||
success: false,
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* eslint-disable no-restricted-syntax */
|
||||
/* eslint-disable import/no-cycle */
|
||||
import { Response } from 'express';
|
||||
import { LoggerProxy as Logger } from 'n8n-workflow';
|
||||
import { ErrorReporterProxy as ErrorReporter, LoggerProxy as Logger } from 'n8n-workflow';
|
||||
import { In } from 'typeorm';
|
||||
import validator from 'validator';
|
||||
|
||||
@@ -159,6 +159,7 @@ export function usersNamespace(this: N8nApp): void {
|
||||
public_api: false,
|
||||
});
|
||||
} catch (error) {
|
||||
ErrorReporter.error(error);
|
||||
Logger.error('Failed to create user shells', { userShells: createUsers });
|
||||
throw new ResponseHelper.ResponseError('An error occurred during user creation');
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user