@couleetech/n8n-nodes-enlightenedmsp
Version:
n8n node for EnlightenedMSP ticketing and workflow automation
335 lines (334 loc) • 14.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SearchCoreCompanies = void 0;
const SearchCoreCompanies_graphql_1 = require("./SearchCoreCompanies.graphql");
class SearchCoreCompanies {
constructor() {
this.description = {
displayName: 'Search Core Companies',
name: 'searchCoreCompanies',
icon: 'file:enlightenedmsp.svg',
group: ['transform'],
version: 1,
description: 'Search for companies in EnlightenedMSP',
defaults: {
name: 'Search Core Companies',
},
inputs: ["main"],
outputs: ["main", "ai_tool"],
outputNames: ['Output', 'Tool'],
credentials: [
{
name: 'enlightenedMspGraphql',
required: true,
},
],
codex: {
categories: ['AI'],
subcategories: {
AI: ['Tools'],
},
resources: {
primaryDocumentation: [
{
url: 'https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.searchcorecompanies/',
},
],
},
},
properties: [
{
displayName: 'Name Filter',
name: 'nameFilter',
type: 'fixedCollection',
default: {},
placeholder: 'Add Name Filter',
description: 'Filter by company name',
options: [
{
name: 'filter',
displayName: 'Filter',
values: [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
options: [
{ name: 'Equals', value: 'equals' },
{ name: 'Not Equals', value: 'notEquals' },
{ name: 'Contains', value: 'contains' },
{ name: 'Not Contains', value: 'notContains' },
],
default: 'equals',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Default Ticket Level Filter',
name: 'defaultTicketLevelFilter',
type: 'fixedCollection',
default: {},
placeholder: 'Add Ticket Level Filter',
description: 'Filter by default ticket level',
options: [
{
name: 'filter',
displayName: 'Filter',
values: [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
options: [
{ name: 'Equals', value: 'equals' },
{ name: 'Not Equals', value: 'notEquals' },
{ name: 'Contains', value: 'contains' },
{ name: 'Not Contains', value: 'notContains' },
],
default: 'equals',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Default Hourly Rate Filter',
name: 'defaultHourlyRateFilter',
type: 'fixedCollection',
default: {},
placeholder: 'Add Hourly Rate Filter',
description: 'Filter by default hourly rate',
options: [
{
name: 'filter',
displayName: 'Filter',
values: [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
options: [
{ name: 'Equals', value: 'equals' },
{ name: 'Greater Than', value: 'greaterThan' },
{ name: 'Less Than', value: 'lessThan' },
],
default: 'equals',
},
{
displayName: 'Value',
name: 'value',
type: 'number',
default: 0,
},
],
},
],
},
{
displayName: 'Billing Configured',
name: 'billingConfigured',
type: 'boolean',
default: false,
description: 'Whether billing is configured for the company',
},
{
displayName: 'Active',
name: 'active',
type: 'boolean',
default: true,
description: 'Whether the company is active',
},
{
displayName: 'Is Own Company',
name: 'isOwnCompany',
type: 'boolean',
default: false,
description: 'Whether this is our own company',
},
{
displayName: 'Autotask Company ID',
name: 'autotaskCompanyId',
type: 'number',
default: 0,
description: 'Autotask company ID',
},
{
displayName: 'Sort By',
name: 'sortBy',
type: 'options',
options: [
{ name: 'Name', value: 'name' },
{ name: 'Default Hourly Rate', value: 'defaultHourlyRate' },
{ name: 'ID', value: 'id' },
],
default: 'name',
description: 'Field to sort results by',
},
{
displayName: 'Sort Order',
name: 'sortOrder',
type: 'options',
options: [
{ name: 'Ascending', value: 'ASC' },
{ name: 'Descending', value: 'DESC' },
],
default: 'ASC',
description: 'Sort order for results',
},
{
displayName: 'Page',
name: 'page',
type: 'number',
default: 1,
description: 'Page number for pagination',
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 10,
description: 'Number of results per page',
},
{
displayName: 'Fields',
name: 'dataSelection',
type: 'string',
default: SearchCoreCompanies_graphql_1.DEFAULT_FIELDS,
description: 'Fields to return in the response',
},
],
};
}
async execute() {
const items = this.getInputData();
const returnData = [];
const { endpoint, apiKey } = await SearchCoreCompanies_graphql_1.SearchCoreCompaniesGraphql.getCredentials(this);
const graphqlClient = new SearchCoreCompanies_graphql_1.SearchCoreCompaniesGraphql(endpoint, apiKey);
for (let i = 0; i < items.length; i++) {
try {
const nameFilter = this.getNodeParameter('nameFilter', i, {});
const defaultTicketLevelFilter = this.getNodeParameter('defaultTicketLevelFilter', i, {});
const defaultHourlyRateFilter = this.getNodeParameter('defaultHourlyRateFilter', i, {});
const billingConfigured = this.getNodeParameter('billingConfigured', i);
const active = this.getNodeParameter('active', i);
const isOwnCompany = this.getNodeParameter('isOwnCompany', i);
const autotaskCompanyId = this.getNodeParameter('autotaskCompanyId', i);
const sortBy = this.getNodeParameter('sortBy', i);
const sortOrder = this.getNodeParameter('sortOrder', i);
const page = this.getNodeParameter('page', i);
const limit = this.getNodeParameter('limit', i);
const dataSelection = this.getNodeParameter('dataSelection', i, SearchCoreCompanies_graphql_1.DEFAULT_FIELDS);
const variables = {
page,
limit,
fields: dataSelection,
};
if (billingConfigured !== undefined) {
variables.billingConfigured = { eq: billingConfigured };
}
if (active !== undefined) {
variables.active = { eq: active };
}
if (isOwnCompany !== undefined) {
variables.isOwnCompany = { eq: isOwnCompany };
}
if (sortBy && sortOrder) {
variables.order = { field: sortBy, direction: sortOrder };
}
if (nameFilter.filter) {
switch (nameFilter.filter.operation) {
case 'equals':
variables.name = { eq: nameFilter.filter.value };
break;
case 'notEquals':
variables.name = { not: nameFilter.filter.value };
break;
case 'contains':
variables.name = { like: nameFilter.filter.value };
break;
case 'notContains':
variables.name = { notlike: nameFilter.filter.value };
break;
}
}
if (defaultTicketLevelFilter.filter) {
switch (defaultTicketLevelFilter.filter.operation) {
case 'equals':
variables.defaultTicketLevel = { eq: defaultTicketLevelFilter.filter.value };
break;
case 'notEquals':
variables.defaultTicketLevel = { not: defaultTicketLevelFilter.filter.value };
break;
case 'contains':
variables.defaultTicketLevel = { like: defaultTicketLevelFilter.filter.value };
break;
case 'notContains':
variables.defaultTicketLevel = { notlike: defaultTicketLevelFilter.filter.value };
break;
}
}
if (defaultHourlyRateFilter.filter) {
switch (defaultHourlyRateFilter.filter.operation) {
case 'equals':
variables.defaultHourlyRate = { eq: defaultHourlyRateFilter.filter.value };
break;
case 'greaterThan':
variables.defaultHourlyRate = { gte: defaultHourlyRateFilter.filter.value };
break;
case 'lessThan':
variables.defaultHourlyRate = { lte: defaultHourlyRateFilter.filter.value };
break;
}
}
if (autotaskCompanyId) {
variables.autotaskCompanyId = { eq: autotaskCompanyId };
}
const result = await graphqlClient.searchCompanies(variables);
const response = result.data.findCoreCompaniesPaginated;
returnData.push({
json: {
data: response.data,
totalCount: response.totalCount,
page: response.page,
limit: response.limit
},
});
}
catch (error) {
if (this.continueOnFail()) {
returnData.push({
json: {
error: error.message,
},
});
continue;
}
throw error;
}
}
const aiToolData = returnData.map(item => ({
json: {
companies: item.json.data,
totalCount: item.json.totalCount,
page: item.json.page,
limit: item.json.limit,
},
}));
return [returnData, aiToolData];
}
}
exports.SearchCoreCompanies = SearchCoreCompanies;