Improvements to Mailchimp-Node

This commit is contained in:
ricardo 2020-06-13 22:37:03 -04:00
parent 7f76ee9bcd
commit e859b27a89
4 changed files with 36 additions and 35 deletions

View file

@ -11,20 +11,6 @@ export class MailchimpOAuth2Api implements ICredentialType {
]; ];
displayName = 'Mailchimp OAuth2 API'; displayName = 'Mailchimp OAuth2 API';
properties = [ properties = [
{
displayName: 'Mailchimp Server',
name: 'server',
type: 'string' as NodePropertyTypes,
default: 'https://login.mailchimp.com/',
description: 'The server to connect to.',
},
{
displayName: 'Datacenter',
name: 'dataCenter',
type: 'string' as NodePropertyTypes,
default: 'us10',
description: 'Datacenter that your Mailchimp application is hosted on. Found in the URL of your Mailchimp dashboard.',
},
{ {
displayName: 'Authorization URL', displayName: 'Authorization URL',
name: 'authUrl', name: 'authUrl',

View file

@ -34,7 +34,7 @@ export async function mailchimpApiRequest(this: IHookFunctions | IExecuteFunctio
} }
try { try {
if (authenticationMethod === 'accessToken') { if (authenticationMethod === 'apiKey') {
const credentials = this.getCredentials('mailchimpApi'); const credentials = this.getCredentials('mailchimpApi');
if (credentials === undefined) { if (credentials === undefined) {
@ -52,15 +52,16 @@ export async function mailchimpApiRequest(this: IHookFunctions | IExecuteFunctio
return await this.helpers.request!(options); return await this.helpers.request!(options);
} else { } else {
const credentials = this.getCredentials('mailchimpOAuth2Api'); const credentials = this.getCredentials('mailchimpOAuth2Api') as IDataObject;
const datacenter = credentials!.dataCenter;
options.url = `https://${datacenter}.${host}${endpoint}`; const { api_endpoint } = await getMetadata.call(this, credentials.oauthTokenData as IDataObject);
options.url = `${api_endpoint}/3.0${endpoint}`;
//@ts-ignore //@ts-ignore
return await this.helpers.requestOAuth2!.call(this, 'mailchimpOAuth2Api', options, 'bearer'); return await this.helpers.requestOAuth2!.call(this, 'mailchimpOAuth2Api', options, 'Bearer');
} }
} catch (error) { } catch (error) {
if (error.response.body && error.response.body.detail) { if (error.respose && error.response.body && error.response.body.detail) {
throw new Error(`Mailchimp Error response [${error.statusCode}]: ${error.response.body.detail}`); throw new Error(`Mailchimp Error response [${error.statusCode}]: ${error.response.body.detail}`);
} }
throw error; throw error;
@ -96,3 +97,17 @@ export function validateJSON(json: string | undefined): any { // tslint:disable-
} }
return result; return result;
} }
function getMetadata(this: IHookFunctions | IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, oauthTokenData: IDataObject) {
const credentials = this.getCredentials('mailchimpOAuth2Api') as IDataObject;
const options: OptionsWithUrl = {
headers: {
'Accept': 'application/json',
'Authorization': `OAuth ${oauthTokenData.access_token}`,
},
method: 'GET',
url: credentials.metadataUrl as string,
json: true,
};
return this.helpers.request!(options);
}

View file

@ -72,7 +72,7 @@ export class Mailchimp implements INodeType {
displayOptions: { displayOptions: {
show: { show: {
authentication: [ authentication: [
'accessToken', 'apiKey',
], ],
}, },
}, },
@ -96,15 +96,15 @@ export class Mailchimp implements INodeType {
type: 'options', type: 'options',
options: [ options: [
{ {
name: 'Access Token', name: 'API Key',
value: 'accessToken', value: 'apiKey',
}, },
{ {
name: 'OAuth2', name: 'OAuth2',
value: 'oAuth2', value: 'oAuth2',
}, },
], ],
default: 'accessToken', default: 'apiKey',
description: 'Method of authentication.', description: 'Method of authentication.',
}, },
{ {

View file

@ -36,7 +36,7 @@ export class MailchimpTrigger implements INodeType {
displayOptions: { displayOptions: {
show: { show: {
authentication: [ authentication: [
'accessToken', 'apiKey',
], ],
}, },
}, },
@ -74,15 +74,15 @@ export class MailchimpTrigger implements INodeType {
type: 'options', type: 'options',
options: [ options: [
{ {
name: 'Access Token', name: 'API Key',
value: 'accessToken', value: 'apiKey',
}, },
{ {
name: 'OAuth2', name: 'OAuth2',
value: 'oAuth2', value: 'oAuth2',
}, },
], ],
default: 'accessToken', default: 'apiKey',
description: 'Method of authentication.', description: 'Method of authentication.',
}, },
{ {