UNPKG

n8n-nodes-arubacentral

Version:

n8n community node for Aruba Central API integration with comprehensive monitoring, configuration, and management capabilities

90 lines (79 loc) 2.75 kB
import { IExecuteFunctions, INodeExecutionData, IDataObject } from 'n8n-workflow'; import { apiRequest } from '../../../../helpers/apiRequest'; import { logger } from '../../../../helpers/logger'; import { handleApiError } from '../../../../helpers/errorHandler'; import { handlePagination } from '../../../../helpers/pagination'; import { filterSitesByName } from '../../../../helpers/siteHelpers'; /** * List Sites * * GET /central/v2/sites * * @param this The n8n execution context * @returns Formatted API response */ export async function listSites(this: IExecuteFunctions): Promise<INodeExecutionData[]> { try { // Get parameters const returnAll = this.getNodeParameter('returnAll', 0, false) as boolean; const limit = returnAll ? 0 : (this.getNodeParameter('limit', 0, 50) as number); const additionalFields = this.getNodeParameter('additionalFields', 0, {}) as IDataObject; // Construct query parameters const queryParams: IDataObject = {}; // Add additional fields to query parameters (except site_name - handled by client-side filtering) if (additionalFields.calculate_total !== undefined) { queryParams.calculate_total = additionalFields.calculate_total as boolean; } if (additionalFields.sort !== undefined) { queryParams.sort = additionalFields.sort as string; } logger.debug( 'monitoring:site:listSites', `Getting sites with params: ${JSON.stringify(queryParams)}`, ); // Handle pagination const results = await handlePagination.call( this, '/central/v2/sites', 'GET', {}, queryParams, { path: ['sites'], fallbackPaths: [['data', 'sites'], ['data']], }, returnAll, limit, ); // Apply client-side site name filtering if specified if (additionalFields.site_name) { const siteName = additionalFields.site_name as string; logger.debug('monitoring:site:listSites', `Filtering results by site name: ${siteName}`); // Filter the results const filteredResults = results .map((result) => { if (result.json && Array.isArray(result.json)) { return { ...result, json: filterSitesByName(result.json, siteName), }; } else if (result.json && typeof result.json === 'object') { // Handle single site object const sites = [result.json]; const filtered = filterSitesByName(sites, siteName); return { ...result, json: filtered.length > 0 ? filtered[0] : null, }; } return result; }) .filter((result) => result.json !== null); return filteredResults; } return results; } catch (error) { logger.error('monitoring:site:listSites:error', { message: error.message }); return handleApiError.call(this, error, 'Failed to list sites'); } }