n8n-nodes-mautic-advanced
Version:
Enhanced n8n node for Mautic with comprehensive API coverage including tags, campaigns, categories, and advanced contact management
67 lines (66 loc) • 2.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.requestMauticAuthenticated = void 0;
const oauthRequestQueue_1 = require("./oauthRequestQueue");
const authErrorHelpers_1 = require("./authErrorHelpers");
function trimTrailingSlash(url) {
return url.endsWith('/') ? url.slice(0, -1) : url;
}
function withCredentialBaseUrl(options, credentials) {
const requestOptions = { ...options };
if (typeof requestOptions.uri === 'string' && requestOptions.uri.startsWith('/')) {
const baseUrl = trimTrailingSlash(credentials.url);
requestOptions.uri = `${baseUrl}${requestOptions.uri}`;
}
return requestOptions;
}
function credentialRefPart(value) {
if (typeof value === 'string' && value) {
return value;
}
if (typeof value !== 'object' || value === null) {
return undefined;
}
const credentialRef = value;
if (credentialRef.id) {
return credentialRef.id;
}
if (credentialRef.name) {
return credentialRef.name;
}
return undefined;
}
function getOAuthCredentialQueueKey(node) {
const credentialRef = node.credentials?.mauticAdvancedOAuth2Api;
const keyPart = credentialRefPart(credentialRef) ?? 'unknown';
return `mauticAdvancedOAuth2Api:${keyPart}`;
}
async function requestOAuth2WithMauticOptions(context, helperContext, requestOptions) {
return (await helperContext.helpers.requestOAuth2.call(context, 'mauticAdvancedOAuth2Api', requestOptions, {
includeCredentialsOnRefreshOnBody: true,
}));
}
async function requestMauticAuthenticated(context, authenticationMethod, options) {
const credentialType = authenticationMethod === 'credentials' ? 'mauticAdvancedApi' : 'mauticAdvancedOAuth2Api';
const credentials = await context.getCredentials(credentialType);
const requestOptions = withCredentialBaseUrl(options, credentials);
const helperContext = context;
if (authenticationMethod === 'credentials') {
return (await helperContext.helpers.requestWithAuthentication.call(context, 'mauticAdvancedApi', requestOptions));
}
const queueKey = getOAuthCredentialQueueKey(context.getNode());
try {
return await (0, oauthRequestQueue_1.runTrackedCredentialRequest)(queueKey, async () => requestOAuth2WithMauticOptions(context, helperContext, requestOptions));
}
catch (error) {
if (!(0, authErrorHelpers_1.isInvalidGrantError)(error)) {
throw error;
}
await (0, oauthRequestQueue_1.waitForTrackedCredentialRequests)(queueKey);
return await (0, oauthRequestQueue_1.runWithCredentialLock)(queueKey, async () => {
await (0, oauthRequestQueue_1.waitForTrackedCredentialRequests)(queueKey);
return await requestOAuth2WithMauticOptions(context, helperContext, requestOptions);
});
}
}
exports.requestMauticAuthenticated = requestMauticAuthenticated;