UNPKG

n8n-nodes-cigotracker

Version:

n8n node for CigoTracker API integration - manage deliveries, routes, and field service operations

333 lines (332 loc) 17.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CigoTracker = void 0; const n8n_workflow_1 = require("n8n-workflow"); const CigoTracker_helpers_1 = require("./CigoTracker.helpers"); const JobDescription_1 = require("./descriptions/JobDescription"); const ActionDescription_1 = require("./descriptions/ActionDescription"); const ItineraryDescription_1 = require("./descriptions/ItineraryDescription"); const LocationDescription_1 = require("./descriptions/LocationDescription"); const VehicleDescription_1 = require("./descriptions/VehicleDescription"); const OperatorDescription_1 = require("./descriptions/OperatorDescription"); function buildJobBody(itemIndex) { const body = { skip_staging: this.getNodeParameter('skipStaging', itemIndex), first_name: this.getNodeParameter('firstName', itemIndex), last_name: this.getNodeParameter('lastName', itemIndex), address: this.getNodeParameter('address', itemIndex), date: this.getNodeParameter('date', itemIndex), }; const additionalFields = this.getNodeParameter('additionalFields', itemIndex); if (additionalFields.time_frame?.timeFrame?.[0]) { body.time_frame = { start: additionalFields.time_frame.timeFrame[0].start, end: additionalFields.time_frame.timeFrame[0].end, }; delete additionalFields.time_frame; } if (additionalFields.coordinates) { const coords = additionalFields.coordinates.split(',').map((c) => parseFloat(c.trim())); if (coords.length === 2 && !isNaN(coords[0]) && !isNaN(coords[1])) { body.coordinates = coords; } delete additionalFields.coordinates; } Object.assign(body, additionalFields); return body; } function buildActionBody(itemIndex) { const body = { type: this.getNodeParameter('type', itemIndex), }; const additionalFields = this.getNodeParameter('additionalFields', itemIndex); if (additionalFields.custom_fields) { try { additionalFields.custom_fields = JSON.parse(additionalFields.custom_fields); } catch (e) { delete additionalFields.custom_fields; } } Object.assign(body, additionalFields); return body; } function buildItineraryBody(itemIndex) { const body = { name: this.getNodeParameter('name', itemIndex), date: this.getNodeParameter('date', itemIndex), }; const additionalFields = this.getNodeParameter('additionalFields', itemIndex); if (additionalFields.operator_ids) { additionalFields.operator_ids = additionalFields.operator_ids.split(',').map((id) => id.trim()); } if (additionalFields.jobs) { try { additionalFields.jobs = JSON.parse(additionalFields.jobs); } catch (e) { delete additionalFields.jobs; } } Object.assign(body, additionalFields); return body; } class CigoTracker { constructor() { this.description = { displayName: 'CigoTracker', name: 'cigoTracker', icon: 'file:Cigo-Logo.png', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Interact with CigoTracker API', defaults: { name: 'CigoTracker', }, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'cigoTrackerApi', required: true, }, ], properties: [ { displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, options: [ { name: 'Job', value: 'job', description: 'Create, read, update, and delete jobs', }, { name: 'Action', value: 'action', description: 'Manage job actions', }, { name: 'Itinerary', value: 'itinerary', description: 'Manage itineraries and routes', }, { name: 'Location', value: 'location', description: 'Retrieve location information', }, { name: 'Vehicle', value: 'vehicle', description: 'Retrieve vehicle information', }, { name: 'Operator', value: 'operator', description: 'Retrieve operator information', }, ], default: 'job', }, ...JobDescription_1.jobOperations, ...JobDescription_1.jobFields, ...ActionDescription_1.actionOperations, ...ActionDescription_1.actionFields, ...ItineraryDescription_1.itineraryOperations, ...ItineraryDescription_1.itineraryFields, ...LocationDescription_1.locationOperations, ...LocationDescription_1.locationFields, ...VehicleDescription_1.vehicleOperations, ...VehicleDescription_1.vehicleFields, ...OperatorDescription_1.operatorOperations, ...OperatorDescription_1.operatorFields, ], }; } async execute() { const items = this.getInputData(); const returnData = []; if (items.length === 0) { items.push({ json: {} }); } const resource = this.getNodeParameter('resource', 0); const operation = this.getNodeParameter('operation', 0); for (let i = 0; i < items.length; i++) { try { let responseData; if (resource === 'job') { if (operation === 'ping') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', '/ping'); } else if (operation === 'create') { const body = buildJobBody.call(this, i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', '/jobs', body); } else if (operation === 'get') { const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/jobs/id/${jobId}`); } else if (operation === 'update') { const jobId = this.getNodeParameter('jobId', i); const updateFields = this.getNodeParameter('updateFields', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'PUT', `/jobs/id/${jobId}`, updateFields); } else if (operation === 'delete') { const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/jobs/id/${jobId}`); } else if (operation === 'search') { const searchFields = this.getNodeParameter('searchFields', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', '/jobs/search', searchFields); } else if (operation === 'cancel') { const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', `/jobs/id/${jobId}/cancel`); } } else if (resource === 'action') { const jobId = this.getNodeParameter('jobId', i); if (operation === 'create') { const body = buildActionBody.call(this, i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', `/jobs/id/${jobId}/actions`, body); } else if (operation === 'get') { const actionId = this.getNodeParameter('actionId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/jobs/id/${jobId}/actions/${actionId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/jobs/id/${jobId}/actions`); } else if (operation === 'update') { const actionId = this.getNodeParameter('actionId', i); const updateFields = this.getNodeParameter('updateFields', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'PUT', `/jobs/id/${jobId}/actions/${actionId}`, updateFields); } else if (operation === 'delete') { const actionId = this.getNodeParameter('actionId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/jobs/id/${jobId}/actions/${actionId}`); } } else if (resource === 'itinerary') { if (operation === 'create') { const body = buildItineraryBody.call(this, i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', '/itineraries', body); } else if (operation === 'get') { const itineraryId = this.getNodeParameter('itineraryId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/itineraries/id/${itineraryId}`); } else if (operation === 'getByDate') { const date = this.getNodeParameter('date', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/itineraries/date/${date}`); } else if (operation === 'getByOperator') { const operatorId = this.getNodeParameter('operatorId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/itineraries/operator/${operatorId}`); } else if (operation === 'getByVehicle') { const vehicleId = this.getNodeParameter('vehicleId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/itineraries/vehicle/${vehicleId}`); } else if (operation === 'update') { const itineraryId = this.getNodeParameter('itineraryId', i); const updateFields = this.getNodeParameter('updateFields', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'PUT', `/itineraries/id/${itineraryId}`, updateFields); } else if (operation === 'delete') { const itineraryId = this.getNodeParameter('itineraryId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/itineraries/id/${itineraryId}`); } else if (operation === 'previewRoute') { const previewFields = this.getNodeParameter('previewFields', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', '/itineraries/action/previewRoute', previewFields); } else if (operation === 'addJob') { const itineraryId = this.getNodeParameter('itineraryId', i); const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'POST', `/itineraries/id/${itineraryId}/job_id/${jobId}`); } else if (operation === 'removeJob') { const itineraryId = this.getNodeParameter('itineraryId', i); const jobId = this.getNodeParameter('jobId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'DELETE', `/itineraries/id/${itineraryId}/job_id/${jobId}`); } else if (operation === 'updateJobPosition') { const itineraryId = this.getNodeParameter('itineraryId', i); const jobId = this.getNodeParameter('jobId', i); const position = this.getNodeParameter('position', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'PUT', `/itineraries/id/${itineraryId}/job_id/${jobId}/position/${position}`); } } else if (resource === 'location') { if (operation === 'get') { const locationId = this.getNodeParameter('locationId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/locations/id/${locationId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', '/locations'); } } else if (resource === 'vehicle') { if (operation === 'get') { const vehicleId = this.getNodeParameter('vehicleId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/vehicles/id/${vehicleId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', '/vehicles'); } } else if (resource === 'operator') { if (operation === 'get') { const operatorId = this.getNodeParameter('operatorId', i); responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', `/operators/id/${operatorId}`); } else if (operation === 'getAll') { responseData = await CigoTracker_helpers_1.cigoTrackerApiRequest.call(this, 'GET', '/operators'); } } if (responseData === undefined || responseData === null) { returnData.push({ json: { message: 'No data returned' }, pairedItem: { item: i }, }); } else if (Array.isArray(responseData)) { returnData.push(...responseData.map(item => ({ json: item, pairedItem: { item: i }, }))); } else { returnData.push({ json: responseData, pairedItem: { item: i }, }); } } catch (error) { if (this.continueOnFail()) { const errorMessage = error instanceof Error ? error.message : 'Unknown error'; const errorDetails = error instanceof n8n_workflow_1.NodeApiError ? error.description : ''; returnData.push({ json: { error: errorMessage, details: errorDetails, resource, operation, }, pairedItem: { item: i }, }); continue; } throw error; } } return [returnData]; } } exports.CigoTracker = CigoTracker;