mirror of
https://github.com/n8n-io/n8n.git
synced 2024-12-25 12:44:07 -08:00
e77fd5d286
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>
86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import { ApplicationError } from 'n8n-workflow';
|
|
import type {
|
|
ICredentialDataDecryptedObject,
|
|
ICredentialType,
|
|
IHttpRequestOptions,
|
|
INodeProperties,
|
|
} from 'n8n-workflow';
|
|
|
|
export class CustomerIoApi implements ICredentialType {
|
|
name = 'customerIoApi';
|
|
|
|
displayName = 'Customer.io API';
|
|
|
|
documentationUrl = 'customerIo';
|
|
|
|
properties: INodeProperties[] = [
|
|
{
|
|
displayName: 'Tracking API Key',
|
|
name: 'trackingApiKey',
|
|
type: 'string',
|
|
typeOptions: { password: true },
|
|
default: '',
|
|
description: 'Required for tracking API',
|
|
required: true,
|
|
},
|
|
{
|
|
displayName: 'Region',
|
|
name: 'region',
|
|
type: 'options',
|
|
options: [
|
|
{
|
|
name: 'EU region',
|
|
value: 'track-eu.customer.io',
|
|
},
|
|
{
|
|
name: 'Global region',
|
|
value: 'track.customer.io',
|
|
},
|
|
],
|
|
default: 'track.customer.io',
|
|
description: 'Should be set based on your account region',
|
|
hint: 'The region will be omited when being used with the HTTP node',
|
|
required: true,
|
|
},
|
|
{
|
|
displayName: 'Tracking Site ID',
|
|
name: 'trackingSiteId',
|
|
type: 'string',
|
|
default: '',
|
|
description: 'Required for tracking API',
|
|
},
|
|
{
|
|
displayName: 'App API Key',
|
|
name: 'appApiKey',
|
|
type: 'string',
|
|
typeOptions: { password: true },
|
|
default: '',
|
|
description: 'Required for App API',
|
|
},
|
|
];
|
|
|
|
async authenticate(
|
|
credentials: ICredentialDataDecryptedObject,
|
|
requestOptions: IHttpRequestOptions,
|
|
): Promise<IHttpRequestOptions> {
|
|
// @ts-ignore
|
|
const url = requestOptions.url ? requestOptions.url : requestOptions.uri;
|
|
if (url.includes('track') || url.includes('api.customer.io')) {
|
|
const basicAuthKey = Buffer.from(
|
|
`${credentials.trackingSiteId}:${credentials.trackingApiKey}`,
|
|
).toString('base64');
|
|
// @ts-ignore
|
|
Object.assign(requestOptions.headers, { Authorization: `Basic ${basicAuthKey}` });
|
|
} else if (url.includes('beta-api.customer.io')) {
|
|
// @ts-ignore
|
|
Object.assign(requestOptions.headers, {
|
|
Authorization: `Bearer ${credentials.appApiKey as string}`,
|
|
});
|
|
} else {
|
|
throw new ApplicationError('Unknown way of authenticating', { level: 'warning' });
|
|
}
|
|
|
|
return requestOptions;
|
|
}
|
|
}
|