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
text/typescript
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');
}
}