import httpClient from '../lib/httpClient'; import { config } from '../config'; import { ensureAuthenticated } from './authService'; import logger from '../lib/logger'; import { OmadaApiResponse, OmadaSwitchPort, OmadaVlanConfig } from '../types/omada'; const BASE_URL = `${config.omada.northboundBase}/openapi/v1/omada/${config.omada.id}`; /** * Gets all ports for a switch device */ export async function getPorts( siteId: string, deviceId: string ): Promise { await ensureAuthenticated(); try { const url = `${BASE_URL}/sites/${siteId}/devices/${deviceId}/ports`; logger.debug('Fetching switch ports', { siteId, deviceId }); const response = await httpClient.get>(url); const data = response.data; if (data.errorCode !== 0) { throw new Error(`Failed to fetch ports: ${data.msg || 'Unknown error'}`); } const ports = data.result || data.data || []; logger.info(`Fetched ${ports.length} ports for switch ${deviceId}`); return ports; } catch (error) { logger.error('Error fetching switch ports', { siteId, deviceId, error }); throw error; } } /** * Sets VLAN configuration for a specific port */ export async function setPortVlan( siteId: string, deviceId: string, portIndex: number, vlanConfig: OmadaVlanConfig ): Promise { await ensureAuthenticated(); try { const url = `${BASE_URL}/sites/${siteId}/devices/${deviceId}/ports/${portIndex}/vlan`; logger.info('Setting port VLAN', { siteId, deviceId, portIndex, vlanConfig }); const response = await httpClient.post(url, vlanConfig); const data = response.data; if (data.errorCode !== 0) { throw new Error(`Failed to set port VLAN: ${data.msg || 'Unknown error'}`); } logger.info('Port VLAN updated', { siteId, deviceId, portIndex }); } catch (error) { logger.error('Error setting port VLAN', { siteId, deviceId, portIndex, error }); throw error; } } /** * Toggles a port on/off */ export async function togglePort( siteId: string, deviceId: string, portIndex: number, enabled: boolean ): Promise { await ensureAuthenticated(); try { const url = `${BASE_URL}/sites/${siteId}/devices/${deviceId}/ports/${portIndex}`; logger.info('Toggling port', { siteId, deviceId, portIndex, enabled }); const response = await httpClient.put(url, { enabled }); const data = response.data; if (data.errorCode !== 0) { throw new Error(`Failed to toggle port: ${data.msg || 'Unknown error'}`); } logger.info('Port toggled', { siteId, deviceId, portIndex, enabled }); } catch (error) { logger.error('Error toggling port', { siteId, deviceId, portIndex, error }); throw error; } }