n8n-nodes-cigotracker
Version:
n8n node for CigoTracker API integration - manage deliveries, routes, and field service operations
333 lines (332 loc) • 17.2 kB
JavaScript
"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;