UNPKG

@kadam-net/n8n-nodes-kadam

Version:

Kadam node for n8n to manage campaigns, creatives, and more.

89 lines 4.12 kB
"use strict"; 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