n8n/packages/nodes-base/nodes/Mailcheck/GenericFunctions.ts
Iván Ovejero e77fd5d286
refactor: Switch plain errors in nodes-base to ApplicationError (no-changelog) (#7914)
Ensure all errors in `nodes-base` are `ApplicationError` or children of
it and contain no variables in the message, to continue normalizing all
the backend errors we report to Sentry. Also, skip reporting to Sentry
errors from user input and from external APIs. In future we should
refine `ApplicationError` to more specific errors.

Follow-up to: [#7877](https://github.com/n8n-io/n8n/pull/7877)

- [x] Test workflows:
https://github.com/n8n-io/n8n/actions/runs/7084627970
- [x] e2e: https://github.com/n8n-io/n8n/actions/runs/7084936861

---------

Co-authored-by: Michael Kret <michael.k@radency.com>
2023-12-05 11:17:08 +01:00

57 lines
1.4 KiB
TypeScript

import type { OptionsWithUri } from 'request';
import { ApplicationError } from 'n8n-workflow';
import type {
IDataObject,
IExecuteFunctions,
IHookFunctions,
ILoadOptionsFunctions,
IWebhookFunctions,
} from 'n8n-workflow';
export async function mailCheckApiRequest(
this: IWebhookFunctions | IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions,
method: string,
resource: string,
body: any = {},
qs: IDataObject = {},
uri?: string,
headers: IDataObject = {},
option: IDataObject = {},
): Promise<any> {
const credentials = await this.getCredentials('mailcheckApi');
let options: OptionsWithUri = {
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${credentials.apiKey}`,
},
method,
body,
qs,
uri: uri || `https://api.mailcheck.co/v1${resource}`,
json: true,
};
try {
options = Object.assign({}, options, option);
if (Object.keys(headers).length !== 0) {
options.headers = Object.assign({}, options.headers, headers);
}
if (Object.keys(body as IDataObject).length === 0) {
delete options.body;
}
return await this.helpers.request.call(this, options);
} catch (error) {
if (error.response?.body?.message) {
// Try to return the error prettier
throw new ApplicationError(
`Mailcheck error response [${error.statusCode}]: ${error.response.body.message}`,
{ level: 'warning' },
);
}
throw error;
}
}