@serve.zone/dcrouter 8.1.0 → 9.1.1

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 (61) hide show
  1. package/dist_serve/bundle.js +1417 -992
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/cache/classes.cache.cleaner.d.ts +47 -0
  4. package/dist_ts/cache/classes.cache.cleaner.js +130 -0
  5. package/dist_ts/cache/classes.cached.document.d.ts +76 -0
  6. package/dist_ts/cache/classes.cached.document.js +100 -0
  7. package/dist_ts/cache/classes.cachedb.d.ts +60 -0
  8. package/dist_ts/cache/classes.cachedb.js +126 -0
  9. package/dist_ts/cache/documents/classes.cached.email.d.ts +125 -0
  10. package/dist_ts/cache/documents/classes.cached.email.js +337 -0
  11. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +119 -0
  12. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +323 -0
  13. package/dist_ts/cache/documents/index.d.ts +2 -0
  14. package/dist_ts/cache/documents/index.js +3 -0
  15. package/dist_ts/cache/index.d.ts +4 -0
  16. package/dist_ts/cache/index.js +7 -0
  17. package/dist_ts/monitoring/classes.metricscache.d.ts +32 -0
  18. package/dist_ts/monitoring/classes.metricscache.js +63 -0
  19. package/dist_ts/monitoring/classes.metricsmanager.d.ts +169 -0
  20. package/dist_ts/monitoring/classes.metricsmanager.js +591 -0
  21. package/dist_ts/monitoring/index.d.ts +1 -0
  22. package/dist_ts/monitoring/index.js +2 -0
  23. package/dist_ts/opsserver/handlers/admin.handler.d.ts +31 -0
  24. package/dist_ts/opsserver/handlers/admin.handler.js +180 -0
  25. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +34 -0
  26. package/dist_ts/opsserver/handlers/certificate.handler.js +419 -0
  27. package/dist_ts/opsserver/handlers/config.handler.d.ts +9 -0
  28. package/dist_ts/opsserver/handlers/config.handler.js +169 -0
  29. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +32 -0
  30. package/dist_ts/opsserver/handlers/email-ops.handler.js +226 -0
  31. package/dist_ts/opsserver/handlers/logs.handler.d.ts +17 -0
  32. package/dist_ts/opsserver/handlers/logs.handler.js +215 -0
  33. package/dist_ts/opsserver/handlers/radius.handler.d.ts +8 -0
  34. package/dist_ts/opsserver/handlers/radius.handler.js +296 -0
  35. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +8 -0
  36. package/dist_ts/opsserver/handlers/remoteingress.handler.js +154 -0
  37. package/dist_ts/opsserver/handlers/security.handler.d.ts +11 -0
  38. package/dist_ts/opsserver/handlers/security.handler.js +232 -0
  39. package/dist_ts/opsserver/handlers/stats.handler.d.ts +13 -0
  40. package/dist_ts/opsserver/handlers/stats.handler.js +400 -0
  41. package/dist_ts/security/classes.securitylogger.d.ts +140 -0
  42. package/dist_ts/security/classes.securitylogger.js +235 -0
  43. package/dist_ts/storage/classes.storagemanager.d.ts +82 -0
  44. package/dist_ts/storage/classes.storagemanager.js +344 -0
  45. package/dist_ts/storage/index.d.ts +1 -0
  46. package/dist_ts/storage/index.js +3 -0
  47. package/dist_ts_interfaces/requests/config.d.ts +77 -1
  48. package/dist_ts_web/00_commitinfo_data.js +1 -1
  49. package/dist_ts_web/appstate.d.ts +1 -1
  50. package/dist_ts_web/elements/ops-dashboard.js +15 -5
  51. package/dist_ts_web/elements/ops-view-apitokens.js +8 -4
  52. package/dist_ts_web/elements/ops-view-config.d.ts +10 -8
  53. package/dist_ts_web/elements/ops-view-config.js +215 -297
  54. package/package.json +2 -2
  55. package/ts/00_commitinfo_data.ts +1 -1
  56. package/ts/opsserver/handlers/config.handler.ts +154 -72
  57. package/ts_web/00_commitinfo_data.ts +1 -1
  58. package/ts_web/appstate.ts +1 -1
  59. package/ts_web/elements/ops-dashboard.ts +14 -4
  60. package/ts_web/elements/ops-view-apitokens.ts +7 -3
  61. package/ts_web/elements/ops-view-config.ts +237 -299
@@ -0,0 +1,296 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
+ export class RadiusHandler {
4
+ opsServerRef;
5
+ typedrouter = new plugins.typedrequest.TypedRouter();
6
+ constructor(opsServerRef) {
7
+ this.opsServerRef = opsServerRef;
8
+ // Add this handler's router to the parent
9
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
10
+ this.registerHandlers();
11
+ }
12
+ registerHandlers() {
13
+ // ========================================================================
14
+ // RADIUS Client Management
15
+ // ========================================================================
16
+ // Get all RADIUS clients
17
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusClients', async (dataArg, toolsArg) => {
18
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
19
+ if (!radiusServer) {
20
+ return { clients: [] };
21
+ }
22
+ const clients = radiusServer.getClients();
23
+ return {
24
+ clients: clients.map(c => ({
25
+ name: c.name,
26
+ ipRange: c.ipRange,
27
+ description: c.description,
28
+ enabled: c.enabled,
29
+ })),
30
+ };
31
+ }));
32
+ // Add or update a RADIUS client
33
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('setRadiusClient', async (dataArg, toolsArg) => {
34
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
35
+ if (!radiusServer) {
36
+ return { success: false, message: 'RADIUS server not configured' };
37
+ }
38
+ try {
39
+ await radiusServer.addClient(dataArg.client);
40
+ return { success: true };
41
+ }
42
+ catch (error) {
43
+ return { success: false, message: error.message };
44
+ }
45
+ }));
46
+ // Remove a RADIUS client
47
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('removeRadiusClient', async (dataArg, toolsArg) => {
48
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
49
+ if (!radiusServer) {
50
+ return { success: false, message: 'RADIUS server not configured' };
51
+ }
52
+ const removed = radiusServer.removeClient(dataArg.name);
53
+ return {
54
+ success: removed,
55
+ message: removed ? undefined : 'Client not found',
56
+ };
57
+ }));
58
+ // ========================================================================
59
+ // VLAN Mapping Management
60
+ // ========================================================================
61
+ // Get all VLAN mappings
62
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getVlanMappings', async (dataArg, toolsArg) => {
63
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
64
+ if (!radiusServer) {
65
+ return {
66
+ mappings: [],
67
+ config: { defaultVlan: 1, allowUnknownMacs: true },
68
+ };
69
+ }
70
+ const vlanManager = radiusServer.getVlanManager();
71
+ const mappings = vlanManager.getAllMappings();
72
+ const config = vlanManager.getConfig();
73
+ return {
74
+ mappings: mappings.map(m => ({
75
+ mac: m.mac,
76
+ vlan: m.vlan,
77
+ description: m.description,
78
+ enabled: m.enabled,
79
+ createdAt: m.createdAt,
80
+ updatedAt: m.updatedAt,
81
+ })),
82
+ config: {
83
+ defaultVlan: config.defaultVlan,
84
+ allowUnknownMacs: config.allowUnknownMacs,
85
+ },
86
+ };
87
+ }));
88
+ // Add or update a VLAN mapping
89
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('setVlanMapping', async (dataArg, toolsArg) => {
90
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
91
+ if (!radiusServer) {
92
+ return { success: false, message: 'RADIUS server not configured' };
93
+ }
94
+ try {
95
+ const vlanManager = radiusServer.getVlanManager();
96
+ const mapping = await vlanManager.addMapping(dataArg.mapping);
97
+ return {
98
+ success: true,
99
+ mapping: {
100
+ mac: mapping.mac,
101
+ vlan: mapping.vlan,
102
+ description: mapping.description,
103
+ enabled: mapping.enabled,
104
+ createdAt: mapping.createdAt,
105
+ updatedAt: mapping.updatedAt,
106
+ },
107
+ };
108
+ }
109
+ catch (error) {
110
+ return { success: false, message: error.message };
111
+ }
112
+ }));
113
+ // Remove a VLAN mapping
114
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('removeVlanMapping', async (dataArg, toolsArg) => {
115
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
116
+ if (!radiusServer) {
117
+ return { success: false, message: 'RADIUS server not configured' };
118
+ }
119
+ const vlanManager = radiusServer.getVlanManager();
120
+ const removed = await vlanManager.removeMapping(dataArg.mac);
121
+ return {
122
+ success: removed,
123
+ message: removed ? undefined : 'Mapping not found',
124
+ };
125
+ }));
126
+ // Update VLAN configuration
127
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('updateVlanConfig', async (dataArg, toolsArg) => {
128
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
129
+ if (!radiusServer) {
130
+ return {
131
+ success: false,
132
+ config: { defaultVlan: 1, allowUnknownMacs: true },
133
+ };
134
+ }
135
+ const vlanManager = radiusServer.getVlanManager();
136
+ vlanManager.updateConfig({
137
+ defaultVlan: dataArg.defaultVlan,
138
+ allowUnknownMacs: dataArg.allowUnknownMacs,
139
+ });
140
+ const config = vlanManager.getConfig();
141
+ return {
142
+ success: true,
143
+ config: {
144
+ defaultVlan: config.defaultVlan,
145
+ allowUnknownMacs: config.allowUnknownMacs,
146
+ },
147
+ };
148
+ }));
149
+ // Test VLAN assignment
150
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('testVlanAssignment', async (dataArg, toolsArg) => {
151
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
152
+ if (!radiusServer) {
153
+ return { assigned: false, vlan: 0, isDefault: false };
154
+ }
155
+ const vlanManager = radiusServer.getVlanManager();
156
+ const result = vlanManager.assignVlan(dataArg.mac);
157
+ return {
158
+ assigned: result.assigned,
159
+ vlan: result.vlan,
160
+ isDefault: result.isDefault,
161
+ matchedRule: result.matchedRule
162
+ ? {
163
+ mac: result.matchedRule.mac,
164
+ vlan: result.matchedRule.vlan,
165
+ description: result.matchedRule.description,
166
+ }
167
+ : undefined,
168
+ };
169
+ }));
170
+ // ========================================================================
171
+ // Accounting / Session Management
172
+ // ========================================================================
173
+ // Get active sessions
174
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusSessions', async (dataArg, toolsArg) => {
175
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
176
+ if (!radiusServer) {
177
+ return { sessions: [], totalCount: 0 };
178
+ }
179
+ const accountingManager = radiusServer.getAccountingManager();
180
+ let sessions = accountingManager.getActiveSessions();
181
+ // Apply filters
182
+ if (dataArg.filter) {
183
+ if (dataArg.filter.username) {
184
+ sessions = sessions.filter(s => s.username === dataArg.filter.username);
185
+ }
186
+ if (dataArg.filter.nasIpAddress) {
187
+ sessions = sessions.filter(s => s.nasIpAddress === dataArg.filter.nasIpAddress);
188
+ }
189
+ if (dataArg.filter.vlanId !== undefined) {
190
+ sessions = sessions.filter(s => s.vlanId === dataArg.filter.vlanId);
191
+ }
192
+ }
193
+ return {
194
+ sessions: sessions.map(s => ({
195
+ sessionId: s.sessionId,
196
+ username: s.username,
197
+ macAddress: s.macAddress,
198
+ nasIpAddress: s.nasIpAddress,
199
+ nasIdentifier: s.nasIdentifier,
200
+ vlanId: s.vlanId,
201
+ framedIpAddress: s.framedIpAddress,
202
+ startTime: s.startTime,
203
+ lastUpdateTime: s.lastUpdateTime,
204
+ status: s.status,
205
+ inputOctets: s.inputOctets,
206
+ outputOctets: s.outputOctets,
207
+ sessionTime: s.sessionTime,
208
+ })),
209
+ totalCount: sessions.length,
210
+ };
211
+ }));
212
+ // Disconnect a session
213
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('disconnectRadiusSession', async (dataArg, toolsArg) => {
214
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
215
+ if (!radiusServer) {
216
+ return { success: false, message: 'RADIUS server not configured' };
217
+ }
218
+ const accountingManager = radiusServer.getAccountingManager();
219
+ const disconnected = await accountingManager.disconnectSession(dataArg.sessionId, dataArg.reason || 'AdminReset');
220
+ return {
221
+ success: disconnected,
222
+ message: disconnected ? undefined : 'Session not found',
223
+ };
224
+ }));
225
+ // Get accounting summary
226
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusAccountingSummary', async (dataArg, toolsArg) => {
227
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
228
+ if (!radiusServer) {
229
+ return {
230
+ summary: {
231
+ periodStart: dataArg.startTime,
232
+ periodEnd: dataArg.endTime,
233
+ totalSessions: 0,
234
+ activeSessions: 0,
235
+ totalInputBytes: 0,
236
+ totalOutputBytes: 0,
237
+ totalSessionTime: 0,
238
+ averageSessionDuration: 0,
239
+ uniqueUsers: 0,
240
+ sessionsByVlan: {},
241
+ topUsersByTraffic: [],
242
+ },
243
+ };
244
+ }
245
+ const accountingManager = radiusServer.getAccountingManager();
246
+ const summary = await accountingManager.getSummary(dataArg.startTime, dataArg.endTime);
247
+ return { summary };
248
+ }));
249
+ // ========================================================================
250
+ // Statistics
251
+ // ========================================================================
252
+ // Get RADIUS statistics
253
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRadiusStatistics', async (dataArg, toolsArg) => {
254
+ const radiusServer = this.opsServerRef.dcRouterRef.radiusServer;
255
+ if (!radiusServer) {
256
+ return {
257
+ stats: {
258
+ running: false,
259
+ uptime: 0,
260
+ authRequests: 0,
261
+ authAccepts: 0,
262
+ authRejects: 0,
263
+ accountingRequests: 0,
264
+ activeSessions: 0,
265
+ vlanMappings: 0,
266
+ clients: 0,
267
+ },
268
+ vlanStats: {
269
+ totalMappings: 0,
270
+ enabledMappings: 0,
271
+ exactMatches: 0,
272
+ ouiPatterns: 0,
273
+ wildcardPatterns: 0,
274
+ },
275
+ accountingStats: {
276
+ activeSessions: 0,
277
+ totalSessionsStarted: 0,
278
+ totalSessionsStopped: 0,
279
+ totalInputBytes: 0,
280
+ totalOutputBytes: 0,
281
+ interimUpdatesReceived: 0,
282
+ },
283
+ };
284
+ }
285
+ const stats = radiusServer.getStats();
286
+ const vlanStats = radiusServer.getVlanManager().getStats();
287
+ const accountingStats = radiusServer.getAccountingManager().getStats();
288
+ return {
289
+ stats,
290
+ vlanStats,
291
+ accountingStats,
292
+ };
293
+ }));
294
+ }
295
+ }
296
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFkaXVzLmhhbmRsZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90cy9vcHNzZXJ2ZXIvaGFuZGxlcnMvcmFkaXVzLmhhbmRsZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUU1QyxPQUFPLEtBQUssVUFBVSxNQUFNLGlDQUFpQyxDQUFDO0FBRTlELE1BQU0sT0FBTyxhQUFhO0lBR0o7SUFGYixXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBRTVELFlBQW9CLFlBQXVCO1FBQXZCLGlCQUFZLEdBQVosWUFBWSxDQUFXO1FBQ3pDLDBDQUEwQztRQUMxQyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsMkVBQTJFO1FBQzNFLDJCQUEyQjtRQUMzQiwyRUFBMkU7UUFFM0UseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyxrQkFBa0IsRUFDbEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUMxQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUM7WUFFaEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQixPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3pCLENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDMUMsT0FBTztnQkFDTCxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFD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
@@ -0,0 +1,8 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { OpsServer } from '../classes.opsserver.js';
3
+ export declare class RemoteIngressHandler {
4
+ private opsServerRef;
5
+ typedrouter: plugins.typedrequest.TypedRouter;
6
+ constructor(opsServerRef: OpsServer);
7
+ private registerHandlers;
8
+ }
@@ -0,0 +1,154 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
+ export class RemoteIngressHandler {
4
+ opsServerRef;
5
+ typedrouter = new plugins.typedrequest.TypedRouter();
6
+ constructor(opsServerRef) {
7
+ this.opsServerRef = opsServerRef;
8
+ this.opsServerRef.typedrouter.addTypedRouter(this.typedrouter);
9
+ this.registerHandlers();
10
+ }
11
+ registerHandlers() {
12
+ // Get all remote ingress edges
13
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRemoteIngresses', async (dataArg, toolsArg) => {
14
+ const manager = this.opsServerRef.dcRouterRef.remoteIngressManager;
15
+ if (!manager) {
16
+ return { edges: [] };
17
+ }
18
+ // Return edges without secrets, enriched with effective listen ports and breakdown
19
+ const edges = manager.getAllEdges().map((e) => {
20
+ const breakdown = manager.getPortBreakdown(e);
21
+ return {
22
+ ...e,
23
+ secret: '********', // Never expose secrets via API
24
+ effectiveListenPorts: manager.getEffectiveListenPorts(e),
25
+ manualPorts: breakdown.manual,
26
+ derivedPorts: breakdown.derived,
27
+ };
28
+ });
29
+ return { edges };
30
+ }));
31
+ // Create a new remote ingress edge
32
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('createRemoteIngress', async (dataArg, toolsArg) => {
33
+ const manager = this.opsServerRef.dcRouterRef.remoteIngressManager;
34
+ const tunnelManager = this.opsServerRef.dcRouterRef.tunnelManager;
35
+ if (!manager) {
36
+ return {
37
+ success: false,
38
+ edge: null,
39
+ };
40
+ }
41
+ const edge = await manager.createEdge(dataArg.name, dataArg.listenPorts || [], dataArg.tags, dataArg.autoDerivePorts ?? true);
42
+ // Sync allowed edges with the hub
43
+ if (tunnelManager) {
44
+ await tunnelManager.syncAllowedEdges();
45
+ }
46
+ return { success: true, edge };
47
+ }));
48
+ // Delete a remote ingress edge
49
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('deleteRemoteIngress', async (dataArg, toolsArg) => {
50
+ const manager = this.opsServerRef.dcRouterRef.remoteIngressManager;
51
+ const tunnelManager = this.opsServerRef.dcRouterRef.tunnelManager;
52
+ if (!manager) {
53
+ return { success: false, message: 'RemoteIngress not configured' };
54
+ }
55
+ const deleted = await manager.deleteEdge(dataArg.id);
56
+ if (deleted && tunnelManager) {
57
+ await tunnelManager.syncAllowedEdges();
58
+ }
59
+ return {
60
+ success: deleted,
61
+ message: deleted ? undefined : 'Edge not found',
62
+ };
63
+ }));
64
+ // Update a remote ingress edge
65
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('updateRemoteIngress', async (dataArg, toolsArg) => {
66
+ const manager = this.opsServerRef.dcRouterRef.remoteIngressManager;
67
+ const tunnelManager = this.opsServerRef.dcRouterRef.tunnelManager;
68
+ if (!manager) {
69
+ return { success: false, edge: null };
70
+ }
71
+ const edge = await manager.updateEdge(dataArg.id, {
72
+ name: dataArg.name,
73
+ listenPorts: dataArg.listenPorts,
74
+ autoDerivePorts: dataArg.autoDerivePorts,
75
+ enabled: dataArg.enabled,
76
+ tags: dataArg.tags,
77
+ });
78
+ if (!edge) {
79
+ return { success: false, edge: null };
80
+ }
81
+ // Sync allowed edges — ports, tags, or enabled may have changed
82
+ if (tunnelManager) {
83
+ await tunnelManager.syncAllowedEdges();
84
+ }
85
+ const breakdown = manager.getPortBreakdown(edge);
86
+ return {
87
+ success: true,
88
+ edge: {
89
+ ...edge,
90
+ secret: '********',
91
+ effectiveListenPorts: manager.getEffectiveListenPorts(edge),
92
+ manualPorts: breakdown.manual,
93
+ derivedPorts: breakdown.derived,
94
+ },
95
+ };
96
+ }));
97
+ // Regenerate secret for an edge
98
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('regenerateRemoteIngressSecret', async (dataArg, toolsArg) => {
99
+ const manager = this.opsServerRef.dcRouterRef.remoteIngressManager;
100
+ const tunnelManager = this.opsServerRef.dcRouterRef.tunnelManager;
101
+ if (!manager) {
102
+ return { success: false, secret: '' };
103
+ }
104
+ const secret = await manager.regenerateSecret(dataArg.id);
105
+ if (!secret) {
106
+ return { success: false, secret: '' };
107
+ }
108
+ // Sync allowed edges since secret changed
109
+ if (tunnelManager) {
110
+ await tunnelManager.syncAllowedEdges();
111
+ }
112
+ return { success: true, secret };
113
+ }));
114
+ // Get runtime status of all edges
115
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRemoteIngressStatus', async (dataArg, toolsArg) => {
116
+ const tunnelManager = this.opsServerRef.dcRouterRef.tunnelManager;
117
+ if (!tunnelManager) {
118
+ return { statuses: [] };
119
+ }
120
+ return { statuses: tunnelManager.getEdgeStatuses() };
121
+ }));
122
+ // Get a connection token for an edge
123
+ this.typedrouter.addTypedHandler(new plugins.typedrequest.TypedHandler('getRemoteIngressConnectionToken', async (dataArg, toolsArg) => {
124
+ const manager = this.opsServerRef.dcRouterRef.remoteIngressManager;
125
+ if (!manager) {
126
+ return { success: false, message: 'RemoteIngress not configured' };
127
+ }
128
+ const edge = manager.getEdge(dataArg.edgeId);
129
+ if (!edge) {
130
+ return { success: false, message: 'Edge not found' };
131
+ }
132
+ if (!edge.enabled) {
133
+ return { success: false, message: 'Edge is disabled' };
134
+ }
135
+ const hubHost = dataArg.hubHost
136
+ || this.opsServerRef.dcRouterRef.options.remoteIngressConfig?.hubDomain;
137
+ if (!hubHost) {
138
+ return {
139
+ success: false,
140
+ message: 'No hub hostname configured. Set hubDomain in remoteIngressConfig or provide hubHost.',
141
+ };
142
+ }
143
+ const hubPort = this.opsServerRef.dcRouterRef.options.remoteIngressConfig?.tunnelPort ?? 8443;
144
+ const token = plugins.remoteingress.encodeConnectionToken({
145
+ hubHost,
146
+ hubPort,
147
+ edgeId: edge.id,
148
+ secret: edge.secret,
149
+ });
150
+ return { success: true, token };
151
+ }));
152
+ }
153
+ }
154
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVtb3RlaW5ncmVzcy5oYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHMvb3Bzc2VydmVyL2hhbmRsZXJzL3JlbW90ZWluZ3Jlc3MuaGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sS0FBSyxVQUFVLE1BQU0saUNBQWlDLENBQUM7QUFFOUQsTUFBTSxPQUFPLG9CQUFvQjtJQUdYO0lBRmIsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUU1RCxZQUFvQixZQUF1QjtRQUF2QixpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUM5QixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxDQUNuQyxvQkFBb0IsRUFDcEIsS0FBSyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUMxQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxvQkFBb0IsQ0FBQztZQUNuRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ2IsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN2QixDQUFDO1lBQ0QsbUZBQW1GO1lBQ25GLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDNUMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFD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
@@ -0,0 +1,11 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import type { OpsServer } from '../classes.opsserver.js';
3
+ export declare class SecurityHandler {
4
+ private opsServerRef;
5
+ typedrouter: plugins.typedrequest.TypedRouter;
6
+ constructor(opsServerRef: OpsServer);
7
+ private registerHandlers;
8
+ private collectSecurityMetrics;
9
+ private getActiveConnections;
10
+ private getRateLimitStatus;
11
+ }