import * as plugins from '../plugins.js'; import * as authInterfaces from '../data/auth.js'; // ============================================================================ // RADIUS Client Management // ============================================================================ /** * Get all RADIUS clients (NAS devices) */ export interface IReq_GetRadiusClients extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusClients > { method: 'getRadiusClients'; request: { identity?: authInterfaces.IIdentity; }; response: { clients: Array<{ name: string; ipRange: string; description?: string; enabled: boolean; }>; }; } /** * Add or update a RADIUS client */ export interface IReq_SetRadiusClient extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_SetRadiusClient > { method: 'setRadiusClient'; request: { identity?: authInterfaces.IIdentity; client: { name: string; ipRange: string; secret: string; description?: string; enabled: boolean; }; }; response: { success: boolean; message?: string; }; } /** * Remove a RADIUS client */ export interface IReq_RemoveRadiusClient extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_RemoveRadiusClient > { method: 'removeRadiusClient'; request: { identity?: authInterfaces.IIdentity; name: string; }; response: { success: boolean; message?: string; }; } // ============================================================================ // VLAN Mapping Management // ============================================================================ /** * Get all MAC-to-VLAN mappings */ export interface IReq_GetVlanMappings extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetVlanMappings > { method: 'getVlanMappings'; request: { identity?: authInterfaces.IIdentity; }; response: { mappings: Array<{ mac: string; vlan: number; description?: string; enabled: boolean; createdAt: number; updatedAt: number; }>; config: { defaultVlan: number; allowUnknownMacs: boolean; }; }; } /** * Add or update a VLAN mapping */ export interface IReq_SetVlanMapping extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_SetVlanMapping > { method: 'setVlanMapping'; request: { identity?: authInterfaces.IIdentity; mapping: { mac: string; vlan: number; description?: string; enabled: boolean; }; }; response: { success: boolean; mapping?: { mac: string; vlan: number; description?: string; enabled: boolean; createdAt: number; updatedAt: number; }; message?: string; }; } /** * Remove a VLAN mapping */ export interface IReq_RemoveVlanMapping extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_RemoveVlanMapping > { method: 'removeVlanMapping'; request: { identity?: authInterfaces.IIdentity; mac: string; }; response: { success: boolean; message?: string; }; } /** * Update VLAN configuration */ export interface IReq_UpdateVlanConfig extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_UpdateVlanConfig > { method: 'updateVlanConfig'; request: { identity?: authInterfaces.IIdentity; defaultVlan?: number; allowUnknownMacs?: boolean; }; response: { success: boolean; config: { defaultVlan: number; allowUnknownMacs: boolean; }; }; } /** * Test VLAN assignment for a MAC address */ export interface IReq_TestVlanAssignment extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_TestVlanAssignment > { method: 'testVlanAssignment'; request: { identity?: authInterfaces.IIdentity; mac: string; }; response: { assigned: boolean; vlan: number; isDefault: boolean; matchedRule?: { mac: string; vlan: number; description?: string; }; }; } // ============================================================================ // Accounting / Session Management // ============================================================================ /** * Get active RADIUS sessions */ export interface IReq_GetRadiusSessions extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusSessions > { method: 'getRadiusSessions'; request: { identity?: authInterfaces.IIdentity; filter?: { username?: string; nasIpAddress?: string; vlanId?: number; }; }; response: { sessions: Array<{ sessionId: string; username: string; macAddress?: string; nasIpAddress: string; nasIdentifier?: string; vlanId?: number; framedIpAddress?: string; startTime: number; lastUpdateTime: number; status: 'active' | 'stopped' | 'terminated'; inputOctets: number; outputOctets: number; sessionTime: number; }>; totalCount: number; }; } /** * Disconnect a RADIUS session */ export interface IReq_DisconnectRadiusSession extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_DisconnectRadiusSession > { method: 'disconnectRadiusSession'; request: { identity?: authInterfaces.IIdentity; sessionId: string; reason?: string; }; response: { success: boolean; message?: string; }; } /** * Get accounting summary/report */ export interface IReq_GetRadiusAccountingSummary extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusAccountingSummary > { method: 'getRadiusAccountingSummary'; request: { identity?: authInterfaces.IIdentity; startTime: number; endTime: number; }; response: { summary: { periodStart: number; periodEnd: number; totalSessions: number; activeSessions: number; totalInputBytes: number; totalOutputBytes: number; totalSessionTime: number; averageSessionDuration: number; uniqueUsers: number; sessionsByVlan: Record; topUsersByTraffic: Array<{ username: string; totalBytes: number }>; }; }; } // ============================================================================ // Statistics // ============================================================================ /** * Get RADIUS server statistics */ export interface IReq_GetRadiusStatistics extends plugins.typedrequestInterfaces.implementsTR< plugins.typedrequestInterfaces.ITypedRequest, IReq_GetRadiusStatistics > { method: 'getRadiusStatistics'; request: { identity?: authInterfaces.IIdentity; }; response: { stats: { running: boolean; uptime: number; authRequests: number; authAccepts: number; authRejects: number; accountingRequests: number; activeSessions: number; vlanMappings: number; clients: number; }; vlanStats: { totalMappings: number; enabledMappings: number; exactMatches: number; ouiPatterns: number; wildcardPatterns: number; }; accountingStats: { activeSessions: number; totalSessionsStarted: number; totalSessionsStopped: number; totalInputBytes: number; totalOutputBytes: number; interimUpdatesReceived: number; }; }; }