@serve.zone/dcrouter 11.0.29 → 11.0.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/dist_serve/bundle.js +1 -1
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/package.json +2 -2
  4. package/ts/00_commitinfo_data.ts +1 -1
  5. package/ts_web/00_commitinfo_data.ts +1 -1
  6. package/dist_ts/classes.dcrouter.js +0 -1405
  7. package/dist_ts/config/classes.api-token-manager.d.ts +0 -46
  8. package/dist_ts/config/classes.api-token-manager.js +0 -150
  9. package/dist_ts/config/classes.route-config-manager.d.ts +0 -35
  10. package/dist_ts/config/classes.route-config-manager.js +0 -231
  11. package/dist_ts/config/index.d.ts +0 -3
  12. package/dist_ts/config/index.js +0 -5
  13. package/dist_ts/config/validator.d.ts +0 -104
  14. package/dist_ts/config/validator.js +0 -152
  15. package/dist_ts/errors/base.errors.d.ts +0 -224
  16. package/dist_ts/errors/base.errors.js +0 -320
  17. package/dist_ts/errors/error.codes.d.ts +0 -115
  18. package/dist_ts/errors/error.codes.js +0 -136
  19. package/dist_ts/monitoring/classes.metricsmanager.d.ts +0 -178
  20. package/dist_ts/monitoring/classes.metricsmanager.js +0 -642
  21. package/dist_ts/monitoring/index.d.ts +0 -1
  22. package/dist_ts/monitoring/index.js +0 -2
  23. package/dist_ts/opsserver/classes.opsserver.d.ts +0 -37
  24. package/dist_ts/opsserver/classes.opsserver.js +0 -85
  25. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +0 -6
  26. package/dist_ts/opsserver/handlers/api-token.handler.js +0 -62
  27. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +0 -32
  28. package/dist_ts/opsserver/handlers/certificate.handler.js +0 -421
  29. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +0 -30
  30. package/dist_ts/opsserver/handlers/email-ops.handler.js +0 -227
  31. package/dist_ts/opsserver/handlers/index.d.ts +0 -11
  32. package/dist_ts/opsserver/handlers/index.js +0 -12
  33. package/dist_ts/opsserver/handlers/radius.handler.d.ts +0 -6
  34. package/dist_ts/opsserver/handlers/radius.handler.js +0 -295
  35. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +0 -6
  36. package/dist_ts/opsserver/handlers/remoteingress.handler.js +0 -156
  37. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +0 -14
  38. package/dist_ts/opsserver/handlers/route-management.handler.js +0 -117
  39. package/dist_ts/opsserver/handlers/security.handler.d.ts +0 -9
  40. package/dist_ts/opsserver/handlers/security.handler.js +0 -231
  41. package/dist_ts/opsserver/handlers/stats.handler.d.ts +0 -11
  42. package/dist_ts/opsserver/handlers/stats.handler.js +0 -399
  43. package/dist_ts/opsserver/helpers/guards.d.ts +0 -27
  44. package/dist_ts/opsserver/helpers/guards.js +0 -43
  45. package/dist_ts/opsserver/index.d.ts +0 -1
  46. package/dist_ts/opsserver/index.js +0 -2
  47. package/dist_ts/radius/classes.accounting.manager.d.ts +0 -218
  48. package/dist_ts/radius/classes.accounting.manager.js +0 -417
  49. package/dist_ts/radius/classes.radius.server.d.ts +0 -171
  50. package/dist_ts/radius/classes.radius.server.js +0 -385
  51. package/dist_ts/radius/classes.vlan.manager.d.ts +0 -128
  52. package/dist_ts/radius/classes.vlan.manager.js +0 -279
  53. package/dist_ts/radius/index.d.ts +0 -13
  54. package/dist_ts/radius/index.js +0 -14
  55. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +0 -82
  56. package/dist_ts/remoteingress/classes.remoteingress-manager.js +0 -227
  57. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +0 -59
  58. package/dist_ts/remoteingress/classes.tunnel-manager.js +0 -165
  59. package/dist_ts/remoteingress/index.d.ts +0 -2
  60. package/dist_ts/remoteingress/index.js +0 -3
  61. package/dist_ts/security/classes.contentscanner.d.ts +0 -164
  62. package/dist_ts/security/classes.contentscanner.js +0 -642
  63. package/dist_ts/security/classes.ipreputationchecker.d.ts +0 -160
  64. package/dist_ts/security/classes.ipreputationchecker.js +0 -537
  65. package/dist_ts/security/classes.securitylogger.d.ts +0 -144
  66. package/dist_ts/security/index.d.ts +0 -3
  67. package/dist_ts/security/index.js +0 -4
@@ -1,227 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
- export class EmailOpsHandler {
4
- opsServerRef;
5
- constructor(opsServerRef) {
6
- this.opsServerRef = opsServerRef;
7
- this.registerHandlers();
8
- }
9
- registerHandlers() {
10
- const viewRouter = this.opsServerRef.viewRouter;
11
- const adminRouter = this.opsServerRef.adminRouter;
12
- // ---- Read endpoints (viewRouter — valid identity required via middleware) ----
13
- // Get All Emails Handler
14
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getAllEmails', async (dataArg) => {
15
- const emails = this.getAllQueueEmails();
16
- return { emails };
17
- }));
18
- // Get Email Detail Handler
19
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getEmailDetail', async (dataArg) => {
20
- const email = this.getEmailDetail(dataArg.emailId);
21
- return { email };
22
- }));
23
- // ---- Write endpoints (adminRouter) ----
24
- // Resend Failed Email Handler
25
- adminRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('resendEmail', async (dataArg) => {
26
- const emailServer = this.opsServerRef.dcRouterRef.emailServer;
27
- if (!emailServer?.deliveryQueue) {
28
- return { success: false, error: 'Email server not available' };
29
- }
30
- const queue = emailServer.deliveryQueue;
31
- const item = queue.getItem(dataArg.emailId);
32
- if (!item) {
33
- return { success: false, error: 'Email not found in queue' };
34
- }
35
- if (item.status !== 'failed') {
36
- return { success: false, error: `Email is not in failed state (current: ${item.status})` };
37
- }
38
- try {
39
- const newQueueId = await queue.enqueue(item.processingResult, item.processingMode, item.route);
40
- await queue.removeItem(dataArg.emailId);
41
- return { success: true, newQueueId };
42
- }
43
- catch (error) {
44
- return {
45
- success: false,
46
- error: error instanceof Error ? error.message : 'Failed to resend email'
47
- };
48
- }
49
- }));
50
- }
51
- /**
52
- * Get all queue items mapped to catalog IEmail format
53
- */
54
- getAllQueueEmails() {
55
- const emailServer = this.opsServerRef.dcRouterRef.emailServer;
56
- if (!emailServer?.deliveryQueue) {
57
- return [];
58
- }
59
- const queue = emailServer.deliveryQueue;
60
- const queueMap = queue.queue;
61
- if (!queueMap) {
62
- return [];
63
- }
64
- const emails = [];
65
- for (const [id, item] of queueMap.entries()) {
66
- emails.push(this.mapQueueItemToEmail(item));
67
- }
68
- // Sort by createdAt descending (newest first)
69
- emails.sort((a, b) => new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime());
70
- return emails;
71
- }
72
- /**
73
- * Get a single email detail by ID
74
- */
75
- getEmailDetail(emailId) {
76
- const emailServer = this.opsServerRef.dcRouterRef.emailServer;
77
- if (!emailServer?.deliveryQueue) {
78
- return null;
79
- }
80
- const queue = emailServer.deliveryQueue;
81
- const item = queue.getItem(emailId);
82
- if (!item) {
83
- return null;
84
- }
85
- return this.mapQueueItemToEmailDetail(item);
86
- }
87
- /**
88
- * Map a queue item to catalog IEmail format
89
- */
90
- mapQueueItemToEmail(item) {
91
- const processingResult = item.processingResult;
92
- let from = '';
93
- let to = '';
94
- let subject = '';
95
- let messageId = '';
96
- let size = '0 B';
97
- if (processingResult) {
98
- if (processingResult.email) {
99
- from = processingResult.email.from || '';
100
- to = (processingResult.email.to || [])[0] || '';
101
- subject = processingResult.email.subject || '';
102
- }
103
- else if (processingResult.from) {
104
- from = processingResult.from;
105
- to = (processingResult.to || [])[0] || '';
106
- subject = processingResult.subject || '';
107
- }
108
- // Try to get messageId
109
- if (typeof processingResult.getMessageId === 'function') {
110
- try {
111
- messageId = processingResult.getMessageId() || '';
112
- }
113
- catch {
114
- messageId = '';
115
- }
116
- }
117
- // Compute approximate size
118
- const textLen = processingResult.text?.length || 0;
119
- const htmlLen = processingResult.html?.length || 0;
120
- let attachSize = 0;
121
- if (typeof processingResult.getAttachmentsSize === 'function') {
122
- try {
123
- attachSize = processingResult.getAttachmentsSize() || 0;
124
- }
125
- catch {
126
- attachSize = 0;
127
- }
128
- }
129
- size = this.formatSize(textLen + htmlLen + attachSize);
130
- }
131
- // Map queue status to catalog TEmailStatus
132
- const status = this.mapStatus(item.status);
133
- const createdAt = item.createdAt instanceof Date ? item.createdAt.getTime() : item.createdAt;
134
- return {
135
- id: item.id,
136
- direction: 'outbound',
137
- status,
138
- from,
139
- to,
140
- subject,
141
- timestamp: new Date(createdAt).toISOString(),
142
- messageId,
143
- size,
144
- };
145
- }
146
- /**
147
- * Map a queue item to catalog IEmailDetail format
148
- */
149
- mapQueueItemToEmailDetail(item) {
150
- const base = this.mapQueueItemToEmail(item);
151
- const processingResult = item.processingResult;
152
- let toList = [];
153
- let cc = [];
154
- let headers = {};
155
- let body = '';
156
- if (processingResult) {
157
- if (processingResult.email) {
158
- toList = processingResult.email.to || [];
159
- cc = processingResult.email.cc || [];
160
- }
161
- else {
162
- toList = processingResult.to || [];
163
- cc = processingResult.cc || [];
164
- }
165
- headers = processingResult.headers || {};
166
- body = processingResult.html || processingResult.text || '';
167
- }
168
- return {
169
- ...base,
170
- toList,
171
- cc,
172
- smtpLog: [],
173
- connectionInfo: {
174
- sourceIp: '',
175
- sourceHostname: '',
176
- destinationIp: '',
177
- destinationPort: 0,
178
- tlsVersion: '',
179
- tlsCipher: '',
180
- authenticated: false,
181
- authMethod: '',
182
- authUser: '',
183
- },
184
- authenticationResults: {
185
- spf: 'none',
186
- spfDomain: '',
187
- dkim: 'none',
188
- dkimDomain: '',
189
- dmarc: 'none',
190
- dmarcPolicy: '',
191
- },
192
- rejectionReason: item.status === 'failed' ? item.lastError : undefined,
193
- bounceMessage: item.status === 'failed' ? item.lastError : undefined,
194
- headers,
195
- body,
196
- };
197
- }
198
- /**
199
- * Map queue status to catalog TEmailStatus
200
- */
201
- mapStatus(queueStatus) {
202
- switch (queueStatus) {
203
- case 'pending':
204
- case 'processing':
205
- return 'pending';
206
- case 'delivered':
207
- return 'delivered';
208
- case 'failed':
209
- return 'bounced';
210
- case 'deferred':
211
- return 'deferred';
212
- default:
213
- return 'pending';
214
- }
215
- }
216
- /**
217
- * Format byte size to human-readable string
218
- */
219
- formatSize(bytes) {
220
- if (bytes < 1024)
221
- return `${bytes} B`;
222
- if (bytes < 1024 * 1024)
223
- return `${(bytes / 1024).toFixed(1)} KB`;
224
- return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
225
- }
226
- }
227
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwtb3BzLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaGFuZGxlcnMvZW1haWwtb3BzLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlELE1BQU0sT0FBTyxlQUFlO0lBQ047SUFBcEIsWUFBb0IsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUVsRCxpRkFBaUY7UUFFakYseUJBQXlCO1FBQ3pCLFVBQVUsQ0FBQyxlQUFlLENBQ3hCLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQ25DLGNBQWMsRUFDZCxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7WUFDaEIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLENBQUMsQ0FDRixDQUNGLENBQUM7UUFFRiwyQkFBMkI7UUFDM0IsVUFBVSxDQUFDLGVBQWUsQ0FDeEIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMsZ0JBQWdCLEVBQ2hCLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRCxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFDbkIs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
@@ -1,11 +0,0 @@
1
- export * from './admin.handler.js';
2
- export * from './config.handler.js';
3
- export * from './logs.handler.js';
4
- export * from './security.handler.js';
5
- export * from './stats.handler.js';
6
- export * from './radius.handler.js';
7
- export * from './email-ops.handler.js';
8
- export * from './certificate.handler.js';
9
- export * from './remoteingress.handler.js';
10
- export * from './route-management.handler.js';
11
- export * from './api-token.handler.js';
@@ -1,12 +0,0 @@
1
- export * from './admin.handler.js';
2
- export * from './config.handler.js';
3
- export * from './logs.handler.js';
4
- export * from './security.handler.js';
5
- export * from './stats.handler.js';
6
- export * from './radius.handler.js';
7
- export * from './email-ops.handler.js';
8
- export * from './certificate.handler.js';
9
- export * from './remoteingress.handler.js';
10
- export * from './route-management.handler.js';
11
- export * from './api-token.handler.js';
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaGFuZGxlcnMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdCQUF3QixDQUFDIn0=
@@ -1,6 +0,0 @@
1
- import type { OpsServer } from '../classes.opsserver.js';
2
- export declare class RadiusHandler {
3
- private opsServerRef;
4
- constructor(opsServerRef: OpsServer);
5
- private registerHandlers;
6
- }
@@ -1,295 +0,0 @@
1
- import * as plugins from '../../plugins.js';
2
- import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
- export class RadiusHandler {
4
- opsServerRef;
5
- constructor(opsServerRef) {
6
- this.opsServerRef = opsServerRef;
7
- this.registerHandlers();
8
- }
9
- registerHandlers() {
10
- const viewRouter = this.opsServerRef.viewRouter;
11
- const adminRouter = this.opsServerRef.adminRouter;
12
- // ========================================================================
13
- // RADIUS Client Management
14
- // ========================================================================
15
- // Get all RADIUS clients (read)
16
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusClients', async (dataArg, toolsArg) => {
17
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
18
- if (!radiusServer) {
19
- return { clients: [] };
20
- }
21
- const clients = radiusServer.getClients();
22
- return {
23
- clients: clients.map(c => ({
24
- name: c.name,
25
- ipRange: c.ipRange,
26
- description: c.description,
27
- enabled: c.enabled,
28
- })),
29
- };
30
- }));
31
- // Add or update a RADIUS client (write)
32
- adminRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('setRadiusClient', async (dataArg, toolsArg) => {
33
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
34
- if (!radiusServer) {
35
- return { success: false, message: 'RADIUS server not configured' };
36
- }
37
- try {
38
- await radiusServer.addClient(dataArg.client);
39
- return { success: true };
40
- }
41
- catch (error) {
42
- return { success: false, message: error.message };
43
- }
44
- }));
45
- // Remove a RADIUS client (write)
46
- adminRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('removeRadiusClient', async (dataArg, toolsArg) => {
47
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
48
- if (!radiusServer) {
49
- return { success: false, message: 'RADIUS server not configured' };
50
- }
51
- const removed = radiusServer.removeClient(dataArg.name);
52
- return {
53
- success: removed,
54
- message: removed ? undefined : 'Client not found',
55
- };
56
- }));
57
- // ========================================================================
58
- // VLAN Mapping Management
59
- // ========================================================================
60
- // Get all VLAN mappings (read)
61
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getVlanMappings', async (dataArg, toolsArg) => {
62
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
63
- if (!radiusServer) {
64
- return {
65
- mappings: [],
66
- config: { defaultVlan: 1, allowUnknownMacs: true },
67
- };
68
- }
69
- const vlanManager = radiusServer.getVlanManager();
70
- const mappings = vlanManager.getAllMappings();
71
- const config = vlanManager.getConfig();
72
- return {
73
- mappings: mappings.map(m => ({
74
- mac: m.mac,
75
- vlan: m.vlan,
76
- description: m.description,
77
- enabled: m.enabled,
78
- createdAt: m.createdAt,
79
- updatedAt: m.updatedAt,
80
- })),
81
- config: {
82
- defaultVlan: config.defaultVlan,
83
- allowUnknownMacs: config.allowUnknownMacs,
84
- },
85
- };
86
- }));
87
- // Add or update a VLAN mapping (write)
88
- adminRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('setVlanMapping', async (dataArg, toolsArg) => {
89
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
90
- if (!radiusServer) {
91
- return { success: false, message: 'RADIUS server not configured' };
92
- }
93
- try {
94
- const vlanManager = radiusServer.getVlanManager();
95
- const mapping = await vlanManager.addMapping(dataArg.mapping);
96
- return {
97
- success: true,
98
- mapping: {
99
- mac: mapping.mac,
100
- vlan: mapping.vlan,
101
- description: mapping.description,
102
- enabled: mapping.enabled,
103
- createdAt: mapping.createdAt,
104
- updatedAt: mapping.updatedAt,
105
- },
106
- };
107
- }
108
- catch (error) {
109
- return { success: false, message: error.message };
110
- }
111
- }));
112
- // Remove a VLAN mapping (write)
113
- adminRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('removeVlanMapping', async (dataArg, toolsArg) => {
114
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
115
- if (!radiusServer) {
116
- return { success: false, message: 'RADIUS server not configured' };
117
- }
118
- const vlanManager = radiusServer.getVlanManager();
119
- const removed = await vlanManager.removeMapping(dataArg.mac);
120
- return {
121
- success: removed,
122
- message: removed ? undefined : 'Mapping not found',
123
- };
124
- }));
125
- // Update VLAN configuration (write)
126
- adminRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('updateVlanConfig', async (dataArg, toolsArg) => {
127
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
128
- if (!radiusServer) {
129
- return {
130
- success: false,
131
- config: { defaultVlan: 1, allowUnknownMacs: true },
132
- };
133
- }
134
- const vlanManager = radiusServer.getVlanManager();
135
- vlanManager.updateConfig({
136
- defaultVlan: dataArg.defaultVlan,
137
- allowUnknownMacs: dataArg.allowUnknownMacs,
138
- });
139
- const config = vlanManager.getConfig();
140
- return {
141
- success: true,
142
- config: {
143
- defaultVlan: config.defaultVlan,
144
- allowUnknownMacs: config.allowUnknownMacs,
145
- },
146
- };
147
- }));
148
- // Test VLAN assignment (read)
149
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('testVlanAssignment', async (dataArg, toolsArg) => {
150
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
151
- if (!radiusServer) {
152
- return { assigned: false, vlan: 0, isDefault: false };
153
- }
154
- const vlanManager = radiusServer.getVlanManager();
155
- const result = vlanManager.assignVlan(dataArg.mac);
156
- return {
157
- assigned: result.assigned,
158
- vlan: result.vlan,
159
- isDefault: result.isDefault,
160
- matchedRule: result.matchedRule
161
- ? {
162
- mac: result.matchedRule.mac,
163
- vlan: result.matchedRule.vlan,
164
- description: result.matchedRule.description,
165
- }
166
- : undefined,
167
- };
168
- }));
169
- // ========================================================================
170
- // Accounting / Session Management
171
- // ========================================================================
172
- // Get active sessions (read)
173
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusSessions', async (dataArg, toolsArg) => {
174
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
175
- if (!radiusServer) {
176
- return { sessions: [], totalCount: 0 };
177
- }
178
- const accountingManager = radiusServer.getAccountingManager();
179
- let sessions = accountingManager.getActiveSessions();
180
- // Apply filters
181
- if (dataArg.filter) {
182
- if (dataArg.filter.username) {
183
- sessions = sessions.filter(s => s.username === dataArg.filter.username);
184
- }
185
- if (dataArg.filter.nasIpAddress) {
186
- sessions = sessions.filter(s => s.nasIpAddress === dataArg.filter.nasIpAddress);
187
- }
188
- if (dataArg.filter.vlanId !== undefined) {
189
- sessions = sessions.filter(s => s.vlanId === dataArg.filter.vlanId);
190
- }
191
- }
192
- return {
193
- sessions: sessions.map(s => ({
194
- sessionId: s.sessionId,
195
- username: s.username,
196
- macAddress: s.macAddress,
197
- nasIpAddress: s.nasIpAddress,
198
- nasIdentifier: s.nasIdentifier,
199
- vlanId: s.vlanId,
200
- framedIpAddress: s.framedIpAddress,
201
- startTime: s.startTime,
202
- lastUpdateTime: s.lastUpdateTime,
203
- status: s.status,
204
- inputOctets: s.inputOctets,
205
- outputOctets: s.outputOctets,
206
- sessionTime: s.sessionTime,
207
- })),
208
- totalCount: sessions.length,
209
- };
210
- }));
211
- // Disconnect a session (write)
212
- adminRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('disconnectRadiusSession', async (dataArg, toolsArg) => {
213
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
214
- if (!radiusServer) {
215
- return { success: false, message: 'RADIUS server not configured' };
216
- }
217
- const accountingManager = radiusServer.getAccountingManager();
218
- const disconnected = await accountingManager.disconnectSession(dataArg.sessionId, dataArg.reason || 'AdminReset');
219
- return {
220
- success: disconnected,
221
- message: disconnected ? undefined : 'Session not found',
222
- };
223
- }));
224
- // Get accounting summary (read)
225
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusAccountingSummary', async (dataArg, toolsArg) => {
226
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
227
- if (!radiusServer) {
228
- return {
229
- summary: {
230
- periodStart: dataArg.startTime,
231
- periodEnd: dataArg.endTime,
232
- totalSessions: 0,
233
- activeSessions: 0,
234
- totalInputBytes: 0,
235
- totalOutputBytes: 0,
236
- totalSessionTime: 0,
237
- averageSessionDuration: 0,
238
- uniqueUsers: 0,
239
- sessionsByVlan: {},
240
- topUsersByTraffic: [],
241
- },
242
- };
243
- }
244
- const accountingManager = radiusServer.getAccountingManager();
245
- const summary = await accountingManager.getSummary(dataArg.startTime, dataArg.endTime);
246
- return { summary };
247
- }));
248
- // ========================================================================
249
- // Statistics
250
- // ========================================================================
251
- // Get RADIUS statistics (read)
252
- viewRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusStatistics', async (dataArg, toolsArg) => {
253
- const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
254
- if (!radiusServer) {
255
- return {
256
- stats: {
257
- running: false,
258
- uptime: 0,
259
- authRequests: 0,
260
- authAccepts: 0,
261
- authRejects: 0,
262
- accountingRequests: 0,
263
- activeSessions: 0,
264
- vlanMappings: 0,
265
- clients: 0,
266
- },
267
- vlanStats: {
268
- totalMappings: 0,
269
- enabledMappings: 0,
270
- exactMatches: 0,
271
- ouiPatterns: 0,
272
- wildcardPatterns: 0,
273
- },
274
- accountingStats: {
275
- activeSessions: 0,
276
- totalSessionsStarted: 0,
277
- totalSessionsStopped: 0,
278
- totalInputBytes: 0,
279
- totalOutputBytes: 0,
280
- interimUpdatesReceived: 0,
281
- },
282
- };
283
- }
284
- const stats = radiusServer.getStats();
285
- const vlanStats = radiusServer.getVlanManager().getStats();
286
- const accountingStats = radiusServer.getAccountingManager().getStats();
287
- return {
288
- stats,
289
- vlanStats,
290
- accountingStats,
291
- };
292
- }));
293
- }
294
- }
295
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaXVzLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaGFuZGxlcnMvcmFkaXVzLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlELE1BQU0sT0FBTyxhQUFhO0lBQ0o7SUFBcEIsWUFBb0IsWUFBdUI7UUFBdkIsaUJBQVksR0FBWixZQUFZLENBQVc7UUFDekMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUNsRCwyRUFBMkU7UUFDM0UsMkJBQTJCO1FBQzNCLDJFQUEyRTtRQUUzRSxnQ0FBZ0M7UUFDaEMsVUFBVSxDQUFDLGVBQWUsQ0FDeEIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMsa0JBQWtCLEVBQ2xCLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDO1lBRWhFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN6QixDQUFDO1lBRUQsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzFDLE9BQU87Z0JBQ0wsT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN6QixJQUFJLEVBQUUsQ0FBQyxDQUFD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
@@ -1,6 +0,0 @@
1
- import type { OpsServer } from '../classes.opsserver.js';
2
- export declare class RemoteIngressHandler {
3
- private opsServerRef;
4
- constructor(opsServerRef: OpsServer);
5
- private registerHandlers;
6
- }