UNPKG

n8n-nodes-toggl

Version:

n8n community node for Toggl Track time tracking integration with comprehensive operations including client management and webhook support

72 lines (71 loc) 2.98 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.togglApiRequest = togglApiRequest; exports.togglApiRequestAllItems = togglApiRequestAllItems; const n8n_workflow_1 = require("n8n-workflow"); async function togglApiRequest(method, resource, body = {}, qs = {}, uri, headers = {}) { var _a, _b, _c, _d, _e, _f; const credentials = await this.getCredentials('togglApi'); const options = { method, body, qs, uri: uri || `https://api.track.toggl.com/api/v9${resource}`, json: true, gzip: true, auth: { user: credentials.apiToken, pass: 'api_token', }, headers, }; if (Object.keys(body).length === 0) { delete options.body; } if (Object.keys(qs).length === 0) { delete options.qs; } try { return await this.helpers.requestWithAuthentication.call(this, 'togglApi', options); } catch (error) { // Handle rate limiting with exponential backoff if (error.httpCode === '429') { const retryAfter = ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.headers) === null || _b === void 0 ? void 0 : _b['retry-after']) || 60; await new Promise(resolve => setTimeout(resolve, retryAfter * 1000)); return togglApiRequest.call(this, method, resource, body, qs, uri, headers); } // Wrap and rethrow the error if ((_d = (_c = error.response) === null || _c === void 0 ? void 0 : _c.body) === null || _d === void 0 ? void 0 : _d.message) { throw new n8n_workflow_1.NodeApiError(this.getNode(), error, { message: error.response.body.message, description: error.response.body.description || error.response.body.message, }); } if ((_f = (_e = error.response) === null || _e === void 0 ? void 0 : _e.body) === null || _f === void 0 ? void 0 : _f.error) { throw new n8n_workflow_1.NodeApiError(this.getNode(), error, { message: error.response.body.error, }); } throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Toggl API request failed: ${error.message}`, { description: error.description, }); } } async function togglApiRequestAllItems(propertyName, method, resource, body = {}, query = {}) { const returnData = []; let responseData; query.per_page = 200; query.page = 1; do { responseData = await togglApiRequest.call(this, method, resource, body, query); if (Array.isArray(responseData)) { returnData.push.apply(returnData, responseData); } else if (responseData[propertyName]) { returnData.push.apply(returnData, responseData[propertyName]); } query.page = query.page + 1; } while (responseData.length === query.per_page); return returnData; }