UNPKG

@poli-digital/n8n-nodes-poli

Version:
126 lines 5.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.apiRequest = void 0; const n8n_workflow_1 = require("n8n-workflow"); async function apiRequest(method, endpoint, body = {}, qs = {}, maxRetries = 3) { var _a; const credentials = await this.getCredentials('poliApi'); const baseUrl = 'https://foundation-api.poli.digital/v3'; const normalizedEndpoint = endpoint.startsWith('/') ? endpoint : `/${endpoint}`; const options = { method, url: `${baseUrl}${normalizedEndpoint}`, headers: { Authorization: `Bearer ${credentials.apiKey}`, 'Content-Type': 'application/json', Accept: 'application/json', }, body: method !== 'GET' ? body : undefined, qs, json: true, timeout: 30000, }; let lastError; for (let attempt = 1; attempt <= maxRetries; attempt++) { try { console.log(`🔄 API Request [Tentativa ${attempt}/${maxRetries}]:`, { method, endpoint: normalizedEndpoint, hasBody: Object.keys(body).length > 0, hasQuery: Object.keys(qs).length > 0 }); const response = await this.helpers.request(options); console.log(`✅ API Request bem-sucedida:`, { method, endpoint: normalizedEndpoint, statusCode: 'success' }); return response; } catch (error) { lastError = error; const statusCode = error.statusCode || ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) || 0; console.error(`❌ API Request falhou [Tentativa ${attempt}/${maxRetries}]:`, { method, endpoint: normalizedEndpoint, statusCode, message: error.message, attempt, maxRetries }); if (shouldNotRetry(statusCode)) { console.warn(`🚫 Erro não temporário detectado (${statusCode}), interrompendo tentativas`); break; } if (attempt < maxRetries) { const delayMs = calculateRetryDelay(attempt); console.log(`⏳ Aguardando ${delayMs}ms antes da próxima tentativa...`); await new Promise(resolve => setTimeout(resolve, delayMs)); } } } throw createDetailedError(lastError, method, normalizedEndpoint); } exports.apiRequest = apiRequest; function shouldNotRetry(statusCode) { const noRetryStatuses = [400, 401, 403, 404, 422]; return noRetryStatuses.includes(statusCode); } function calculateRetryDelay(attempt) { const baseDelay = 1000; return baseDelay * Math.pow(2, attempt - 1); } function createDetailedError(error, method, endpoint) { var _a, _b; const statusCode = error.statusCode || ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) || 0; const errorMessage = error.message || 'Erro desconhecido'; const errorDetails = ((_b = error.response) === null || _b === void 0 ? void 0 : _b.data) || error.body || {}; let userMessage = ''; let description = ''; switch (statusCode) { case 401: userMessage = 'Erro de autenticação: Token API inválido ou expirado'; description = 'Verifique se o token da API Poli está correto nas credenciais'; break; case 403: userMessage = 'Acesso negado: Sem permissão para esta operação'; description = 'Verifique se sua conta tem as permissões necessárias'; break; case 404: userMessage = 'Recurso não encontrado'; description = `O endpoint ${method} ${endpoint} não foi encontrado ou o recurso não existe`; break; case 422: userMessage = 'Dados inválidos enviados para a API'; description = 'Verifique se todos os parâmetros obrigatórios estão preenchidos corretamente'; break; case 429: userMessage = 'Limite de requisições excedido'; description = 'Aguarde alguns momentos antes de tentar novamente'; break; case 500: case 502: case 503: case 504: userMessage = 'Erro interno do servidor da API Poli'; description = 'Problema temporário no servidor. Tente novamente em alguns minutos'; break; default: userMessage = `Falha na comunicação com a API Poli (${statusCode})`; description = errorMessage; } const nodeError = { message: userMessage, description: description, httpCode: statusCode, cause: { endpoint, method, statusCode, originalMessage: errorMessage, details: errorDetails } }; return new n8n_workflow_1.NodeApiError({ type: 'n8n-nodes-poli' }, nodeError); } //# sourceMappingURL=transport.js.map