UNPKG

@couleetech/n8n-nodes-enlightenedmsp

Version:

n8n node for EnlightenedMSP ticketing and workflow automation

335 lines (334 loc) 14.8 kB
"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;