@kadam-net/n8n-nodes-kadam
Version:
Kadam node for n8n to manage campaigns, creatives, and more.
89 lines • 4.12 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.makeApiRequest = makeApiRequest;
exports.fetchAll = fetchAll;
exports.isContinueOnFailError = isContinueOnFailError;
const axios_1 = __importDefault(require("axios"));
const n8n_workflow_1 = require("n8n-workflow");
async function makeApiRequest(method, url, headers, params, data, retries = 0) {
var _a;
const config = { method, url, headers, params, data };
const maxRetries = this.getNodeParameter('retryOnFailure', 0, false) ? 3 : 0;
try {
const response = await axios_1.default.request(config);
return response.data;
}
catch (error) {
const errorData = ((_a = error.response) === null || _a === void 0 ? void 0 : _a.data) || {};
const errorCode = errorData.error_code || error.code;
const errorDesc = errorData.error_desc || error.message;
let customMessage = errorDesc;
switch (errorCode) {
case 100:
customMessage = 'Unknown campaign';
break;
case 101:
customMessage = 'Campaign already archived';
break;
case 102:
customMessage = 'Unknown client';
break;
case 103:
customMessage = 'Overlimit campaigns';
break;
case 'ECONNRESET':
case 429:
if (retries < maxRetries) {
await new Promise(resolve => setTimeout(resolve, 1000 * (retries + 1)));
return makeApiRequest.call(this, method, url, headers, params, data, retries + 1);
}
break;
}
if (this.continueOnFail()) {
return { error: { code: errorCode, message: customMessage } };
}
else {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `API request failed: ${customMessage}`, { description: `Code: ${errorCode}, URL: ${url}, Details: ${JSON.stringify(errorData)}` });
}
}
}
async function fetchAll(url, headers, params, limitKey = 'limit', offsetKey = 'offset') {
const returnAll = this.getNodeParameter('returnAll', 0, false);
const limit = this.getNodeParameter(limitKey, 0, 100);
let offset = this.getNodeParameter(offsetKey, 0, 0);
let allItems = [];
if (!returnAll) {
const response = await makeApiRequest.call(this, 'get', url, headers, { ...params, limit, offset });
if (isContinueOnFailError(response)) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error fetching data: ${response.error.message}`, { itemIndex: 0, description: `Code: ${response.error.code}` });
}
return response;
}
let keepFetching = true;
while (keepFetching) {
const currentParams = { ...params, limit, offset };
const response = await makeApiRequest.call(this, 'get', url, headers, currentParams);
if (isContinueOnFailError(response)) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error fetching page at offset ${offset}: ${response.error.message}`, { itemIndex: 0, description: `Code: ${response.error.code}` });
}
const items = Array.isArray(response) ? response : (response === null || response === void 0 ? void 0 : response.items) || (response === null || response === void 0 ? void 0 : response.data) || [];
if (items.length > 0) {
allItems = allItems.concat(items);
offset += items.length;
}
else {
keepFetching = false;
}
if (items.length < limit) {
keepFetching = false;
}
}
return allItems;
}
function isContinueOnFailError(response) {
return response && typeof response === 'object' && response.error && typeof response.error === 'object' && 'code' in response.error && 'message' in response.error;
}
//# sourceMappingURL=utils.js.map