@serve.zone/dcrouter 11.0.22 → 11.0.23

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 (105) hide show
  1. package/dist_serve/bundle.js +1 -1
  2. package/dist_ts/00_commitinfo_data.d.ts +8 -0
  3. package/dist_ts/00_commitinfo_data.js +9 -0
  4. package/dist_ts/cache/classes.cache.cleaner.d.ts +47 -0
  5. package/dist_ts/cache/classes.cache.cleaner.js +130 -0
  6. package/dist_ts/cache/classes.cached.document.d.ts +76 -0
  7. package/dist_ts/cache/classes.cached.document.js +100 -0
  8. package/dist_ts/cache/classes.cachedb.d.ts +60 -0
  9. package/dist_ts/cache/classes.cachedb.js +126 -0
  10. package/dist_ts/cache/documents/classes.cached.email.d.ts +125 -0
  11. package/dist_ts/cache/documents/classes.cached.email.js +337 -0
  12. package/dist_ts/cache/documents/classes.cached.ip.reputation.d.ts +119 -0
  13. package/dist_ts/cache/documents/classes.cached.ip.reputation.js +323 -0
  14. package/dist_ts/cache/documents/index.d.ts +2 -0
  15. package/dist_ts/cache/documents/index.js +3 -0
  16. package/dist_ts/cache/index.d.ts +4 -0
  17. package/dist_ts/cache/index.js +7 -0
  18. package/dist_ts/classes.cert-provision-scheduler.d.ts +53 -0
  19. package/dist_ts/classes.cert-provision-scheduler.js +110 -0
  20. package/dist_ts/classes.storage-cert-manager.d.ts +18 -0
  21. package/dist_ts/classes.storage-cert-manager.js +43 -0
  22. package/dist_ts/config/classes.api-token-manager.d.ts +46 -0
  23. package/dist_ts/config/classes.api-token-manager.js +150 -0
  24. package/dist_ts/config/classes.route-config-manager.d.ts +35 -0
  25. package/dist_ts/config/classes.route-config-manager.js +231 -0
  26. package/dist_ts/config/index.d.ts +3 -0
  27. package/dist_ts/config/index.js +5 -0
  28. package/dist_ts/config/validator.d.ts +104 -0
  29. package/dist_ts/config/validator.js +152 -0
  30. package/dist_ts/errors/base.errors.d.ts +224 -0
  31. package/dist_ts/errors/base.errors.js +320 -0
  32. package/dist_ts/errors/error.codes.d.ts +115 -0
  33. package/dist_ts/errors/error.codes.js +136 -0
  34. package/dist_ts/logger.d.ts +21 -0
  35. package/dist_ts/logger.js +81 -0
  36. package/dist_ts/monitoring/classes.metricscache.d.ts +32 -0
  37. package/dist_ts/monitoring/classes.metricscache.js +63 -0
  38. package/dist_ts/monitoring/classes.metricsmanager.d.ts +178 -0
  39. package/dist_ts/monitoring/classes.metricsmanager.js +642 -0
  40. package/dist_ts/monitoring/index.d.ts +1 -0
  41. package/dist_ts/monitoring/index.js +2 -0
  42. package/dist_ts/opsserver/classes.opsserver.d.ts +37 -0
  43. package/dist_ts/opsserver/classes.opsserver.js +85 -0
  44. package/dist_ts/opsserver/handlers/admin.handler.d.ts +31 -0
  45. package/dist_ts/opsserver/handlers/admin.handler.js +180 -0
  46. package/dist_ts/opsserver/handlers/api-token.handler.d.ts +6 -0
  47. package/dist_ts/opsserver/handlers/api-token.handler.js +62 -0
  48. package/dist_ts/opsserver/handlers/certificate.handler.d.ts +32 -0
  49. package/dist_ts/opsserver/handlers/certificate.handler.js +421 -0
  50. package/dist_ts/opsserver/handlers/config.handler.d.ts +7 -0
  51. package/dist_ts/opsserver/handlers/config.handler.js +192 -0
  52. package/dist_ts/opsserver/handlers/email-ops.handler.d.ts +30 -0
  53. package/dist_ts/opsserver/handlers/email-ops.handler.js +227 -0
  54. package/dist_ts/opsserver/handlers/index.d.ts +11 -0
  55. package/dist_ts/opsserver/handlers/index.js +12 -0
  56. package/dist_ts/opsserver/handlers/logs.handler.d.ts +25 -0
  57. package/dist_ts/opsserver/handlers/logs.handler.js +256 -0
  58. package/dist_ts/opsserver/handlers/radius.handler.d.ts +6 -0
  59. package/dist_ts/opsserver/handlers/radius.handler.js +295 -0
  60. package/dist_ts/opsserver/handlers/remoteingress.handler.d.ts +6 -0
  61. package/dist_ts/opsserver/handlers/remoteingress.handler.js +156 -0
  62. package/dist_ts/opsserver/handlers/route-management.handler.d.ts +14 -0
  63. package/dist_ts/opsserver/handlers/route-management.handler.js +117 -0
  64. package/dist_ts/opsserver/handlers/security.handler.d.ts +9 -0
  65. package/dist_ts/opsserver/handlers/security.handler.js +231 -0
  66. package/dist_ts/opsserver/handlers/stats.handler.d.ts +11 -0
  67. package/dist_ts/opsserver/handlers/stats.handler.js +399 -0
  68. package/dist_ts/opsserver/helpers/guards.d.ts +27 -0
  69. package/dist_ts/opsserver/helpers/guards.js +43 -0
  70. package/dist_ts/opsserver/index.d.ts +1 -0
  71. package/dist_ts/opsserver/index.js +2 -0
  72. package/dist_ts/paths.d.ts +26 -0
  73. package/dist_ts/paths.js +45 -0
  74. package/dist_ts/plugins.d.ts +79 -0
  75. package/dist_ts/plugins.js +113 -0
  76. package/dist_ts/radius/classes.accounting.manager.d.ts +218 -0
  77. package/dist_ts/radius/classes.accounting.manager.js +417 -0
  78. package/dist_ts/radius/classes.radius.server.d.ts +171 -0
  79. package/dist_ts/radius/classes.radius.server.js +385 -0
  80. package/dist_ts/radius/classes.vlan.manager.d.ts +128 -0
  81. package/dist_ts/radius/classes.vlan.manager.js +279 -0
  82. package/dist_ts/radius/index.d.ts +13 -0
  83. package/dist_ts/radius/index.js +14 -0
  84. package/dist_ts/remoteingress/classes.remoteingress-manager.d.ts +82 -0
  85. package/dist_ts/remoteingress/classes.remoteingress-manager.js +227 -0
  86. package/dist_ts/remoteingress/classes.tunnel-manager.d.ts +59 -0
  87. package/dist_ts/remoteingress/classes.tunnel-manager.js +165 -0
  88. package/dist_ts/remoteingress/index.d.ts +2 -0
  89. package/dist_ts/remoteingress/index.js +3 -0
  90. package/dist_ts/security/classes.contentscanner.d.ts +164 -0
  91. package/dist_ts/security/classes.contentscanner.js +642 -0
  92. package/dist_ts/security/classes.ipreputationchecker.d.ts +160 -0
  93. package/dist_ts/security/classes.ipreputationchecker.js +537 -0
  94. package/dist_ts/security/classes.securitylogger.d.ts +144 -0
  95. package/dist_ts/security/classes.securitylogger.js +233 -0
  96. package/dist_ts/security/index.d.ts +3 -0
  97. package/dist_ts/security/index.js +4 -0
  98. package/dist_ts/storage/classes.storagemanager.d.ts +83 -0
  99. package/dist_ts/storage/classes.storagemanager.js +350 -0
  100. package/dist_ts/storage/index.d.ts +1 -0
  101. package/dist_ts/storage/index.js +3 -0
  102. package/dist_ts_web/00_commitinfo_data.js +1 -1
  103. package/package.json +2 -2
  104. package/ts/00_commitinfo_data.ts +1 -1
  105. package/ts_web/00_commitinfo_data.ts +1 -1
@@ -0,0 +1,231 @@
1
+ import * as plugins from '../../plugins.js';
2
+ import * as interfaces from '../../../dist_ts_interfaces/index.js';
3
+ import { MetricsManager } from '../../monitoring/index.js';
4
+ export class SecurityHandler {
5
+ opsServerRef;
6
+ constructor(opsServerRef) {
7
+ this.opsServerRef = opsServerRef;
8
+ this.registerHandlers();
9
+ }
10
+ registerHandlers() {
11
+ // All security endpoints register directly on viewRouter (valid identity required via middleware)
12
+ const router = this.opsServerRef.viewRouter;
13
+ // Security Metrics Handler
14
+ router.addTypedHandler(new plugins.typedrequest.TypedHandler('getSecurityMetrics', async (dataArg, toolsArg) => {
15
+ const metrics = await this.collectSecurityMetrics();
16
+ return {
17
+ metrics: {
18
+ blockedIPs: metrics.blockedIPs,
19
+ reputationScores: metrics.reputationScores,
20
+ spamDetected: metrics.spamDetection.detected,
21
+ malwareDetected: metrics.malwareDetected,
22
+ phishingDetected: metrics.phishingDetected,
23
+ authenticationFailures: metrics.authFailures,
24
+ suspiciousActivities: metrics.suspiciousActivities,
25
+ },
26
+ trends: dataArg.includeDetails ? {
27
+ spam: metrics.trends.spam,
28
+ malware: metrics.trends.malware,
29
+ phishing: metrics.trends.phishing,
30
+ } : undefined,
31
+ };
32
+ }));
33
+ // Active Connections Handler
34
+ router.addTypedHandler(new plugins.typedrequest.TypedHandler('getActiveConnections', async (dataArg, toolsArg) => {
35
+ const connections = await this.getActiveConnections(dataArg.protocol, dataArg.state);
36
+ const connectionInfos = connections.map(conn => ({
37
+ id: conn.id,
38
+ remoteAddress: conn.source.ip,
39
+ localAddress: conn.destination.ip,
40
+ startTime: conn.startTime,
41
+ protocol: conn.type === 'http' ? 'https' : conn.type,
42
+ state: conn.status,
43
+ bytesReceived: Math.floor(conn.bytesTransferred / 2),
44
+ bytesSent: Math.floor(conn.bytesTransferred / 2),
45
+ }));
46
+ const summary = {
47
+ total: connectionInfos.length,
48
+ byProtocol: connectionInfos.reduce((acc, conn) => {
49
+ acc[conn.protocol] = (acc[conn.protocol] || 0) + 1;
50
+ return acc;
51
+ }, {}),
52
+ byState: connectionInfos.reduce((acc, conn) => {
53
+ acc[conn.state] = (acc[conn.state] || 0) + 1;
54
+ return acc;
55
+ }, {}),
56
+ };
57
+ return {
58
+ connections: connectionInfos,
59
+ summary,
60
+ };
61
+ }));
62
+ // Network Stats Handler - provides comprehensive network metrics
63
+ router.addTypedHandler(new plugins.typedrequest.TypedHandler('getNetworkStats', async (dataArg, toolsArg) => {
64
+ // Get network stats from MetricsManager if available
65
+ if (this.opsServerRef.dcRouterRef.metricsManager) {
66
+ const networkStats = await this.opsServerRef.dcRouterRef.metricsManager.getNetworkStats();
67
+ // Convert per-IP throughput Map to serializable array
68
+ const throughputByIP = [];
69
+ if (networkStats.throughputByIP) {
70
+ for (const [ip, tp] of networkStats.throughputByIP) {
71
+ throughputByIP.push({ ip, in: tp.in, out: tp.out });
72
+ }
73
+ }
74
+ return {
75
+ connectionsByIP: Array.from(networkStats.connectionsByIP.entries()).map(([ip, count]) => ({ ip, count })),
76
+ throughputRate: networkStats.throughputRate,
77
+ topIPs: networkStats.topIPs,
78
+ totalDataTransferred: networkStats.totalDataTransferred,
79
+ throughputHistory: networkStats.throughputHistory || [],
80
+ throughputByIP,
81
+ requestsPerSecond: networkStats.requestsPerSecond || 0,
82
+ requestsTotal: networkStats.requestsTotal || 0,
83
+ };
84
+ }
85
+ // Fallback if MetricsManager not available
86
+ return {
87
+ connectionsByIP: [],
88
+ throughputRate: { bytesInPerSecond: 0, bytesOutPerSecond: 0 },
89
+ topIPs: [],
90
+ totalDataTransferred: { bytesIn: 0, bytesOut: 0 },
91
+ throughputHistory: [],
92
+ throughputByIP: [],
93
+ requestsPerSecond: 0,
94
+ requestsTotal: 0,
95
+ };
96
+ }));
97
+ // Rate Limit Status Handler
98
+ router.addTypedHandler(new plugins.typedrequest.TypedHandler('getRateLimitStatus', async (dataArg, toolsArg) => {
99
+ const status = await this.getRateLimitStatus(dataArg.domain, dataArg.ip);
100
+ const limits = status.limits.map(limit => ({
101
+ domain: limit.identifier,
102
+ currentRate: limit.current,
103
+ limit: limit.limit,
104
+ remaining: limit.limit - limit.current,
105
+ resetTime: limit.resetAt,
106
+ blocked: limit.status === 'limited',
107
+ }));
108
+ return {
109
+ limits,
110
+ globalLimit: dataArg.includeBlocked ? {
111
+ current: limits.reduce((sum, l) => sum + l.currentRate, 0),
112
+ limit: 1000, // Global limit
113
+ remaining: 1000 - limits.reduce((sum, l) => sum + l.currentRate, 0),
114
+ } : undefined,
115
+ };
116
+ }));
117
+ }
118
+ async collectSecurityMetrics() {
119
+ // Get metrics from MetricsManager if available
120
+ if (this.opsServerRef.dcRouterRef.metricsManager) {
121
+ const securityStats = await this.opsServerRef.dcRouterRef.metricsManager.getSecurityStats();
122
+ return {
123
+ blockedIPs: [], // TODO: Track actual blocked IPs
124
+ reputationScores: {},
125
+ spamDetection: {
126
+ detected: securityStats.spamDetected,
127
+ falsePositives: 0,
128
+ },
129
+ malwareDetected: securityStats.malwareDetected,
130
+ phishingDetected: securityStats.phishingDetected,
131
+ authFailures: securityStats.authFailures,
132
+ suspiciousActivities: 0,
133
+ trends: {
134
+ spam: [],
135
+ malware: [],
136
+ phishing: [],
137
+ },
138
+ };
139
+ }
140
+ // Fallback if MetricsManager not available
141
+ return {
142
+ blockedIPs: [],
143
+ reputationScores: {},
144
+ spamDetection: {
145
+ detected: 0,
146
+ falsePositives: 0,
147
+ },
148
+ malwareDetected: 0,
149
+ phishingDetected: 0,
150
+ authFailures: 0,
151
+ suspiciousActivities: 0,
152
+ trends: {
153
+ spam: [],
154
+ malware: [],
155
+ phishing: [],
156
+ },
157
+ };
158
+ }
159
+ async getActiveConnections(protocol, state) {
160
+ const connections = [];
161
+ // Get connection info and network stats from MetricsManager if available
162
+ if (this.opsServerRef.dcRouterRef.metricsManager) {
163
+ const connectionInfo = await this.opsServerRef.dcRouterRef.metricsManager.getConnectionInfo();
164
+ const networkStats = await this.opsServerRef.dcRouterRef.metricsManager.getNetworkStats();
165
+ // Use IP-based connection data from the new metrics API
166
+ if (networkStats.connectionsByIP && networkStats.connectionsByIP.size > 0) {
167
+ let connIndex = 0;
168
+ const publicIp = this.opsServerRef.dcRouterRef.options.publicIp || 'server';
169
+ for (const [ip, count] of networkStats.connectionsByIP) {
170
+ // Create a connection entry for each active IP connection
171
+ for (let i = 0; i < Math.min(count, 5); i++) { // Limit to 5 connections per IP for UI performance
172
+ connections.push({
173
+ id: `conn-${connIndex++}`,
174
+ type: 'http',
175
+ source: {
176
+ ip: ip,
177
+ port: Math.floor(Math.random() * 50000) + 10000, // High port range
178
+ },
179
+ destination: {
180
+ ip: publicIp,
181
+ port: 443,
182
+ service: 'proxy',
183
+ },
184
+ startTime: Date.now() - Math.floor(Math.random() * 3600000), // Within last hour
185
+ bytesTransferred: Math.floor(networkStats.totalDataTransferred.bytesIn / networkStats.connectionsByIP.size),
186
+ status: 'active',
187
+ });
188
+ }
189
+ }
190
+ }
191
+ else if (connectionInfo.length > 0) {
192
+ // Fallback to route-based connection info if no IP data available
193
+ connectionInfo.forEach((info, index) => {
194
+ connections.push({
195
+ id: `conn-${index}`,
196
+ type: 'http',
197
+ source: {
198
+ ip: 'unknown',
199
+ port: 0,
200
+ },
201
+ destination: {
202
+ ip: this.opsServerRef.dcRouterRef.options.publicIp || 'server',
203
+ port: 443,
204
+ service: info.source,
205
+ },
206
+ startTime: info.lastActivity.getTime(),
207
+ bytesTransferred: 0,
208
+ status: 'active',
209
+ });
210
+ });
211
+ }
212
+ }
213
+ // Filter by protocol if specified
214
+ if (protocol) {
215
+ return connections.filter(conn => {
216
+ if (protocol === 'https' || protocol === 'http') {
217
+ return conn.type === 'http';
218
+ }
219
+ return conn.type === protocol.replace('s', ''); // smtp/smtps -> smtp
220
+ });
221
+ }
222
+ return connections;
223
+ }
224
+ async getRateLimitStatus(domain, ip) {
225
+ // TODO: Implement actual rate limit status collection
226
+ return {
227
+ limits: [],
228
+ };
229
+ }
230
+ }
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VjdXJpdHkuaGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzL29wc3NlcnZlci9oYW5kbGVycy9zZWN1cml0eS5oYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sa0JBQWtCLENBQUM7QUFFNUMsT0FBTyxLQUFLLFVBQVUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFM0QsTUFBTSxPQUFPLGVBQWU7SUFDTjtJQUFwQixZQUFvQixZQUF1QjtRQUF2QixpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLGtHQUFrRztRQUNsRyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQztRQUU1QywyQkFBMkI7UUFDM0IsTUFBTSxDQUFDLGVBQWUsQ0FDcEIsSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FDbkMsb0JBQW9CLEVBQ3BCLEtBQUssRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDMUIsTUFBTSxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUNwRCxPQUFPO2dCQUNMLE9BQU8sRUFBRTtvQkFDUCxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7b0JBQzlCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7b0JBQzFDLFlBQVksRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLFFBQVE7b0JBQzVDLGVBQWUsRUFBRSxPQUFPLENBQUMsZUFBZTtvQkFDeEMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtvQkFDMUMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLFlBQVk7b0JBQzVDLG9CQUFvQixFQUFFLE9BQU8sQ0FB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
@@ -0,0 +1,11 @@
1
+ import type { OpsServer } from '../classes.opsserver.js';
2
+ export declare class StatsHandler {
3
+ private opsServerRef;
4
+ constructor(opsServerRef: OpsServer);
5
+ private registerHandlers;
6
+ private collectServerStats;
7
+ private collectEmailStats;
8
+ private collectDnsStats;
9
+ private getQueueStatus;
10
+ private checkHealthStatus;
11
+ }